From 8b1a5d0e237e8bd6eecd285ffa31557063219fbc Mon Sep 17 00:00:00 2001 From: DiaLight Date: Tue, 27 Dec 2022 23:55:07 +0300 Subject: [PATCH] added extracting cached textures update mappings refactoring --- CMakeLists.txt | 12 +- api/stacktrace_window.cpp | 2 +- include/api.h | 26 +- include/api/imports.h | 35 + include/dk2.h | 22 +- include/dk2/dd.h | 19 - include/dk2/globals.h | 56 + include/dk2_structures.h | 5162 ++++++++++++----------- include/tools.h | 14 + launcher/CMakeLists.txt | 13 +- launcher/create_process.cpp | 131 + launcher/dd_modes.cpp | 44 + launcher/include/create_process.h | 12 + launcher/include/dd_modes.h | 20 + launcher/include/launcher.h | 15 + launcher/include/layout.h | 33 + launcher/include/registry.h | 17 + launcher/include/status.h | 15 + launcher/include/utils.h | 16 + launcher/launcher.cpp | 609 +-- launcher/layout.cpp | 88 + launcher/registry.cpp | 115 + launcher/status.cpp | 80 + launcher/utils.cpp | 46 + main.cpp | 3 + mappings/names.map | 443 +- mappings/stack.map | 1686 ++++---- patches/screen_resolution/dpi_aware.cpp | 35 +- reimpl/draw3dScene.cpp | 6 +- tools/unpack_texture_cache.cpp | 187 + vendor/CMakeLists.txt | 4 + vendor/lodepng | 1 + win32_gui_layout.cpp | 91 + win32_gui_layout.h | 91 +- 34 files changed, 5126 insertions(+), 4023 deletions(-) create mode 100644 include/api/imports.h create mode 100644 include/dk2/globals.h create mode 100644 include/tools.h create mode 100644 launcher/create_process.cpp create mode 100644 launcher/dd_modes.cpp create mode 100644 launcher/include/create_process.h create mode 100644 launcher/include/dd_modes.h create mode 100644 launcher/include/launcher.h create mode 100644 launcher/include/layout.h create mode 100644 launcher/include/registry.h create mode 100644 launcher/include/status.h create mode 100644 launcher/include/utils.h create mode 100644 launcher/layout.cpp create mode 100644 launcher/registry.cpp create mode 100644 launcher/status.cpp create mode 100644 launcher/utils.cpp create mode 100644 tools/unpack_texture_cache.cpp create mode 100644 vendor/CMakeLists.txt create mode 160000 vendor/lodepng create mode 100644 win32_gui_layout.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 6a6271a..98dbc81 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -87,6 +87,10 @@ add_custom_command( ) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /GS- /Gz") + +add_library(win32_gui_layout STATIC win32_gui_layout.cpp) +target_include_directories(win32_gui_layout PUBLIC ${CMAKE_CURRENT_LIST_DIR}) + set(SOURCES main.cpp api.cpp @@ -115,6 +119,7 @@ set(SOURCES patches/screen_resolution/fix_surface_buffer_size_on_max_resolution.cpp reimpl/SurfHashList__probablySort.cpp reimpl/draw3dScene.cpp + tools/unpack_texture_cache.cpp stdex.cpp ) if(REVERSE_MODE) @@ -134,8 +139,11 @@ else() endif() add_dependencies(bootstrap_patcher dll_exports stack_map references_map) target_include_directories(bootstrap_patcher PRIVATE include) -target_link_libraries(bootstrap_patcher PRIVATE Dbghelp Shcore) -target_compile_definitions(bootstrap_patcher PRIVATE DIRECTINPUT_VERSION=0x0500) +target_link_libraries(bootstrap_patcher PRIVATE Dbghelp Shcore Comctl32 win32_gui_layout) +target_compile_definitions(bootstrap_patcher PRIVATE DIRECTINPUT_VERSION=0x0500 DIRECT3D_VERSION=0x0600) + +add_subdirectory(vendor) +target_link_libraries(bootstrap_patcher PRIVATE lodepng) set_target_properties(bootstrap_patcher PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${BIN_DIR}") diff --git a/api/stacktrace_window.cpp b/api/stacktrace_window.cpp index 1e53cf9..05257a8 100644 --- a/api/stacktrace_window.cpp +++ b/api/stacktrace_window.cpp @@ -10,7 +10,7 @@ #include #include #include -#include "../win32_gui_layout.h" +#include #define EmberPatcher_title _T("Ember DK2 patcher") #define EmberPatcher_class _T("EmberPatcher") diff --git a/include/api.h b/include/api.h index 634dcae..30c0f53 100644 --- a/include/api.h +++ b/include/api.h @@ -9,31 +9,7 @@ #include #include #include - -template -uint8_t *follow(T &&ptr) { - union { - T *fun; - uint8_t **ptr; - } val = { - .fun = &ptr - }; - uint8_t *pos = *val.ptr; -#ifdef REVERSE_MODE - if(*pos++ != 0xE9) return nullptr; - pos = (pos + 4) + *(uint32_t *) pos; - if(*pos++ != 0xB8) return nullptr; - pos = *(uint8_t **) pos; -#else - if(*pos++ != 0xFF) return nullptr; - if(*pos++ != 0x25) return nullptr; - pos = *(uint8_t **) pos; - pos = *(uint8_t **) pos; -#endif - return pos; -} -template -uint8_t *funptr() { return follow(Fun); } +#include extern HINSTANCE g_bootstrap_patcher; diff --git a/include/api/imports.h b/include/api/imports.h new file mode 100644 index 0000000..c004153 --- /dev/null +++ b/include/api/imports.h @@ -0,0 +1,35 @@ +// +// Created by DiaLight on 26.12.2022. +// + +#ifndef EMBER_IMPORTS_H +#define EMBER_IMPORTS_H + + +template +uint8_t *follow(T &&ptr) { + union { + T *fun; + uint8_t **ptr; + } val = { + .fun = &ptr + }; + uint8_t *pos = *val.ptr; +#ifdef REVERSE_MODE + if(*pos++ != 0xE9) return nullptr; + pos = (pos + 4) + *(uint32_t *) pos; + if(*pos++ != 0xB8) return nullptr; + pos = *(uint8_t **) pos; +#else + if(*pos++ != 0xFF) return nullptr; + if(*pos++ != 0x25) return nullptr; + pos = *(uint8_t **) pos; + pos = *(uint8_t **) pos; +#endif + return pos; +} +template +uint8_t *funptr() { return follow(Fun); } + + +#endif //EMBER_IMPORTS_H diff --git a/include/dk2.h b/include/dk2.h index 80a5ee5..838e95f 100644 --- a/include/dk2.h +++ b/include/dk2.h @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -23,27 +24,6 @@ namespace dk2 { - __analysis_noreturn - /*00638440*/ void __cdecl start(); - /*005A5DA0*/ int __cdecl main(int argc, char *argv[]); - /*005B74A0*/ void __cdecl resolveDk2HomeDir(); - - class globals { - /*0079D01C*/ static HINSTANCE hInstance; - /*0079D980*/ static char dk2HomeDir[MAX_PATH]; - public: - /*005B2DA0*/ static void __cdecl setHInstance(HINSTANCE hInst); - /*005B2D90*/ static HINSTANCE __cdecl getHInstance(); - // msvc is importing data as functions. So we follow import jump to get actual data address - inline static HINSTANCE *getHInstancePtr() { return (HINSTANCE *) funptr<&hInstance>(); } - - /*005B2E50*/ static void __cdecl setAppExitStatus(bool shouldExit); - /*005B2E40*/ static bool __cdecl isAppExitStatusSet(); - - inline static char *getDk2HomeDir() { return (char *) funptr<&dk2HomeDir>(); } - - }; - // use BOOL instead of bool! sizeof(bool) == 1 sizeof(BOOL) == 4 /*00557FD0*/ BOOL __stdcall isOsVersionGE(int maxVersion, int minVersion, uint16_t CSDVersion); diff --git a/include/dk2/dd.h b/include/dk2/dd.h index b5b1c9d..4b7a71b 100644 --- a/include/dk2/dd.h +++ b/include/dk2/dd.h @@ -10,25 +10,6 @@ namespace dk2 { - class dd { - /*0079D020*/ static HWND hWnd; - /*0079D3D0*/ static LPDIRECTDRAW lpDD; - /*0079D3F0*/ static LPDIRECTDRAW lpSurfaceDD; - - public: - /*005B2DC0*/ static void __cdecl setHWindow(HWND hWnd); - /*005B2DB0*/ static HWND __cdecl getHWindow(); - inline static HWND *getHWindowPtr() { return (HWND *) funptr<&hWnd>(); } - - inline static LPDIRECTDRAW *getDD() { return (LPDIRECTDRAW *) funptr<&lpDD>(); } - inline static LPDIRECTDRAW *getSurfaceDD() { return (LPDIRECTDRAW *) funptr<&lpSurfaceDD>(); } - /*005B5410*/ static void __cdecl setSurfaceDD(LPDIRECTDRAW lpDD); - - /*005B4390*/ static status_t &__cdecl init(status_t &status, DWORD width, DWORD height, DWORD displayBitness, DWORD surfFlags, LPPALETTEENTRY palette); - /*005B4230*/ static void __cdecl destroy(); - - }; - struct MyDdSurface{ uint32_t field_0; uint32_t field_4; diff --git a/include/dk2/globals.h b/include/dk2/globals.h new file mode 100644 index 0000000..7b7c9b7 --- /dev/null +++ b/include/dk2/globals.h @@ -0,0 +1,56 @@ +// +// Created by DiaLight on 27.12.2022. +// + +#ifndef EMBER_GLOBALS_H +#define EMBER_GLOBALS_H + +#include + +namespace dk2 { + + __analysis_noreturn + /*00638440*/ void __cdecl start(); + /*005A5DA0*/ int __cdecl main(int argc, char *argv[]); + /*005B74A0*/ void __cdecl resolveDk2HomeDir(); + + class globals { + /*0079D01C*/ static HINSTANCE hInstance; + /*0079D980*/ static char dk2HomeDir[MAX_PATH]; + public: + /*005B2DA0*/ static void __cdecl setHInstance(HINSTANCE hInst); + /*005B2D90*/ static HINSTANCE __cdecl getHInstance(); + // msvc is importing data as functions. So we follow import jump to get actual data address + inline static HINSTANCE *getHInstancePtr() { return (HINSTANCE *) funptr<&hInstance>(); } + + /*005B2E50*/ static void __cdecl setAppExitStatus(bool shouldExit); + /*005B2E40*/ static bool __cdecl isAppExitStatusSet(); + + inline static char *getDk2HomeDir() { return (char *) funptr<&dk2HomeDir>(); } + + }; + + using status_t = int; + + class dd { + /*0079D020*/ static HWND hWnd; + /*0079D3D0*/ static LPDIRECTDRAW lpDD; + /*0079D3F0*/ static LPDIRECTDRAW lpSurfaceDD; + + public: + /*005B2DC0*/ static void __cdecl setHWindow(HWND hWnd); + /*005B2DB0*/ static HWND __cdecl getHWindow(); + inline static HWND *getHWindowPtr() { return (HWND *) funptr<&hWnd>(); } + + inline static LPDIRECTDRAW *getDD() { return (LPDIRECTDRAW *) funptr<&lpDD>(); } + inline static LPDIRECTDRAW *getSurfaceDD() { return (LPDIRECTDRAW *) funptr<&lpSurfaceDD>(); } + /*005B5410*/ static void __cdecl setSurfaceDD(LPDIRECTDRAW lpDD); + + /*005B4390*/ static status_t &__cdecl init(status_t &status, DWORD width, DWORD height, DWORD displayBitness, DWORD surfFlags, LPPALETTEENTRY palette); + /*005B4230*/ static void __cdecl destroy(); + + }; + +} + +#endif //EMBER_GLOBALS_H diff --git a/include/dk2_structures.h b/include/dk2_structures.h index 42b9a84..72cb10e 100644 --- a/include/dk2_structures.h +++ b/include/dk2_structures.h @@ -2,6 +2,7 @@ #include #include #include +#include namespace dk2 { @@ -32,7 +33,7 @@ namespace dk2 { class MyDirectDraw; class CCommunicationInterface; class Area2i; - class CGadget_fields; + class CGadget; class CWindow; class Pos2i; class AABB; @@ -40,8 +41,6 @@ namespace dk2 { class MyStaticStruct; class RtGuiView; class CDefaultPlayerInterface; - class CGadget; - class CEngineInterface_fields; class CBridgeInterface; class My_sub_56F850; class ProbablyGlobalRenderObj; @@ -58,17 +57,15 @@ namespace dk2 { class CWorldShortEntry; class CWorldInterface; class MyCbHandle; - class MySharedObj_fields; - class MyComEx_fields; + class MySharedObj; + class MyComEx; class AsyncThing; class MyDxInputManagerCb; class Obj6723B8; class MyInputManagerCb; - class MyComEx; + class LockBase; class Buf1000; class DxActionQueue; - class MySharedObj; - class LockBase; class MyMouse; class MyMouseCb_vtbl; class Event0_winShown7; @@ -119,7 +116,6 @@ namespace dk2 { class MyALList; class WadContent; class MyWadDirectory; - class MyInputStream_fields; class MyCachedOffsStream; class MySemaphore; class MyConcurrentStream; @@ -160,7 +156,7 @@ namespace dk2 { class CharImageReader; class CharImageWriter; class CharRenderCtx; - class MySignalBase_fields; + class MySignalBase; class MyDxDevice; class MyDirectInput; class MouseRgbDxActionList; @@ -169,7 +165,6 @@ namespace dk2 { class DIOBJECTDATAFORMAT; class DIPROPHEADER; class DIPROPDWORD; - class MySignalBase; class MyWindowMsgs_vtable; class Vtable_672434; class WndMsgDxActionList; @@ -238,6 +233,7 @@ namespace dk2 { class Obj672E70; class Obj672500; class Obj672E80; + class CDirectIFFFile; class MyTextures; class CEngineCompressedSurface; class CEngineDDSurface; @@ -249,7 +245,6 @@ namespace dk2 { class GameActionRecord; class CListBox; class TbAudioSystem; - class TbAudioSystem_fields; class MyTbAudioSystem; class CSoundSystem; class TbSysCommand_SetNumberOfChannels; @@ -266,18 +261,21 @@ namespace dk2 { class CEngineUnlitProceduralMesh; class SceneObject30; class SurfHashList2; + class DxDeviceInfo; + class DxD3dInfo; + class DxModeInfo; #pragma pack(push, 1) class MyLock { public: - + /* 0*/ _RTL_CRITICAL_SECTION *f0_critSec; /* 4*/ int f4_locked; /* 8*/ int field_8; /* C*/ int field_C; /* 10*/ int field_10; /* 14*/ int field_14; - + void dump() { printf("f0_critSec: _RTL_CRITICAL_SECTION(%p)\n", this->f0_critSec); printf("f4_locked: %d\n", this->f4_locked); @@ -293,17 +291,17 @@ namespace dk2 { #pragma pack(push, 1) class PtrArrList { public: - + /* 0*/ int field_0; - /* 4*/ void *f4_base; - /* 8*/ void *f8_wpos; - /* C*/ void *fC_end; - + /* 4*/ uint32_t *f4_base; + /* 8*/ uint32_t *f8_wpos; + /* C*/ uint32_t *fC_end; + void dump() { printf("field_0: %d\n", this->field_0); - printf("f4_base: %p\n", this->f4_base); - printf("f8_wpos: %p\n", this->f8_wpos); - printf("fC_end: %p\n", this->fC_end); + printf("f4_base: uint32_t(%p)\n", this->f4_base); + printf("f8_wpos: uint32_t(%p)\n", this->f8_wpos); + printf("fC_end: uint32_t(%p)\n", this->fC_end); } }; #pragma pack(pop) @@ -312,23 +310,27 @@ namespace dk2 { #pragma pack(push, 1) class CComponent { public: - static uint32_t const VFTABLE = 0x0066C45C; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t { - /* 0*/ void *CComponent___scalar_deleting_destructor_uint; - /* 4*/ void *__purecall; - /* 8*/ void *duplicate_1_1; - /* C*/ void *duplicate_1_2; - /* 10*/ void *duplicate_1_3; - /* 14*/ void *duplicate_1_4; + /* 0*/ uint32_t *(__thiscall *CComponent___scalar_deleting_destructor_uint)(CComponent *self, char); // _DWORD *(__thiscall *)(_DWORD *Block, char a2) + /* 4*/ void(__stdcall *__purecall)(); // void (__stdcall __noreturn *)() + /* 8*/ void *(__stdcall *duplicate_1_1)(); // void *(__stdcall *)() + /* C*/ void *(__stdcall *duplicate_1_2)(); // void *(__stdcall *)() + /* 10*/ void *(__stdcall *duplicate_1_3)(); // void *(__stdcall *)() + /* 14*/ void *(__stdcall *duplicate_1_4)(); // void *(__stdcall *)() }; - + static_assert(sizeof(vtbl_t) == 0x18); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 4*/ uint32_t is_component_destroy; /* 8*/ int field_4; - + virtual ~CComponent(); void dump() { printf("is_component_destroy: %d\n", this->is_component_destroy); @@ -341,13 +343,13 @@ namespace dk2 { #pragma pack(push, 1) class GameAction { public: - + /* 0*/ uint32_t field_0; /* 4*/ uint32_t field_4; /* 8*/ uint32_t field_8; /* C*/ int fC_actionKind; /* 10*/ __int16 f10__cpyFrF8; - + void dump() { printf("field_0: %d\n", this->field_0); printf("field_4: %d\n", this->field_4); @@ -362,12 +364,12 @@ namespace dk2 { #pragma pack(push, 1) class GameActionArray { public: - + /* 0*/ GameAction f0_arr[32]; /* 240*/ uint32_t f240_counter; /* 244*/ int f244_counter_32lim; /* 248*/ int f248_idx; - + void dump() { printf("f240_counter: %d\n", this->f240_counter); printf("f244_counter_32lim: %d\n", this->f244_counter_32lim); @@ -380,7 +382,7 @@ namespace dk2 { #pragma pack(push, 1) class MyProfiler { public: - + /* 0*/ uint32_t field_0; /* 4*/ int field_4; /* 8*/ int field_8; @@ -406,7 +408,7 @@ namespace dk2 { /* 29E*/ int field_29E; /* 2A2*/ int field_2A2; /* 2A6*/ int field_2A6; - + void dump() { printf("field_0: %d\n", this->field_0); printf("field_4: %d\n", this->field_4); @@ -440,20 +442,24 @@ namespace dk2 { #pragma pack(push, 1) class CGameComponent : public CComponent { public: - static uint32_t const VFTABLE = 0x0066EC4C; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t /*: public CComponent::vtbl_t */{ - /* 0*/ void *scalar_destructor; - /* 4*/ void *CMap__fun_4B4C20; - /* 8*/ void *ret_void_0args_0; + /* 0*/ uint32_t *(__thiscall *scalar_destructor)(CGameComponent *self, char); // _DWORD *(__thiscall *)(_DWORD *Block, char) + /* 4*/ int(__cdecl *CMap__fun_4B4C20)(); // int (*)() + /* 8*/ void(__thiscall *ret_void_0args_0)(CGameComponent *self); // void (__thiscall *)(void *) /* C*/ void *CGameComponent__fun_525350; /* 10*/ void *unknown_libname_14; - /* 14*/ void *CGameComponent__mainGuiLoop; + /* 14*/ uint32_t *(__thiscall *CGameComponent__mainGuiLoop)(CGameComponent *self); // void ***(__thiscall *)(CGameComponent *this) }; - + static_assert(sizeof(vtbl_t) == 0x18); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* C*/ uint32_t exit_flag; /* 10*/ MyProfiler mt_profiler; /* 2BA*/ uint32_t drawCount; @@ -465,7 +471,7 @@ namespace dk2 { /* 2D2*/ int field_2D2; /* 2D6*/ int field_2D6; /* 2DA*/ int field_2DA; - + virtual ~CGameComponent(); void dump() { printf("exit_flag: %d\n", this->exit_flag); @@ -486,82 +492,86 @@ namespace dk2 { #pragma pack(push, 1) class CEngineInterface { public: - static uint32_t const VFTABLE = 0x0066D1D4; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t { - /* 0*/ void *CPlayerInterface__fun_44DEA0; - /* 4*/ void *__purecall; - /* 8*/ void *duplicate_1_1; - /* C*/ void *nullsub_2; - /* 10*/ void *duplicate_3_1; - /* 14*/ void *CPlayerInterface__fun_628BC0; - /* 18*/ void *nullsub_44; - /* 1C*/ void *duplicate_5_1; - /* 20*/ void *duplicate_1_2; - /* 24*/ void *duplicate_1_3; - /* 28*/ void *duplicate_1_4; - /* 2C*/ void *duplicate_1_5; - /* 30*/ void *duplicate_6_1; - /* 34*/ void *duplicate_6_2; - /* 38*/ void *duplicate_5_2; - /* 3C*/ void *duplicate_5_3; - /* 40*/ void *duplicate_5_4; - /* 44*/ void *duplicate_5_5; - /* 48*/ void *duplicate_1_6; - /* 4C*/ void *duplicate_1_7; - /* 50*/ void *CEngineInterface__fun_517400; - /* 54*/ void *CEngineInterface__fun_443070; - /* 58*/ void *CEngineInterface__fun_443090; - /* 5C*/ void *nullsub_43; - /* 60*/ void *nullsub_21; - /* 64*/ void *duplicate_23_1; - /* 68*/ void *nullsub_22; - /* 6C*/ void *duplicate_6_3; - /* 70*/ void *duplicate_6_4; - /* 74*/ void *CPlayerInterface__fun_402AD0; - /* 78*/ void *duplicate_6_5; - /* 7C*/ void *duplicate_6_6; - /* 80*/ void *CEngineInterface__fun_5173B0; - /* 84*/ void *duplicate_6_7; - /* 88*/ void *duplicate_29_1; - /* 8C*/ void *duplicate_3_2; - /* 90*/ void *CEngineInterface__fun_4430D0; - /* 94*/ void *CEngineInterface__fun_4430C0; - /* 98*/ void *duplicate_36_1; - /* 9C*/ void *duplicate_6_8; - /* A0*/ void *duplicate_37_1; - /* A4*/ void *loc_43A8A0; - /* A8*/ void *duplicate_6_9; - /* AC*/ void *CEngineInterface__fun_628E30; - /* B0*/ void *duplicate_29_2; - /* B4*/ void *nullsub_10; - /* B8*/ void *duplicate_26_1; - /* BC*/ void *CEngineInterface__fun_4430E0; - /* C0*/ void *CEngineInterface__fun_4430F0; - /* C4*/ void *CEngineInterface__fun_443100; - /* C8*/ void *CEngineInterface__fun_443110; - /* CC*/ void *duplicate_29_3; - /* D0*/ void *CEngineInterface__fun_443120; - /* D4*/ void *CEngineInterface__fun_443150; - /* D8*/ void *duplicate_20_1; - /* DC*/ void *duplicate_53_1; - /* E0*/ void *duplicate_37_2; - /* E4*/ void *CEngineInterface__fun_628B70; - /* E8*/ void *duplicate_57_1; - /* EC*/ void *duplicate_20_2; - /* F0*/ void *loc_43A880; - /* F4*/ void *loc_43A890; - /* F8*/ void *duplicate_41_1; - /* FC*/ void *duplicate_41_2; - /* 100*/ void *duplicate_41_3; - /* 104*/ void *duplicate_57_2; - /* 108*/ void *duplicate_57_3; - /* 10C*/ void *duplicate_57_4; + /* 0*/ void *(__thiscall *CPlayerInterface__fun_44DEA0)(CEngineInterface *self, char); // void *(__thiscall *)(void *Block, char a2) + /* 4*/ void(__stdcall *__purecall)(); // void (__stdcall __noreturn *)() + /* 8*/ void *(__stdcall *duplicate_1_1)(); // void *(__stdcall *)() + /* C*/ void(__cdecl *nullsub_2)(); // void (__cdecl *)() + /* 10*/ void *(__stdcall *duplicate_3_1)(); // void *(__stdcall *)() + /* 14*/ int(__stdcall *CPlayerInterface__fun_628BC0)(); // int (__stdcall *)() + /* 18*/ void(__stdcall *nullsub_44)(int); // void (__stdcall *)(int a1) + /* 1C*/ void *(__stdcall *duplicate_5_1)(); // void *(__stdcall *)() + /* 20*/ void *(__stdcall *duplicate_1_2)(); // void *(__stdcall *)() + /* 24*/ void *(__stdcall *duplicate_1_3)(); // void *(__stdcall *)() + /* 28*/ void *(__stdcall *duplicate_1_4)(); // void *(__stdcall *)() + /* 2C*/ void *(__stdcall *duplicate_1_5)(); // void *(__stdcall *)() + /* 30*/ void *(__stdcall *duplicate_6_1)(); // void *(__stdcall *)() + /* 34*/ void *(__stdcall *duplicate_6_2)(); // void *(__stdcall *)() + /* 38*/ void *(__stdcall *duplicate_5_2)(); // void *(__stdcall *)() + /* 3C*/ void *(__stdcall *duplicate_5_3)(); // void *(__stdcall *)() + /* 40*/ void *(__stdcall *duplicate_5_4)(); // void *(__stdcall *)() + /* 44*/ void *(__stdcall *duplicate_5_5)(); // void *(__stdcall *)() + /* 48*/ void *(__stdcall *duplicate_1_6)(); // void *(__stdcall *)() + /* 4C*/ void *(__stdcall *duplicate_1_7)(); // void *(__stdcall *)() + /* 50*/ int(__stdcall *CEngineInterface__fun_517400)(int, int, int); // int (__stdcall *)(int a1, int a2, int a3) + /* 54*/ int(__stdcall *CEngineInterface__fun_443070)(int, int, int, uint32_t *, int, int); // int (__stdcall *)(int a1, int a2, int a3, _DWORD *a4, int a5, int a6) + /* 58*/ int(__stdcall *CEngineInterface__fun_443090)(int, int, int, int, uint32_t *); // int (__stdcall *)(int a1, int a2, int a3, int a4, _DWORD *a5) + /* 5C*/ void(__stdcall *nullsub_43)(int, int, int, int); // void (__stdcall *)(int a1, int a2, int a3, int a4) + /* 60*/ void(__stdcall *nullsub_21)(int, int, int, int, int, int); // void (__stdcall *)(int a1, int a2, int a3, int a4, int a5, int a6) + /* 64*/ void *(__stdcall *duplicate_23_1)(); // void *(__stdcall *)() + /* 68*/ void(__stdcall *nullsub_22)(int, int, int); // void (__stdcall *)(int a1, int a2, int a3) + /* 6C*/ void *(__stdcall *duplicate_6_3)(); // void *(__stdcall *)() + /* 70*/ void *(__stdcall *duplicate_6_4)(); // void *(__stdcall *)() + /* 74*/ int(__stdcall *CPlayerInterface__fun_402AD0)(); // int (__stdcall *)() + /* 78*/ void *(__stdcall *duplicate_6_5)(); // void *(__stdcall *)() + /* 7C*/ void *(__stdcall *duplicate_6_6)(); // void *(__stdcall *)() + /* 80*/ int(__stdcall *CEngineInterface__fun_5173B0)(int, int); // int (__stdcall *)(int a1, int a2) + /* 84*/ void *(__stdcall *duplicate_6_7)(); // void *(__stdcall *)() + /* 88*/ void *(__stdcall *duplicate_29_1)(); // void *(__stdcall *)() + /* 8C*/ void *(__stdcall *duplicate_3_2)(); // void *(__stdcall *)() + /* 90*/ int(__stdcall *CEngineInterface__fun_4430D0)(int, int, int, int, int, int); // int (__stdcall *)(int a1, int a2, int a3, int a4, int a5, int a6) + /* 94*/ int(__stdcall *CEngineInterface__fun_4430C0)(int, int, int, int, int); // int (__stdcall *)(int a1, int a2, int a3, int a4, int a5) + /* 98*/ void *(__stdcall *duplicate_36_1)(); // void *(__stdcall *)() + /* 9C*/ void *(__stdcall *duplicate_6_8)(); // void *(__stdcall *)() + /* A0*/ void *(__stdcall *duplicate_37_1)(); // void *(__stdcall *)() + /* A4*/ void *(__stdcall *loc_43A8A0)(); // void *(__stdcall *)() + /* A8*/ void *(__stdcall *duplicate_6_9)(); // void *(__stdcall *)() + /* AC*/ int(__stdcall *CEngineInterface__fun_628E30)(int); // int (__stdcall *)(int a1) + /* B0*/ void *(__stdcall *duplicate_29_2)(); // void *(__stdcall *)() + /* B4*/ void(__stdcall *nullsub_10)(int, int); // void (__stdcall *)(int a1, int a2) + /* B8*/ void *(__stdcall *duplicate_26_1)(); // void *(__stdcall *)() + /* BC*/ __int16(__thiscall *CEngineInterface__fun_4430E0)(CEngineInterface *self); // __int16 (__thiscall *)(_WORD *this) + /* C0*/ __int16(__thiscall *CEngineInterface__fun_4430F0)(CEngineInterface *self, __int16); // __int16 (__thiscall *)(_WORD *this, __int16 a2) + /* C4*/ __int16(__thiscall *CEngineInterface__fun_443100)(CEngineInterface *self); // __int16 (__thiscall *)(_WORD *this) + /* C8*/ __int16(__thiscall *CEngineInterface__fun_443110)(CEngineInterface *self, __int16); // __int16 (__thiscall *)(_WORD *this, __int16 a2) + /* CC*/ void *(__stdcall *duplicate_29_3)(); // void *(__stdcall *)() + /* D0*/ uint32_t *(__stdcall *CEngineInterface__fun_443120)(); // _DWORD *(__stdcall *)() + /* D4*/ int(__stdcall *CEngineInterface__fun_443150)(int, int); // int (__stdcall *)(int a1, int a2) + /* D8*/ void *(__stdcall *duplicate_20_1)(); // void *(__stdcall *)() + /* DC*/ void *(__stdcall *duplicate_53_1)(); // void *(__stdcall *)() + /* E0*/ void *(__stdcall *duplicate_37_2)(); // void *(__stdcall *)() + /* E4*/ int(__stdcall *CEngineInterface__fun_628B70)(int, int, int, int); // int (__stdcall *)(int a1, int a2, int a3, int a4) + /* E8*/ void *(__stdcall *duplicate_57_1)(); // void *(__stdcall *)() + /* EC*/ void *(__stdcall *duplicate_20_2)(); // void *(__stdcall *)() + /* F0*/ void *(__stdcall *loc_43A880)(); // void *(__stdcall *)() + /* F4*/ void *(__stdcall *loc_43A890)(); // void *(__stdcall *)() + /* F8*/ void *(__stdcall *duplicate_41_1)(); // void *(__stdcall *)() + /* FC*/ void *(__stdcall *duplicate_41_2)(); // void *(__stdcall *)() + /* 100*/ void *(__stdcall *duplicate_41_3)(); // void *(__stdcall *)() + /* 104*/ void *(__stdcall *duplicate_57_2)(); // void *(__stdcall *)() + /* 108*/ void *(__stdcall *duplicate_57_3)(); // void *(__stdcall *)() + /* 10C*/ void *(__stdcall *duplicate_57_4)(); // void *(__stdcall *)() }; - + static_assert(sizeof(vtbl_t) == 0x110); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 4*/ uint32_t field_0; /* 8*/ CBridge *f4_pCBridge; /* C*/ uint16_t field_8; @@ -591,7 +601,7 @@ namespace dk2 { /* 66*/ int field_62; /* 6A*/ int field_66; /* 6E*/ int field_6A; - + virtual ~CEngineInterface(); void dump() { printf("field_0: %d\n", this->field_0); @@ -631,7 +641,7 @@ namespace dk2 { #pragma pack(push, 1) class CWorldEntry { public: - + /* 0*/ int field_0; /* 4*/ int field_4; /* 8*/ int field_8; @@ -640,7 +650,7 @@ namespace dk2 { /* F*/ uint32_t field_F; /* 13*/ uint32_t field_13; /* 17*/ int field_17; - + void dump() { printf("field_0: %d\n", this->field_0); printf("field_4: %d\n", this->field_4); @@ -658,16 +668,20 @@ namespace dk2 { #pragma pack(push, 1) class CRenderInfo { public: - static uint32_t const VFTABLE = 0x0066D454; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t { - /* 0*/ void *CRenderInfo__fun_4B4710; - /* 4*/ void *CRenderInfo__fun_4B47C0; + /* 0*/ int(__thiscall *CRenderInfo__fun_4B4710)(CRenderInfo *self); // int (__thiscall *)(int this) + /* 4*/ int(__thiscall *CRenderInfo__fun_4B47C0)(CRenderInfo *self); // int (__thiscall *)(int this) }; - + static_assert(sizeof(vtbl_t) == 0x8); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 4*/ uint32_t field_4; /* 8*/ int field_8; /* C*/ int field_C; @@ -722,7 +736,7 @@ namespace dk2 { /* AD*/ char field_AD; /* AE*/ char field_AE; /* AF*/ char field_AF; - + virtual ~CRenderInfo(); void dump() { printf("field_4: %d\n", this->field_4); @@ -787,68 +801,63 @@ namespace dk2 { #pragma pack(push, 1) class CPCEngineInterface : public CEngineInterface { public: - static uint32_t const VFTABLE = 0x00670574; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t /*: public CEngineInterface::vtbl_t */{ - /* 0*/ void *CPCEngineInterface__fun_598350; - /* 4*/ void *CPCEngineInterface__fun_5983C0; + /* 0*/ void *(__thiscall *CPCEngineInterface__fun_598350)(CPCEngineInterface *self, char); // void *(__thiscall *)(void *Block, char) + /* 4*/ int(__thiscall *CPCEngineInterface__fun_5983C0)(CPCEngineInterface *self, int); // int (__thiscall *)(CPCEngineInterface *this, int a2) /* 8*/ void *CPCEngineInterface__fun_598690; - /* C*/ void *ret_void_0args; - /* 10*/ void *anonymous_0; - /* 14*/ void *CPlayerInterface__fun_628BC0; - /* 18*/ void *ret_void_1args; - /* 1C*/ void *anonymous_1; + /* C*/ void(__cdecl *ret_void_0args)(); // void (__cdecl *)() + /* 10*/ void(__cdecl *anonymous_0)(); // void (__cdecl *)() + /* 14*/ int(__cdecl *CPlayerInterface__fun_628BC0)(); // int (*)() + /* 18*/ void(__stdcall *ret_void_1args)(int); // void (__stdcall *)(int) + /* 1C*/ int(__cdecl *anonymous_1)(); // int (*)() /* 20*/ void *CPCEngineInterface__fun_5986D0; - /* 24*/ void *CPCEngineInterface__fun_5986F0; + /* 24*/ int(__stdcall *CPCEngineInterface__fun_5986F0)(uint32_t *); // int (__stdcall *)(int *) /* 28*/ void *CPCEngineInterface__fun_598800; - /* 2C*/ void *CPCEngineInterface__fun_598880; - /* 30*/ void *anonymous_2; - /* 34*/ void *anonymous_3; + /* 2C*/ int(__thiscall *CPCEngineInterface__fun_598880)(CPCEngineInterface *self, uint32_t *); // int (__thiscall *)(CPCEngineInterface *this, int *a2) + /* 30*/ void(__stdcall *anonymous_2)(int); // void (__stdcall *)(int) + /* 34*/ void(__stdcall *anonymous_3)(int); // void (__stdcall *)(int) /* 38*/ void *CPCEngineInterface__fun_59D760; - /* 3C*/ void *CPCEngineInterface__fun_59D7F0; + /* 3C*/ int(__thiscall *CPCEngineInterface__fun_59D7F0)(CPCEngineInterface *self); // int (__thiscall *)(CPCEngineInterface *this) /* 40*/ void *CPCEngineInterface__fun_59D860; /* 44*/ void *CPCEngineInterface__fun_59D890; - /* 48*/ void *CPCEngineInterface__fun_5992B0; - /* 4C*/ void *CPCEngineInterface__fun_5998C0; - /* 50*/ void *ret_0_3args; + /* 48*/ int(__stdcall *CPCEngineInterface__fun_5992B0)(float, float, int, int); // int (__stdcall *)(float, float, int, int) + /* 4C*/ int(__stdcall *CPCEngineInterface__fun_5998C0)(float, float, int); // int (__stdcall *)(float, float, int) + /* 50*/ int(__stdcall *ret_0_3args)(int, int, int); // int (__stdcall *)(int, int, int) /* 54*/ void *CPCEngineInterface__fun_59A6A0; - /* 58*/ void *CPCEngineInterface_createAndPutInArrp31x400_59A650; + /* 58*/ int(__thiscall *CPCEngineInterface_createAndPutInArrp31x400_59A650)(CPCEngineInterface *self, char *, int, int, int, int); // int (__thiscall *)(CPCEngineInterface *, char *, int, int, int, int) /* 5C*/ void *CPCEngineInterface__fun_59B0C0; - /* 60*/ void *ret_void_6args; - /* 64*/ void *ret_void_4args; - /* 68*/ void *CPCEngineInterface__fun_59D580; + /* 60*/ void(__stdcall *ret_void_6args)(int, int, int, int, int, int); // void (__stdcall *)(int, int, int, int, int, int) + /* 64*/ void(__stdcall *ret_void_4args)(int, int, int, int); // void (__stdcall *)(int, int, int, int) + /* 68*/ int(__thiscall *CPCEngineInterface__fun_59D580)(CPCEngineInterface *self, int, MySurface *, int); // int (__thiscall *)(CPCEngineInterface *, int, MySurface *, int) /* 6C*/ void *CPCEngineInterface__fun_59C0D0; /* 70*/ void *CPCEngineInterface__fun_59C110; /* 74*/ void *CPCEngineInterface__fun_59C120; - /* 78*/ void *anonymous_4; + /* 78*/ void(__stdcall *anonymous_4)(int); // void (__stdcall *)(int) /* 7C*/ void *CPCEngineInterface__fun_59C130; /* 80*/ void *CPCEngineInterface__fun_59C140; /* 84*/ void *CPCEngineInterface__fun_59D5B0; /* 88*/ void *CPCEngineInterface__fun_59D900; /* 8C*/ void *CPCEngineInterface__fun_59DAB0; - /* 90*/ void *CEngineInterface__fun_4430D0; - /* 94*/ void *ret_0_5args; - /* 98*/ void *anonymous_5; - /* 9C*/ void *anonymous_6; - /* A0*/ void *anonymous_7; - /* A4*/ void *ret_0_8args; - /* A8*/ void *anonymous_8; - /* AC*/ void *CEngineInterface__fun_628E30; - /* B0*/ void *CPlayerInterface__fun_402AD0; - /* B4*/ void *ret_void_2args; - /* B8*/ void *ret_void_3args; - /* BC*/ void *CEngineInterface__fun_4430E0; - /* C0*/ void *CEngineInterface__fun_4430F0; - /* C4*/ void *CEngineInterface__fun_443100; - /* C8*/ void *CEngineInterface__fun_443110; - /* CC*/ void *anonymous_9; - /* D0*/ void *CEngineInterface__fun_443120; - /* D4*/ void *CEngineInterface__fun_443150; + /* 90*/ int(__stdcall *CEngineInterface__fun_4430D0)(int, int, int, int, int, int); // int (__stdcall *)(int, int, int, int, int, int) + /* 94*/ int(__stdcall *ret_0_5args)(int, int, int, int, int); // int (__stdcall *)(int, int, int, int, int) + /* 98*/ int(__stdcall *anonymous_5)(int, int, int, int, int, int); // int (__stdcall *)(int, int, int, int, int, int) + /* 9C*/ void(__stdcall *anonymous_6)(int); // void (__stdcall *)(int) + /* A0*/ int(__stdcall *anonymous_7)(int, int, int, int, int); // int (__stdcall *)(int, int, int, int, int) + /* A4*/ int(__stdcall *ret_0_8args)(int, int, int, int, int, int, int, int); // int (__stdcall *)(int, int, int, int, int, int, int, int) + /* A8*/ void(__stdcall *anonymous_8)(int); // void (__stdcall *)(int) + /* AC*/ int(__stdcall *CEngineInterface__fun_628E30)(int); // int (__stdcall *)(int) + /* B0*/ int(__cdecl *CPlayerInterface__fun_402AD0)(); // int (*)() + /* B4*/ void(__stdcall *ret_void_2args)(int, int); // void (__stdcall *)(int, int) + /* B8*/ void(__stdcall *ret_void_3args)(int, int, int); // void (__stdcall *)(int, int, int) + /* BC*/ __int16(__thiscall *CEngineInterface__fun_4430E0)(CPCEngineInterface *self); // __int16 (__thiscall *)(_WORD *this) + /* C0*/ __int16(__thiscall *CEngineInterface__fun_4430F0)(CPCEngineInterface *self, __int16); // __int16 (__thiscall *)(_WORD *this, __int16) + /* C4*/ __int16(__thiscall *CEngineInterface__fun_443100)(CPCEngineInterface *self); // __int16 (__thiscall *)(_WORD *this) + /* C8*/ __int16(__thiscall *CEngineInterface__fun_443110)(CPCEngineInterface *self, __int16); // __int16 (__thiscall *)(_WORD *this, __int16) + /* CC*/ int(__cdecl *anonymous_9)(); // int (*)() + /* D0*/ uint32_t *(__cdecl *CEngineInterface__fun_443120)(); // _DWORD *(*)() + /* D4*/ int(__stdcall *CEngineInterface__fun_443150)(int, int); // int (__stdcall *)(int, int) /* D8*/ void *CPCEngineInterface__fun_59C1D0; - /* DC*/ void *anonymous_10; + /* DC*/ int(__stdcall *anonymous_10)(int, int); // int (__stdcall *)(int, int) /* E0*/ void *CPCEngineInterface__fun_599960; /* E4*/ void *CPCEngineInterface__fun_599910; /* E8*/ void *CPCEngineInterface__fun_599C60; @@ -861,10 +870,19 @@ namespace dk2 { /* 104*/ void *CPCEngineInterface__fun_5A1CA0; /* 108*/ void *CPCEngineInterface__fun_59D420; /* 10C*/ void *CPCEngineInterface__fun_59D380; - /* 110*/ void *ret_void_1args_0; + /* 110*/ void(__stdcall *ret_void_1args_0)(int); // void (__stdcall *)(int) /* 114*/ void *CPCEngineInterface__fun_59D5E0; }; - + static_assert(sizeof(vtbl_t) == 0x118); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 72*/ uint32_t bump_water; /* 76*/ uint32_t bump_water_bump_map; /* 7A*/ uint32_t bump_water_env_map; @@ -904,7 +922,7 @@ namespace dk2 { /* 225*/ int field_225; /* 229*/ int field_229; /* 22D*/ CBridge *pCBridge; - + virtual ~CPCEngineInterface(); void dump() { printf("bump_water: %d\n", this->bump_water); @@ -951,14 +969,14 @@ namespace dk2 { #pragma pack(push, 1) class MySurfDesc { public: - + /* 0*/ uint32_t dwRBitMask; /* 4*/ uint32_t dwGBitMask; /* 8*/ uint32_t dwBBitMask; /* C*/ uint32_t dwRGBAlphaBitMask; /* 10*/ uint32_t dwRGBBitCount; /* 14*/ uint32_t isBytePerPixel; - + void dump() { printf("dwRBitMask: %d\n", this->dwRBitMask); printf("dwGBitMask: %d\n", this->dwGBitMask); @@ -974,13 +992,13 @@ namespace dk2 { #pragma pack(push, 1) class MySurface { public: - + /* 0*/ MySurfDesc desc; /* 18*/ int lpSurface; /* 1C*/ int dwWidth; /* 20*/ int dwHeight; /* 24*/ int lPitch; - + void dump() { printf("lpSurface: %d\n", this->lpSurface); printf("dwWidth: %d\n", this->dwWidth); @@ -994,13 +1012,13 @@ namespace dk2 { #pragma pack(push, 1) class PixelMask { public: - + /* 0*/ char field_0; /* 1*/ char field_1; /* 2*/ char field_2; /* 3*/ char field_3; /* 4*/ char field_4; - + void dump() { printf("field_0: %d\n", this->field_0); printf("field_1: %d\n", this->field_1); @@ -1015,7 +1033,7 @@ namespace dk2 { #pragma pack(push, 1) class MyGame_f4C { public: - + /* 0*/ char field_0; /* 1*/ char field_1; /* 2*/ char field_2; @@ -1038,7 +1056,7 @@ namespace dk2 { /* 13*/ char field_13; /* 14*/ PixelMask f14_pixelMask; /* 19*/ int field_19; - + void dump() { printf("field_0: %d\n", this->field_0); printf("field_1: %d\n", this->field_1); @@ -1069,19 +1087,19 @@ namespace dk2 { #pragma pack(push, 1) class StaticListeners { public: - + /* 0*/ void *f0_onKeyboardAction; /* 4*/ void *f4_onMouseAction; /* 8*/ void *f8_onWindowMsg; /* C*/ void *fC_onKeyboardActionWithCtrl; /* 10*/ void *f10_onMouseActionWithCtrl; - + void dump() { - printf("f0_onKeyboardAction: %p\n", this->f0_onKeyboardAction); - printf("f4_onMouseAction: %p\n", this->f4_onMouseAction); - printf("f8_onWindowMsg: %p\n", this->f8_onWindowMsg); - printf("fC_onKeyboardActionWithCtrl: %p\n", this->fC_onKeyboardActionWithCtrl); - printf("f10_onMouseActionWithCtrl: %p\n", this->f10_onMouseActionWithCtrl); + printf("f0_onKeyboardAction: void(%p)\n", this->f0_onKeyboardAction); + printf("f4_onMouseAction: void(%p)\n", this->f4_onMouseAction); + printf("f8_onWindowMsg: void(%p)\n", this->f8_onWindowMsg); + printf("fC_onKeyboardActionWithCtrl: void(%p)\n", this->fC_onKeyboardActionWithCtrl); + printf("f10_onMouseActionWithCtrl: void(%p)\n", this->f10_onMouseActionWithCtrl); } }; #pragma pack(pop) @@ -1090,7 +1108,7 @@ namespace dk2 { #pragma pack(push, 1) class MyDdSurface { public: - + /* 0*/ int field_0; /* 4*/ int field_4; /* 8*/ int field_8; @@ -1107,7 +1125,7 @@ namespace dk2 { /* 1C*/ int f1C_flags; /* 20*/ int field_20; /* 24*/ IDirectDrawSurface *f24_dd_surface; - + void dump() { printf("field_0: %d\n", this->field_0); printf("field_4: %d\n", this->field_4); @@ -1133,10 +1151,10 @@ namespace dk2 { #pragma pack(push, 1) class MyDdSurfaceEx { public: - + /* 0*/ MyDdSurface f0_dd_surf; /* 28*/ MySurface f28_surf; - + void dump() { } }; @@ -1146,20 +1164,24 @@ namespace dk2 { #pragma pack(push, 1) class CWindowTest { public: - static uint32_t const VFTABLE = 0x0066F20C; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t { - /* 0*/ void *CWindowTest__DESTRUCTOR_CWindowTest_void; + /* 0*/ void *(__thiscall *CWindowTest__DESTRUCTOR_CWindowTest_void)(CWindowTest *self, char); // void *(__thiscall *)(void *Block, char a2) }; - + static_assert(sizeof(vtbl_t) == 0x4); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 4*/ HWND__ *f4_hWnd; /* 8*/ MyDdSurfaceEx f8_surface; /* 58*/ MyDdSurfaceEx *f58_pSurface; /* 5C*/ int f5C; - + virtual ~CWindowTest(); void dump() { printf("f4_hWnd: HWND__(%p)\n", this->f4_hWnd); @@ -1173,7 +1195,7 @@ namespace dk2 { #pragma pack(push, 1) class MyGame { public: - + /* 0*/ uint32_t field_0; /* 4*/ int dwWidth; /* 8*/ int dwHeight; @@ -1226,7 +1248,7 @@ namespace dk2 { /* F2B*/ uint8_t gap_F2B[34]; /* F4D*/ float fF4D_moonAge; /* F51*/ __int16 field_F51; - + void dump() { printf("field_0: %d\n", this->field_0); printf("dwWidth: %d\n", this->dwWidth); @@ -1284,13 +1306,13 @@ namespace dk2 { #pragma pack(push, 1) class DdModeListItem { public: - + /* 0*/ DdModeListItem *next; /* 4*/ DdModeListItem *last; /* 8*/ DWORD dwWidth; /* C*/ DWORD dwHeight; /* 10*/ DWORD dwRGBBitCount; - + void dump() { printf("next: DdModeListItem(%p)\n", this->next); printf("last: DdModeListItem(%p)\n", this->last); @@ -1305,10 +1327,10 @@ namespace dk2 { #pragma pack(push, 1) class DdModeList { public: - + /* 0*/ DdModeListItem *pModeList; /* 4*/ DdModeListItem head; - + void dump() { printf("pModeList: DdModeListItem(%p)\n", this->pModeList); } @@ -1319,7 +1341,7 @@ namespace dk2 { #pragma pack(push, 1) class MyVideoSettings { public: - + /* 0*/ uint32_t cmd_flag_SPEC_value; /* 4*/ int display_width; /* 8*/ int display_height; @@ -1362,7 +1384,7 @@ namespace dk2 { /* A8*/ int guid_index; /* AC*/ int guid_index_verifier_working; /* B0*/ int guid_index_is_default; - + void dump() { printf("cmd_flag_SPEC_value: %d\n", this->cmd_flag_SPEC_value); printf("display_width: %d\n", this->display_width); @@ -1414,11 +1436,11 @@ namespace dk2 { #pragma pack(push, 1) class DDGAMMARAMP { public: - + /* 0*/ WORD red[256]; /* 200*/ WORD green[256]; /* 400*/ WORD blue[256]; - + void dump() { printf("red: %d\n", this->red); printf("green: %d\n", this->green); @@ -1431,20 +1453,20 @@ namespace dk2 { #pragma pack(push, 1) class MyDirectDraw { public: - + /* 0*/ IDirectDraw4 *dd4; /* 4*/ IDirectDrawSurface4 *dd4_1; /* 8*/ IDirectDrawSurface4 *dd4_2; /* C*/ IDirect3DDevice3 *d3d_hal_device; /* 10*/ IDirect3D3 *d3d3; /* 14*/ IDirect3DViewport3 *d3d_viewport3; - /* 18*/ int field_18; - /* 1C*/ int field_1C; + /* 18*/ uint32_t *f18_buf; + /* 1C*/ uint16_t *f1C_buf2; /* 20*/ int textures; /* 24*/ int f24_reductionLevel; /* 28*/ char f28_flags; /* 29*/ char field_29; - + void dump() { printf("dd4: IDirectDraw4(%p)\n", this->dd4); printf("dd4_1: IDirectDrawSurface4(%p)\n", this->dd4_1); @@ -1452,8 +1474,8 @@ namespace dk2 { printf("d3d_hal_device: IDirect3DDevice3(%p)\n", this->d3d_hal_device); printf("d3d3: IDirect3D3(%p)\n", this->d3d3); printf("d3d_viewport3: IDirect3DViewport3(%p)\n", this->d3d_viewport3); - printf("field_18: %d\n", this->field_18); - printf("field_1C: %d\n", this->field_1C); + printf("f18_buf: uint32_t(%p)\n", this->f18_buf); + printf("f1C_buf2: uint16_t(%p)\n", this->f1C_buf2); printf("textures: %d\n", this->textures); printf("f24_reductionLevel: %d\n", this->f24_reductionLevel); printf("f28_flags: %d\n", this->f28_flags); @@ -1466,38 +1488,42 @@ namespace dk2 { #pragma pack(push, 1) class CCommunicationInterface { public: - static uint32_t const VFTABLE = 0x0066EB3C; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t { - /* 0*/ void *CCommunicationInterface___scalar_deleting_destructor_uint; - /* 4*/ void *__purecall; - /* 8*/ void *duplicate_1_1; - /* C*/ void *CEngineInterface__fun_443150; - /* 10*/ void *pushAction; - /* 14*/ void *f14_collectActions; - /* 18*/ void *duplicate_1_4; - /* 1C*/ void *duplicate_1_5; - /* 20*/ void *duplicate_1_6; - /* 24*/ void *duplicate_1_7; - /* 28*/ void *duplicate_1_8; - /* 2C*/ void *duplicate_1_9; - /* 30*/ void *duplicate_1_10; - /* 34*/ void *duplicate_1_11; - /* 38*/ void *duplicate_1_12; - /* 3C*/ void *CCommunicationInterface__fun_521B40; - /* 40*/ void *nullsub_10; - /* 44*/ void *CCommunicationInterface__fun_52B700; - /* 48*/ void *duplicate_1_13; + /* 0*/ void *(__thiscall *CCommunicationInterface___scalar_deleting_destructor_uint)(CCommunicationInterface *self, char); // void *(__thiscall *)(void *Block, char a2) + /* 4*/ void(__stdcall *__purecall)(); // void (__stdcall __noreturn *)() + /* 8*/ void *(__stdcall *duplicate_1_1)(); // void *(__stdcall *)() + /* C*/ int(__thiscall *CEngineInterface__fun_443150)(CCommunicationInterface *self, GameAction *, int); // int (__thiscall *)(CCommunicationInterface *, GameAction *, int) + /* 10*/ void(__thiscall *pushAction)(CCommunicationInterface *self, GameAction *); // void (__thiscall *)(CCommunicationInterface *, GameAction *) + /* 14*/ int(__thiscall *f14_collectActions)(CCommunicationInterface *self, void *); // int (__thiscall *)(CCommunicationInterface *, void *) + /* 18*/ void *(__stdcall *duplicate_1_4)(); // void *(__stdcall *)() + /* 1C*/ void *(__stdcall *duplicate_1_5)(); // void *(__stdcall *)() + /* 20*/ void *(__stdcall *duplicate_1_6)(); // void *(__stdcall *)() + /* 24*/ void *(__stdcall *duplicate_1_7)(); // void *(__stdcall *)() + /* 28*/ void *(__stdcall *duplicate_1_8)(); // void *(__stdcall *)() + /* 2C*/ void *(__stdcall *duplicate_1_9)(); // void *(__stdcall *)() + /* 30*/ void *(__stdcall *duplicate_1_10)(); // void *(__stdcall *)() + /* 34*/ void *(__stdcall *duplicate_1_11)(); // void *(__stdcall *)() + /* 38*/ void *(__stdcall *duplicate_1_12)(); // void *(__stdcall *)() + /* 3C*/ int(__stdcall *CCommunicationInterface__fun_521B40)(int); // int (__stdcall *)(int a1) + /* 40*/ void(__stdcall *nullsub_10)(int, int); // void (__stdcall *)(int a1, int a2) + /* 44*/ int(__stdcall *CCommunicationInterface__fun_52B700)(int); // int (__stdcall *)(int a1) + /* 48*/ void *(__stdcall *duplicate_1_13)(); // void *(__stdcall *)() }; - + static_assert(sizeof(vtbl_t) == 0x4C); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 4*/ uint32_t field_0; /* 8*/ int field_4; /* C*/ int f8_timeMs_to__; /* 10*/ int field_C; - + virtual ~CCommunicationInterface(); void dump() { printf("field_0: %d\n", this->field_0); @@ -1512,12 +1538,12 @@ namespace dk2 { #pragma pack(push, 1) class Area2i { public: - + /* 0*/ int x; /* 4*/ int y; /* 8*/ int w; /* C*/ int h; - + void dump() { printf("x: %d\n", this->x); printf("y: %d\n", this->y); @@ -1529,15 +1555,28 @@ namespace dk2 { static_assert(sizeof(Area2i) == 0x10); #pragma pack(push, 1) - class CGadget_fields { + class CGadget { public: - - /* 0*/ uint32_t x_offs; - /* 4*/ uint32_t y_offs; - /* 8*/ uint32_t width; - /* C*/ int height; - /* 10*/ Area2i pos; - + struct vtbl_t { + /* 0*/ void *(__thiscall *CGadget___scalar_deleting_destructor_uint)(CGadget *self, char); // std::locale::facet *(__thiscall *)(std::locale::facet *this, char a2) + }; + static_assert(sizeof(vtbl_t) == 0x4); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + + /* 4*/ uint32_t x_offs; + /* 8*/ uint32_t y_offs; + /* C*/ uint32_t width; + /* 10*/ int height; + /* 14*/ Area2i pos; + + virtual ~CGadget(); void dump() { printf("x_offs: %d\n", this->x_offs); printf("y_offs: %d\n", this->y_offs); @@ -1546,22 +1585,25 @@ namespace dk2 { } }; #pragma pack(pop) - static_assert(sizeof(CGadget_fields) == 0x20); + static_assert(sizeof(CGadget) == 0x24); #pragma pack(push, 1) - class CWindow { + class CWindow : public CGadget { public: - static uint32_t const VFTABLE = 0x0066EE94; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - - struct vtbl_t { - /* 0*/ void *CWindow___scalar_deleting_destructor_uint; - /* 4*/ void *update; + struct vtbl_t /*: public CGadget::vtbl_t */{ + /* 0*/ void *(__thiscall *CWindow___scalar_deleting_destructor_uint)(CWindow *self, char); // void *(__thiscall *)(void *Block, char a2) + /* 4*/ int(__thiscall *update)(CWindow *self); // int (__thiscall *)(_DWORD *this) }; - - /* 4*/ CGadget_fields super; + static_assert(sizeof(vtbl_t) == 0x8); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 24*/ uint32_t f20_updateFun; /* 28*/ uint32_t f24_fun; /* 2C*/ uint32_t field_28; @@ -1582,7 +1624,7 @@ namespace dk2 { /* 66*/ int field_62_bool; /* 6A*/ CButton *f66_buttons; /* 6E*/ __int16 _end_f6A_unk; - + virtual ~CWindow(); void dump() { printf("f20_updateFun: %d\n", this->f20_updateFun); @@ -1613,10 +1655,10 @@ namespace dk2 { #pragma pack(push, 1) class Pos2i { public: - + /* 0*/ int x; /* 4*/ int y; - + void dump() { printf("x: %d\n", this->x); printf("y: %d\n", this->y); @@ -1628,12 +1670,12 @@ namespace dk2 { #pragma pack(push, 1) class AABB { public: - + /* 0*/ int minX; /* 4*/ int minY; /* 8*/ int maxX; /* C*/ int maxY; - + void dump() { printf("minX: %d\n", this->minX); printf("minY: %d\n", this->minY); @@ -1647,15 +1689,19 @@ namespace dk2 { #pragma pack(push, 1) class CGuiManager { public: - static uint32_t const VFTABLE = 0x0066ED1C; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t { - /* 0*/ void *CGuiManager___scalar_deleting_destructor_uint; + /* 0*/ void *(__thiscall *CGuiManager___scalar_deleting_destructor_uint)(CGuiManager *self, char); // void *(__thiscall *)(void *Block, char a2) }; - + static_assert(sizeof(vtbl_t) == 0x4); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 4*/ uint32_t f4_width; /* 8*/ uint32_t f8_height; /* C*/ uint32_t fC_isButtonVisited; @@ -1681,7 +1727,7 @@ namespace dk2 { /* DC*/ uint8_t gap_DC[256]; /* 1DC*/ uint32_t field_1DC; /* 1E0*/ int field_1E0; - + virtual ~CGuiManager(); void dump() { printf("f4_width: %d\n", this->f4_width); @@ -1713,11 +1759,11 @@ namespace dk2 { #pragma pack(push, 1) class MyStaticStruct { public: - + /* 0*/ uint32_t f0; /* 4*/ int f4; /* 8*/ int f8; - + void dump() { printf("f0: %d\n", this->f0); printf("f4: %d\n", this->f4); @@ -1730,7 +1776,7 @@ namespace dk2 { #pragma pack(push, 1) class RtGuiView { public: - + /* 0*/ void *f0_blocksBuf; /* 4*/ int f4_Arrp31x400_ids[140]; /* 234*/ CWorldEntry f234_worldEntry; @@ -1744,9 +1790,9 @@ namespace dk2 { /* 28F*/ uint32_t f28F_dwRGBBitCount; /* 293*/ uint32_t f293_blocksCount_bytes; /* 297*/ int field_297; - + void dump() { - printf("f0_blocksBuf: %p\n", this->f0_blocksBuf); + printf("f0_blocksBuf: void(%p)\n", this->f0_blocksBuf); printf("f4_Arrp31x400_ids: %d\n", this->f4_Arrp31x400_ids); printf("f277_width: %d\n", this->f277_width); printf("f27B_height: %d\n", this->f27B_height); @@ -1765,37 +1811,41 @@ namespace dk2 { #pragma pack(push, 1) class CDefaultPlayerInterface { public: - static uint32_t const VFTABLE = 0x0066C4A4; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t { - /* 0*/ void *CDefaultPlayerInterface__fun_402C00; - /* 4*/ void *CDefaultPlayerInterface__fun_402D00; - /* 8*/ void *CDefaultPlayerInterface__fun_4033F0; - /* C*/ void *CDefaultPlayerInterface__fun_4036E0; - /* 10*/ void *CDefaultPlayerInterface__fun_4039A0; - /* 14*/ void *CDefaultPlayerInterface__fun_403FB0; - /* 18*/ void *CPlayerInterface__fun_402AD0; - /* 1C*/ void *CDefaultPlayerInterface__fun_402B50; - /* 20*/ void *CDefaultPlayerInterface__fun_4096B0; - /* 24*/ void *CDefaultPlayerInterface__fun_409880; - /* 28*/ void *CDefaultPlayerInterface__fun_4098A0; - /* 2C*/ void *CDefaultPlayerInterface__fun_4098D0; - /* 30*/ void *CDefaultPlayerInterface__fun_402B60; - /* 34*/ void *CDefaultPlayerInterface__fun_402B70; - /* 38*/ void *CDefaultPlayerInterface__fun_402B80; - /* 3C*/ void *CDefaultPlayerInterface__fun_42BC20; - /* 40*/ void *CDefaultPlayerInterface__fun_42BE40; - /* 44*/ void *CDefaultPlayerInterface__fun_42C710; - /* 48*/ void *CDefaultPlayerInterface__fun_42BFE0; - /* 4C*/ void *CDefaultPlayerInterface__fun_42C0D0; - /* 50*/ void *CDefaultPlayerInterface__fun_42C1E0; - /* 54*/ void *CDefaultPlayerInterface__fun_402B90; - /* 58*/ void *CDefaultPlayerInterface__fun_409EC0; + /* 0*/ void *(__thiscall *CDefaultPlayerInterface__fun_402C00)(CDefaultPlayerInterface *self, char); // void *(__thiscall *)(void *Block, char a2) + /* 4*/ int(__thiscall *CDefaultPlayerInterface__fun_402D00)(CDefaultPlayerInterface *self, __int16); // int (__thiscall *)(char *this, __int16 a2) + /* 8*/ int(__thiscall *CDefaultPlayerInterface__fun_4033F0)(CDefaultPlayerInterface *self); // int (__thiscall *)(int this) + /* C*/ int(__thiscall *CDefaultPlayerInterface__fun_4036E0)(CDefaultPlayerInterface *self); // int (__thiscall *)(int this) + /* 10*/ int(__thiscall *CDefaultPlayerInterface__fun_4039A0)(CDefaultPlayerInterface *self, int, int, int); // int (__thiscall *)(CDefaultPlayerInterface *this, int a4, int a5, int a6) + /* 14*/ int(__thiscall *CDefaultPlayerInterface__fun_403FB0)(CDefaultPlayerInterface *self); // int (__thiscall *)(_DWORD *this) + /* 18*/ int(__stdcall *CPlayerInterface__fun_402AD0)(); // int (__stdcall *)() + /* 1C*/ int(__thiscall *CDefaultPlayerInterface__fun_402B50)(CDefaultPlayerInterface *self, int); // int (__thiscall *)(int this, int a2) + /* 20*/ BOOL(__thiscall *CDefaultPlayerInterface__fun_4096B0)(CDefaultPlayerInterface *self); // BOOL (__thiscall *)(int this) + /* 24*/ int(__thiscall *CDefaultPlayerInterface__fun_409880)(CDefaultPlayerInterface *self); // int (__thiscall *)(void *this) + /* 28*/ int(__thiscall *CDefaultPlayerInterface__fun_4098A0)(CDefaultPlayerInterface *self); // int (__thiscall *)(int this) + /* 2C*/ int(__thiscall *CDefaultPlayerInterface__fun_4098D0)(CDefaultPlayerInterface *self); // int (__thiscall *)(int this) + /* 30*/ int(__thiscall *CDefaultPlayerInterface__fun_402B60)(CDefaultPlayerInterface *self); // int (__thiscall *)(int this) + /* 34*/ void(__thiscall *CDefaultPlayerInterface__fun_402B70)(CDefaultPlayerInterface *self); // void (__thiscall *)(int this) + /* 38*/ void(__thiscall *CDefaultPlayerInterface__fun_402B80)(CDefaultPlayerInterface *self); // void (__thiscall *)(int this) + /* 3C*/ int(__thiscall *CDefaultPlayerInterface__fun_42BC20)(CDefaultPlayerInterface *self); // int (__thiscall *)(int this) + /* 40*/ int(__thiscall *CDefaultPlayerInterface__fun_42BE40)(CDefaultPlayerInterface *self); // int (__thiscall *)(int this) + /* 44*/ BOOL(__thiscall *CDefaultPlayerInterface__fun_42C710)(CDefaultPlayerInterface *self); // BOOL (__thiscall *)(_DWORD *this) + /* 48*/ int(__thiscall *CDefaultPlayerInterface__fun_42BFE0)(CDefaultPlayerInterface *self); // int (__thiscall *)(_DWORD *this) + /* 4C*/ int(__thiscall *CDefaultPlayerInterface__fun_42C0D0)(CDefaultPlayerInterface *self); // int (__thiscall *)(_DWORD *this) + /* 50*/ DWORD(__thiscall *CDefaultPlayerInterface__fun_42C1E0)(CDefaultPlayerInterface *self, int, int); // DWORD (__thiscall *)(_DWORD *this, int a2, int a3) + /* 54*/ char(__thiscall *CDefaultPlayerInterface__fun_402B90)(CDefaultPlayerInterface *self, char); // char (__thiscall *)(_BYTE *this, char a2) + /* 58*/ DWORD(__thiscall *CDefaultPlayerInterface__fun_409EC0)(CDefaultPlayerInterface *self, __int16, void *); // DWORD (__thiscall *)(int this, __int16 a2, const void *a3) }; - + static_assert(sizeof(vtbl_t) == 0x5C); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 4*/ MyProfiler *f4_profiler; /* 8*/ __int16 f8__cpyToF10; /* A*/ int fA__counter; @@ -1957,7 +2007,7 @@ namespace dk2 { /*4E6D*/ uint32_t field_4E6D; /*4E71*/ uint8_t gap4E71[188]; /*4F2D*/ int field_4F2D; - + virtual ~CDefaultPlayerInterface(); void dump() { printf("f4_profiler: MyProfiler(%p)\n", this->f4_profiler); @@ -2101,196 +2151,101 @@ namespace dk2 { static_assert(sizeof(CDefaultPlayerInterface) == 0x4F31); #pragma pack(push, 1) - class CGadget { + class CBridgeInterface : public CEngineInterface { public: - static uint32_t const VFTABLE = 0x0066ED14; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - - struct vtbl_t { - /* 0*/ void *CGadget___scalar_deleting_destructor_uint; + struct vtbl_t /*: public CEngineInterface::vtbl_t */{ + /* 0*/ void *(__thiscall *CBridgeInterface___scalar_deleting_destructor_uint)(CBridgeInterface *self, char); // void *(__thiscall *)(void *Block, char a2) + /* 4*/ void(__stdcall *__purecall)(); // void (__stdcall __noreturn *)() + /* 8*/ void *(__stdcall *duplicate_1_1)(); // void *(__stdcall *)() + /* C*/ void(__cdecl *nullsub_2)(); // void (__cdecl *)() + /* 10*/ void *(__stdcall *duplicate_3_1)(); // void *(__stdcall *)() + /* 14*/ int(__stdcall *CPlayerInterface__fun_628BC0)(); // int (__stdcall *)() + /* 18*/ void(__stdcall *nullsub_44)(int); // void (__stdcall *)(int a1) + /* 1C*/ void *(__stdcall *duplicate_5_1)(); // void *(__stdcall *)() + /* 20*/ void *(__stdcall *duplicate_1_2)(); // void *(__stdcall *)() + /* 24*/ void *(__stdcall *duplicate_1_3)(); // void *(__stdcall *)() + /* 28*/ void *(__stdcall *duplicate_1_4)(); // void *(__stdcall *)() + /* 2C*/ void *(__stdcall *duplicate_1_5)(); // void *(__stdcall *)() + /* 30*/ void *(__stdcall *duplicate_6_1)(); // void *(__stdcall *)() + /* 34*/ void *(__stdcall *duplicate_6_2)(); // void *(__stdcall *)() + /* 38*/ void *(__stdcall *duplicate_5_2)(); // void *(__stdcall *)() + /* 3C*/ void *(__stdcall *duplicate_5_3)(); // void *(__stdcall *)() + /* 40*/ void *(__stdcall *duplicate_5_4)(); // void *(__stdcall *)() + /* 44*/ void *(__stdcall *duplicate_5_5)(); // void *(__stdcall *)() + /* 48*/ void *(__stdcall *duplicate_1_6)(); // void *(__stdcall *)() + /* 4C*/ void *(__stdcall *duplicate_1_7)(); // void *(__stdcall *)() + /* 50*/ int(__stdcall *CEngineInterface__fun_517400)(int, int, int); // int (__stdcall *)(int a1, int a2, int a3) + /* 54*/ int(__stdcall *CEngineInterface__fun_443070)(int, int, int, uint32_t *, int, int); // int (__stdcall *)(int a1, int a2, int a3, _DWORD *a4, int a5, int a6) + /* 58*/ int(__stdcall *CEngineInterface__fun_443090)(int, int, int, int, uint32_t *); // int (__stdcall *)(int a1, int a2, int a3, int a4, _DWORD *a5) + /* 5C*/ void(__stdcall *nullsub_43)(int, int, int, int); // void (__stdcall *)(int a1, int a2, int a3, int a4) + /* 60*/ void(__stdcall *nullsub_21)(int, int, int, int, int, int); // void (__stdcall *)(int a1, int a2, int a3, int a4, int a5, int a6) + /* 64*/ void *(__stdcall *duplicate_23_1)(); // void *(__stdcall *)() + /* 68*/ void(__stdcall *nullsub_22)(int, int, int); // void (__stdcall *)(int a1, int a2, int a3) + /* 6C*/ void *(__stdcall *duplicate_6_3)(); // void *(__stdcall *)() + /* 70*/ void *(__stdcall *duplicate_6_4)(); // void *(__stdcall *)() + /* 74*/ int(__stdcall *CPlayerInterface__fun_402AD0)(); // int (__stdcall *)() + /* 78*/ void *(__stdcall *duplicate_6_5)(); // void *(__stdcall *)() + /* 7C*/ void *(__stdcall *duplicate_6_6)(); // void *(__stdcall *)() + /* 80*/ int(__stdcall *CEngineInterface__fun_5173B0)(int, int); // int (__stdcall *)(int a1, int a2) + /* 84*/ void *(__stdcall *duplicate_6_7)(); // void *(__stdcall *)() + /* 88*/ void *(__stdcall *duplicate_29_1)(); // void *(__stdcall *)() + /* 8C*/ void *(__stdcall *duplicate_3_2)(); // void *(__stdcall *)() + /* 90*/ int(__stdcall *CEngineInterface__fun_4430D0)(int, int, int, int, int, int); // int (__stdcall *)(int a1, int a2, int a3, int a4, int a5, int a6) + /* 94*/ int(__stdcall *CEngineInterface__fun_4430C0)(int, int, int, int, int); // int (__stdcall *)(int a1, int a2, int a3, int a4, int a5) + /* 98*/ void *(__stdcall *duplicate_36_1)(); // void *(__stdcall *)() + /* 9C*/ void *(__stdcall *duplicate_6_8)(); // void *(__stdcall *)() + /* A0*/ void *(__stdcall *duplicate_37_1)(); // void *(__stdcall *)() + /* A4*/ void *(__stdcall *loc_43A8A0)(); // void *(__stdcall *)() + /* A8*/ void *(__stdcall *duplicate_6_9)(); // void *(__stdcall *)() + /* AC*/ int(__stdcall *CEngineInterface__fun_628E30)(int); // int (__stdcall *)(int a1) + /* B0*/ void *(__stdcall *duplicate_1_8)(); // void *(__stdcall *)() + /* B4*/ void(__stdcall *nullsub_10)(int, int); // void (__stdcall *)(int a1, int a2) + /* B8*/ void *(__stdcall *duplicate_26_1)(); // void *(__stdcall *)() + /* BC*/ __int16(__thiscall *CEngineInterface__fun_4430E0)(CBridgeInterface *self); // __int16 (__thiscall *)(_WORD *this) + /* C0*/ __int16(__thiscall *CEngineInterface__fun_4430F0)(CBridgeInterface *self, __int16); // __int16 (__thiscall *)(_WORD *this, __int16 a2) + /* C4*/ __int16(__thiscall *CEngineInterface__fun_443100)(CBridgeInterface *self); // __int16 (__thiscall *)(_WORD *this) + /* C8*/ __int16(__thiscall *CEngineInterface__fun_443110)(CBridgeInterface *self, __int16); // __int16 (__thiscall *)(_WORD *this, __int16 a2) + /* CC*/ void *(__stdcall *duplicate_29_2)(); // void *(__stdcall *)() + /* D0*/ uint32_t *(__stdcall *CEngineInterface__fun_443120)(); // _DWORD *(__stdcall *)() + /* D4*/ int(__stdcall *CEngineInterface__fun_443150)(int, int); // int (__stdcall *)(int a1, int a2) + /* D8*/ void *(__stdcall *duplicate_20_1)(); // void *(__stdcall *)() + /* DC*/ void *(__stdcall *duplicate_53_1)(); // void *(__stdcall *)() + /* E0*/ void *(__stdcall *duplicate_37_2)(); // void *(__stdcall *)() + /* E4*/ int(__stdcall *CEngineInterface__fun_628B70)(int, int, int, int); // int (__stdcall *)(int a1, int a2, int a3, int a4) + /* E8*/ void *(__stdcall *duplicate_57_1)(); // void *(__stdcall *)() + /* EC*/ void *(__stdcall *duplicate_20_2)(); // void *(__stdcall *)() + /* F0*/ void *(__stdcall *loc_43A880)(); // void *(__stdcall *)() + /* F4*/ void *(__stdcall *loc_43A890)(); // void *(__stdcall *)() + /* F8*/ void *(__stdcall *duplicate_41_1)(); // void *(__stdcall *)() + /* FC*/ void *(__stdcall *duplicate_41_2)(); // void *(__stdcall *)() + /* 100*/ void *(__stdcall *duplicate_41_3)(); // void *(__stdcall *)() + /* 104*/ void *(__stdcall *duplicate_57_2)(); // void *(__stdcall *)() + /* 108*/ void *(__stdcall *duplicate_57_3)(); // void *(__stdcall *)() + /* 10C*/ void *(__stdcall *duplicate_57_4)(); // void *(__stdcall *)() + /* 110*/ void *(__stdcall *duplicate_1_9)(); // void *(__stdcall *)() + /* 114*/ void *(__stdcall *duplicate_1_10)(); // void *(__stdcall *)() + /* 118*/ void *(__stdcall *duplicate_1_11)(); // void *(__stdcall *)() + /* 11C*/ void *(__stdcall *duplicate_1_12)(); // void *(__stdcall *)() + /* 120*/ void *(__stdcall *duplicate_1_13)(); // void *(__stdcall *)() + /* 124*/ void *(__stdcall *duplicate_1_14)(); // void *(__stdcall *)() + /* 128*/ void *(__stdcall *duplicate_1_15)(); // void *(__stdcall *)() + /* 12C*/ void *(__stdcall *duplicate_1_16)(); // void *(__stdcall *)() + /* 130*/ void *(__stdcall *duplicate_1_17)(); // void *(__stdcall *)() + /* 134*/ void *(__stdcall *duplicate_1_18)(); // void *(__stdcall *)() + /* 138*/ void *(__stdcall *duplicate_1_19)(); // void *(__stdcall *)() + /* 13C*/ void *(__stdcall *duplicate_1_20)(); // void *(__stdcall *)() }; - - /* 4*/ uint32_t x_offs; - /* 8*/ uint32_t y_offs; - /* C*/ uint32_t width; - /* 10*/ int height; - /* 14*/ Area2i pos; - - virtual ~CGadget(); - void dump() { - printf("x_offs: %d\n", this->x_offs); - printf("y_offs: %d\n", this->y_offs); - printf("width: %d\n", this->width); - printf("height: %d\n", this->height); - } - }; -#pragma pack(pop) - static_assert(sizeof(CGadget) == 0x24); - -#pragma pack(push, 1) - class CEngineInterface_fields { - public: - - /* 0*/ uint32_t field_0; - /* 4*/ CBridge *f4_pCBridge; - /* 8*/ uint16_t field_8; - /* A*/ uint16_t field_A; - /* C*/ uint32_t field_C; - /* 10*/ uint32_t field_10; - /* 14*/ int field_14; - /* 18*/ int field_18; - /* 1C*/ int field_1C; - /* 20*/ int field_20; - /* 24*/ int field_24; - /* 28*/ int field_28; - /* 2C*/ int field_2C; - /* 30*/ __int16 field_30; - /* 32*/ int field_32; - /* 36*/ int field_36; - /* 3A*/ int field_3A; - /* 3E*/ int field_3E; - /* 42*/ int field_42; - /* 46*/ int field_46; - /* 4A*/ int field_4A; - /* 4E*/ int field_4E; - /* 52*/ int field_52; - /* 56*/ int field_56; - /* 5A*/ int field_5A; - /* 5E*/ int field_5E; - /* 62*/ int field_62; - /* 66*/ int field_66; - /* 6A*/ int field_6A; - - void dump() { - printf("field_0: %d\n", this->field_0); - printf("f4_pCBridge: CBridge(%p)\n", this->f4_pCBridge); - printf("field_8: %d\n", this->field_8); - printf("field_A: %d\n", this->field_A); - printf("field_C: %d\n", this->field_C); - printf("field_10: %d\n", this->field_10); - printf("field_14: %d\n", this->field_14); - printf("field_18: %d\n", this->field_18); - printf("field_1C: %d\n", this->field_1C); - printf("field_20: %d\n", this->field_20); - printf("field_24: %d\n", this->field_24); - printf("field_28: %d\n", this->field_28); - printf("field_2C: %d\n", this->field_2C); - printf("field_30: %d\n", this->field_30); - printf("field_32: %d\n", this->field_32); - printf("field_36: %d\n", this->field_36); - printf("field_3A: %d\n", this->field_3A); - printf("field_3E: %d\n", this->field_3E); - printf("field_42: %d\n", this->field_42); - printf("field_46: %d\n", this->field_46); - printf("field_4A: %d\n", this->field_4A); - printf("field_4E: %d\n", this->field_4E); - printf("field_52: %d\n", this->field_52); - printf("field_56: %d\n", this->field_56); - printf("field_5A: %d\n", this->field_5A); - printf("field_5E: %d\n", this->field_5E); - printf("field_62: %d\n", this->field_62); - printf("field_66: %d\n", this->field_66); - printf("field_6A: %d\n", this->field_6A); - } - }; -#pragma pack(pop) - static_assert(sizeof(CEngineInterface_fields) == 0x6E); - -#pragma pack(push, 1) - class CBridgeInterface { + static_assert(sizeof(vtbl_t) == 0x140); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; public: - static uint32_t const VFTABLE = 0x0066CF7C; - + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - - struct vtbl_t { - /* 0*/ void *CBridgeInterface___scalar_deleting_destructor_uint; - /* 4*/ void *__purecall; - /* 8*/ void *duplicate_1_1; - /* C*/ void *nullsub_2; - /* 10*/ void *duplicate_3_1; - /* 14*/ void *CPlayerInterface__fun_628BC0; - /* 18*/ void *nullsub_44; - /* 1C*/ void *duplicate_5_1; - /* 20*/ void *duplicate_1_2; - /* 24*/ void *duplicate_1_3; - /* 28*/ void *duplicate_1_4; - /* 2C*/ void *duplicate_1_5; - /* 30*/ void *duplicate_6_1; - /* 34*/ void *duplicate_6_2; - /* 38*/ void *duplicate_5_2; - /* 3C*/ void *duplicate_5_3; - /* 40*/ void *duplicate_5_4; - /* 44*/ void *duplicate_5_5; - /* 48*/ void *duplicate_1_6; - /* 4C*/ void *duplicate_1_7; - /* 50*/ void *CEngineInterface__fun_517400; - /* 54*/ void *CEngineInterface__fun_443070; - /* 58*/ void *CEngineInterface__fun_443090; - /* 5C*/ void *nullsub_43; - /* 60*/ void *nullsub_21; - /* 64*/ void *duplicate_23_1; - /* 68*/ void *nullsub_22; - /* 6C*/ void *duplicate_6_3; - /* 70*/ void *duplicate_6_4; - /* 74*/ void *CPlayerInterface__fun_402AD0; - /* 78*/ void *duplicate_6_5; - /* 7C*/ void *duplicate_6_6; - /* 80*/ void *CEngineInterface__fun_5173B0; - /* 84*/ void *duplicate_6_7; - /* 88*/ void *duplicate_29_1; - /* 8C*/ void *duplicate_3_2; - /* 90*/ void *CEngineInterface__fun_4430D0; - /* 94*/ void *CEngineInterface__fun_4430C0; - /* 98*/ void *duplicate_36_1; - /* 9C*/ void *duplicate_6_8; - /* A0*/ void *duplicate_37_1; - /* A4*/ void *loc_43A8A0; - /* A8*/ void *duplicate_6_9; - /* AC*/ void *CEngineInterface__fun_628E30; - /* B0*/ void *duplicate_1_8; - /* B4*/ void *nullsub_10; - /* B8*/ void *duplicate_26_1; - /* BC*/ void *CEngineInterface__fun_4430E0; - /* C0*/ void *CEngineInterface__fun_4430F0; - /* C4*/ void *CEngineInterface__fun_443100; - /* C8*/ void *CEngineInterface__fun_443110; - /* CC*/ void *duplicate_29_2; - /* D0*/ void *CEngineInterface__fun_443120; - /* D4*/ void *CEngineInterface__fun_443150; - /* D8*/ void *duplicate_20_1; - /* DC*/ void *duplicate_53_1; - /* E0*/ void *duplicate_37_2; - /* E4*/ void *CEngineInterface__fun_628B70; - /* E8*/ void *duplicate_57_1; - /* EC*/ void *duplicate_20_2; - /* F0*/ void *loc_43A880; - /* F4*/ void *loc_43A890; - /* F8*/ void *duplicate_41_1; - /* FC*/ void *duplicate_41_2; - /* 100*/ void *duplicate_41_3; - /* 104*/ void *duplicate_57_2; - /* 108*/ void *duplicate_57_3; - /* 10C*/ void *duplicate_57_4; - /* 110*/ void *duplicate_1_9; - /* 114*/ void *duplicate_1_10; - /* 118*/ void *duplicate_1_11; - /* 11C*/ void *duplicate_1_12; - /* 120*/ void *duplicate_1_13; - /* 124*/ void *duplicate_1_14; - /* 128*/ void *duplicate_1_15; - /* 12C*/ void *duplicate_1_16; - /* 130*/ void *duplicate_1_17; - /* 134*/ void *duplicate_1_18; - /* 138*/ void *duplicate_1_19; - /* 13C*/ void *duplicate_1_20; - }; - - /* 4*/ CEngineInterface_fields super; - + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + + virtual ~CBridgeInterface(); void dump() { } @@ -2301,7 +2256,7 @@ namespace dk2 { #pragma pack(push, 1) class My_sub_56F850 { public: - + /* 0*/ uint32_t field_0; /* 4*/ uint32_t field_4; /* 8*/ uint32_t field_8; @@ -2320,7 +2275,7 @@ namespace dk2 { /* 3C*/ int field_3C; /* 40*/ int field_40; /* 44*/ uint8_t field_44[84]; - + void dump() { printf("field_0: %d\n", this->field_0); printf("field_4: %d\n", this->field_4); @@ -2348,7 +2303,7 @@ namespace dk2 { #pragma pack(push, 1) class ProbablyGlobalRenderObj { public: - + /* 0*/ uint32_t field_0; /* 4*/ uint8_t gap_4[36]; /* 28*/ My_sub_56F850 f28_My_sub_56F850_arr_x22[22]; @@ -2380,10 +2335,10 @@ namespace dk2 { /* E56*/ int field_E56; /* E5A*/ int field_E5A; /* E5E*/ int field_E5E; - /* E62*/ int field_E62; - /* E66*/ int field_E66; - /* E6A*/ int field_E6A; - /* E6E*/ int field_E6E; + /* E62*/ int fE62_left; + /* E66*/ int fE66_top; + /* E6A*/ int fE6A_right; + /* E6E*/ int fE6E_bottom; /* E72*/ int field_E72; /* E76*/ int field_E76; /* E7A*/ int field_E7A; @@ -2403,7 +2358,7 @@ namespace dk2 { /* EB2*/ int field_EB2; /* EB6*/ int field_EB6; /* EBA*/ int fEBA; - + void dump() { printf("field_0: %d\n", this->field_0); printf("gap_4: %d\n", this->gap_4); @@ -2435,10 +2390,10 @@ namespace dk2 { printf("field_E56: %d\n", this->field_E56); printf("field_E5A: %d\n", this->field_E5A); printf("field_E5E: %d\n", this->field_E5E); - printf("field_E62: %d\n", this->field_E62); - printf("field_E66: %d\n", this->field_E66); - printf("field_E6A: %d\n", this->field_E6A); - printf("field_E6E: %d\n", this->field_E6E); + printf("fE62_left: %d\n", this->fE62_left); + printf("fE66_top: %d\n", this->fE66_top); + printf("fE6A_right: %d\n", this->fE6A_right); + printf("fE6E_bottom: %d\n", this->fE6E_bottom); printf("field_E72: %d\n", this->field_E72); printf("field_E76: %d\n", this->field_E76); printf("field_E7A: %d\n", this->field_E7A); @@ -2466,7 +2421,7 @@ namespace dk2 { #pragma pack(push, 1) class FloatObjThing { public: - + /* 0*/ uint16_t field_0; /* 2*/ int lastTimeMs; /* 6*/ float field_6; @@ -2478,7 +2433,7 @@ namespace dk2 { /*1212*/ int f1212_count; /*1216*/ int f1216_count_limit; /*121A*/ uint16_t field_121A[26]; - + void dump() { printf("field_0: %d\n", this->field_0); printf("lastTimeMs: %d\n", this->lastTimeMs); @@ -2499,115 +2454,119 @@ namespace dk2 { #pragma pack(push, 1) class CBridge : public CBridgeInterface { public: - static uint32_t const VFTABLE = 0x0066CC94; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t /*: public CBridgeInterface::vtbl_t */{ - /* 0*/ void *loc_43AA10; - /* 4*/ void *CBridge__fun_43AD70; - /* 8*/ void *CBridge__fun_43B0B0; - /* C*/ void *CBridge__fun_441E30; - /* 10*/ void *CBridge__fun_441E60; - /* 14*/ void *CBridge__fun_441EE0; - /* 18*/ void *loc_43A990; - /* 1C*/ void *loc_43A9A0; - /* 20*/ void *CBridge__fun_43B150; - /* 24*/ void *CBridge__fun_43B180; - /* 28*/ void *CBridge__fun_43B1E0; - /* 2C*/ void *CBridge__fun_43B220; - /* 30*/ void *CBridge__fun_441330; - /* 34*/ void *CBridge__fun_441350; - /* 38*/ void *CBridge__fun_440FB0; - /* 3C*/ void *CBridge__fun_440FC0; - /* 40*/ void *CBridge__fun_440FD0; - /* 44*/ void *CBridge__fun_440FE0; - /* 48*/ void *CBridge__fun_43C2C0; - /* 4C*/ void *CBridge__fun_43C2F0; - /* 50*/ void *CBridge__fun_441040; - /* 54*/ void *CBridge__fun_43E2F0; - /* 58*/ void *CBridge_createAndRegister_441300; - /* 5C*/ void *CBridge__fun_440FF0; - /* 60*/ void *loc_43A8B0; - /* 64*/ void *CBridge__fun_441060; - /* 68*/ void *CBridge__fun_441020; - /* 6C*/ void *CBridge__fun_441390; - /* 70*/ void *CBridge__fun_4413B0; - /* 74*/ void *CBridge__fun_4413D0; - /* 78*/ void *CBridge__fun_4413E0; - /* 7C*/ void *CBridge__fun_441400; - /* 80*/ void *CBridge__fun_4412C0; - /* 84*/ void *CBridge__fun_441C70; - /* 88*/ void *CBridge__fun_441E20; - /* 8C*/ void *nullsub_2; - /* 90*/ void *CBridge__fun_440420; - /* 94*/ void *loc_43A8E0; - /* 98*/ void *CBridge__fun_440350; - /* 9C*/ void *CBridge__fun_440530; - /* A0*/ void *CBridge__fun_439880; - /* A4*/ void *CBridge__fun_4397E0; - /* A8*/ void *CBridge__fun_439A20; - /* AC*/ void *CBridge__fun_439AA0; - /* B0*/ void *loc_43A910; - /* B4*/ void *CBridge__fun_439B00; - /* B8*/ void *CBridge__fun_439B90; - /* BC*/ void *CBridge__fun_440F50; - /* C0*/ void *CBridge__fun_440F60; - /* C4*/ void *CBridge__fun_440F80; - /* C8*/ void *CBridge__fun_440F90; - /* CC*/ void *loc_43A970; - /* D0*/ void *loc_43A980; - /* D4*/ void *CBridge__fun_4412E0; - /* D8*/ void *CBridge__fun_441370; - /* DC*/ void *CBridge__fun_441B00; - /* E0*/ void *CEngineInterface__fun_4430C0; - /* E4*/ void *CEngineInterface__fun_628B70; - /* E8*/ void *duplicate_57_1; - /* EC*/ void *CEngineInterface__fun_517400; - /* F0*/ void *loc_43A880; - /* F4*/ void *loc_43A890; - /* F8*/ void *loc_43A8A0; - /* FC*/ void *duplicate_62_1; - /* 100*/ void *duplicate_62_2; - /* 104*/ void *duplicate_57_2; - /* 108*/ void *CBridge__fun_441AD0; - /* 10C*/ void *CBridge__fun_441AA0; - /* 110*/ void *CBridge__fun_43AAD0; - /* 114*/ void *CBridge__fun_43ACF0; - /* 118*/ void *CBridge__fun_43E030; - /* 11C*/ void *CBridge_loadPng_fun_43E0F0; - /* 120*/ void *CBridge__fun_43D790; - /* 124*/ void *CBridge__fun_43D970; - /* 128*/ void *loc_43A940; - /* 12C*/ void *loc_43A920; - /* 130*/ void *CBridge__fun_43C310; - /* 134*/ void *CBridge__fun_43CC30; - /* 138*/ void *loc_43A960; - /* 13C*/ void *CBridge__fun_441420; - /* 140*/ void *CBridge__fun_441CC0; - /* 144*/ void *CBridge__fun_4408C0; - /* 148*/ void *CBridge__fun_4408E0; - /* 14C*/ void *CBridge__fun_440940; - /* 150*/ void *CBridge__fun_440A00; - /* 154*/ void *CBridge__fun_440A30; - /* 158*/ void *CBridge__fun_440A70; - /* 15C*/ void *CBridge__fun_4409A0; - /* 160*/ void *loc_43A9B0; - /* 164*/ void *loc_43A9C0; - /* 168*/ void *loc_43A9D0; - /* 16C*/ void *CBridge__fun_440AD0; - /* 170*/ void *CBridge__fun_440AF0; - /* 174*/ void *CBridge__fun_440B60; - /* 178*/ void *CBridge__fun_440C20; - /* 17C*/ void *CBridge__fun_440C50; - /* 180*/ void *CBridge__fun_440C90; - /* 184*/ void *CBridge__fun_440BC0; - /* 188*/ void *loc_43A9E0; - /* 18C*/ void *loc_43A9F0; - /* 190*/ void *loc_43AA00; + /* 0*/ void *(__stdcall *loc_43AA10)(); // void *(__stdcall *)() + /* 4*/ int(__thiscall *CBridge__fun_43AD70)(CBridge *self, int); // int (__thiscall *)(char *this, int a2) + /* 8*/ void(__thiscall *CBridge__fun_43B0B0)(CBridge *self); // void (__thiscall *)(char *this) + /* C*/ int(__thiscall *CBridge__fun_441E30)(CBridge *self); // int (__thiscall *)(int this) + /* 10*/ void(__thiscall *CBridge__fun_441E60)(CBridge *self); // void (__thiscall *)(int this) + /* 14*/ int(__thiscall *CBridge__fun_441EE0)(CBridge *self); // int (__thiscall *)(int this) + /* 18*/ void *(__stdcall *loc_43A990)(); // void *(__stdcall *)() + /* 1C*/ void *(__stdcall *loc_43A9A0)(); // void *(__stdcall *)() + /* 20*/ int(__thiscall *CBridge__fun_43B150)(CBridge *self, int); // int (__thiscall *)(int this, int a2) + /* 24*/ int(__thiscall *CBridge__fun_43B180)(CBridge *self, int); // int (__thiscall *)(int this, int a2) + /* 28*/ int(__thiscall *CBridge__fun_43B1E0)(CBridge *self, int); // int (__thiscall *)(int this, int a2) + /* 2C*/ int(__thiscall *CBridge__fun_43B220)(CBridge *self, uint32_t *); // int (__thiscall *)(char *this, _DWORD *a2) + /* 30*/ int(__thiscall *CBridge__fun_441330)(CBridge *self, uint32_t *); // int (__thiscall *)(void *this, _DWORD *a2) + /* 34*/ uint32_t *(__thiscall *CBridge__fun_441350)(CBridge *self, uint32_t *); // _DWORD *(__thiscall *)(int this, _DWORD *a2) + /* 38*/ int(__thiscall *CBridge__fun_440FB0)(CBridge *self); // int (__thiscall *)(int this) + /* 3C*/ int(__thiscall *CBridge__fun_440FC0)(CBridge *self); // int (__thiscall *)(int this) + /* 40*/ int(__thiscall *CBridge__fun_440FD0)(CBridge *self); // int (__thiscall *)(int this) + /* 44*/ int(__thiscall *CBridge__fun_440FE0)(CBridge *self); // int (__thiscall *)(int this) + /* 48*/ int(__thiscall *CBridge__fun_43C2C0)(CBridge *self, int, int, int, int); // int (__thiscall *)(int this, int a2, int a3, int a4, int a5) + /* 4C*/ int(__thiscall *CBridge__fun_43C2F0)(CBridge *self, int, int, int); // int (__thiscall *)(int this, int a2, int a3, int a4) + /* 50*/ int(__thiscall *CBridge__fun_441040)(CBridge *self, int, int, int); // int (__thiscall *)(int this, int a2, int a3, int a4) + /* 54*/ int(__thiscall *CBridge__fun_43E2F0)(CBridge *self, int, int, int, int, int, int); // int (__thiscall *)(int this, int a2, int a3, int a4, int a5, int a6, int a7) + /* 58*/ int(__thiscall *CBridge_createAndRegister_441300)(CBridge *self, int, int, int, int, int); // int (__thiscall *)(int this, int a2, int a3, int a4, int a5, int a6) + /* 5C*/ int(__thiscall *CBridge__fun_440FF0)(CBridge *self, int, int, int, int); // int (__thiscall *)(int this, int a2, int a3, int a4, int a5) + /* 60*/ void *(__stdcall *loc_43A8B0)(); // void *(__stdcall *)() + /* 64*/ int(__thiscall *CBridge__fun_441060)(CBridge *self, __int16, int, int, int); // int (__thiscall *)(int *this, __int16 a2, int a3, int a4, int a5) + /* 68*/ int(__thiscall *CBridge__fun_441020)(CBridge *self, int, MySurface *, int); // int (__thiscall *)(int this, int a2, MySurface *a3, int a4) + /* 6C*/ int(__thiscall *CBridge__fun_441390)(CBridge *self, int); // int (__thiscall *)(int this, int a2) + /* 70*/ int(__thiscall *CBridge__fun_4413B0)(CBridge *self, int); // int (__thiscall *)(int this, int a2) + /* 74*/ int(__thiscall *CBridge__fun_4413D0)(CBridge *self); // int (__thiscall *)(int this) + /* 78*/ int(__stdcall *CBridge__fun_4413E0)(float); // int (__stdcall *)(float a1) + /* 7C*/ int(__thiscall *CBridge__fun_441400)(CBridge *self, int); // int (__thiscall *)(int this, int a2) + /* 80*/ int(__thiscall *CBridge__fun_4412C0)(CBridge *self, int, int); // int (__thiscall *)(int this, int a2, int a3) + /* 84*/ int(__thiscall *setTexturesPath_441C70)(CBridge *self, char *); // int (__thiscall *)(int this, const char *a2) + /* 88*/ int(__thiscall *CBridge__fun_441E20)(CBridge *self); // int (__thiscall *)(int this) + /* 8C*/ void(__cdecl *nullsub_2)(); // void (__cdecl *)() + /* 90*/ int(__thiscall *CBridge__fun_440420)(CBridge *self, int, int, uint32_t *, int, int, int); // int (__thiscall *)(_DWORD *this, int a2, int a3, int *a4, int a5, int a6, int a7) + /* 94*/ void *(__stdcall *loc_43A8E0)(); // void *(__stdcall *)() + /* 98*/ int(__thiscall *CBridge__fun_440350)(CBridge *self, int, int, int, int, int, uint32_t *); // int (__thiscall *)(int this, int a2, int a3, int a4, int a5, int a6, int *a7) + /* 9C*/ uint32_t *(__thiscall *CBridge__fun_440530)(CBridge *self, int); // _DWORD *(__thiscall *)(int this, int a2) + /* A0*/ int(__thiscall *CBridge__fun_439880)(CBridge *self, uint32_t *, int, int, int, int); // int (__thiscall *)(_DWORD *this, _DWORD *a2, int a3, int a4, int a5, int a6) + /* A4*/ int(__thiscall *CBridge__fun_4397E0)(CBridge *self, int, __int16, __int16, __int16, char, int, int, uint32_t *); // int (__thiscall *)(int this, int a2, __int16 a3, __int16 a4, __int16 a5, char a6, int a7, int a8, int *a9) + /* A8*/ uint32_t *(__thiscall *CBridge__fun_439A20)(CBridge *self, int); // _DWORD *(__thiscall *)(int this, int a2) + /* AC*/ int(__thiscall *CBridge__fun_439AA0)(CBridge *self, uint32_t *); // int (__thiscall *)(void *this, int *a2) + /* B0*/ void *(__stdcall *loc_43A910)(); // void *(__stdcall *)() + /* B4*/ unsigned __int16(__thiscall *CBridge__fun_439B00)(CBridge *self, int, int); // unsigned __int16 (__thiscall *)(_DWORD *this, int a2, int a3) + /* B8*/ __int16(__thiscall *CBridge__fun_439B90)(CBridge *self, char *, int, int); // __int16 (__thiscall *)(_DWORD *this, char *a2, int a3, int a4) + /* BC*/ int(__thiscall *CBridge__fun_440F50)(CBridge *self); // int (__thiscall *)(int this) + /* C0*/ int(__thiscall *CBridge__fun_440F60)(CBridge *self, int); // int (__thiscall *)(int this, int a2) + /* C4*/ int(__thiscall *CBridge__fun_440F80)(CBridge *self); // int (__thiscall *)(int this) + /* C8*/ int(__thiscall *CBridge__fun_440F90)(CBridge *self, int); // int (__thiscall *)(int this, int a2) + /* CC*/ int(__thiscall *loc_43A970)(CBridge *self); // int (__thiscall *)(CBridge *) + /* D0*/ ProbablyGlobalRenderObj *(__thiscall *loc_43A980)(CBridge *self); // ProbablyGlobalRenderObj *(__thiscall *)(CBridge *) + /* D4*/ int(__stdcall *CBridge__fun_4412E0)(int, int); // int (__stdcall *)(int a1, int a2) + /* D8*/ int(__thiscall *CBridge__fun_441370)(CBridge *self, int, int, int); // int (__thiscall *)(int this, int a2, int a3, int a4) + /* DC*/ int(__thiscall *CBridge__fun_441B00)(CBridge *self, int, int); // int (__thiscall *)(_DWORD *this, int a2, int a3) + /* E0*/ int(__stdcall *CEngineInterface__fun_4430C0)(int, int, int, int, int); // int (__stdcall *)(int a1, int a2, int a3, int a4, int a5) + /* E4*/ int(__stdcall *CEngineInterface__fun_628B70)(int, int, int, int); // int (__stdcall *)(int a1, int a2, int a3, int a4) + /* E8*/ void *(__stdcall *duplicate_57_1)(); // void *(__stdcall *)() + /* EC*/ int(__stdcall *CEngineInterface__fun_517400)(int, int, int); // int (__stdcall *)(int a1, int a2, int a3) + /* F0*/ void *(__stdcall *loc_43A880)(); // void *(__stdcall *)() + /* F4*/ void *(__stdcall *loc_43A890)(); // void *(__stdcall *)() + /* F8*/ void *(__stdcall *loc_43A8A0)(); // void *(__stdcall *)() + /* FC*/ void *(__stdcall *duplicate_62_1)(); // void *(__stdcall *)() + /* 100*/ void *(__stdcall *duplicate_62_2)(); // void *(__stdcall *)() + /* 104*/ void *(__stdcall *duplicate_57_2)(); // void *(__stdcall *)() + /* 108*/ int(__thiscall *CBridge__fun_441AD0)(CBridge *self, int, int, int, int); // int (__thiscall *)(int this, int a2, int a3, int a4, int a5) + /* 10C*/ int(__thiscall *CBridge__fun_441AA0)(CBridge *self, int, int, int, int); // int (__thiscall *)(int this, int a2, int a3, int a4, int a5) + /* 110*/ int(__thiscall *CBridge__fun_43AAD0)(CBridge *self, int); // int (__thiscall *)(int this, int a2) + /* 114*/ void(__thiscall *CBridge__fun_43ACF0)(CBridge *self); // void (__thiscall *)(int this) + /* 118*/ int(__thiscall *CBridge__fun_43E030)(CBridge *self, char *); // int (__thiscall *)(int this, const char *a2) + /* 11C*/ MySurface *(__thiscall *CBridge_loadPng_fun_43E0F0)(CBridge *self, char *); // MySurface *(__thiscall *)(int this, char *Str) + /* 120*/ int(__thiscall *CBridge__fun_43D790)(CBridge *self, int, int, uint32_t *); // int (__thiscall *)(_DWORD *this, int a2, int a3, _DWORD *a4) + /* 124*/ int(__thiscall *CBridge__fun_43D970)(CBridge *self, int, int); // int (__thiscall *)(_DWORD *this, int a2, int a3) + /* 128*/ void *(__stdcall *loc_43A940)(); // void *(__stdcall *)() + /* 12C*/ void *(__stdcall *loc_43A920)(); // void *(__stdcall *)() + /* 130*/ int(__thiscall *CBridge__fun_43C310)(CBridge *self, int, int, int, uint32_t *); // int (__thiscall *)(_DWORD *this, int a2, int a3, int a4, _DWORD *a5) + /* 134*/ int(__thiscall *CBridge__fun_43CC30)(CBridge *self, unsigned int, unsigned int, int); // int (__thiscall *)(_DWORD *this, unsigned int a2, unsigned int a3, int a4) + /* 138*/ void *(__stdcall *loc_43A960)(); // void *(__stdcall *)() + /* 13C*/ int(__thiscall *CBridge__fun_441420)(CBridge *self, int, int, uint32_t *); // int (__thiscall *)(_DWORD *this, int a2, int a3, _DWORD *a4) + /* 140*/ char *(__thiscall *CBridge__fun_441CC0)(CBridge *self); // char *(__thiscall *)(char *this) + /* 144*/ __int16(__thiscall *CBridge__fun_4408C0)(CBridge *self); // __int16 (__thiscall *)(int this) + /* 148*/ __int16(__thiscall *CBridge__fun_4408E0)(CBridge *self, __int16); // __int16 (__thiscall *)(int this, __int16 a2) + /* 14C*/ __int16(__thiscall *CBridge__fun_440940)(CBridge *self, __int16); // __int16 (__thiscall *)(int this, __int16 a2) + /* 150*/ __int16(__thiscall *CBridge__fun_440A00)(CBridge *self, unsigned int); // __int16 (__thiscall *)(int this, unsigned int a2) + /* 154*/ __int16(__thiscall *CBridge__fun_440A30)(CBridge *self, int); // __int16 (__thiscall *)(int this, int a2) + /* 158*/ int(__thiscall *CBridge__fun_440A70)(CBridge *self, unsigned __int16); // int (__thiscall *)(int this, unsigned __int16 a2) + /* 15C*/ int(__thiscall *CBridge__fun_4409A0)(CBridge *self, unsigned __int16); // int (__thiscall *)(int this, unsigned __int16 a2) + /* 160*/ void *(__stdcall *loc_43A9B0)(); // void *(__stdcall *)() + /* 164*/ void *(__stdcall *loc_43A9C0)(); // void *(__stdcall *)() + /* 168*/ void *(__stdcall *loc_43A9D0)(); // void *(__stdcall *)() + /* 16C*/ __int16(__thiscall *CBridge__fun_440AD0)(CBridge *self); // __int16 (__thiscall *)(int this) + /* 170*/ __int16(__thiscall *CBridge__fun_440AF0)(CBridge *self, __int16); // __int16 (__thiscall *)(int this, __int16 a2) + /* 174*/ __int16(__thiscall *CBridge__fun_440B60)(CBridge *self, __int16); // __int16 (__thiscall *)(int this, __int16 a2) + /* 178*/ __int16(__thiscall *CBridge__fun_440C20)(CBridge *self, unsigned int); // __int16 (__thiscall *)(int this, unsigned int a2) + /* 17C*/ __int16(__thiscall *CBridge__fun_440C50)(CBridge *self, int); // __int16 (__thiscall *)(int this, int a2) + /* 180*/ int(__thiscall *CBridge__fun_440C90)(CBridge *self, unsigned __int16); // int (__thiscall *)(int this, unsigned __int16 a2) + /* 184*/ int(__thiscall *CBridge__fun_440BC0)(CBridge *self, unsigned __int16); // int (__thiscall *)(int this, unsigned __int16 a2) + /* 188*/ void *(__stdcall *loc_43A9E0)(); // void *(__stdcall *)() + /* 18C*/ void *(__stdcall *loc_43A9F0)(); // void *(__stdcall *)() + /* 190*/ void *(__stdcall *loc_43AA00)(); // void *(__stdcall *)() }; - + static_assert(sizeof(vtbl_t) == 0x194); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 72*/ uint32_t field_72; /* 76*/ uint8_t gap_76[32]; /* 96*/ uint32_t field_96; @@ -2670,7 +2629,7 @@ namespace dk2 { /*2631*/ uint32_t f2631_timeMs; /*2635*/ uint8_t f2635_str; /*2636*/ uint8_t gap_2636[73]; - + virtual ~CBridge(); void dump() { printf("field_72: %d\n", this->field_72); @@ -2735,24 +2694,28 @@ namespace dk2 { #pragma pack(push, 1) class CResearchOrder { public: - static uint32_t const VFTABLE = 0x0066E3C4; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t { - /* 0*/ void *CResearchOrder__fun_506EC0; - /* 4*/ void *CResearchOrder__fun_506E10; - /* 8*/ void *CResearchOrder__fun_506FC0; - /* C*/ void *CMap__fun_4B4C20; + /* 0*/ int(__thiscall *CResearchOrder__fun_506EC0)(CResearchOrder *self, uint32_t *); // int (__thiscall *)(_DWORD *this, int *a2) + /* 4*/ int(__thiscall *CResearchOrder__fun_506E10)(CResearchOrder *self, uint32_t *); // int (__thiscall *)(_DWORD *this, int *a2) + /* 8*/ int(__thiscall *CResearchOrder__fun_506FC0)(CResearchOrder *self); // int (__thiscall *)(int this) + /* C*/ int(__stdcall *CMap__fun_4B4C20)(); // int (__stdcall *)() }; - + static_assert(sizeof(vtbl_t) == 0x10); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 4*/ uint32_t field_4; /* 8*/ uint8_t gap_8[4]; /* C*/ uint32_t field_C; /* 10*/ uint32_t field_10; /* 14*/ int field_14; - + virtual ~CResearchOrder(); void dump() { printf("field_4: %d\n", this->field_4); @@ -2768,7 +2731,7 @@ namespace dk2 { #pragma pack(push, 1) class MyCreatureCollection { public: - + /* 0*/ uint32_t field_0; /* 4*/ int field_4; /* 8*/ int field_8; @@ -2786,7 +2749,7 @@ namespace dk2 { /* 36*/ int field_36; /* 3A*/ int field_3A; /* 3E*/ uint32_t field_3E; - + void dump() { printf("field_0: %d\n", this->field_0); printf("field_4: %d\n", this->field_4); @@ -2813,13 +2776,13 @@ namespace dk2 { #pragma pack(push, 1) class CMapEntry { public: - + /* 0*/ char field_0; /* 1*/ char field_1; /* 2*/ char field_2; /* 3*/ int field_3; /* 7*/ int field_7; - + void dump() { printf("field_0: %d\n", this->field_0); printf("field_1: %d\n", this->field_1); @@ -2834,18 +2797,22 @@ namespace dk2 { #pragma pack(push, 1) class CMap { public: - static uint32_t const VFTABLE = 0x0066D3E4; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t { - /* 0*/ void *CMap__fun_44F4B0; - /* 4*/ void *CMap__fun_44F3F0; - /* 8*/ void *std__locale__classic_void; - /* C*/ void *CMap__fun_4B4C20; + /* 0*/ int(__thiscall *CMap__fun_44F4B0)(CMap *self, uint32_t *); // int (__thiscall *)(int *this, int *a2) + /* 4*/ BOOL(__thiscall *CMap__fun_44F3F0)(CMap *self, uint32_t *); // BOOL (__thiscall *)(_DWORD *this, int *a2) + /* 8*/ int(__thiscall *std__locale__classic_void)(CMap *self); // int (__thiscall *)(void *this) + /* C*/ int(__stdcall *CMap__fun_4B4C20)(); // int (__stdcall *)() }; - + static_assert(sizeof(vtbl_t) == 0x10); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 4*/ uint32_t field_4; /* 8*/ uint8_t gap_8[4]; /* C*/ int field_C; @@ -2855,7 +2822,7 @@ namespace dk2 { /* 1C*/ int field_1C; /* 20*/ uint8_t gap_20[260]; /* 124*/ CMapEntry entries[225]; - + virtual ~CMap(); void dump() { printf("field_4: %d\n", this->field_4); @@ -2874,14 +2841,14 @@ namespace dk2 { #pragma pack(push, 1) class GameActionHandler { public: - + /* 0*/ void *f0_handler; /* 4*/ int f4_objOffset; /* 8*/ int field_8; /* C*/ int field_C; - + void dump() { - printf("f0_handler: %p\n", this->f0_handler); + printf("f0_handler: void(%p)\n", this->f0_handler); printf("f4_objOffset: %d\n", this->f4_objOffset); printf("field_8: %d\n", this->field_8); printf("field_C: %d\n", this->field_C); @@ -2893,11 +2860,11 @@ namespace dk2 { #pragma pack(push, 1) class CWorldShortEntry3 { public: - + /* 0*/ __int16 field_0; /* 2*/ char field_2; /* 3*/ int field_3; - + void dump() { printf("field_0: %d\n", this->field_0); printf("field_2: %d\n", this->field_2); @@ -2910,7 +2877,7 @@ namespace dk2 { #pragma pack(push, 1) class CWorldShortEntry2 { public: - + /* 0*/ uint8_t gap_0[4]; /* 4*/ uint16_t field_4; /* 6*/ uint32_t field_6; @@ -2921,7 +2888,7 @@ namespace dk2 { /* 1A*/ int field_1A; /* 1E*/ int field_1E; /* 22*/ int field_22; - + void dump() { printf("gap_0: %d\n", this->gap_0); printf("field_4: %d\n", this->field_4); @@ -2941,244 +2908,248 @@ namespace dk2 { #pragma pack(push, 1) class CWorld { public: - static uint32_t const VFTABLE = 0x0066E3EC; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t { - /* 0*/ void *sub_5098E0; - /* 4*/ void *CWorld__create_objects; - /* 8*/ void *CWorld__fun_50A2F0; - /* C*/ void *CWorld__fun_510E90; - /* 10*/ void *loc_508C00; - /* 14*/ void *loc_508C10; - /* 18*/ void *tick; - /* 1C*/ void *CWorld__loadLevel; - /* 20*/ void *CWorld__fun_50FBA0; - /* 24*/ void *CWorld__fun_50FC60; - /* 28*/ void *CWorld__fun_50FD10; - /* 2C*/ void *CWorld__fun_50FD70; - /* 30*/ void *sub_509520; - /* 34*/ void *CWorld__fun_50F3D0; - /* 38*/ void *CWorld__fun_50EA70; - /* 3C*/ void *sub_509630; - /* 40*/ void *sub_509640; - /* 44*/ void *CWorld__fun_510730; - /* 48*/ void *sub_509820; - /* 4C*/ void *sub_509850; - /* 50*/ void *sub_509860; - /* 54*/ void *CWorld__fun_50CD10; - /* 58*/ void *CWorld__fun_50CD60; - /* 5C*/ void *CWorld__fun_50CE00; - /* 60*/ void *CWorld__fun_50CEB0; - /* 64*/ void *CWorld__fun_50CF80; - /* 68*/ void *sub_509480; - /* 6C*/ void *sub_509450; - /* 70*/ void *loc_508DD0; - /* 74*/ void *loc_508DF0; - /* 78*/ void *loc_508E00; - /* 7C*/ void *loc_508E10; - /* 80*/ void *CWorld__fun_50CF20; - /* 84*/ void *CWorld__fun_50CFB0; - /* 88*/ void *CWorld__fun_50CFD0; - /* 8C*/ void *CWorld__fun_50D040; - /* 90*/ void *CWorld__fun_50D120; - /* 94*/ void *CWorld__fun_50D1B0; - /* 98*/ void *CWorld__fun_50D0B0; - /* 9C*/ void *loc_508E20; - /* A0*/ void *loc_508E30; - /* A4*/ void *loc_508E40; - /* A8*/ void *CWorld__fun_50D150; - /* AC*/ void *CWorld__fun_50D220; - /* B0*/ void *CWorld__fun_50D240; - /* B4*/ void *CWorld__fun_50D2E0; - /* B8*/ void *CWorld__fun_50D420; - /* BC*/ void *CWorld__fun_50D4D0; - /* C0*/ void *CWorld__fun_50D390; - /* C4*/ void *loc_508E50; - /* C8*/ void *loc_508E60; - /* CC*/ void *loc_508E70; - /* D0*/ void *CWorld__fun_50D460; - /* D4*/ void *CWorld__fun_50DEB0; - /* D8*/ void *CWorld__fun_50DED0; - /* DC*/ void *CWorld__fun_50DF30; - /* E0*/ void *CWorld__fun_50E010; - /* E4*/ void *CWorld__fun_50E080; - /* E8*/ void *CWorld__fun_50DFA0; - /* EC*/ void *loc_508F40; - /* F0*/ void *loc_508F50; - /* F4*/ void *loc_508F60; - /* F8*/ void *CWorld__fun_50E040; - /* FC*/ void *CWorld__fun_50DC80; - /* 100*/ void *CWorld__fun_50DCA0; - /* 104*/ void *CWorld__fun_50DD00; - /* 108*/ void *CWorld__fun_50DDD0; - /* 10C*/ void *CWorld__fun_50DE50; - /* 110*/ void *CWorld__fun_50DD60; - /* 114*/ void *loc_508F10; - /* 118*/ void *loc_508F20; - /* 11C*/ void *loc_508F30; - /* 120*/ void *CWorld__fun_50DE00; - /* 124*/ void *CWorld__fun_50D550; - /* 128*/ void *CWorld__fun_50D570; - /* 12C*/ void *CWorld__fun_50D5E0; - /* 130*/ void *CWorld__fun_50D6C0; - /* 134*/ void *CWorld__fun_50D750; - /* 138*/ void *CWorld__fun_50D650; - /* 13C*/ void *loc_508E80; - /* 140*/ void *loc_508E90; - /* 144*/ void *loc_508EA0; - /* 148*/ void *CWorld__fun_50D6F0; - /* 14C*/ void *CWorld__fun_50D7C0; - /* 150*/ void *CWorld__fun_50D7E0; - /* 154*/ void *CWorld__fun_50D850; - /* 158*/ void *CWorld__fun_50D930; - /* 15C*/ void *CWorld__fun_50D9C0; - /* 160*/ void *CWorld__fun_50D8C0; - /* 164*/ void *loc_508EB0; - /* 168*/ void *loc_508EC0; - /* 16C*/ void *loc_508ED0; - /* 170*/ void *CWorld__fun_50D960; - /* 174*/ void *CWorld__fun_50DA20; - /* 178*/ void *CWorld__fun_50DA40; - /* 17C*/ void *CWorld__fun_50DAB0; - /* 180*/ void *CWorld__fun_50DB90; - /* 184*/ void *CWorld__fun_50DC10; - /* 188*/ void *CWorld__fun_50DB20; - /* 18C*/ void *loc_508EE0; - /* 190*/ void *loc_508EF0; - /* 194*/ void *loc_508F00; - /* 198*/ void *CWorld__fun_50DBC0; - /* 19C*/ void *CWorld__fun_50E0E0; - /* 1A0*/ void *CWorld__fun_50E100; - /* 1A4*/ void *CWorld__fun_50E170; - /* 1A8*/ void *CWorld__fun_50E250; - /* 1AC*/ void *CWorld__fun_50E2D0; - /* 1B0*/ void *CWorld__fun_50E1E0; - /* 1B4*/ void *loc_508F70; - /* 1B8*/ void *loc_508F80; - /* 1BC*/ void *loc_508F90; - /* 1C0*/ void *CWorld__fun_50E280; - /* 1C4*/ void *CWorld__fun_50E330; - /* 1C8*/ void *CWorld__fun_50E3A0; - /* 1CC*/ void *loc_508FA0; - /* 1D0*/ void *loc_508FB0; - /* 1D4*/ void *loc_508FE0; - /* 1D8*/ void *loc_508FC0; - /* 1DC*/ void *loc_508C70; - /* 1E0*/ void *loc_508C80; - /* 1E4*/ void *loc_508CA0; - /* 1E8*/ void *loc_508CC0; - /* 1EC*/ void *loc_508CF0; - /* 1F0*/ void *loc_508D00; - /* 1F4*/ void *loc_508D10; - /* 1F8*/ void *loc_508D40; - /* 1FC*/ void *loc_509090; - /* 200*/ void *loc_509050; - /* 204*/ void *loc_509010; - /* 208*/ void *sub_509200; - /* 20C*/ void *loc_5090C0; - /* 210*/ void *sub_5091C0; - /* 214*/ void *CEngineInterface__fun_443150; - /* 218*/ void *loc_509100; - /* 21C*/ void *sub_5092F0; - /* 220*/ void *sub_5092D0; - /* 224*/ void *sub_509230; - /* 228*/ void *sub_509260; - /* 22C*/ void *sub_509280; - /* 230*/ void *sub_509310; - /* 234*/ void *sub_509340; - /* 238*/ void *sub_509370; - /* 23C*/ void *sub_5093A0; - /* 240*/ void *sub_5093C0; - /* 244*/ void *sub_5093E0; - /* 248*/ void *sub_509410; - /* 24C*/ void *sub_509430; - /* 250*/ void *CWorld__fun_5177B0; - /* 254*/ void *CWorld__fun_50E530; - /* 258*/ void *CWorld__fun_50E560; - /* 25C*/ void *CWorld__fun_50E590; - /* 260*/ void *getCTag_508C40; - /* 264*/ void *loc_508C60; - /* 268*/ void *nullsub_10; - /* 26C*/ void *sub_5094B0; - /* 270*/ void *sub_5094D0; - /* 274*/ void *sub_5094F0; - /* 278*/ void *CWorld__fun_50E420; - /* 27C*/ void *CWorld__fun_510700; - /* 280*/ void *sub_5095B0; - /* 284*/ void *sub_5095D0; - /* 288*/ void *sub_5095F0; - /* 28C*/ void *sub_509610; - /* 290*/ void *CWorld__fun_50F830; - /* 294*/ void *nullsub_23; - /* 298*/ void *CWorld__fun_50F880; - /* 29C*/ void *sub_509530; - /* 2A0*/ void *sub_5097A0; - /* 2A4*/ void *sub_5097B0; - /* 2A8*/ void *sub_5097D0; - /* 2AC*/ void *sub_5097F0; - /* 2B0*/ void *sub_509800; - /* 2B4*/ void *sub_509540; - /* 2B8*/ void *CWorld__fun_505250; - /* 2BC*/ void *sub_509560; - /* 2C0*/ void *sub_509570; - /* 2C4*/ void *CWorld__fun_510000; - /* 2C8*/ void *CWorld__fun_50FAE0; - /* 2CC*/ void *CWorld__fun_50FB10; - /* 2D0*/ void *CEngineInterface__fun_628E30; - /* 2D4*/ void *sub_509690; - /* 2D8*/ void *CWorld__fun_5101C0; - /* 2DC*/ void *CWorld__fun_510210; - /* 2E0*/ void *CWorld__fun_510230; - /* 2E4*/ void *sub_5098D0; - /* 2E8*/ void *sub_509680; - /* 2EC*/ void *sub_5096A0; - /* 2F0*/ void *duplicate_187_1; - /* 2F4*/ void *sub_5096C0; - /* 2F8*/ void *sub_5096F0; - /* 2FC*/ void *sub_509700; - /* 300*/ void *sub_509710; - /* 304*/ void *sub_509730; - /* 308*/ void *sub_509750; - /* 30C*/ void *sub_509780; - /* 310*/ void *loc_508D60; - /* 314*/ void *loc_508D70; - /* 318*/ void *loc_508D80; - /* 31C*/ void *loc_508D90; - /* 320*/ void *duplicate_154_1; - /* 324*/ void *sub_509830; - /* 328*/ void *loc_508DA0; - /* 32C*/ void *loc_508DB0; - /* 330*/ void *sub_509740; - /* 334*/ void *CWorld__fun_515420; - /* 338*/ void *CWorld__fun_515520; - /* 33C*/ void *CWorld__fun_515D50; - /* 340*/ void *sub_509650; - /* 344*/ void *CWorld__fun_511650; - /* 348*/ void *sub_509670; - /* 34C*/ void *sub_509660; - /* 350*/ void *CWorld__fun_510E20; - /* 354*/ void *sub_509840; - /* 358*/ void *CWorld__fun_511610; - /* 35C*/ void *CWorld__fun_511630; - /* 360*/ void *CWorld__fun_511640; - /* 364*/ void *sub_509870; - /* 368*/ void *sub_509880; - /* 36C*/ void *sub_509890; - /* 370*/ void *sub_5098A0; - /* 374*/ void *sub_5098B0; - /* 378*/ void *sub_5098C0; - /* 37C*/ void *CWorld__fun_50E920; - /* 380*/ void *sub_509160; - /* 384*/ void *sub_5092B0; - /* 388*/ void *CWorld__fun_50E490; - /* 38C*/ void *sub_509580; - /* 390*/ void *CWorld__fun_50E4D0; - /* 394*/ void *CWorld__fun_50E510; + /* 0*/ void *(__thiscall *sub_5098E0)(CWorld *self, char); // void *(__thiscall *)(void *Block, char a2) + /* 4*/ int(__thiscall *CWorld__create_objects)(CWorld *self); // int (__thiscall *)(int this) + /* 8*/ char(__thiscall *CWorld__fun_50A2F0)(CWorld *self); // char (__thiscall *)(int this) + /* C*/ unsigned __int16(__thiscall *CWorld__fun_510E90)(CWorld *self, GameAction *, int); // unsigned __int16 (__thiscall *)(CWorld *this, GameAction *a2, int a3) + /* 10*/ void *(__stdcall *loc_508C00)(); // void *(__stdcall *)() + /* 14*/ BOOL(__thiscall *loc_508C10)(CWorld *self, int); // BOOL (__thiscall *)(CWorld *this, int a2) + /* 18*/ unsigned int(__thiscall *tick)(CWorld *self, GameActionCtx *); // unsigned int (__thiscall *)(int this, GameActionCtx *a2) + /* 1C*/ int(__thiscall *CWorld__loadLevel)(CWorld *self, char *); // int (__thiscall *)(int this, const char *a2) + /* 20*/ int(__thiscall *CWorld__fun_50FBA0)(CWorld *self); // int (__thiscall *)(void *this) + /* 24*/ int(__thiscall *CWorld__fun_50FC60)(CWorld *self); // int (__thiscall *)(_DWORD *this) + /* 28*/ int(__stdcall *CWorld__fun_50FD10)(int); // int (__stdcall *)(int a1) + /* 2C*/ int(__thiscall *CWorld__fun_50FD70)(CWorld *self, char *); // int (__thiscall *)(char *this, const char *a2) + /* 30*/ int(__thiscall *sub_509520)(CWorld *self); // int (__thiscall *)(_DWORD *this) + /* 34*/ int(__thiscall *CWorld__fun_50F3D0)(CWorld *self); // int (__thiscall *)(int this) + /* 38*/ void(__thiscall *CWorld__fun_50EA70)(CWorld *self); // void (__thiscall *)(int *this) + /* 3C*/ int(__thiscall *sub_509630)(CWorld *self); // int (__thiscall *)(_DWORD *this) + /* 40*/ int(__thiscall *sub_509640)(CWorld *self); // int (__thiscall *)(_DWORD *this) + /* 44*/ int(__thiscall *CWorld__fun_510730)(CWorld *self, int, int); // int (__thiscall *)(int this, int a2, int a3) + /* 48*/ int(__thiscall *sub_509820)(CWorld *self); // int (__thiscall *)(int this) + /* 4C*/ int(__thiscall *sub_509850)(CWorld *self); // int (__thiscall *)(int this) + /* 50*/ int(__thiscall *sub_509860)(CWorld *self, int); // int (__thiscall *)(int this, int a2) + /* 54*/ char(__thiscall *CWorld__fun_50CD10)(CWorld *self); // char (__thiscall *)(_DWORD *this) + /* 58*/ char(__thiscall *CWorld__fun_50CD60)(CWorld *self, unsigned __int8); // char (__thiscall *)(_DWORD *this, unsigned __int8 a2) + /* 5C*/ char(__thiscall *CWorld__fun_50CE00)(CWorld *self, unsigned __int8); // char (__thiscall *)(_DWORD *this, unsigned __int8 a2) + /* 60*/ char(__thiscall *CWorld__fun_50CEB0)(CWorld *self, int); // char (__thiscall *)(_DWORD *this, int a2) + /* 64*/ BOOL(__thiscall *CWorld__fun_50CF80)(CWorld *self, unsigned __int8); // BOOL (__thiscall *)(_DWORD *this, unsigned __int8 a2) + /* 68*/ int(__thiscall *sub_509480)(CWorld *self, int); // int (__thiscall *)(void *this, int a2) + /* 6C*/ int(__thiscall *sub_509450)(CWorld *self, int, int); // int (__thiscall *)(void *this, int a2, int a3) + /* 70*/ void *(__stdcall *loc_508DD0)(); // void *(__stdcall *)() + /* 74*/ void *(__stdcall *loc_508DF0)(); // void *(__stdcall *)() + /* 78*/ void *(__stdcall *loc_508E00)(); // void *(__stdcall *)() + /* 7C*/ void *(__stdcall *loc_508E10)(); // void *(__stdcall *)() + /* 80*/ char(__thiscall *CWorld__fun_50CF20)(CWorld *self, int); // char (__thiscall *)(_DWORD *this, int a2) + /* 84*/ char(__thiscall *CWorld__fun_50CFB0)(CWorld *self); // char (__thiscall *)(_DWORD *this) + /* 88*/ char(__thiscall *CWorld__fun_50CFD0)(CWorld *self, char); // char (__thiscall *)(_DWORD *this, char a2) + /* 8C*/ char(__thiscall *CWorld__fun_50D040)(CWorld *self, char); // char (__thiscall *)(_DWORD *this, char a2) + /* 90*/ char(__thiscall *CWorld__fun_50D120)(CWorld *self, unsigned int); // char (__thiscall *)(_DWORD *this, unsigned int a2) + /* 94*/ int(__thiscall *CWorld__fun_50D1B0)(CWorld *self, unsigned __int8); // int (__thiscall *)(_DWORD *this, unsigned __int8 a2) + /* 98*/ int(__thiscall *CWorld__fun_50D0B0)(CWorld *self, unsigned __int8); // int (__thiscall *)(_DWORD *this, unsigned __int8 a2) + /* 9C*/ void *(__stdcall *loc_508E20)(); // void *(__stdcall *)() + /* A0*/ void *(__stdcall *loc_508E30)(); // void *(__stdcall *)() + /* A4*/ void *(__stdcall *loc_508E40)(); // void *(__stdcall *)() + /* A8*/ char(__thiscall *CWorld__fun_50D150)(CWorld *self, int); // char (__thiscall *)(_DWORD *this, int a2) + /* AC*/ char(__thiscall *CWorld__fun_50D220)(CWorld *self); // char (__thiscall *)(_DWORD *this) + /* B0*/ char(__thiscall *CWorld__fun_50D240)(CWorld *self, char); // char (__thiscall *)(_DWORD *this, char a2) + /* B4*/ char(__thiscall *CWorld__fun_50D2E0)(CWorld *self, char); // char (__thiscall *)(_DWORD *this, char a2) + /* B8*/ char(__thiscall *CWorld__fun_50D420)(CWorld *self, unsigned int); // char (__thiscall *)(_DWORD *this, unsigned int a2) + /* BC*/ int(__thiscall *CWorld__fun_50D4D0)(CWorld *self, unsigned __int8); // int (__thiscall *)(_DWORD *this, unsigned __int8 a2) + /* C0*/ int(__thiscall *CWorld__fun_50D390)(CWorld *self, unsigned __int8); // int (__thiscall *)(_DWORD *this, unsigned __int8 a2) + /* C4*/ int(__thiscall *loc_508E50)(CWorld *self); // int (__thiscall *)(CWorld *) + /* C8*/ void *(__stdcall *loc_508E60)(); // void *(__stdcall *)() + /* CC*/ void *(__stdcall *loc_508E70)(); // void *(__stdcall *)() + /* D0*/ char(__thiscall *CWorld__fun_50D460)(CWorld *self, int); // char (__thiscall *)(_DWORD *this, int a2) + /* D4*/ char(__thiscall *CWorld__fun_50DEB0)(CWorld *self); // char (__thiscall *)(_DWORD *this) + /* D8*/ char(__thiscall *CWorld__fun_50DED0)(CWorld *self, char); // char (__thiscall *)(_DWORD *this, char a2) + /* DC*/ char(__thiscall *CWorld__fun_50DF30)(CWorld *self, char); // char (__thiscall *)(_DWORD *this, char a2) + /* E0*/ char(__thiscall *CWorld__fun_50E010)(CWorld *self, unsigned int); // char (__thiscall *)(_DWORD *this, unsigned int a2) + /* E4*/ int(__thiscall *CWorld__fun_50E080)(CWorld *self, unsigned __int8); // int (__thiscall *)(_DWORD *this, unsigned __int8 a2) + /* E8*/ int(__thiscall *CWorld__fun_50DFA0)(CWorld *self, unsigned __int8); // int (__thiscall *)(_DWORD *this, unsigned __int8 a2) + /* EC*/ void *(__stdcall *loc_508F40)(); // void *(__stdcall *)() + /* F0*/ void *(__stdcall *loc_508F50)(); // void *(__stdcall *)() + /* F4*/ void *(__stdcall *loc_508F60)(); // void *(__stdcall *)() + /* F8*/ char(__thiscall *CWorld__fun_50E040)(CWorld *self, int); // char (__thiscall *)(_DWORD *this, int a2) + /* FC*/ char(__thiscall *CWorld__fun_50DC80)(CWorld *self); // char (__thiscall *)(_DWORD *this) + /* 100*/ char(__thiscall *CWorld__fun_50DCA0)(CWorld *self, char); // char (__thiscall *)(_DWORD *this, char a2) + /* 104*/ char(__thiscall *CWorld__fun_50DD00)(CWorld *self, char); // char (__thiscall *)(_DWORD *this, char a2) + /* 108*/ char(__thiscall *CWorld__fun_50DDD0)(CWorld *self, unsigned int); // char (__thiscall *)(_DWORD *this, unsigned int a2) + /* 10C*/ int(__thiscall *CWorld__fun_50DE50)(CWorld *self, unsigned __int8); // int (__thiscall *)(_DWORD *this, unsigned __int8 a2) + /* 110*/ int(__thiscall *CWorld__fun_50DD60)(CWorld *self, unsigned __int8); // int (__thiscall *)(_DWORD *this, unsigned __int8 a2) + /* 114*/ void *(__stdcall *loc_508F10)(); // void *(__stdcall *)() + /* 118*/ void *(__stdcall *loc_508F20)(); // void *(__stdcall *)() + /* 11C*/ void *(__stdcall *loc_508F30)(); // void *(__stdcall *)() + /* 120*/ char(__thiscall *CWorld__fun_50DE00)(CWorld *self, int); // char (__thiscall *)(_DWORD *this, int a2) + /* 124*/ char(__thiscall *CWorld__fun_50D550)(CWorld *self); // char (__thiscall *)(_DWORD *this) + /* 128*/ char(__thiscall *CWorld__fun_50D570)(CWorld *self, char); // char (__thiscall *)(_DWORD *this, char a2) + /* 12C*/ char(__thiscall *CWorld__fun_50D5E0)(CWorld *self, char); // char (__thiscall *)(_DWORD *this, char a2) + /* 130*/ char(__thiscall *CWorld__fun_50D6C0)(CWorld *self, unsigned int); // char (__thiscall *)(_DWORD *this, unsigned int a2) + /* 134*/ int(__thiscall *CWorld__fun_50D750)(CWorld *self, unsigned __int8); // int (__thiscall *)(_DWORD *this, unsigned __int8 a2) + /* 138*/ int(__thiscall *CWorld__fun_50D650)(CWorld *self, unsigned __int8); // int (__thiscall *)(_DWORD *this, unsigned __int8 a2) + /* 13C*/ void *(__stdcall *loc_508E80)(); // void *(__stdcall *)() + /* 140*/ void *(__stdcall *loc_508E90)(); // void *(__stdcall *)() + /* 144*/ void *(__stdcall *loc_508EA0)(); // void *(__stdcall *)() + /* 148*/ char(__thiscall *CWorld__fun_50D6F0)(CWorld *self, int); // char (__thiscall *)(_DWORD *this, int a2) + /* 14C*/ char(__thiscall *CWorld__fun_50D7C0)(CWorld *self); // char (__thiscall *)(_DWORD *this) + /* 150*/ char(__thiscall *CWorld__fun_50D7E0)(CWorld *self, char); // char (__thiscall *)(_DWORD *this, char a2) + /* 154*/ char(__thiscall *CWorld__fun_50D850)(CWorld *self, char); // char (__thiscall *)(_DWORD *this, char a2) + /* 158*/ char(__thiscall *CWorld__fun_50D930)(CWorld *self, unsigned int); // char (__thiscall *)(_DWORD *this, unsigned int a2) + /* 15C*/ int(__thiscall *CWorld__fun_50D9C0)(CWorld *self, unsigned __int8); // int (__thiscall *)(_DWORD *this, unsigned __int8 a2) + /* 160*/ int(__thiscall *CWorld__fun_50D8C0)(CWorld *self, unsigned __int8); // int (__thiscall *)(_DWORD *this, unsigned __int8 a2) + /* 164*/ void *(__stdcall *loc_508EB0)(); // void *(__stdcall *)() + /* 168*/ void *(__stdcall *loc_508EC0)(); // void *(__stdcall *)() + /* 16C*/ void *(__stdcall *loc_508ED0)(); // void *(__stdcall *)() + /* 170*/ char(__thiscall *CWorld__fun_50D960)(CWorld *self, int); // char (__thiscall *)(_DWORD *this, int a2) + /* 174*/ char(__thiscall *CWorld__fun_50DA20)(CWorld *self); // char (__thiscall *)(_DWORD *this) + /* 178*/ char(__thiscall *CWorld__fun_50DA40)(CWorld *self, char); // char (__thiscall *)(_DWORD *this, char a2) + /* 17C*/ char(__thiscall *CWorld__fun_50DAB0)(CWorld *self, char); // char (__thiscall *)(_DWORD *this, char a2) + /* 180*/ char(__thiscall *CWorld__fun_50DB90)(CWorld *self, unsigned int); // char (__thiscall *)(_DWORD *this, unsigned int a2) + /* 184*/ int(__thiscall *CWorld__fun_50DC10)(CWorld *self, unsigned __int8); // int (__thiscall *)(_DWORD *this, unsigned __int8 a2) + /* 188*/ int(__thiscall *CWorld__fun_50DB20)(CWorld *self, unsigned __int8); // int (__thiscall *)(_DWORD *this, unsigned __int8 a2) + /* 18C*/ void *(__stdcall *loc_508EE0)(); // void *(__stdcall *)() + /* 190*/ void *(__stdcall *loc_508EF0)(); // void *(__stdcall *)() + /* 194*/ void *(__stdcall *loc_508F00)(); // void *(__stdcall *)() + /* 198*/ char(__thiscall *CWorld__fun_50DBC0)(CWorld *self, int); // char (__thiscall *)(_DWORD *this, int a2) + /* 19C*/ char(__thiscall *CWorld__fun_50E0E0)(CWorld *self); // char (__thiscall *)(_DWORD *this) + /* 1A0*/ char(__thiscall *CWorld__fun_50E100)(CWorld *self, char); // char (__thiscall *)(_DWORD *this, char a2) + /* 1A4*/ char(__thiscall *CWorld__fun_50E170)(CWorld *self, char); // char (__thiscall *)(_DWORD *this, char a2) + /* 1A8*/ char(__thiscall *CWorld__fun_50E250)(CWorld *self, unsigned int); // char (__thiscall *)(_DWORD *this, unsigned int a2) + /* 1AC*/ int(__thiscall *CWorld__fun_50E2D0)(CWorld *self, unsigned __int8); // int (__thiscall *)(_DWORD *this, unsigned __int8 a2) + /* 1B0*/ int(__thiscall *CWorld__fun_50E1E0)(CWorld *self, unsigned __int8); // int (__thiscall *)(_DWORD *this, unsigned __int8 a2) + /* 1B4*/ void *(__stdcall *loc_508F70)(); // void *(__stdcall *)() + /* 1B8*/ void *(__stdcall *loc_508F80)(); // void *(__stdcall *)() + /* 1BC*/ void *(__stdcall *loc_508F90)(); // void *(__stdcall *)() + /* 1C0*/ char(__thiscall *CWorld__fun_50E280)(CWorld *self, int); // char (__thiscall *)(_DWORD *this, int a2) + /* 1C4*/ char(__thiscall *CWorld__fun_50E330)(CWorld *self, int); // char (__thiscall *)(_DWORD *this, int a2) + /* 1C8*/ int(__thiscall *CWorld__fun_50E3A0)(CWorld *self, unsigned __int8); // int (__thiscall *)(_DWORD *this, unsigned __int8 a2) + /* 1CC*/ int(__thiscall *loc_508FA0)(CWorld *self, int); // int (__thiscall *)(CWorld *, int) + /* 1D0*/ int(__thiscall *loc_508FB0)(CWorld *self); // int (__thiscall *)(CWorld *) + /* 1D4*/ void *(__stdcall *loc_508FE0)(); // void *(__stdcall *)() + /* 1D8*/ void *(__stdcall *loc_508FC0)(); // void *(__stdcall *)() + /* 1DC*/ void *(__stdcall *loc_508C70)(); // void *(__stdcall *)() + /* 1E0*/ void *(__stdcall *loc_508C80)(); // void *(__stdcall *)() + /* 1E4*/ void *(__stdcall *loc_508CA0)(); // void *(__stdcall *)() + /* 1E8*/ void(__thiscall *loc_508CC0)(CWorld *self, uint32_t, uint32_t, int); // void (__thiscall *)(int, _DWORD, _DWORD, int) + /* 1EC*/ void(__thiscall *loc_508CF0)(CWorld *self, int); // void (__thiscall *)(CWorld *, int) + /* 1F0*/ void(__thiscall *loc_508D00)(CWorld *self, uint32_t); // void (__thiscall *)(CWorld *, _DWORD) + /* 1F4*/ void *(__stdcall *loc_508D10)(); // void *(__stdcall *)() + /* 1F8*/ void *(__stdcall *loc_508D40)(); // void *(__stdcall *)() + /* 1FC*/ void *(__stdcall *loc_509090)(); // void *(__stdcall *)() + /* 200*/ void *(__stdcall *loc_509050)(); // void *(__stdcall *)() + /* 204*/ void *(__stdcall *loc_509010)(); // void *(__stdcall *)() + /* 208*/ int(__thiscall *sub_509200)(CWorld *self, int, int); // int (__thiscall *)(int this, int a2, int a3) + /* 20C*/ void *(__stdcall *loc_5090C0)(); // void *(__stdcall *)() + /* 210*/ BOOL(__stdcall *sub_5091C0)(int); // BOOL (__stdcall *)(int a1) + /* 214*/ int(__stdcall *CEngineInterface__fun_443150)(int, int); // int (__stdcall *)(int a1, int a2) + /* 218*/ void *(__stdcall *loc_509100)(); // void *(__stdcall *)() + /* 21C*/ uint32_t *(__thiscall *sub_5092F0)(CWorld *self, int, int, uint32_t *); // void **(__thiscall *)(void *this, int a2, int a3, _DWORD *a4) + /* 220*/ int(__stdcall *sub_5092D0)(int, int); // int (__stdcall *)(int a1, int a2) + /* 224*/ BOOL(__thiscall *sub_509230)(CWorld *self, int, int); // BOOL (__thiscall *)(int this, int a2, int a3) + /* 228*/ int(__stdcall *sub_509260)(int, int, __int16); // int (__stdcall *)(int a1, int a2, __int16 a3) + /* 22C*/ int(__stdcall *sub_509280)(int, int, int, int); // int (__stdcall *)(int a1, int a2, int a3, int a4) + /* 230*/ int(__stdcall *sub_509310)(int, int, int, int); // int (__stdcall *)(int a1, int a2, int a3, int a4) + /* 234*/ int(__stdcall *sub_509340)(int, int, int, int); // int (__stdcall *)(int a1, int a2, int a3, int a4) + /* 238*/ int(__stdcall *sub_509370)(int, int, __int16, int); // int (__stdcall *)(int a1, int a2, __int16 a3, int a4) + /* 23C*/ int(__stdcall *sub_5093A0)(int, int, int); // int (__stdcall *)(int a1, int a2, int a3) + /* 240*/ int(__stdcall *sub_5093C0)(int, int); // int (__stdcall *)(int a1, int a2) + /* 244*/ int(__stdcall *sub_5093E0)(int, int, __int16, int); // int (__stdcall *)(int a1, int a2, __int16 a3, int a4) + /* 248*/ int(__stdcall *sub_509410)(int, int, int); // int (__stdcall *)(int a1, int a2, int a3) + /* 24C*/ int(__stdcall *sub_509430)(int, int, __int16); // int (__stdcall *)(int a1, int a2, __int16 a3) + /* 250*/ int(__thiscall *CWorld__fun_5177B0)(CWorld *self, int); // int (__thiscall *)(void *this, int a2) + /* 254*/ int(__stdcall *CWorld__fun_50E530)(int, int, int, int); // int (__stdcall *)(int a1, int a2, int a3, int a4) + /* 258*/ int(__stdcall *CWorld__fun_50E560)(int, int, int, int); // int (__stdcall *)(int a1, int a2, int a3, int a4) + /* 25C*/ int(__stdcall *CWorld__fun_50E590)(int, int, int, int); // int (__stdcall *)(int a1, int a2, int a3, int a4) + /* 260*/ int(__thiscall *getCTag_508C40)(CWorld *self, MyProfiler *); // int (__thiscall *)(CWorld *, MyProfiler *) + /* 264*/ unsigned __int16(__thiscall *loc_508C60)(CWorld *self); // unsigned __int16 (__thiscall *)(CWorld *) + /* 268*/ void(__stdcall *nullsub_10)(int, int); // void (__stdcall *)(int a1, int a2) + /* 26C*/ BOOL(__thiscall *sub_5094B0)(CWorld *self, int); // BOOL (__thiscall *)(void *this, int a2) + /* 270*/ int(__thiscall *sub_5094D0)(CWorld *self, int); // int (__thiscall *)(void *this, int a2) + /* 274*/ int(__thiscall *sub_5094F0)(CWorld *self, int, int, int); // int (__thiscall *)(void *this, int a2, int a3, int a4) + /* 278*/ int(__thiscall *CWorld__fun_50E420)(CWorld *self, int, __int16); // int (__thiscall *)(void *this, int a2, __int16 a3) + /* 27C*/ BOOL(__thiscall *CWorld__fun_510700)(CWorld *self, int); // BOOL (__thiscall *)(void *this, int a2) + /* 280*/ int(__stdcall *sub_5095B0)(__int16); // int (__stdcall *)(__int16 a1) + /* 284*/ int(__stdcall *sub_5095D0)(int); // int (__stdcall *)(int a1) + /* 288*/ int(__thiscall *sub_5095F0)(CWorld *self, unsigned __int8); // int (__thiscall *)(_DWORD *this, unsigned __int8 a2) + /* 28C*/ int(__stdcall *sub_509610)(int); // int (__stdcall *)(int a1) + /* 290*/ char *(__stdcall *CWorld__fun_50F830)(unsigned __int16, int); // char *(__stdcall *)(unsigned __int16 a1, int a2) + /* 294*/ void(__stdcall *nullsub_23)(int, int, int); // void (__stdcall *)(int a1, int a2, int a3) + /* 298*/ int(__stdcall *CWorld__fun_50F880)(int); // int (__stdcall *)(int a1) + /* 29C*/ char *(__thiscall *sub_509530)(CWorld *self); // char *(__thiscall *)(char *this) + /* 2A0*/ int(__thiscall *sub_5097A0)(CWorld *self, int); // int (__thiscall *)(char *this, int a2) + /* 2A4*/ int(__thiscall *sub_5097B0)(CWorld *self, int, int); // int (__thiscall *)(char *this, int a2, int a3) + /* 2A8*/ uint32_t *(__thiscall *sub_5097D0)(CWorld *self, uint32_t *); // _DWORD *(__thiscall *)(int this, _DWORD *a2) + /* 2AC*/ int(__thiscall *sub_5097F0)(CWorld *self, int); // int (__thiscall *)(char *this, int a2) + /* 2B0*/ int(__thiscall *sub_509800)(CWorld *self, int, int); // int (__thiscall *)(char *this, int a2, int a3) + /* 2B4*/ int(__thiscall *sub_509540)(CWorld *self, int); // int (__thiscall *)(void *this, int a2) + /* 2B8*/ int(__thiscall *CWorld__fun_505250)(CWorld *self, int); // int (__thiscall *)(unsigned __int16 *this, int a2) + /* 2BC*/ char(__thiscall *sub_509560)(CWorld *self); // char (__thiscall *)(_BYTE *this) + /* 2C0*/ char(__thiscall *sub_509570)(CWorld *self); // char (__thiscall *)(_BYTE *this) + /* 2C4*/ int(__thiscall *CWorld__fun_510000)(CWorld *self, int, int); // int (__thiscall *)(void *this, int a2, int a3) + /* 2C8*/ uint32_t *(__thiscall *CWorld__fun_50FAE0)(CWorld *self, char); // void **(__thiscall *)(unsigned __int16 *this, char a2) + /* 2CC*/ uint32_t *(__thiscall *CWorld__fun_50FB10)(CWorld *self, char); // void **(__thiscall *)(unsigned __int16 *this, char a2) + /* 2D0*/ int(__stdcall *CEngineInterface__fun_628E30)(int); // int (__stdcall *)(int a1) + /* 2D4*/ int(__thiscall *sub_509690)(CWorld *self, int); // int (__thiscall *)(_DWORD *this, int a2) + /* 2D8*/ int(__thiscall *CWorld__fun_5101C0)(CWorld *self, int, int); // int (__thiscall *)(char *this, int a2, int a3) + /* 2DC*/ BOOL(__thiscall *CWorld__fun_510210)(CWorld *self, int); // BOOL (__thiscall *)(_BYTE *this, int a2) + /* 2E0*/ uint32_t *(__thiscall *CWorld__fun_510230)(CWorld *self, uint32_t *, int); // _DWORD *(__thiscall *)(char *this, _DWORD *a2, int a3) + /* 2E4*/ int(__thiscall *sub_5098D0)(CWorld *self); // int (__thiscall *)(int this) + /* 2E8*/ char(__thiscall *sub_509680)(CWorld *self); // char (__thiscall *)(_BYTE *this) + /* 2EC*/ int(__thiscall *sub_5096A0)(CWorld *self, int); // int (__thiscall *)(void *this, int a2) + /* 2F0*/ void *(__stdcall *duplicate_187_1)(); // void *(__stdcall *)() + /* 2F4*/ char *(__thiscall *sub_5096C0)(CWorld *self, int, __int16, char); // char *(__thiscall *)(char *this, int a2, __int16 a3, char a4) + /* 2F8*/ BOOL(__thiscall *sub_5096F0)(CWorld *self); // BOOL (__thiscall *)(_BYTE *this) + /* 2FC*/ char *(__thiscall *sub_509700)(CWorld *self); // char *(__thiscall *)(char *this) + /* 300*/ int(__thiscall *sub_509710)(CWorld *self); // int (__thiscall *)(int this) + /* 304*/ char *(__thiscall *sub_509730)(CWorld *self); // char *(__thiscall *)(char *this) + /* 308*/ int(__stdcall *sub_509750)(int, int, int); // int (__stdcall *)(int a1, int a2, int a3) + /* 30C*/ int(__thiscall *sub_509780)(CWorld *self, uint32_t *, uint32_t *, int); // int (__thiscall *)(int this, _DWORD *a2, _DWORD *a3, int a4) + /* 310*/ void *(__stdcall *loc_508D60)(); // void *(__stdcall *)() + /* 314*/ void *(__stdcall *loc_508D70)(); // void *(__stdcall *)() + /* 318*/ void *(__stdcall *loc_508D80)(); // void *(__stdcall *)() + /* 31C*/ void *(__stdcall *loc_508D90)(); // void *(__stdcall *)() + /* 320*/ void *(__stdcall *duplicate_154_1)(); // void *(__stdcall *)() + /* 324*/ char *(__thiscall *sub_509830)(CWorld *self); // char *(__thiscall *)(char *this) + /* 328*/ void *(__stdcall *loc_508DA0)(); // void *(__stdcall *)() + /* 32C*/ void *(__stdcall *loc_508DB0)(); // void *(__stdcall *)() + /* 330*/ unsigned int(__thiscall *sub_509740)(CWorld *self); // unsigned int (__thiscall *)(CWorld *this) + /* 334*/ __int16(__thiscall *CWorld__fun_515420)(CWorld *self, int, uint32_t *, int); // __int16 (__thiscall *)(void *this, int a2, int *a3, int a4) + /* 338*/ __int16(__thiscall *CWorld__fun_515520)(CWorld *self, int, uint32_t *, uint16_t *, int); // __int16 (__thiscall *)(unsigned __int16 *this, int a2, _DWORD *a3, unsigned __int16 *a4, int a5) + /* 33C*/ __int16(__thiscall *CWorld__fun_515D50)(CWorld *self, int, uint32_t *, uint16_t *); // __int16 (__thiscall *)(unsigned __int16 *this, int a2, _DWORD *a3, unsigned __int16 *a4) + /* 340*/ int(__thiscall *sub_509650)(CWorld *self); // int (__thiscall *)(int this) + /* 344*/ int(__thiscall *CWorld__fun_511650)(CWorld *self, int); // int (__thiscall *)(int this, int a2) + /* 348*/ int(__thiscall *sub_509670)(CWorld *self); // int (__thiscall *)(int this) + /* 34C*/ int(__thiscall *sub_509660)(CWorld *self); // int (__thiscall *)(int this) + /* 350*/ char(__thiscall *CWorld__fun_510E20)(CWorld *self); // char (__thiscall *)(unsigned __int16 *this) + /* 354*/ int(__thiscall *sub_509840)(CWorld *self); // int (__thiscall *)(int this) + /* 358*/ BOOL(__thiscall *CWorld__fun_511610)(CWorld *self); // BOOL (__thiscall *)(int this) + /* 35C*/ int(__thiscall *CWorld__fun_511630)(CWorld *self, int); // int (__thiscall *)(int this, int a2) + /* 360*/ int(__thiscall *CWorld__fun_511640)(CWorld *self); // int (__thiscall *)(int this) + /* 364*/ __int16(__thiscall *sub_509870)(CWorld *self); // __int16 (__thiscall *)(_WORD *this) + /* 368*/ __int16(__thiscall *sub_509880)(CWorld *self, __int16); // __int16 (__thiscall *)(_WORD *this, __int16 a2) + /* 36C*/ int(__thiscall *sub_509890)(CWorld *self); // int (__thiscall *)(_DWORD *this) + /* 370*/ int(__thiscall *sub_5098A0)(CWorld *self, int); // int (__thiscall *)(_DWORD *this, int a2) + /* 374*/ char(__thiscall *sub_5098B0)(CWorld *self); // char (__thiscall *)(_BYTE *this) + /* 378*/ char(__thiscall *sub_5098C0)(CWorld *self, char); // char (__thiscall *)(_BYTE *this, char a2) + /* 37C*/ int(__thiscall *CWorld__fun_50E920)(CWorld *self, int); // int (__thiscall *)(CWorld *this, int) + /* 380*/ BOOL(__thiscall *sub_509160)(CWorld *self, int, int); // BOOL (__thiscall *)(int this, int a2, int a3) + /* 384*/ int(__stdcall *sub_5092B0)(int, int, __int16); // int (__stdcall *)(int a1, int a2, __int16 a3) + /* 388*/ int(__thiscall *CWorld__fun_50E490)(CWorld *self, int, int, int, int, int, int); // int (__thiscall *)(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7) + /* 38C*/ int(__thiscall *sub_509580)(CWorld *self, int, int, int, int, int); // int (__thiscall *)(void *this, int a2, int a3, int a4, int a5, int a6) + /* 390*/ int(__thiscall *CWorld__fun_50E4D0)(CWorld *self, int, int, int, int, int, int); // int (__thiscall *)(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7) + /* 394*/ int(__thiscall *CWorld__fun_50E510)(CWorld *self, int); // int (__thiscall *)(_DWORD *this, int a2) }; - + static_assert(sizeof(vtbl_t) == 0x398); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 4*/ MyProfiler *profiler; /* 8*/ MyCreatureCollection creatures; /* 4A*/ uint8_t gap4A[48]; @@ -3231,7 +3202,7 @@ namespace dk2 { /*A3B7*/ int field_A3B7; /*A3BB*/ int field_A3BB; /*A3BF*/ int fA3BF_is_surface_filled; - + virtual ~CWorld(); void dump() { printf("profiler: MyProfiler(%p)\n", this->profiler); @@ -3281,12 +3252,12 @@ namespace dk2 { #pragma pack(push, 1) class CWorldShortEntry { public: - + /* 0*/ uint32_t f0_px; /* 4*/ int f4_py; /* 8*/ int f8_pw; /* C*/ int fC_pz; - + void dump() { printf("f0_px: %d\n", this->f0_px); printf("f4_py: %d\n", this->f4_py); @@ -3300,13 +3271,9 @@ namespace dk2 { #pragma pack(push, 1) class CWorldInterface { public: - static uint32_t const VFTABLE = 0x0066E7A4; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - + /* 4*/ int field_4; - + virtual ~CWorldInterface(); void dump() { printf("field_4: %d\n", this->field_4); @@ -3318,67 +3285,104 @@ namespace dk2 { #pragma pack(push, 1) class MyCbHandle { public: - static uint32_t const VFTABLE = 0x006723D8; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t { - /* 0*/ void *sub_5BB440; + /* 0*/ void *(__thiscall *sub_5BB440)(MyCbHandle *self, char); // void *(__thiscall *)(void *Block, char a2) }; - - /* 4*/ void *f4_callbackIdxList; + static_assert(sizeof(vtbl_t) == 0x4); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + + /* 4*/ uint32_t *f4_callbackIdxList; /* 8*/ void *f8_callbackObj; - + virtual ~MyCbHandle(); void dump() { - printf("f4_callbackIdxList: %p\n", this->f4_callbackIdxList); - printf("f8_callbackObj: %p\n", this->f8_callbackObj); + printf("f4_callbackIdxList: uint32_t(%p)\n", this->f4_callbackIdxList); + printf("f8_callbackObj: void(%p)\n", this->f8_callbackObj); } }; #pragma pack(pop) static_assert(sizeof(MyCbHandle) == 0xC); #pragma pack(push, 1) - class MySharedObj_fields { + class MySharedObj { public: - - /* 0*/ int refs; - + struct vtbl_t { + /* 0*/ LONG(__thiscall *release)(MySharedObj *self); // LONG (__thiscall *)(MySharedObj *this) + /* 4*/ LONG(__thiscall *addRef)(MySharedObj *self); // LONG (__thiscall *)(volatile LONG *this) + /* 8*/ MySharedObj *(__thiscall *scalar_destructor)(MySharedObj *self, char); // MySharedObj *(__thiscall *)(MySharedObj *this, char a2) + }; + static_assert(sizeof(vtbl_t) == 0xC); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + + /* 4*/ int refs; + + virtual ~MySharedObj(); void dump() { printf("refs: %d\n", this->refs); } }; #pragma pack(pop) - static_assert(sizeof(MySharedObj_fields) == 0x4); + static_assert(sizeof(MySharedObj) == 0x8); #pragma pack(push, 1) - class MyComEx_fields { + class MyComEx : public MySharedObj { public: - - /* 0*/ MySharedObj_fields super; - /* 4*/ MyComEx *f4_child; - + struct vtbl_t : public MySharedObj::vtbl_t { + /* C*/ void(__stdcall *fun1)(int); // void (__stdcall *)(int) + /* 10*/ int(__thiscall *fun2)(MyComEx *self, DxAction *); // int (__thiscall *)(MyComEx *this, DxAction *) + /* 14*/ int(__thiscall *fun3)(MyComEx *self, DxAction *); // int (__thiscall *)(MyComEx *this, DxAction *) + /* 18*/ int(__thiscall *fun4)(MyComEx *self, DxAction *); // int (__thiscall *)(MyComEx *this, DxAction *) + }; + static_assert(sizeof(vtbl_t) == 0x1C); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + + /* 8*/ MyComEx *f4_child; + + virtual ~MyComEx(); void dump() { printf("f4_child: MyComEx(%p)\n", this->f4_child); } }; #pragma pack(pop) - static_assert(sizeof(MyComEx_fields) == 0x8); + static_assert(sizeof(MyComEx) == 0xC); #pragma pack(push, 1) - class AsyncThing { + class AsyncThing : public MyComEx { public: - static uint32_t const VFTABLE = 0x006727FC; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - - struct vtbl_t { - /* 0*/ void *std__strstreambuf___scalar_deleting_destructor_uint; + struct vtbl_t /*: public MyComEx::vtbl_t */{ + /* 0*/ void *(__thiscall *std__strstreambuf___scalar_deleting_destructor_uint)(AsyncThing *self, char); // std::strstreambuf *(__thiscall *)(std::strstreambuf *this, char a2) }; - - /* 4*/ MyComEx_fields super; + static_assert(sizeof(vtbl_t) == 0x4); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* C*/ uint32_t f8_lastError; /* 10*/ uint32_t exit_thread_flag; /* 14*/ uint32_t f10_hThread; @@ -3390,7 +3394,7 @@ namespace dk2 { /* 38*/ int field_34; /* 3C*/ int field_38; /* 40*/ int field_3C; - + virtual ~AsyncThing(); void dump() { printf("f8_lastError: %d\n", this->f8_lastError); @@ -3411,21 +3415,25 @@ namespace dk2 { #pragma pack(push, 1) class MyDxInputManagerCb { public: - static uint32_t const VFTABLE = 0x00672480; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t { - /* 0*/ void *sub_5BC280; - /* 4*/ void *sub_5BBEA0; - /* 8*/ void *sub_5BBF90; - /* C*/ void *sub_5BC060; - /* 10*/ void *sub_5BC170; - /* 14*/ void *sub_5BC130; - /* 18*/ void *sub_5BC0F0; + /* 0*/ int(__thiscall *sub_5BC280)(MyDxInputManagerCb *self, int, uint32_t *); // int (__thiscall *)(_DWORD *this, int a2, _DWORD *a3) + /* 4*/ void *(__thiscall *sub_5BBEA0)(MyDxInputManagerCb *self, char); // void *(__thiscall *)(void *Block, char a2) + /* 8*/ uint32_t *(__thiscall *sub_5BBF90)(MyDxInputManagerCb *self, uint32_t *); // int *(__thiscall *)(int this, int *a2) + /* C*/ uint32_t *(__thiscall *sub_5BC060)(MyDxInputManagerCb *self, uint32_t *); // int *(__thiscall *)(int *this, int *a2) + /* 10*/ uint32_t *(__thiscall *sub_5BC170)(MyDxInputManagerCb *self, uint32_t *); // int *(__thiscall *)(_DWORD *this, int *a2) + /* 14*/ uint32_t *(__thiscall *sub_5BC130)(MyDxInputManagerCb *self, uint32_t *); // _DWORD *(__thiscall *)(_DWORD *this, _DWORD *a2) + /* 18*/ uint32_t *(__thiscall *sub_5BC0F0)(MyDxInputManagerCb *self, uint32_t *); // _DWORD *(__thiscall *)(_DWORD *this, _DWORD *a2) }; - + static_assert(sizeof(vtbl_t) == 0x1C); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 4*/ MyCbHandle f0_cbhandle; /* 10*/ AsyncThing fC_async; /* 54*/ int f50_createDD_state; @@ -3434,7 +3442,7 @@ namespace dk2 { /* 60*/ ControlKeysUpdater *f5C_controlKeys; /* 64*/ MyMouseUpdater *f60_mouse; /* 68*/ DxActionQueue *f64_dxActionQueue; - + virtual ~MyDxInputManagerCb(); void dump() { printf("f50_createDD_state: %d\n", this->f50_createDD_state); @@ -3451,20 +3459,24 @@ namespace dk2 { #pragma pack(push, 1) class Obj6723B8 { public: - static uint32_t const VFTABLE = 0x006723B8; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t { - /* 0*/ void *scalar_destructor; - /* 4*/ void *getDdSurface1; - /* 8*/ void *getDdSurface2; - /* C*/ void *getAabb; - /* 10*/ void *isSurfaceFlag; + /* 0*/ void *(__thiscall *scalar_destructor)(Obj6723B8 *self, char); // std::locale::facet *(__thiscall *)(std::locale::facet *this, char a2) + /* 4*/ MyDdSurface *(__thiscall *getDdSurface1)(Obj6723B8 *self); // MyDdSurface *(__thiscall *)(Obj6723B8 *) + /* 8*/ MyDdSurfaceEx *(__thiscall *getDdSurface2)(Obj6723B8 *self); // MyDdSurfaceEx *(__thiscall *)(Obj6723B8 *) + /* C*/ AABB *(__thiscall *getAabb)(Obj6723B8 *self, AABB *); // AABB *(__thiscall *)(Obj6723B8 *, AABB *) + /* 10*/ void *(__thiscall *isSurfaceFlag)(Obj6723B8 *self); // void *(__thiscall *)(Obj6723B8 *) }; - - + static_assert(sizeof(vtbl_t) == 0x14); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + + virtual ~Obj6723B8(); void dump() { } @@ -3475,21 +3487,25 @@ namespace dk2 { #pragma pack(push, 1) class MyInputManagerCb : public MyDxInputManagerCb { public: - static uint32_t const VFTABLE = 0x00672380; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t /*: public MyDxInputManagerCb::vtbl_t */{ - /* 0*/ void *__vftable; - /* 4*/ void *field_4; - /* 8*/ void *initInputs; - /* C*/ void *field_C; - /* 10*/ void *field_10; - /* 14*/ void *field_14; - /* 18*/ void *field_18; + /* 0*/ int(__thiscall *__vftable)(MyInputManagerCb *self, int, uint32_t *); // int (__thiscall *)(_DWORD *this, int, _DWORD *) + /* 4*/ int(__thiscall *field_4)(MyInputManagerCb *self, char); // int (__thiscall *)(void *Block, char) + /* 8*/ int(__thiscall *initInputs)(MyInputManagerCb *self, char *); // int (__thiscall *)(MyInputManagerCb *, char *) + /* C*/ uint32_t *(__thiscall *field_C)(MyInputManagerCb *self, uint32_t *); // int *(__thiscall *)(_DWORD *this, int *) + /* 10*/ uint32_t *(__thiscall *field_10)(MyInputManagerCb *self, uint32_t *); // int *(__thiscall *)(MyInputManagerCb *this, int *a2) + /* 14*/ uint32_t *(__thiscall *field_14)(MyInputManagerCb *self, uint32_t *); // _DWORD *(__thiscall *)(_DWORD *this, _DWORD *) + /* 18*/ uint32_t *(__thiscall *field_18)(MyInputManagerCb *self, uint32_t *); // _DWORD *(__thiscall *)(_DWORD *this, _DWORD *) }; - + static_assert(sizeof(vtbl_t) == 0x1C); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 6C*/ MyInputListenersHolder *f6C_pInputListenersHolder; /* 70*/ MyDxInputState *f70_pdxInputState; /* 74*/ MyWindowMsgs *f74_pMyWindowMsgs; @@ -3497,7 +3513,7 @@ namespace dk2 { /* 7C*/ int field_7C; /* 80*/ MyCb6723D0 *f80_pchildcb; /* 84*/ Obj6723B8 f84_obj; - + virtual ~MyInputManagerCb(); void dump() { printf("f6C_pInputListenersHolder: MyInputListenersHolder(%p)\n", this->f6C_pInputListenersHolder); @@ -3512,78 +3528,79 @@ namespace dk2 { static_assert(sizeof(MyInputManagerCb) == 0x88); #pragma pack(push, 1) - class MyComEx { + class LockBase : public MyComEx { public: - static uint32_t const VFTABLE = 0x00672418; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - - struct vtbl_t { - /* 0*/ void *super; - /* C*/ void *fun1; - /* 10*/ void *fun2; - /* 14*/ void *fun3; - /* 18*/ void *fun4; + struct vtbl_t : public MyComEx::vtbl_t { + /* 1C*/ int(__thiscall *getItemsCount)(LockBase *self); // int (__thiscall *)(DxActionQueue *) + /* 20*/ void(__thiscall *handleItem)(LockBase *self, uint32_t *, MyDxInputState *); // void (__thiscall *)(DxActionQueue *, unsigned int *, MyDxInputState *) }; - - /* 4*/ MySharedObj_fields super; - /* 8*/ MyComEx *f4_child; - - virtual ~MyComEx(); + static_assert(sizeof(vtbl_t) == 0x24); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + + + virtual ~LockBase(); void dump() { - printf("f4_child: MyComEx(%p)\n", this->f4_child); } }; #pragma pack(pop) - static_assert(sizeof(MyComEx) == 0xC); + static_assert(sizeof(LockBase) == 0xC); #pragma pack(push, 1) class Buf1000 { public: - + /* 0*/ uint32_t f0_base; /* 4*/ uint32_t f4_end; - /* 8*/ void *f8_pos; - /* C*/ void *fC_pdwarr; - + /* 8*/ uint32_t *f8_pos; + /* C*/ uint32_t *fC_pdwarr; + void dump() { printf("f0_base: %d\n", this->f0_base); printf("f4_end: %d\n", this->f4_end); - printf("f8_pos: %p\n", this->f8_pos); - printf("fC_pdwarr: %p\n", this->fC_pdwarr); + printf("f8_pos: uint32_t(%p)\n", this->f8_pos); + printf("fC_pdwarr: uint32_t(%p)\n", this->fC_pdwarr); } }; #pragma pack(pop) static_assert(sizeof(Buf1000) == 0x10); #pragma pack(push, 1) - class DxActionQueue : public MyComEx { + class DxActionQueue : public LockBase { public: - static uint32_t const VFTABLE = 0x006727B0; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - - struct vtbl_t /*: public MyComEx::vtbl_t */{ - /* 0*/ void *super; + struct vtbl_t : public LockBase::vtbl_t { }; - + static_assert(sizeof(vtbl_t) == 0x24); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* C*/ uint32_t field_C; /* 10*/ char field_10; /* 11*/ uint8_t gap_11[3]; /* 14*/ Buf1000 f14_read; /* 24*/ Buf1000 f24_write; - /* 34*/ void *f34_dwarr_base; + /* 34*/ uint32_t *f34_dwarr_base; /* 38*/ int f38_dwcount; /* 3C*/ int f3C_itemsCount; /* 40*/ _RTL_CRITICAL_SECTION *f40_pCriticalSection; - + virtual ~DxActionQueue(); void dump() { printf("field_C: %d\n", this->field_C); printf("field_10: %d\n", this->field_10); - printf("f34_dwarr_base: %p\n", this->f34_dwarr_base); + printf("f34_dwarr_base: uint32_t(%p)\n", this->f34_dwarr_base); printf("f38_dwcount: %d\n", this->f38_dwcount); printf("f3C_itemsCount: %d\n", this->f3C_itemsCount); printf("f40_pCriticalSection: _RTL_CRITICAL_SECTION(%p)\n", this->f40_pCriticalSection); @@ -3593,71 +3610,27 @@ namespace dk2 { static_assert(sizeof(DxActionQueue) == 0x44); #pragma pack(push, 1) - class MySharedObj { - public: - static uint32_t const VFTABLE = 0x00672408; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - - struct vtbl_t { - /* 0*/ void *release; - /* 4*/ void *addRef; - /* 8*/ void *scalar_destructor; - }; - - /* 4*/ int refs; - - virtual ~MySharedObj(); - void dump() { - printf("refs: %d\n", this->refs); - } - }; -#pragma pack(pop) - static_assert(sizeof(MySharedObj) == 0x8); - -#pragma pack(push, 1) - class LockBase { + class MyMouse : public MyComEx { public: - static uint32_t const VFTABLE = 0x006727D8; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - - struct vtbl_t { - /* 0*/ void *super; - /* 1C*/ void *getItemsCount; - /* 20*/ void *handleItem; + struct vtbl_t /*: public MyComEx::vtbl_t */{ + /* 0*/ LONG(__thiscall *MyCom_release)(MyMouse *self); // LONG (__thiscall *)(MySharedObj *this) + /* 4*/ LONG(__thiscall *MyCom_addRef)(MyMouse *self); // LONG (__thiscall *)(MySharedObj *this) + /* 8*/ void *(__thiscall *MyMouse_sub_5DD430)(MyMouse *self, char); // void *(__thiscall *)(void *Block, char a2) + /* C*/ void(__stdcall *MyComEx_fun1)(int); // void (__stdcall *)(int a1) + /* 10*/ int(__thiscall *MyComEx_fun2)(MyMouse *self, int); // int (__thiscall *)(_DWORD *this, int a2) + /* 14*/ char(__thiscall *sub_5DD4A0)(MyMouse *self, uint32_t *); // char (__thiscall *)(int this, int *a2) + /* 18*/ int(__thiscall *sub_5DD560)(MyMouse *self, uint32_t *); // int (__thiscall *)(int this, _DWORD *a2) }; - - /* 4*/ MyComEx_fields super; - - virtual ~LockBase(); - void dump() { - } - }; -#pragma pack(pop) - static_assert(sizeof(LockBase) == 0xC); - -#pragma pack(push, 1) - class MyMouse { + static_assert(sizeof(vtbl_t) == 0x1C); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; public: - static uint32_t const VFTABLE = 0x006728B0; - + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - - struct vtbl_t { - /* 0*/ void *MyCom_release; - /* 4*/ void *MyCom_addRef; - /* 8*/ void *MyMouse_sub_5DD430; - /* C*/ void *MyComEx_fun1; - /* 10*/ void *MyComEx_fun2; - /* 14*/ void *sub_5DD4A0; - /* 18*/ void *sub_5DD560; - }; - - /* 4*/ MyComEx_fields super; + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* C*/ Obj672844 *f8_pobj; /* 10*/ Pos2i fC_pos; /* 18*/ Pos2i f14_pos2_prev; @@ -3675,7 +3648,7 @@ namespace dk2 { /* 58*/ int f54_acceleration; /* 5C*/ int f58_target___; /* 60*/ int f5C_isButtonsSwaped; - + virtual ~MyMouse(); void dump() { printf("f8_pobj: Obj672844(%p)\n", this->f8_pobj); @@ -3700,13 +3673,13 @@ namespace dk2 { #pragma pack(push, 1) class MyMouseCb_vtbl { public: - + /* 0*/ void *sub_5DD6F0; /* 4*/ void *sub_5BC900; - + void dump() { - printf("sub_5DD6F0: %p\n", this->sub_5DD6F0); - printf("sub_5BC900: %p\n", this->sub_5BC900); + printf("sub_5DD6F0: void(%p)\n", this->sub_5DD6F0); + printf("sub_5BC900: void(%p)\n", this->sub_5BC900); } }; #pragma pack(pop) @@ -3715,13 +3688,13 @@ namespace dk2 { #pragma pack(push, 1) class Event0_winShown7 { public: - + /* 0*/ int f0_eventType; /* 4*/ int f4_width; /* 8*/ int f8_height; /* C*/ int fC_display_bitnes; /* 10*/ int f10_isdevAcquireAnyTime; - + void dump() { printf("f0_eventType: %d\n", this->f0_eventType); printf("f4_width: %d\n", this->f4_width); @@ -3736,24 +3709,28 @@ namespace dk2 { #pragma pack(push, 1) class MyMouseUpdater : public MyMouse { public: - static uint32_t const VFTABLE = 0x006724A8; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t /*: public MyMouse::vtbl_t */{ - /* 0*/ void *MyCom_release; - /* 4*/ void *MyCom_addRef; - /* 8*/ void *scalar_destructor; - /* C*/ void *MyComEx_fun1; - /* 10*/ void *MyComEx_fun2; - /* 14*/ void *MyMouse_sub_5DD4A0; - /* 18*/ void *MyMouse_sub_5DD560; + /* 0*/ LONG(__thiscall *MyCom_release)(MyMouseUpdater *self); // LONG (__thiscall *)(MySharedObj *this) + /* 4*/ LONG(__thiscall *MyCom_addRef)(MyMouseUpdater *self); // LONG (__thiscall *)(MySharedObj *this) + /* 8*/ void *(__thiscall *scalar_destructor)(MyMouseUpdater *self, char); // void *(__thiscall *)(void *Block, char a2) + /* C*/ void(__stdcall *MyComEx_fun1)(int); // void (__stdcall *)(int a1) + /* 10*/ int(__thiscall *MyComEx_fun2)(MyMouseUpdater *self, int); // int (__thiscall *)(_DWORD *this, int a2) + /* 14*/ char(__thiscall *MyMouse_sub_5DD4A0)(MyMouseUpdater *self, uint32_t *); // char (__thiscall *)(int this, int *a2) + /* 18*/ uint32_t *(__thiscall *MyMouse_sub_5DD560)(MyMouseUpdater *self, uint32_t *); // _DWORD *(__thiscall *)(int this, _DWORD *a2) }; - + static_assert(sizeof(vtbl_t) == 0x1C); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 64*/ MyMouseCb_vtbl *f64_cb; /* 68*/ MyCbHandle f68_cbhandle; - + virtual ~MyMouseUpdater(); void dump() { printf("f64_cb: MyMouseCb_vtbl(%p)\n", this->f64_cb); @@ -3765,10 +3742,10 @@ namespace dk2 { #pragma pack(push, 1) class Event0_unk6 { public: - + /* 0*/ int f0_eventType; /* 4*/ int field_4; - + void dump() { printf("f0_eventType: %d\n", this->f0_eventType); printf("field_4: %d\n", this->field_4); @@ -3780,19 +3757,19 @@ namespace dk2 { #pragma pack(push, 1) class ThreadCtx { public: - + /* 0*/ uint32_t tid; /* 4*/ int field_4; /* 8*/ uint8_t gap_8[64]; /* 48*/ uint32_t f48_proc; /* 4C*/ void *f4C_arg; - + void dump() { printf("tid: %d\n", this->tid); printf("field_4: %d\n", this->field_4); printf("gap_8: %d\n", this->gap_8); printf("f48_proc: %d\n", this->f48_proc); - printf("f4C_arg: %p\n", this->f4C_arg); + printf("f4C_arg: void(%p)\n", this->f4C_arg); } }; #pragma pack(pop) @@ -3801,20 +3778,24 @@ namespace dk2 { #pragma pack(push, 1) class CFrontEndComponent : public CComponent { public: - static uint32_t const VFTABLE = 0x0066EF3C; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t /*: public CComponent::vtbl_t */{ - /* 0*/ void *CFrontEndComponent___scalar_deleting_destructor_uint; - /* 4*/ void *CFrontEndComponent__fun_52EFE0; - /* 8*/ void *nullsub_1; - /* C*/ void *CFrontEndComponent__launchGame; - /* 10*/ void *CFrontEndComponent__fun_52F550; - /* 14*/ void *CFrontEndComponent__maybe_update_textures; + /* 0*/ uint32_t *(__thiscall *CFrontEndComponent___scalar_deleting_destructor_uint)(CFrontEndComponent *self, char); // _DWORD *(__thiscall *)(_DWORD *Block, char a2) + /* 4*/ int(__thiscall *CFrontEndComponent__fun_52EFE0)(CFrontEndComponent *self); // int (__thiscall *)(int this) + /* 8*/ void(__thiscall *nullsub_1)(CFrontEndComponent *self); // void (__thiscall *)(void *this) + /* C*/ int(__thiscall *CFrontEndComponent__launchGame)(CFrontEndComponent *self); // int (__thiscall *)(CFrontEndComponent *this) + /* 10*/ uint32_t *(__thiscall *CFrontEndComponent__fun_52F550)(CFrontEndComponent *self); // int *(__thiscall *)(int this) + /* 14*/ int(__thiscall *CFrontEndComponent__maybe_update_textures)(CFrontEndComponent *self); // int (__thiscall *)(int this) }; - + static_assert(sizeof(vtbl_t) == 0x18); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* C*/ uint32_t field_C; /* 10*/ uint32_t field_10; /* 14*/ uint8_t gap_14[942]; @@ -4078,7 +4059,7 @@ namespace dk2 { /*311CA*/ MySurface f311CA_surf69; /*311F2*/ int field_311F2; /*311F6*/ int f311F6; - + virtual ~CFrontEndComponent(); void dump() { printf("field_C: %d\n", this->field_C); @@ -4247,27 +4228,30 @@ namespace dk2 { static_assert(sizeof(CFrontEndComponent) == 0x311FA); #pragma pack(push, 1) - class CButton { + class CButton : public CGadget { public: - static uint32_t const VFTABLE = 0x0066ECA4; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - - struct vtbl_t { - /* 0*/ void *CButton___scalar_deleting_destructor_uint; - /* 4*/ void *render; - /* 8*/ void *handleClick; - /* C*/ void *configure; + struct vtbl_t /*: public CGadget::vtbl_t */{ + /* 0*/ void *(__thiscall *CButton___scalar_deleting_destructor_uint)(CButton *self, char); // void *(__thiscall *)(void *Block, char a2) + /* 4*/ int(__stdcall *render)(int, int); // int (__stdcall *)(int a1, int a2) + /* 8*/ int(__thiscall *handleClick)(CButton *self, CDefaultPlayerInterface *); // int (__thiscall *)(CButton *, CDefaultPlayerInterface *) + /* C*/ int(__thiscall *configure)(CButton *self, int); // int (__thiscall *)(int this, int a2) }; - - /* 4*/ CGadget_fields super; + static_assert(sizeof(vtbl_t) == 0x10); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 24*/ uint32_t field_20; /* 28*/ uint32_t f24_renderFun; /* 2C*/ uint32_t field_28; /* 30*/ uint32_t f2C_textId; /* 34*/ uint32_t f30_idxLow; - /* 38*/ void *f34_idxHigh; + /* 38*/ uint32_t *f34_idxHigh; /* 3C*/ uint32_t f38_unkIdx; /* 40*/ uint8_t field_3C; /* 41*/ uint32_t f3D__isPressed; @@ -4287,7 +4271,7 @@ namespace dk2 { /* 74*/ uint32_t f70_; /* 78*/ uint32_t f74_prev; /* 7C*/ CButton *f78_next; - + virtual ~CButton(); void dump() { printf("field_20: %d\n", this->field_20); @@ -4295,14 +4279,14 @@ namespace dk2 { printf("field_28: %d\n", this->field_28); printf("f2C_textId: %d\n", this->f2C_textId); printf("f30_idxLow: %d\n", this->f30_idxLow); - printf("f34_idxHigh: %p\n", this->f34_idxHigh); + printf("f34_idxHigh: uint32_t(%p)\n", this->f34_idxHigh); printf("f38_unkIdx: %d\n", this->f38_unkIdx); printf("field_3C: %d\n", this->field_3C); printf("f3D__isPressed: %d\n", this->f3D__isPressed); printf("field_41: %d\n", this->field_41); printf("f45_containsCursor: %d\n", this->f45_containsCursor); - printf("f49_pressFun: %p\n", this->f49_pressFun); - printf("f4D_releaseFun: %p\n", this->f4D_releaseFun); + printf("f49_pressFun: void(%p)\n", this->f49_pressFun); + printf("f4D_releaseFun: void(%p)\n", this->f4D_releaseFun); printf("f51_pWindow: CWindow(%p)\n", this->f51_pWindow); printf("f55__nextWindowIdOnClick: %d\n", this->f55__nextWindowIdOnClick); printf("f59__isExitOnClick: %d\n", this->f59__isExitOnClick); @@ -4323,10 +4307,10 @@ namespace dk2 { #pragma pack(push, 1) class Size2i { public: - + /* 0*/ int w; /* 4*/ int h; - + void dump() { printf("w: %d\n", this->w); printf("h: %d\n", this->h); @@ -4338,12 +4322,8 @@ namespace dk2 { #pragma pack(push, 1) class CClickButton : public CButton { public: - static uint32_t const VFTABLE = 0x0066EE7C; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - - + + virtual ~CClickButton(); void dump() { } @@ -4354,11 +4334,7 @@ namespace dk2 { #pragma pack(push, 1) class CRadioButton { public: - static uint32_t const VFTABLE = 0x0066EE64; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - + /* 4*/ uint8_t gap_4[107]; /* 6F*/ char field_6F; /* 70*/ int field_70; @@ -4366,7 +4342,7 @@ namespace dk2 { /* 78*/ int field_78; /* 7C*/ int field_7C; /* 80*/ int field_80; - + virtual ~CRadioButton(); void dump() { printf("field_6F: %d\n", this->field_6F); @@ -4383,11 +4359,7 @@ namespace dk2 { #pragma pack(push, 1) class CVerticalSlider : public CButton { public: - static uint32_t const VFTABLE = 0x0066ECBC; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - + /* 80*/ int field_80; /* 84*/ int field_84; /* 88*/ int field_88; @@ -4397,7 +4369,7 @@ namespace dk2 { /* A4*/ int field_A4; /* A8*/ int field_A8; /* AC*/ int field_AC; - + virtual ~CVerticalSlider(); void dump() { printf("field_80: %d\n", this->field_80); @@ -4416,11 +4388,7 @@ namespace dk2 { #pragma pack(push, 1) class CHorizontalSlider { public: - static uint32_t const VFTABLE = 0x0066EE0C; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - + /* 4*/ uint8_t gap_4[107]; /* 6F*/ char field_6F; /* 70*/ int field_70; @@ -4439,7 +4407,7 @@ namespace dk2 { /* A4*/ int field_A4; /* A8*/ int field_A8; /* AC*/ int field_AC; - + virtual ~CHorizontalSlider(); void dump() { printf("field_6F: %d\n", this->field_6F); @@ -4467,7 +4435,7 @@ namespace dk2 { #pragma pack(push, 1) class ButtonCfg { public: - + /* 0*/ char f0_kind; /* 1*/ uint32_t f1_idx; /* 5*/ uint8_t field_5; @@ -4491,16 +4459,16 @@ namespace dk2 { /* 38*/ void *f38_renderFun; /* 3C*/ void *field_3C; /* 40*/ uint32_t f40_textId; - /* 44*/ void *f44_p_idxLow; - /* 48*/ void *f48_idxHigh; + /* 44*/ uint32_t *f44_p_idxLow; + /* 48*/ uint32_t *f48_idxHigh; /* 4C*/ uint32_t f4C_nameIdx; - + void dump() { printf("f0_kind: %d\n", this->f0_kind); printf("f1_idx: %d\n", this->f1_idx); printf("field_5: %d\n", this->field_5); - printf("f6_actionFun: %p\n", this->f6_actionFun); - printf("field_A: %p\n", this->field_A); + printf("f6_actionFun: void(%p)\n", this->f6_actionFun); + printf("field_A: void(%p)\n", this->field_A); printf("field_E: %d\n", this->field_E); printf("field_12: %d\n", this->field_12); printf("field_16: %d\n", this->field_16); @@ -4515,12 +4483,12 @@ namespace dk2 { printf("f2C_width: %d\n", this->f2C_width); printf("f2E_height: %d\n", this->f2E_height); printf("field_30: %d\n", this->field_30); - printf("field_34: %p\n", this->field_34); - printf("f38_renderFun: %p\n", this->f38_renderFun); - printf("field_3C: %p\n", this->field_3C); + printf("field_34: void(%p)\n", this->field_34); + printf("f38_renderFun: void(%p)\n", this->f38_renderFun); + printf("field_3C: void(%p)\n", this->field_3C); printf("f40_textId: %d\n", this->f40_textId); - printf("f44_p_idxLow: %p\n", this->f44_p_idxLow); - printf("f48_idxHigh: %p\n", this->f48_idxHigh); + printf("f44_p_idxLow: uint32_t(%p)\n", this->f44_p_idxLow); + printf("f48_idxHigh: uint32_t(%p)\n", this->f48_idxHigh); printf("f4C_nameIdx: %d\n", this->f4C_nameIdx); } }; @@ -4530,7 +4498,7 @@ namespace dk2 { #pragma pack(push, 1) class WindowCfg { public: - + /* 0*/ int f0_idx; /* 4*/ uint32_t f4_isCurrent; /* 8*/ uint16_t field_8; @@ -4553,7 +4521,7 @@ namespace dk2 { /* 3A*/ uint32_t field_3A; /* 3E*/ ButtonCfg *f3E_pButtonCfg_list; /* 42*/ __int16 field_42; - + void dump() { printf("f0_idx: %d\n", this->f0_idx); printf("f4_isCurrent: %d\n", this->f4_isCurrent); @@ -4567,8 +4535,8 @@ namespace dk2 { printf("f16_width: %d\n", this->f16_width); printf("f18_height: %d\n", this->f18_height); printf("field_1A: %d\n", this->field_1A); - printf("field_1E: %p\n", this->field_1E); - printf("f22_fun: %p\n", this->f22_fun); + printf("field_1E: void(%p)\n", this->field_1E); + printf("f22_fun: void(%p)\n", this->f22_fun); printf("field_26: %d\n", this->field_26); printf("field_2A: %d\n", this->field_2A); printf("field_2E: %d\n", this->field_2E); @@ -4585,11 +4553,11 @@ namespace dk2 { #pragma pack(push, 1) class StrCfg { public: - + /* 0*/ int idx; /* 4*/ char f4_str[64]; /* 44*/ char field_44; - + void dump() { printf("idx: %d\n", this->idx); printf("f4_str: %d\n", this->f4_str); @@ -4602,13 +4570,13 @@ namespace dk2 { #pragma pack(push, 1) class NameCfg { public: - + /* 0*/ int idx; /* 4*/ char f4_str[32]; /* 24*/ int field_24; /* 28*/ int field_28; /* 2C*/ int field_2C; - + void dump() { printf("idx: %d\n", this->idx); printf("f4_str: %d\n", this->f4_str); @@ -4623,15 +4591,19 @@ namespace dk2 { #pragma pack(push, 1) class MyUnk674058 { public: - static uint32_t const VFTABLE = 0x00674058; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t { - /* 0*/ void *sub_60F450; + /* 0*/ void *(__thiscall *sub_60F450)(MyUnk674058 *self, char); // void *(__thiscall *)(void *Block, char a2) }; - + static_assert(sizeof(vtbl_t) == 0x4); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 4*/ uint32_t field_4; /* 8*/ uint8_t gap_8[12]; /* 14*/ char field_14; @@ -4687,7 +4659,7 @@ namespace dk2 { /* C1*/ uint8_t gap_C1[3]; /* C4*/ int field_C4; /* C8*/ int field_C8; - /* CC*/ void *field_CC; + /* CC*/ uint32_t *field_CC; /* D0*/ int field_D0; /* D4*/ AABB field_D4; /* E4*/ int field_E4; @@ -4695,7 +4667,7 @@ namespace dk2 { /* EC*/ int field_EC; /* F0*/ int field_F0; /* F4*/ int field_F4; - + virtual ~MyUnk674058(); void dump() { printf("field_4: %d\n", this->field_4); @@ -4753,7 +4725,7 @@ namespace dk2 { printf("gap_C1: %d\n", this->gap_C1); printf("field_C4: %d\n", this->field_C4); printf("field_C8: %d\n", this->field_C8); - printf("field_CC: %p\n", this->field_CC); + printf("field_CC: uint32_t(%p)\n", this->field_CC); printf("field_D0: %d\n", this->field_D0); printf("field_E4: %d\n", this->field_E4); printf("field_E8: %d\n", this->field_E8); @@ -4768,15 +4740,19 @@ namespace dk2 { #pragma pack(push, 1) class FontObj { public: - static uint32_t const VFTABLE = 0x0067B8C0; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t { - /* 0*/ void *scalar_destructor; + /* 0*/ void *(__thiscall *scalar_destructor)(FontObj *self, char); // void *(__thiscall *)(void *Block, char a2) }; - + static_assert(sizeof(vtbl_t) == 0x4); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 4*/ MyTextFont *f4_font; /* 8*/ uint32_t f8_fontFlags; /* C*/ uint32_t fC_hasFlag2; @@ -4787,7 +4763,7 @@ namespace dk2 { /* 44*/ PixelMask f44_fontMask; /* 49*/ uint8_t gap_49[3]; /* 4C*/ int f4C_obj; - + virtual ~FontObj(); void dump() { printf("f4_font: MyTextFont(%p)\n", this->f4_font); @@ -4806,14 +4782,10 @@ namespace dk2 { #pragma pack(push, 1) class FontObjWr { public: - static uint32_t const VFTABLE = 0x0067BA18; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - + /* 4*/ FontObj f4_fontObj; /* 54*/ MyFontRendererBase *f54_tobj; - + virtual ~FontObjWr(); void dump() { printf("f54_tobj: MyFontRendererBase(%p)\n", this->f54_tobj); @@ -4825,28 +4797,32 @@ namespace dk2 { #pragma pack(push, 1) class MyObj67B948 { public: - static uint32_t const VFTABLE = 0x0067B948; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t { - /* 0*/ void *sub_62C990; + /* 0*/ void *(__thiscall *sub_62C990)(MyObj67B948 *self, char); // void *(__thiscall *)(void *Block, char a2) }; - + static_assert(sizeof(vtbl_t) == 0x4); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 4*/ FontObjWr f4_fontObjWr; /* 5C*/ MyCRBase *f5C_myCR; /* 60*/ MyTRBase *f60_myTR; /* 64*/ uint32_t field_64; /* 68*/ uint32_t field_68; /* 6C*/ MyDRBase *f6C_myDR; - /* 70*/ void *field_70; + /* 70*/ uint32_t *field_70; /* 74*/ char f74; /* 75*/ char field_75; /* 76*/ uint8_t gap_76[2]; /* 78*/ int field_78; /* 7C*/ int _end_f7C; - + virtual ~MyObj67B948(); void dump() { printf("f5C_myCR: MyCRBase(%p)\n", this->f5C_myCR); @@ -4854,7 +4830,7 @@ namespace dk2 { printf("field_64: %d\n", this->field_64); printf("field_68: %d\n", this->field_68); printf("f6C_myDR: MyDRBase(%p)\n", this->f6C_myDR); - printf("field_70: %p\n", this->field_70); + printf("field_70: uint32_t(%p)\n", this->field_70); printf("f74: %d\n", this->f74); printf("field_75: %d\n", this->field_75); printf("gap_76: %d\n", this->gap_76); @@ -4868,22 +4844,18 @@ namespace dk2 { #pragma pack(push, 1) class MyTextText { public: - static uint32_t const VFTABLE = 0x0067B950; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - + /* 4*/ uint8_t gap_4[4]; /* 8*/ int f8_numOffsets; - /* C*/ void *fC_offsets_and_data; + /* C*/ uint32_t *fC_offsets_and_data; /* 10*/ MyTextBase *f10_MBToUniText_idx1; /* 14*/ MyTextBase *f14_UniToMBText_idx2; - + virtual ~MyTextText(); void dump() { printf("gap_4: %d\n", this->gap_4); printf("f8_numOffsets: %d\n", this->f8_numOffsets); - printf("fC_offsets_and_data: %p\n", this->fC_offsets_and_data); + printf("fC_offsets_and_data: uint32_t(%p)\n", this->fC_offsets_and_data); printf("f10_MBToUniText_idx1: MyTextBase(%p)\n", this->f10_MBToUniText_idx1); printf("f14_UniToMBText_idx2: MyTextBase(%p)\n", this->f14_UniToMBText_idx2); } @@ -4894,28 +4866,32 @@ namespace dk2 { #pragma pack(push, 1) class FileStorageBase { public: - static uint32_t const VFTABLE = 0x00672348; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t { - /* 0*/ void *releaseContent; - /* 4*/ void *FileStorageBase_fun_5B9DD0; - /* 8*/ void *FileStorageBase_fun_5B9E00; - /* C*/ void *openInputStream; - /* 10*/ void *FileStorageBase_fun_5B9D60; - /* 14*/ void *formatFilePath; + /* 0*/ LONG(__thiscall *releaseContent)(FileStorageBase *self); // LONG (__thiscall *)(FileStorageBase *this) + /* 4*/ uint32_t *(__thiscall *FileStorageBase_fun_5B9DD0)(FileStorageBase *self, uint32_t *, int, int); // _DWORD *(__thiscall *)(_DWORD *this, _DWORD *, int, int) + /* 8*/ uint32_t *(__thiscall *FileStorageBase_fun_5B9E00)(FileStorageBase *self, uint32_t *, int); // _DWORD *(__thiscall *)(_DWORD *this, _DWORD *, int) + /* C*/ uint32_t *(__thiscall *openInputStream)(FileStorageBase *self, uint32_t *, TbDiscFile *, char *, int, int); // _DWORD *(__thiscall *)(TbDiscFileStorage *this, _DWORD *status, TbDiscFile *diskFile, char *fileName, int flags, int a6) + /* 10*/ uint32_t *(__thiscall *FileStorageBase_fun_5B9D60)(FileStorageBase *self, uint32_t *, int, int); // _DWORD *(__thiscall *)(_DWORD *this, _DWORD *, int, int) + /* 14*/ uint32_t *(__thiscall *formatFilePath)(FileStorageBase *self, uint32_t *, char *, char *, int); // _DWORD *(__thiscall *)(FileStorageBase *this, _DWORD *status, char *buf, char *fileName, int bufLimit) /* 18*/ void *TbWadFileStorage__fun_5B9E70; - /* 1C*/ void *FileStorageBase_fun_5B9EB0; - /* 20*/ void *FileStorageBase_fun_5B9EE0; - /* 24*/ void *FileStorageBase_fun_5B9F10; - /* 28*/ void *FileStorageBase_fun_5B9F40; - /* 2C*/ void *scalar_destructor; + /* 1C*/ uint32_t *(__thiscall *FileStorageBase_fun_5B9EB0)(FileStorageBase *self, uint32_t *, int, int); // _DWORD *(__thiscall *)(_DWORD *this, _DWORD *, int, int) + /* 20*/ uint32_t *(__thiscall *FileStorageBase_fun_5B9EE0)(FileStorageBase *self, uint32_t *, int); // _DWORD *(__thiscall *)(_DWORD *this, _DWORD *, int) + /* 24*/ uint32_t *(__thiscall *FileStorageBase_fun_5B9F10)(FileStorageBase *self, uint32_t *, int); // _DWORD *(__thiscall *)(_DWORD *this, _DWORD *, int) + /* 28*/ uint32_t *(__thiscall *FileStorageBase_fun_5B9F40)(FileStorageBase *self, uint32_t *, int, int); // _DWORD *(__thiscall *)(_DWORD *this, _DWORD *, int, int) + /* 2C*/ void *(__thiscall *scalar_destructor)(FileStorageBase *self, char); // void *(__thiscall *)(void *Block, char) }; - + static_assert(sizeof(vtbl_t) == 0x30); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 4*/ MyDirectory *f4_dierctory; - + virtual ~FileStorageBase(); void dump() { printf("f4_dierctory: MyDirectory(%p)\n", this->f4_dierctory); @@ -4927,27 +4903,31 @@ namespace dk2 { #pragma pack(push, 1) class TbDiscFileStorage : public FileStorageBase { public: - static uint32_t const VFTABLE = 0x0066F3AC; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t /*: public FileStorageBase::vtbl_t */{ /* 0*/ void *releaseContent; - /* 4*/ void *CFileManager__fun_5B9DD0; - /* 8*/ void *CFileManager__fun_5B9E00; - /* C*/ void *CFileManager_openDiskFileStream; - /* 10*/ void *CFileManager__fun_5B9D60; - /* 14*/ void *formatFilePath; + /* 4*/ uint32_t *(__thiscall *CFileManager__fun_5B9DD0)(TbDiscFileStorage *self, uint32_t *, int, int); // _DWORD *(__thiscall *)(_DWORD *this, _DWORD *, int, int) + /* 8*/ uint32_t *(__thiscall *CFileManager__fun_5B9E00)(TbDiscFileStorage *self, uint32_t *, int); // _DWORD *(__thiscall *)(_DWORD *this, _DWORD *, int) + /* C*/ uint32_t *(__thiscall *CFileManager_openDiskFileStream)(TbDiscFileStorage *self, uint32_t *, TbDiscFile *, char *, int, int); // _DWORD *(__thiscall *)(TbDiscFileStorage *this, _DWORD *status, TbDiscFile *diskFile, char *fileName, int flags, int a6) + /* 10*/ uint32_t *(__thiscall *CFileManager__fun_5B9D60)(TbDiscFileStorage *self, uint32_t *, int, int); // _DWORD *(__thiscall *)(_DWORD *this, _DWORD *, int, int) + /* 14*/ uint32_t *(__thiscall *formatFilePath)(TbDiscFileStorage *self, uint32_t *, char *, char *, int); // _DWORD *(__thiscall *)(_DWORD *this, _DWORD *, char *, const char *, int) /* 18*/ void *TbWadFileStorage__fun_5B9E70; - /* 1C*/ void *CFileManager__fun_5B9EB0; - /* 20*/ void *CFileManager__fun_5B9EE0; - /* 24*/ void *CFileManager__fun_5B9F10; - /* 28*/ void *CFileManager__fun_5B9F40; - /* 2C*/ void *TbWadFileStorage__fun_55C000; + /* 1C*/ uint32_t *(__thiscall *CFileManager__fun_5B9EB0)(TbDiscFileStorage *self, uint32_t *, int, int); // _DWORD *(__thiscall *)(_DWORD *this, _DWORD *, int, int) + /* 20*/ uint32_t *(__thiscall *CFileManager__fun_5B9EE0)(TbDiscFileStorage *self, uint32_t *, int); // _DWORD *(__thiscall *)(_DWORD *this, _DWORD *, int) + /* 24*/ uint32_t *(__thiscall *CFileManager__fun_5B9F10)(TbDiscFileStorage *self, uint32_t *, int); // _DWORD *(__thiscall *)(_DWORD *this, _DWORD *, int) + /* 28*/ uint32_t *(__thiscall *CFileManager__fun_5B9F40)(TbDiscFileStorage *self, uint32_t *, int, int); // _DWORD *(__thiscall *)(_DWORD *this, _DWORD *, int, int) + /* 2C*/ int(__thiscall *TbWadFileStorage__fun_55C000)(TbDiscFileStorage *self, char); // int (__thiscall *)(void *Block, char) }; - - + static_assert(sizeof(vtbl_t) == 0x30); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + + virtual ~TbDiscFileStorage(); void dump() { } @@ -4958,32 +4938,36 @@ namespace dk2 { #pragma pack(push, 1) class CFileManager : public FileStorageBase { public: - static uint32_t const VFTABLE = 0x0066F214; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t /*: public FileStorageBase::vtbl_t */{ - /* 0*/ void *CFileManager__fun_556980; - /* 4*/ void *CFileManager__fun_5B9DD0; - /* 8*/ void *CFileManager__fun_5B9E00; - /* C*/ void *CFileManager__fun_5B9E30; - /* 10*/ void *CFileManager__fun_5B9D60; - /* 14*/ void *CFileManager__fun_5B9D90; - /* 18*/ void *CFileManager__fun_556B70; - /* 1C*/ void *CFileManager__fun_5B9EB0; - /* 20*/ void *CFileManager__fun_5B9EE0; - /* 24*/ void *CFileManager__fun_5B9F10; - /* 28*/ void *CFileManager__fun_5B9F40; - /* 2C*/ void *CFileManager__fun_5568A0; + /* 0*/ void(__thiscall *CFileManager__fun_556980)(CFileManager *self); // void (__thiscall *)(_DWORD *this) + /* 4*/ uint32_t *(__thiscall *CFileManager__fun_5B9DD0)(CFileManager *self, uint32_t *, int, int); // _DWORD *(__thiscall *)(_DWORD *this, _DWORD *a2, int a3, int a4) + /* 8*/ uint32_t *(__thiscall *CFileManager__fun_5B9E00)(CFileManager *self, uint32_t *, int); // _DWORD *(__thiscall *)(_DWORD *this, _DWORD *a2, int a3) + /* C*/ uint32_t *(__thiscall *CFileManager__fun_5B9E30)(CFileManager *self, uint32_t *, int, int, int, int); // _DWORD *(__thiscall *)(_DWORD *this, _DWORD *a2, int a3, int a4, int a5, int a6) + /* 10*/ uint32_t *(__thiscall *CFileManager__fun_5B9D60)(CFileManager *self, uint32_t *, int, int); // _DWORD *(__thiscall *)(_DWORD *this, _DWORD *a2, int a3, int a4) + /* 14*/ uint32_t *(__thiscall *CFileManager__fun_5B9D90)(CFileManager *self, uint32_t *, int, int, int); // _DWORD *(__thiscall *)(_DWORD *this, _DWORD *a2, int a3, int a4, int a5) + /* 18*/ int(__thiscall *CFileManager__fun_556B70)(CFileManager *self); // int (__thiscall *)(_DWORD *this) + /* 1C*/ uint32_t *(__thiscall *CFileManager__fun_5B9EB0)(CFileManager *self, uint32_t *, int, int); // _DWORD *(__thiscall *)(_DWORD *this, _DWORD *a2, int a3, int a4) + /* 20*/ uint32_t *(__thiscall *CFileManager__fun_5B9EE0)(CFileManager *self, uint32_t *, int); // _DWORD *(__thiscall *)(_DWORD *this, _DWORD *a2, int a3) + /* 24*/ uint32_t *(__thiscall *CFileManager__fun_5B9F10)(CFileManager *self, uint32_t *, int); // _DWORD *(__thiscall *)(_DWORD *this, _DWORD *a2, int a3) + /* 28*/ uint32_t *(__thiscall *CFileManager__fun_5B9F40)(CFileManager *self, uint32_t *, int, int); // _DWORD *(__thiscall *)(_DWORD *this, _DWORD *a2, int a3, int a4) + /* 2C*/ void *(__thiscall *CFileManager__fun_5568A0)(CFileManager *self, char); // void *(__thiscall *)(void *Block, char a2) }; - + static_assert(sizeof(vtbl_t) == 0x30); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 8*/ uint8_t gap_8[32]; /* 28*/ uint32_t field_28; /* 2C*/ uint32_t field_2C; /* 30*/ uint8_t gap_30[256]; /* 130*/ int field_130; - + virtual ~CFileManager(); void dump() { printf("field_28: %d\n", this->field_28); @@ -4998,7 +4982,7 @@ namespace dk2 { #pragma pack(push, 1) class MyKeyboard { public: - + /* 0*/ uint32_t field_0; /* 4*/ uint32_t f4; /* 8*/ uint8_t gap_8[8]; @@ -5157,7 +5141,7 @@ namespace dk2 { /* B39*/ uint32_t field_B39; /* B3D*/ char field_B3D[127]; /* BBC*/ char fBBC_end; - + void dump() { printf("field_0: %d\n", this->field_0); printf("f4: %d\n", this->f4); @@ -5323,7 +5307,7 @@ namespace dk2 { #pragma pack(push, 1) class MyResources_f29CB { public: - + /* 0*/ uint32_t field_0; /* 4*/ int f4_speechVolume; /* 8*/ int f8_soundEffectVolume; @@ -5339,7 +5323,7 @@ namespace dk2 { /* 30*/ int f30_speechEnabled; /* 34*/ int f34_sfxEnabled; /* 38*/ int f38_numberOfChannels; - + void dump() { printf("field_0: %d\n", this->field_0); printf("f4_speechVolume: %d\n", this->f4_speechVolume); @@ -5364,7 +5348,7 @@ namespace dk2 { #pragma pack(push, 1) class MyResources_f2E38Obj { public: - + /* 0*/ int field_0; /* 4*/ char field_4; /* 5*/ uint8_t gap_5[259]; @@ -5380,7 +5364,7 @@ namespace dk2 { /* 12C*/ int field_12C; /* 130*/ int field_130; /* 134*/ int field_134; - + void dump() { printf("field_0: %d\n", this->field_0); printf("field_4: %d\n", this->field_4); @@ -5405,7 +5389,7 @@ namespace dk2 { #pragma pack(push, 1) class MyResources { public: - + /* 0*/ uint32_t field_0; /* 4*/ char f4_diskDrive[260]; /* 108*/ char f108_executableDir[260]; @@ -5459,7 +5443,7 @@ namespace dk2 { /*2FC4*/ int field_2FC4; /*2FC8*/ int field_2FC8; /*2FCC*/ int field_2FCC; - + void dump() { printf("field_0: %d\n", this->field_0); printf("f4_diskDrive: %d\n", this->f4_diskDrive); @@ -5508,10 +5492,10 @@ namespace dk2 { #pragma pack(push, 1) class KeyEntry { public: - + /* 0*/ int f0_idx; /* 4*/ int f4_key; - + void dump() { printf("f0_idx: %d\n", this->f0_idx); printf("f4_key: %d\n", this->f4_key); @@ -5523,37 +5507,41 @@ namespace dk2 { #pragma pack(push, 1) class MyTextFont { public: - static uint32_t const VFTABLE = 0x0067BAF8; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t { - /* 0*/ void *release; - /* 4*/ void *addRef; - /* 8*/ void *scalar_destructor; - /* C*/ void *j_LockWrap_release; - /* 10*/ void *j_MyCom_addRef; - /* 14*/ void *readMBCharToFontIdx; - /* 18*/ void *sub_6335B0; - /* 1C*/ void *getCharSize; - /* 20*/ void *getMaxHeight; - /* 24*/ void *getFlags; - /* 28*/ void *probably_getFontType; + /* 0*/ LONG(__thiscall *release)(MyTextFont *self); // LONG (__thiscall *)(MySharedObj *this) + /* 4*/ LONG(__thiscall *addRef)(MyTextFont *self); // LONG (__thiscall *)(MySharedObj *this) + /* 8*/ void *(__thiscall *scalar_destructor)(MyTextFont *self, char); // void *(__thiscall *)(void *Block, char a2) + /* C*/ LONG(__thiscall *j_LockWrap_release)(MyTextFont *self); // LONG (__thiscall *)(volatile LONG *this) + /* 10*/ LONG(__thiscall *j_MyCom_addRef)(MyTextFont *self); // LONG (__thiscall *)(volatile LONG *this) + /* 14*/ int(__thiscall *readMBCharToFontIdx)(MyTextFont *self, uint32_t *); // int (__thiscall *)(MyTextFont *this, char **a2) + /* 18*/ __int16(__thiscall *sub_6335B0)(MyTextFont *self); // __int16 (__thiscall *)(_DWORD *this) + /* 1C*/ Pos2i *(__thiscall *getCharSize)(MyTextFont *self, Pos2i *, unsigned __int16); // Pos2i *(__thiscall *)(_DWORD *this, Pos2i *a2, unsigned __int16 a3) + /* 20*/ __int16(__thiscall *getMaxHeight)(MyTextFont *self); // __int16 (__thiscall *)(_DWORD *this) + /* 24*/ int(__thiscall *getFlags)(MyTextFont *self); // int (__thiscall *)(_DWORD *this) + /* 28*/ int(__thiscall *probably_getFontType)(MyTextFont *self); // int (__thiscall *)(_DWORD *this) }; - + static_assert(sizeof(vtbl_t) == 0x2C); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 4*/ uint8_t gap_4[4]; /* 8*/ MyFontHeader *f8_chrtbl; /* C*/ MyFontHeader *fC_chrtbl; - /* 10*/ void *f10_offsets; + /* 10*/ uint32_t *f10_offsets; /* 14*/ MyTextMBToUni *f14_MBToUniText_idx1; - + virtual ~MyTextFont(); void dump() { printf("gap_4: %d\n", this->gap_4); printf("f8_chrtbl: MyFontHeader(%p)\n", this->f8_chrtbl); printf("fC_chrtbl: MyFontHeader(%p)\n", this->fC_chrtbl); - printf("f10_offsets: %p\n", this->f10_offsets); + printf("f10_offsets: uint32_t(%p)\n", this->f10_offsets); printf("f14_MBToUniText_idx1: MyTextMBToUni(%p)\n", this->f14_MBToUniText_idx1); } }; @@ -5563,29 +5551,33 @@ namespace dk2 { #pragma pack(push, 1) class MyInputStream { public: - static uint32_t const VFTABLE = 0x006725D8; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t { - /* 0*/ void *scalar_destructor; - /* 4*/ void *readBytes; - /* 8*/ void *writeBytes; - /* C*/ void *seek; - /* 10*/ void *getSize; - /* 14*/ void *getOffs; - /* 18*/ void *mapFileToBuf; - /* 1C*/ void *unmapFile; - /* 20*/ void *flush; - /* 24*/ void *close; - /* 28*/ void *wrapStream; - /* 2C*/ void *getSemaphore; + /* 0*/ void *(__thiscall *scalar_destructor)(MyInputStream *self, char); // void *(__thiscall *)(void *Block, char a2) + /* 4*/ size_t(__thiscall *readBytes)(MyInputStream *self, void *, size_t); // size_t (__thiscall *)(MyInputStream *, void *, size_t) + /* 8*/ size_t(__thiscall *writeBytes)(MyInputStream *self, void *, size_t); // size_t (__thiscall *)(MyInputStream *, void *, size_t) + /* C*/ size_t(__thiscall *seek)(MyInputStream *self, size_t, int); // size_t (__thiscall *)(MyInputStream *, size_t, int) + /* 10*/ size_t(__thiscall *getSize)(MyInputStream *self); // size_t (__thiscall *)(MyInputStream *) + /* 14*/ size_t(__thiscall *getOffs)(MyInputStream *self); // size_t (__thiscall *)(MyInputStream *) + /* 18*/ int(__thiscall *mapFileToBuf)(MyInputStream *self, int, int); // int (__thiscall *)(MyInputStream *, int a2, int a3) + /* 1C*/ int(__thiscall *unmapFile)(MyInputStream *self, int); // int (__thiscall *)(MyInputStream *this, int a2) + /* 20*/ uint32_t *(__thiscall *flush)(MyInputStream *self, uint32_t *); // _DWORD *(__thiscall *)(MyInputStream *this, _DWORD *status) + /* 24*/ void(__thiscall *close)(MyInputStream *self); // void (__thiscall *)(MyInputStream *) + /* 28*/ MyInputStream *(__thiscall *wrapStream)(MyInputStream *self, MyInputStream *); // MyInputStream *(__thiscall *)(MyInputStream *this, MyInputStream *a2) + /* 2C*/ int(__thiscall *getSemaphore)(MyInputStream *self); // int (__thiscall *)(MyInputStream *) }; - + static_assert(sizeof(vtbl_t) == 0x30); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 4*/ MyInputStream *f0_wrappedStream; /* 8*/ int f4_refs; - + virtual ~MyInputStream(); void dump() { printf("f0_wrappedStream: MyInputStream(%p)\n", this->f0_wrappedStream); @@ -5598,35 +5590,39 @@ namespace dk2 { #pragma pack(push, 1) class MyMemoryMapStream : public MyInputStream { public: - static uint32_t const VFTABLE = 0x00673018; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t /*: public MyInputStream::vtbl_t */{ - /* 0*/ void *sub_6001D0; - /* 4*/ void *sub_600300; - /* 8*/ void *sub_600330; - /* C*/ void *sub_600360; - /* 10*/ void *sub_600390; - /* 14*/ void *sub_5FFDB0; - /* 18*/ void *CEngineInterface__fun_443150; - /* 1C*/ void *ret_void_1args; - /* 20*/ void *sub_6003D0; - /* 24*/ void *sub_6002E0; - /* 28*/ void *duplicate_7_1; - /* 2C*/ void *sub_6003C0; + /* 0*/ void *(__thiscall *sub_6001D0)(MyMemoryMapStream *self, char); // void *(__thiscall *)(void *Block, char a2) + /* 4*/ LONG(__thiscall *sub_600300)(MyMemoryMapStream *self, char *, LONG); // LONG (__thiscall *)(int this, HPSTR pch, LONG cch) + /* 8*/ LONG(__thiscall *sub_600330)(MyMemoryMapStream *self, char *, LONG); // LONG (__thiscall *)(int this, char *pch, LONG cch) + /* C*/ LONG(__thiscall *sub_600360)(MyMemoryMapStream *self, LONG, int); // LONG (__thiscall *)(int this, LONG lOffset, int iOrigin) + /* 10*/ LONG(__thiscall *sub_600390)(MyMemoryMapStream *self); // LONG (__thiscall *)(int this) + /* 14*/ int(__thiscall *sub_5FFDB0)(MyMemoryMapStream *self); // int (__thiscall *)(_DWORD *this) + /* 18*/ int(__stdcall *CEngineInterface__fun_443150)(int, int); // int (__stdcall *)(int a1, int a2) + /* 1C*/ void(__stdcall *ret_void_1args)(int); // void (__stdcall *)(int a1) + /* 20*/ uint32_t *(__thiscall *sub_6003D0)(MyMemoryMapStream *self, uint32_t *); // _DWORD *(__thiscall *)(_DWORD *this, _DWORD *a2) + /* 24*/ HMMIO__ *(__thiscall *sub_6002E0)(MyMemoryMapStream *self); // HMMIO (__thiscall *)(_DWORD *this) + /* 28*/ void *(__stdcall *duplicate_7_1)(); // void *(__stdcall *)() + /* 2C*/ char *(__thiscall *sub_6003C0)(MyMemoryMapStream *self); // char *(__thiscall *)(char *this) }; - + static_assert(sizeof(vtbl_t) == 0x30); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* C*/ int field_C; /* 10*/ int field_10; /* 14*/ void *_end_f14_semaphore; - + virtual ~MyMemoryMapStream(); void dump() { printf("field_C: %d\n", this->field_C); printf("field_10: %d\n", this->field_10); - printf("_end_f14_semaphore: %p\n", this->_end_f14_semaphore); + printf("_end_f14_semaphore: void(%p)\n", this->_end_f14_semaphore); } }; #pragma pack(pop) @@ -5635,39 +5631,43 @@ namespace dk2 { #pragma pack(push, 1) class MyFileStream : public MyInputStream { public: - static uint32_t const VFTABLE = 0x00672FE8; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t /*: public MyInputStream::vtbl_t */{ - /* 0*/ void *scalar_destructor; - /* 4*/ void *readBytes; - /* 8*/ void *writeBytes; - /* C*/ void *seek; - /* 10*/ void *getSize; - /* 14*/ void *getOffs; - /* 18*/ void *mapFileToBuf; - /* 1C*/ void *unmapFile; - /* 20*/ void *flush; - /* 24*/ void *close; - /* 28*/ void *ret_void_1args; - /* 2C*/ void *getSemaphore; + /* 0*/ void *(__thiscall *scalar_destructor)(MyFileStream *self, char); // void *(__thiscall *)(void *Block, char a2) + /* 4*/ DWORD(__thiscall *readBytes)(MyFileStream *self, void *, DWORD); // DWORD (__thiscall *)(int this, LPVOID lpBuffer, DWORD nNumberOfBytesToRead) + /* 8*/ DWORD(__thiscall *writeBytes)(MyFileStream *self, void *, DWORD); // DWORD (__thiscall *)(int this, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite) + /* C*/ DWORD(__thiscall *seek)(MyFileStream *self, LONG, DWORD); // DWORD (__thiscall *)(int this, LONG lDistanceToMove, DWORD dwMoveMethod) + /* 10*/ DWORD(__thiscall *getSize)(MyFileStream *self); // DWORD (__thiscall *)(HANDLE *this) + /* 14*/ int(__thiscall *getOffs)(MyFileStream *self); // int (__thiscall *)(_DWORD *this) + /* 18*/ char *(__thiscall *mapFileToBuf)(MyFileStream *self, int, DWORD); // char *(__thiscall *)(int this, int a2, DWORD dwFileOffsetHigh) + /* 1C*/ void *(__thiscall *unmapFile)(MyFileStream *self, void *); // LPCVOID (__thiscall *)(_DWORD *this, LPCVOID lpBaseAddress) + /* 20*/ uint32_t *(__thiscall *flush)(MyFileStream *self, uint32_t *); // _DWORD *(__thiscall *)(HANDLE *this, _DWORD *a2) + /* 24*/ void *(__thiscall *close)(MyFileStream *self); // HANDLE (__thiscall *)(HANDLE *this) + /* 28*/ void(__stdcall *ret_void_1args)(int); // void (__stdcall *)(int a1) + /* 2C*/ char *(__thiscall *getSemaphore)(MyFileStream *self); // char *(__thiscall *)(char *this) }; - + static_assert(sizeof(vtbl_t) == 0x30); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* C*/ void *fC_hFile; /* 10*/ int f10_offs; /* 14*/ int f14_hFileMapping; /* 18*/ int f18_fileMapBuf; /* 1C*/ void *f1C_semaphore; - + virtual ~MyFileStream(); void dump() { - printf("fC_hFile: %p\n", this->fC_hFile); + printf("fC_hFile: void(%p)\n", this->fC_hFile); printf("f10_offs: %d\n", this->f10_offs); printf("f14_hFileMapping: %d\n", this->f14_hFileMapping); printf("f18_fileMapBuf: %d\n", this->f18_fileMapBuf); - printf("f1C_semaphore: %p\n", this->f1C_semaphore); + printf("f1C_semaphore: void(%p)\n", this->f1C_semaphore); } }; #pragma pack(pop) @@ -5676,30 +5676,34 @@ namespace dk2 { #pragma pack(push, 1) class MyStr { public: - static uint32_t const VFTABLE = 0x006722D0; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t { - /* 0*/ void *format; - /* 4*/ void *resize; - /* 8*/ void *malloc; - /* C*/ void *scalar_destructor; - /* 10*/ void *assignChar; - /* 14*/ void *assign; - /* 18*/ void *assignMyStr; - /* 1C*/ void *assignMySubStr; - /* 20*/ void *append; - /* 24*/ void *appendChar; - /* 28*/ void *appendMySubStr; + /* 0*/ int(__cdecl *format)(int, int, ...); // int (*)(int a1, int a2, ...) + /* 4*/ int(__thiscall *resize)(MyStr *self, unsigned int); // int (__thiscall *)(MyStr *this, unsigned int a2) + /* 8*/ uint32_t *(__thiscall *malloc)(MyStr *self, unsigned int); // _DWORD *(__thiscall *)(_DWORD *this, unsigned int a2) + /* C*/ void *(__thiscall *scalar_destructor)(MyStr *self, char); // void *(__thiscall *)(void *Block, char a2) + /* 10*/ uint32_t *(__thiscall *assignChar)(MyStr *self, uint8_t *); // _BYTE **(__thiscall *)(_BYTE **this, _BYTE *a2) + /* 14*/ uint32_t *(__thiscall *assign)(MyStr *self, char *); // char **(__thiscall *)(MyStr *this, const char *Str) + /* 18*/ int(__thiscall *assignMyStr)(MyStr *self, uint32_t *); // int (__thiscall *)(int *this, _DWORD *a2) + /* 1C*/ void *(__thiscall *assignMySubStr)(MyStr *self, MySubStr *); // void *(__thiscall *)(void *this, MySubStr *a2) + /* 20*/ uint32_t *(__thiscall *append)(MyStr *self, char *); // _DWORD *(__thiscall *)(_DWORD *this, char *Str) + /* 24*/ uint32_t *(__thiscall *appendChar)(MyStr *self, uint8_t *); // _DWORD *(__thiscall *)(_DWORD *this, _BYTE *a2) + /* 28*/ void *(__thiscall *appendMySubStr)(MyStr *self, int); // void *(__thiscall *)(void *this, int a2) }; - + static_assert(sizeof(vtbl_t) == 0x2C); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 4*/ size_t f4_length; /* 8*/ char *f8_buf; /* C*/ int fC_bufSize; /* 10*/ int f10_bufAlign; - + virtual ~MyStr(); void dump() { printf("f4_length: %d\n", this->f4_length); @@ -5714,20 +5718,24 @@ namespace dk2 { #pragma pack(push, 1) class MySubStr { public: - static uint32_t const VFTABLE = 0x00672300; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t { - /* 0*/ void *ret_void_0args; - /* 4*/ void *ret_void_1args; + /* 0*/ void(__cdecl *ret_void_0args)(); // void (__cdecl *)() + /* 4*/ void(__stdcall *ret_void_1args)(int); // void (__stdcall *)(int a1) }; - + static_assert(sizeof(vtbl_t) == 0x8); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 4*/ size_t f4_length; /* 8*/ char *f8_buf; /* C*/ int field_C; - + virtual ~MySubStr(); void dump() { printf("f4_length: %d\n", this->f4_length); @@ -5741,7 +5749,7 @@ namespace dk2 { #pragma pack(push, 1) class TbDiscFileStorage_vtbl { public: - + /* 0*/ void *releaseContent; /* 4*/ void *CFileManager__fun_5B9DD0; /* 8*/ void *CFileManager__fun_5B9E00; @@ -5754,20 +5762,20 @@ namespace dk2 { /* 24*/ void *CFileManager__fun_5B9F10; /* 28*/ void *CFileManager__fun_5B9F40; /* 2C*/ void *TbWadFileStorage__fun_55C000; - + void dump() { - printf("releaseContent: %p\n", this->releaseContent); - printf("CFileManager__fun_5B9DD0: %p\n", this->CFileManager__fun_5B9DD0); - printf("CFileManager__fun_5B9E00: %p\n", this->CFileManager__fun_5B9E00); - printf("CFileManager_openDiskFileStream: %p\n", this->CFileManager_openDiskFileStream); - printf("CFileManager__fun_5B9D60: %p\n", this->CFileManager__fun_5B9D60); - printf("formatFilePath: %p\n", this->formatFilePath); - printf("TbWadFileStorage__fun_5B9E70: %p\n", this->TbWadFileStorage__fun_5B9E70); - printf("CFileManager__fun_5B9EB0: %p\n", this->CFileManager__fun_5B9EB0); - printf("CFileManager__fun_5B9EE0: %p\n", this->CFileManager__fun_5B9EE0); - printf("CFileManager__fun_5B9F10: %p\n", this->CFileManager__fun_5B9F10); - printf("CFileManager__fun_5B9F40: %p\n", this->CFileManager__fun_5B9F40); - printf("TbWadFileStorage__fun_55C000: %p\n", this->TbWadFileStorage__fun_55C000); + printf("releaseContent: void(%p)\n", this->releaseContent); + printf("CFileManager__fun_5B9DD0: void(%p)\n", this->CFileManager__fun_5B9DD0); + printf("CFileManager__fun_5B9E00: void(%p)\n", this->CFileManager__fun_5B9E00); + printf("CFileManager_openDiskFileStream: void(%p)\n", this->CFileManager_openDiskFileStream); + printf("CFileManager__fun_5B9D60: void(%p)\n", this->CFileManager__fun_5B9D60); + printf("formatFilePath: void(%p)\n", this->formatFilePath); + printf("TbWadFileStorage__fun_5B9E70: void(%p)\n", this->TbWadFileStorage__fun_5B9E70); + printf("CFileManager__fun_5B9EB0: void(%p)\n", this->CFileManager__fun_5B9EB0); + printf("CFileManager__fun_5B9EE0: void(%p)\n", this->CFileManager__fun_5B9EE0); + printf("CFileManager__fun_5B9F10: void(%p)\n", this->CFileManager__fun_5B9F10); + printf("CFileManager__fun_5B9F40: void(%p)\n", this->CFileManager__fun_5B9F40); + printf("TbWadFileStorage__fun_55C000: void(%p)\n", this->TbWadFileStorage__fun_55C000); } }; #pragma pack(pop) @@ -5776,16 +5784,12 @@ namespace dk2 { #pragma pack(push, 1) class MyDirectory { public: - static uint32_t const VFTABLE = 0x00672708; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - + /* 4*/ MyDirectory *f0_subStream; /* 8*/ int f8_hSemaphore; /* C*/ int f8_refs; /* 10*/ MyStr f10_name; - + virtual ~MyDirectory(); void dump() { printf("f0_subStream: MyDirectory(%p)\n", this->f0_subStream); @@ -5799,26 +5803,27 @@ namespace dk2 { #pragma pack(push, 1) class MyFileIterator : public MyDirectory { public: - struct vtbl_t /*: public MyDirectory::vtbl_t */{ - /* 0*/ void *scalar_deleting_destructor; - /* 4*/ void *createStreamIfNotYet; - /* 8*/ void *sub_5D9290; - /* C*/ void *sub_5D93E0; - /* 10*/ void *sub_5D82A0; - /* 14*/ void *formatFilePath; - /* 18*/ void *sub_5D8360; - /* 1C*/ void *sub_5D96C0; - /* 20*/ void *sub_5D9740; - /* 24*/ void *sub_5D97C0; - /* 28*/ void *sub_5D9860; - /* 2C*/ void *wrapFile; - /* 30*/ void *nullsub_1; - /* 34*/ void *close; + /* 0*/ void *(__thiscall *scalar_deleting_destructor)(MyFileIterator *self, char); // stdiobuf *(__thiscall *)(stdiobuf *this, char a2) + /* 4*/ uint32_t *(__thiscall *createStreamIfNotYet)(MyFileIterator *self, uint32_t *, uint32_t *, int, int, int); // _DWORD *(__thiscall *)(void *this, _DWORD *a2, _DWORD *stream, int a4, int a5, int a6) + /* 8*/ uint32_t *(__thiscall *sub_5D9290)(MyFileIterator *self, uint32_t *, char *, int); // _DWORD *(__thiscall *)(MySubStr *this, _DWORD *a2, char *a3, int a4) + /* C*/ uint32_t *(__thiscall *sub_5D93E0)(MyFileIterator *self, uint32_t *, int); // _DWORD *(__thiscall *)(_DWORD *this, _DWORD *a2, int a3) + /* 10*/ uint32_t *(__thiscall *sub_5D82A0)(MyFileIterator *self, uint32_t *, int, int); // _DWORD *(__thiscall *)(void *this, _DWORD *a2, int a3, int a4) + /* 14*/ uint32_t *(__thiscall *formatFilePath)(MyFileIterator *self, uint32_t *, char *, int, int); // _DWORD *(__thiscall *)(void *this, _DWORD *a2, const char *a3, int a4, int a5) + /* 18*/ int(__thiscall *sub_5D8360)(MyFileIterator *self); // int (__thiscall *)(_DWORD *this) + /* 1C*/ int(__thiscall *sub_5D96C0)(MyFileIterator *self, int, int, DWORD); // int (__thiscall *)(MySubStr *this, int a2, int a3, DWORD dwFileAttributes) + /* 20*/ int(__thiscall *sub_5D9740)(MyFileIterator *self, int, char *); // int (__thiscall *)(MySubStr *this, int a2, char *a3) + /* 24*/ int(__thiscall *sub_5D97C0)(MyFileIterator *self, int, char *); // int (__thiscall *)(MySubStr *this, int a2, char *a3) + /* 28*/ int(__thiscall *sub_5D9860)(MyFileIterator *self, int, char *, char *); // int (__thiscall *)(MySubStr *this, int a2, char *a3, char *a4) + /* 2C*/ int(__thiscall *wrapFile)(MyFileIterator *self, int); // int (__thiscall *)(_DWORD *this, int a2) + /* 30*/ void(__thiscall *nullsub_1)(MyFileIterator *self); // void (__thiscall *)(void *this) + /* 34*/ void *(__thiscall *close)(MyFileIterator *self); // HANDLE (__thiscall *)(HANDLE *this) }; - + static_assert(sizeof(vtbl_t) == 0x38); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + /* 24*/ int _end_f24_hFind; - + virtual ~MyFileIterator(); void dump() { printf("_end_f24_hFind: %d\n", this->_end_f24_hFind); @@ -5830,25 +5835,29 @@ namespace dk2 { #pragma pack(push, 1) class DiscFileBase { public: - static uint32_t const VFTABLE = 0x00671F80; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t { - /* 0*/ void *scalar_destructor; - /* 4*/ void *super_destructor; - /* 8*/ void *readBytes; - /* C*/ void *writeBytes; - /* 10*/ void *seek; - /* 14*/ void *getSize; - /* 18*/ void *getOffs; - /* 1C*/ void *mapToBuf; - /* 20*/ void *flush; + /* 0*/ void *(__thiscall *scalar_destructor)(DiscFileBase *self, char); // void *(__thiscall *)(void *Block, char a2) + /* 4*/ LONG(__thiscall *super_destructor)(DiscFileBase *self); // LONG (__thiscall *)(_DWORD *this) + /* 8*/ int(__thiscall *readBytes)(DiscFileBase *self, void *, int); // int (__thiscall *)(DiscFileBase *this, void *a2, int a3) + /* C*/ int(__thiscall *writeBytes)(DiscFileBase *self, int, int); // int (__thiscall *)(_DWORD *this, int a2, int a3) + /* 10*/ int(__thiscall *seek)(DiscFileBase *self, int, int); // int (__thiscall *)(_DWORD *this, int a2, int a3) + /* 14*/ int(__thiscall *getSize)(DiscFileBase *self); // int (__thiscall *)(_DWORD *this) + /* 18*/ int(__thiscall *getOffs)(DiscFileBase *self); // int (__thiscall *)(_DWORD *this) + /* 1C*/ int(__thiscall *mapToBuf)(DiscFileBase *self); // int (__thiscall *)(_DWORD *this) + /* 20*/ uint32_t *(__thiscall *flush)(DiscFileBase *self, uint32_t *); // _DWORD *(__thiscall *)(_DWORD *this, _DWORD *a2) }; - + static_assert(sizeof(vtbl_t) == 0x24); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 4*/ MyInputStream *f0_stream; - + virtual ~DiscFileBase(); void dump() { printf("f0_stream: MyInputStream(%p)\n", this->f0_stream); @@ -5860,25 +5869,29 @@ namespace dk2 { #pragma pack(push, 1) class TbDiscFile : public DiscFileBase { public: - static uint32_t const VFTABLE = 0x0066F24C; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t /*: public DiscFileBase::vtbl_t */{ - /* 0*/ void *scalar_destructor; - /* 4*/ void *super_destructor; - /* 8*/ void *readBytes; - /* C*/ void *writeBytes; - /* 10*/ void *seek; - /* 14*/ void *getSize; - /* 18*/ void *getOffs; - /* 1C*/ void *mapToBuf; - /* 20*/ void *flush; - /* 24*/ void *openStream; + /* 0*/ void *(__thiscall *scalar_destructor)(TbDiscFile *self, char); // void *(__thiscall *)(void *Block, char a2) + /* 4*/ LONG(__thiscall *super_destructor)(TbDiscFile *self); // LONG (__thiscall *)(_DWORD *this) + /* 8*/ int(__thiscall *readBytes)(TbDiscFile *self, int, int); // int (__thiscall *)(TbDiscFile *this, int a2, int a3) + /* C*/ int(__thiscall *writeBytes)(TbDiscFile *self, int, int); // int (__thiscall *)(TbDiscFile *this, int a2, int a3) + /* 10*/ int(__thiscall *seek)(TbDiscFile *self, int, int); // int (__thiscall *)(TbDiscFile *this, int a2, int a3) + /* 14*/ int(__thiscall *getSize)(TbDiscFile *self); // int (__thiscall *)(TbDiscFile *this) + /* 18*/ int(__thiscall *getOffs)(TbDiscFile *self); // int (__thiscall *)(TbDiscFile *this) + /* 1C*/ int(__thiscall *mapToBuf)(TbDiscFile *self); // int (__thiscall *)(_DWORD *this) + /* 20*/ uint32_t *(__thiscall *flush)(TbDiscFile *self, uint32_t *); // _DWORD *(__thiscall *)(_DWORD *this, _DWORD *a2) + /* 24*/ uint32_t *(__thiscall *openStream)(TbDiscFile *self, uint32_t *, char *, int); // _DWORD *(__thiscall *)(void *this, _DWORD *status, char *path, int flags) }; - - + static_assert(sizeof(vtbl_t) == 0x28); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + + virtual ~TbDiscFile(); void dump() { } @@ -5889,11 +5902,11 @@ namespace dk2 { #pragma pack(push, 1) class MyLangObj { public: - + /* 0*/ MyFileStorage *f0_resourceIndex; /* 4*/ TbDiscFileStorage f4_diskFileStor; /* C*/ int fC_diskStorHasContent; - + void dump() { printf("f0_resourceIndex: MyFileStorage(%p)\n", this->f0_resourceIndex); printf("fC_diskStorHasContent: %d\n", this->fC_diskStorHasContent); @@ -5905,28 +5918,32 @@ namespace dk2 { #pragma pack(push, 1) class MyLocalStr { public: - static uint32_t const VFTABLE = 0x00672EC0; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t { - /* 0*/ void *format; - /* 4*/ void *resize; - /* 8*/ void *scalar_destructor; - /* C*/ void *assignChar; - /* 10*/ void *assign; - /* 14*/ void *assignMyStr; - /* 18*/ void *append; - /* 1C*/ void *appendChar; - /* 20*/ void *appendMyLocalStr; + /* 0*/ int(__cdecl *format)(int, char *, ...); // int (*)(int a1, char *Format, ...) + /* 4*/ int(__thiscall *resize)(MyLocalStr *self, unsigned int); // int (__thiscall *)(MyLocalStr *this, unsigned int length) + /* 8*/ void *(__thiscall *scalar_destructor)(MyLocalStr *self, char); // std::locale::facet *(__thiscall *)(std::locale::facet *this, char a2) + /* C*/ uint32_t *(__thiscall *assignChar)(MyLocalStr *self, uint8_t *); // _BYTE **(__thiscall *)(_BYTE **this, _BYTE *a2) + /* 10*/ void *(__thiscall *assign)(MyLocalStr *self, char *); // void *(__thiscall *)(void *this, char *Source) + /* 14*/ uint32_t *(__thiscall *assignMyStr)(MyLocalStr *self, MyStr *); // char **(__thiscall *)(char **this, MyStr *a2) + /* 18*/ int(__thiscall *append)(MyLocalStr *self, char *); // int (__thiscall *)(int this, char *Source) + /* 1C*/ uint32_t *(__thiscall *appendChar)(MyLocalStr *self, uint8_t *); // _DWORD *(__thiscall *)(_DWORD *this, _BYTE *a2) + /* 20*/ void *(__thiscall *appendMyLocalStr)(MyLocalStr *self, int); // void *(__thiscall *)(void *this, int a2) }; - + static_assert(sizeof(vtbl_t) == 0x24); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 4*/ size_t f4_len; /* 8*/ char *f8_buf; /* C*/ size_t fC_buf_size; /* 10*/ int f10_is_truncated; - + virtual ~MyLocalStr(); void dump() { printf("f4_len: %d\n", this->f4_len); @@ -5941,21 +5958,25 @@ namespace dk2 { #pragma pack(push, 1) class MyTextBase { public: - static uint32_t const VFTABLE = 0x0067B968; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t { - /* 0*/ void *release; - /* 4*/ void *addRef; - /* 8*/ void *scalar_destructor; - /* C*/ void *j_release; - /* 10*/ void *j_addRef; + /* 0*/ LONG(__thiscall *release)(MyTextBase *self); // LONG (__thiscall *)(MySharedObj *this) + /* 4*/ LONG(__thiscall *addRef)(MyTextBase *self); // LONG (__thiscall *)(MySharedObj *this) + /* 8*/ void *(__thiscall *scalar_destructor)(MyTextBase *self, char); // std::locale::facet *(__thiscall *)(std::locale::facet *this, char a2) + /* C*/ LONG(__thiscall *j_release)(MyTextBase *self); // LONG (__thiscall *)(volatile LONG *this) + /* 10*/ LONG(__thiscall *j_addRef)(MyTextBase *self); // LONG (__thiscall *)(volatile LONG *this) }; - + static_assert(sizeof(vtbl_t) == 0x14); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 4*/ int refs; - + virtual ~MyTextBase(); void dump() { printf("refs: %d\n", this->refs); @@ -5967,23 +5988,27 @@ namespace dk2 { #pragma pack(push, 1) class MyFileStorage : public MyTextBase { public: - static uint32_t const VFTABLE = 0x0067BA30; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t /*: public MyTextBase::vtbl_t */{ - /* 0*/ void *release; - /* 4*/ void *MyCom_addRef; - /* 8*/ void *sub_62FD60; - /* C*/ void *j_LockWrap_release; - /* 10*/ void *j_MyCom_addRef; + /* 0*/ LONG(__thiscall *release)(MyFileStorage *self); // LONG (__thiscall *)(MySharedObj *this) + /* 4*/ LONG(__thiscall *MyCom_addRef)(MyFileStorage *self); // LONG (__thiscall *)(MySharedObj *this) + /* 8*/ void *(__thiscall *sub_62FD60)(MyFileStorage *self, char); // void *(__thiscall *)(void *Block, char a2) + /* C*/ LONG(__thiscall *j_LockWrap_release)(MyFileStorage *self); // LONG (__thiscall *)(volatile LONG *this) + /* 10*/ LONG(__thiscall *j_MyCom_addRef)(MyFileStorage *self); // LONG (__thiscall *)(volatile LONG *this) }; - + static_assert(sizeof(vtbl_t) == 0x14); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 8*/ ResourceIndexEntry *f8_resourceIndex_start; /* C*/ ResourceIndexEntry *fC_resourceIndex_end; /* 10*/ TbDiscFileStorage f10_diskFileStor; - + virtual ~MyFileStorage(); void dump() { printf("f8_resourceIndex_start: ResourceIndexEntry(%p)\n", this->f8_resourceIndex_start); @@ -5996,11 +6021,11 @@ namespace dk2 { #pragma pack(push, 1) class Vtable_672774 { public: - + /* 0*/ void *TbCharStringList___scalar_deleting_destructor_uint; - + void dump() { - printf("TbCharStringList___scalar_deleting_destructor_uint: %p\n", this->TbCharStringList___scalar_deleting_destructor_uint); + printf("TbCharStringList___scalar_deleting_destructor_uint: void(%p)\n", this->TbCharStringList___scalar_deleting_destructor_uint); } }; #pragma pack(pop) @@ -6009,7 +6034,7 @@ namespace dk2 { #pragma pack(push, 1) class WadHeader { public: - + /* 0*/ int f0_signature; /* 4*/ uint32_t f4_version; /* 8*/ uint8_t gap_8[64]; @@ -6017,7 +6042,7 @@ namespace dk2 { /* 4C*/ uint32_t f4C_namesOffset; /* 50*/ uint32_t f50_namesSize; /* 54*/ int _end_f54; - + void dump() { printf("f0_signature: %d\n", this->f0_signature); printf("f4_version: %d\n", this->f4_version); @@ -6034,10 +6059,10 @@ namespace dk2 { #pragma pack(push, 1) class MyALList { public: - + /* 0*/ MyALListEntry *f0_first; /* 4*/ int f4_count; - + void dump() { printf("f0_first: MyALListEntry(%p)\n", this->f0_first); printf("f4_count: %d\n", this->f4_count); @@ -6049,13 +6074,13 @@ namespace dk2 { #pragma pack(push, 1) class WadContent { public: - + /* 0*/ WadDirObj *f0_rootDir; /* 4*/ int f4_namesBuf; /* 8*/ MyWadUnkObj *f8_wadUnkObj; /* C*/ MyALList fC_allDirs; /* 14*/ MyALList f14_allFiles; - + void dump() { printf("f0_rootDir: WadDirObj(%p)\n", this->f0_rootDir); printf("f4_namesBuf: %d\n", this->f4_namesBuf); @@ -6068,27 +6093,31 @@ namespace dk2 { #pragma pack(push, 1) class MyWadDirectory : public MyDirectory { public: - static uint32_t const VFTABLE = 0x00672740; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t /*: public MyDirectory::vtbl_t */{ - /* 0*/ void *scalar_deleting_destructor; - /* 4*/ void *sub_5D8A60; - /* 8*/ void *sub_5D8850; - /* C*/ void *sub_5D8A00; - /* 10*/ void *MyFileSmth_sub_5D82A0; - /* 14*/ void *MyFileSmth_formatFilePath; - /* 18*/ void *MyFileSmth_sub_5D8360; - /* 1C*/ void *sub_61B080; - /* 20*/ void *sub_5D8B00; - /* 24*/ void *sub_628BA0; - /* 28*/ void *duplicate_7_1; - /* 2C*/ void *MyFileSmth_sub_5D8280; - /* 30*/ void *clearData; + /* 0*/ void *(__thiscall *scalar_deleting_destructor)(MyWadDirectory *self, char); // void *(__thiscall *)(void *Block, char a2) + /* 4*/ uint32_t *(__thiscall *sub_5D8A60)(MyWadDirectory *self, uint32_t *, uint32_t *, int, int, int); // _DWORD *(__thiscall *)(int this, _DWORD *a2, _DWORD *a3, int a4, int a5, int a6) + /* 8*/ uint32_t *(__thiscall *sub_5D8850)(MyWadDirectory *self, uint32_t *, char *, unsigned int); // _DWORD *(__thiscall *)(MySubStr *this, _DWORD *a2, const char *a3, unsigned int a4) + /* C*/ uint32_t *(__thiscall *sub_5D8A00)(MyWadDirectory *self, uint32_t *, int); // _DWORD *(__thiscall *)(_DWORD *this, _DWORD *a2, int a3) + /* 10*/ uint32_t *(__thiscall *MyFileSmth_sub_5D82A0)(MyWadDirectory *self, uint32_t *, int, int); // _DWORD *(__thiscall *)(void *this, _DWORD *a2, int a3, int a4) + /* 14*/ uint32_t *(__thiscall *MyFileSmth_formatFilePath)(MyWadDirectory *self, uint32_t *, char *, int, int); // _DWORD *(__thiscall *)(MyDirectory *this, _DWORD *status, const char *buf, int fileName, int bufLimit) + /* 18*/ int(__thiscall *MyFileSmth_sub_5D8360)(MyWadDirectory *self); // int (__thiscall *)(_DWORD *this) + /* 1C*/ uint32_t *(__stdcall *sub_61B080)(uint32_t *, int, int); // _DWORD *(__stdcall *)(_DWORD *a1, int a2, int a3) + /* 20*/ uint32_t *(__stdcall *sub_5D8B00)(uint32_t *, int); // _DWORD *(__stdcall *)(_DWORD *a1, int a2) + /* 24*/ uint32_t *(__stdcall *sub_628BA0)(uint32_t *, int); // _DWORD *(__stdcall *)(_DWORD *a1, int a2) + /* 28*/ void *(__stdcall *duplicate_7_1)(); // void *(__stdcall *)() + /* 2C*/ MyDirectory *(__thiscall *MyFileSmth_sub_5D8280)(MyWadDirectory *self, int); // MyDirectory *(__thiscall *)(MyFileIterator *this, int a2) + /* 30*/ int(__thiscall *clearData)(MyWadDirectory *self); // int (__thiscall *)(MyWadDirectory *this) }; - + static_assert(sizeof(vtbl_t) == 0x34); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 24*/ MyStr f24_str1; /* 38*/ uint32_t field_38; /* 3C*/ Vtable_672774 *__vftable_3C; @@ -6100,7 +6129,7 @@ namespace dk2 { /* B8*/ TbDiscFile fB8_diskFile; /* C0*/ MyInputStream *fC0_stream; /* C4*/ WadContent _end_fC4_uniq_obj; - + virtual ~MyWadDirectory(); void dump() { printf("field_38: %d\n", this->field_38); @@ -6115,46 +6144,34 @@ namespace dk2 { static_assert(sizeof(MyWadDirectory) == 0xE0); #pragma pack(push, 1) - class MyInputStream_fields { + class MyCachedOffsStream : public MyInputStream { public: - - /* 0*/ MyInputStream *f0_wrappedStream; - /* 4*/ int f4_refs; - - void dump() { - printf("f0_wrappedStream: MyInputStream(%p)\n", this->f0_wrappedStream); - printf("f4_refs: %d\n", this->f4_refs); - } - }; -#pragma pack(pop) - static_assert(sizeof(MyInputStream_fields) == 0x8); - -#pragma pack(push, 1) - class MyCachedOffsStream { + struct vtbl_t /*: public MyInputStream::vtbl_t */{ + /* 0*/ void *(__thiscall *sub_5FFAF0)(MyCachedOffsStream *self, char); // void *(__thiscall *)(void *Block, char a2) + /* 4*/ size_t(__thiscall *obj_readBytes_redirectToChild_plus)(MyCachedOffsStream *self, void *, int); // size_t (__thiscall *)(MyInputStream *this, void *a2, int a3) + /* 8*/ size_t(__thiscall *obj_writeBytes_redirectToChild_plus)(MyCachedOffsStream *self, void *, int); // size_t (__thiscall *)(MyInputStream *this, void *a2, int a3) + /* C*/ int(__thiscall *obj_seek_redirectToChild_plus)(MyCachedOffsStream *self, int, int); // int (__thiscall *)(MyInputStream *this, int a2, int a3) + /* 10*/ size_t(__thiscall *obj_getSize_redirectToChild)(MyCachedOffsStream *self); // size_t (__thiscall *)(MyInputStream *this) + /* 14*/ int(__thiscall *obj_getOffs)(MyCachedOffsStream *self); // int (__thiscall *)(MyInputStream *this) + /* 18*/ int(__thiscall *MyInputStream_mapToBuf_redirectToChild)(MyCachedOffsStream *self, int, int); // int (__thiscall *)(MyInputStream *this, int a2, int a3) + /* 1C*/ int(__thiscall *MyInputStream_unmap_redirectToChild)(MyCachedOffsStream *self, int); // int (__thiscall *)(MyInputStream *this, int a2) + /* 20*/ uint32_t *(__thiscall *MyInputStream_flush_stub)(MyCachedOffsStream *self, uint32_t *); // _DWORD *(__thiscall *)(MyInputStream *this, _DWORD *a1) + /* 24*/ void(__thiscall *obj_close)(MyCachedOffsStream *self); // void (__thiscall *)(MyInputStream *this) + /* 28*/ MyInputStream *(__thiscall *MyInputStream_pushSubStream)(MyCachedOffsStream *self, MyInputStream *); // MyInputStream *(__thiscall *)(MyInputStream *this, MyInputStream *sub) + /* 2C*/ int(__thiscall *MyInputStream_getSemaphore_redirectToChild)(MyCachedOffsStream *self); // int (__thiscall *)(MyInputStream *this) + }; + static_assert(sizeof(vtbl_t) == 0x30); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; public: - static uint32_t const VFTABLE = 0x006730C0; - + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - - struct vtbl_t { - /* 0*/ void *sub_5FFAF0; - /* 4*/ void *obj_readBytes_redirectToChild_plus; - /* 8*/ void *obj_writeBytes_redirectToChild_plus; - /* C*/ void *obj_seek_redirectToChild_plus; - /* 10*/ void *obj_getSize_redirectToChild; - /* 14*/ void *obj_getOffs; - /* 18*/ void *MyInputStream_mapToBuf_redirectToChild; - /* 1C*/ void *MyInputStream_unmap_redirectToChild; - /* 20*/ void *MyInputStream_flush_stub; - /* 24*/ void *obj_close; - /* 28*/ void *MyInputStream_pushSubStream; - /* 2C*/ void *MyInputStream_getSemaphore_redirectToChild; - }; - - /* 4*/ MyInputStream_fields super; + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* C*/ int fC_cachedOffs; - + virtual ~MyCachedOffsStream(); void dump() { printf("fC_cachedOffs: %d\n", this->fC_cachedOffs); @@ -6166,11 +6183,11 @@ namespace dk2 { #pragma pack(push, 1) class MySemaphore { public: - + /* 0*/ uint32_t f0_hSemaphore; /* 4*/ int f4_status; /* 8*/ int f8_semaTaken; - + void dump() { printf("f0_hSemaphore: %d\n", this->f0_hSemaphore); printf("f4_status: %d\n", this->f4_status); @@ -6183,27 +6200,31 @@ namespace dk2 { #pragma pack(push, 1) class MyConcurrentStream : public MyCachedOffsStream { public: - static uint32_t const VFTABLE = 0x00672EF8; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t /*: public MyCachedOffsStream::vtbl_t */{ - /* 0*/ void *MyCachedOffsStream_scalar_destructor; - /* 4*/ void *MyConcurrentStream_readBytes; - /* 8*/ void *MyConcurrentStream_writeBytes; - /* C*/ void *MyConcurrentStream_seek; - /* 10*/ void *MyConcurrentStream_getSize; - /* 14*/ void *MyCachedOffsStream_getOffs; - /* 18*/ void *MyInputStream_mapToBuf_redirect; - /* 1C*/ void *MyInputStream_unmap_redirect; - /* 20*/ void *MyInputStream_flush_stub; - /* 24*/ void *MyCachedOffsStream_close; - /* 28*/ void *MyConcurrentStream_wrapStream; - /* 2C*/ void *MyInputStream_getSemaphore_redirect; + /* 0*/ void *(__thiscall *MyCachedOffsStream_scalar_destructor)(MyConcurrentStream *self, char); // void *(__thiscall *)(void *Block, char a2) + /* 4*/ size_t(__thiscall *MyConcurrentStream_readBytes)(MyConcurrentStream *self, int, int); // size_t (__thiscall *)(MyInputStream *this, int a2, int a3) + /* 8*/ size_t(__thiscall *MyConcurrentStream_writeBytes)(MyConcurrentStream *self, void *, int); // size_t (__thiscall *)(MyCachedOffsStream *this, void *a2, int a3) + /* C*/ int(__thiscall *MyConcurrentStream_seek)(MyConcurrentStream *self, int, int); // int (__thiscall *)(MyInputStream *this, int a2, int a3) + /* 10*/ size_t(__thiscall *MyConcurrentStream_getSize)(MyConcurrentStream *self); // size_t (__thiscall *)(Concurrency::details::EventWaitNode *this) + /* 14*/ int(__thiscall *MyCachedOffsStream_getOffs)(MyConcurrentStream *self); // int (__thiscall *)(MyInputStream *this) + /* 18*/ int(__thiscall *MyInputStream_mapToBuf_redirect)(MyConcurrentStream *self, int, int); // int (__thiscall *)(MyInputStream *this, int a2, int a3) + /* 1C*/ int(__thiscall *MyInputStream_unmap_redirect)(MyConcurrentStream *self, int); // int (__thiscall *)(MyInputStream *this, int a2) + /* 20*/ uint32_t *(__thiscall *MyInputStream_flush_stub)(MyConcurrentStream *self, uint32_t *); // _DWORD *(__thiscall *)(MyInputStream *this, _DWORD *a1) + /* 24*/ void(__thiscall *MyCachedOffsStream_close)(MyConcurrentStream *self); // void (__thiscall *)(MyCachedOffsStream *this) + /* 28*/ void(__thiscall *MyConcurrentStream_wrapStream)(MyConcurrentStream *self, MyInputStream *); // void (__thiscall *)(MyCachedOffsStream *this, MyInputStream *a2) + /* 2C*/ int(__thiscall *MyInputStream_getSemaphore_redirect)(MyConcurrentStream *self); // int (__thiscall *)(MyInputStream *this) }; - - + static_assert(sizeof(vtbl_t) == 0x30); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + + virtual ~MyConcurrentStream(); void dump() { } @@ -6214,7 +6235,7 @@ namespace dk2 { #pragma pack(push, 1) class WadEntry_off8 { public: - + /* 0*/ uint32_t f8_nameSize; /* 4*/ int fC_fileOffset; /* 8*/ int f10_compressedSize; @@ -6225,7 +6246,7 @@ namespace dk2 { /* 1C*/ int field_24; /* 20*/ int f0_idx; /* 24*/ int f4_nameOffset; - + void dump() { printf("f8_nameSize: %d\n", this->f8_nameSize); printf("fC_fileOffset: %d\n", this->fC_fileOffset); @@ -6245,13 +6266,13 @@ namespace dk2 { #pragma pack(push, 1) class MyALListEntry { public: - + /* 0*/ int f0_next; /* 4*/ void *f4_value; - + void dump() { printf("f0_next: %d\n", this->f0_next); - printf("f4_value: %p\n", this->f4_value); + printf("f4_value: void(%p)\n", this->f4_value); } }; #pragma pack(pop) @@ -6260,7 +6281,7 @@ namespace dk2 { #pragma pack(push, 1) class WadEntry { public: - + /* 0*/ uint32_t field_0; /* 4*/ int f4_nameOffset; /* 8*/ uint32_t f8_nameSize; @@ -6271,7 +6292,7 @@ namespace dk2 { /* 1C*/ int field_1C; /* 20*/ int field_20; /* 24*/ int field_24; - + void dump() { printf("field_0: %d\n", this->field_0); printf("f4_nameOffset: %d\n", this->f4_nameOffset); @@ -6291,15 +6312,16 @@ namespace dk2 { #pragma pack(push, 1) class MyDirsLList { public: - struct vtbl_t { - /* 0*/ void *__sub_5FE3D0_scalar_destructor; + /* 0*/ void *(__thiscall *__sub_5FE3D0_scalar_destructor)(MyDirsLList *self, char); // void *(__thiscall *)(void *Block, char a2) }; - + static_assert(sizeof(vtbl_t) == 0x4); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + /* 4*/ MyLListEntry *f0_first; /* 8*/ MyLListEntry *f4_last; /* C*/ int f8_count; - + virtual ~MyDirsLList(); void dump() { printf("f0_first: MyLListEntry(%p)\n", this->f0_first); @@ -6313,15 +6335,16 @@ namespace dk2 { #pragma pack(push, 1) class MyFilesLList { public: - struct vtbl_t { - /* 0*/ void *__sub_5FE430_scalar_destructor; + /* 0*/ void *(__thiscall *__sub_5FE430_scalar_destructor)(MyFilesLList *self, char); // void *(__thiscall *)(void *Block, char a2) }; - + static_assert(sizeof(vtbl_t) == 0x4); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + /* 4*/ MyLListEntry *f0_first; /* 8*/ MyLListEntry *f4_last; /* C*/ int f8_count; - + virtual ~MyFilesLList(); void dump() { printf("f0_first: MyLListEntry(%p)\n", this->f0_first); @@ -6335,12 +6358,12 @@ namespace dk2 { #pragma pack(push, 1) class WadDirObj { public: - + /* 0*/ char *f0_name; /* 4*/ uint32_t f4_isPackedWadFile; /* 8*/ MyDirsLList f8_subdirs; /* 18*/ MyFilesLList f18_files; - + void dump() { printf("f0_name: %s\n", this->f0_name); printf("f4_isPackedWadFile: %d\n", this->f4_isPackedWadFile); @@ -6352,13 +6375,13 @@ namespace dk2 { #pragma pack(push, 1) class MyLListEntry { public: - + /* 0*/ void *f0_value; /* 4*/ MyLListEntry *f4_next; /* 8*/ MyLListEntry *f8_prev; - + void dump() { - printf("f0_value: %p\n", this->f0_value); + printf("f0_value: void(%p)\n", this->f0_value); printf("f4_next: MyLListEntry(%p)\n", this->f4_next); printf("f8_prev: MyLListEntry(%p)\n", this->f8_prev); } @@ -6369,12 +6392,12 @@ namespace dk2 { #pragma pack(push, 1) class MyLList2 { public: - + /* 0*/ int field_0; /* 4*/ MyLList2_entry *f4_first; /* 8*/ int f8_count; /* C*/ MyLList2_entry *fC_it; - + void dump() { printf("field_0: %d\n", this->field_0); printf("f4_first: MyLList2_entry(%p)\n", this->f4_first); @@ -6388,15 +6411,15 @@ namespace dk2 { #pragma pack(push, 1) class MyLList2_entry { public: - + /* 0*/ MyLList2_entry *f0_prev; /* 4*/ MyLList2_entry *f4_next; - /* 8*/ void *f8_value; - + /* 8*/ uint32_t *f8_value; + void dump() { printf("f0_prev: MyLList2_entry(%p)\n", this->f0_prev); printf("f4_next: MyLList2_entry(%p)\n", this->f4_next); - printf("f8_value: %p\n", this->f8_value); + printf("f8_value: uint32_t(%p)\n", this->f8_value); } }; #pragma pack(pop) @@ -6405,13 +6428,13 @@ namespace dk2 { #pragma pack(push, 1) class WadFileObj { public: - + /* 0*/ uint32_t f0_name; /* 4*/ uint32_t f4_isPackedWadFile; /* 8*/ int f8_bufSize; /* C*/ int fC_bufRelOffs; /* 10*/ int f10_idx; - + void dump() { printf("f0_name: %d\n", this->f0_name); printf("f4_isPackedWadFile: %d\n", this->f4_isPackedWadFile); @@ -6426,11 +6449,11 @@ namespace dk2 { #pragma pack(push, 1) class TbCharStringList_vtbl { public: - + /* 0*/ void *TbCharStringList___scalar_deleting_destructor_uint; - + void dump() { - printf("TbCharStringList___scalar_deleting_destructor_uint: %p\n", this->TbCharStringList___scalar_deleting_destructor_uint); + printf("TbCharStringList___scalar_deleting_destructor_uint: void(%p)\n", this->TbCharStringList___scalar_deleting_destructor_uint); } }; #pragma pack(pop) @@ -6439,7 +6462,7 @@ namespace dk2 { #pragma pack(push, 1) class MyWadUnkObj { public: - + /* 0*/ MyStr f0_str1; /* 14*/ WadDirObj *f14_dir; /* 18*/ int field_18; @@ -6456,7 +6479,7 @@ namespace dk2 { /* 54*/ int field_54; /* 58*/ int field_58; /* 5C*/ int _end_f5C; - + void dump() { printf("f14_dir: WadDirObj(%p)\n", this->f14_dir); printf("field_18: %d\n", this->field_18); @@ -6479,12 +6502,12 @@ namespace dk2 { #pragma pack(push, 1) class ResourceIndexEntry { public: - + /* 0*/ int f0_fileId; /* 4*/ __int16 f4_textType; /* 6*/ __int16 f6_offset; /* 8*/ MyTextBase *f8_text; - + void dump() { printf("f0_fileId: %d\n", this->f0_fileId); printf("f4_textType: %d\n", this->f4_textType); @@ -6498,24 +6521,28 @@ namespace dk2 { #pragma pack(push, 1) class MyTextMBToUni : public MyTextBase { public: - static uint32_t const VFTABLE = 0x0067B9C8; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t /*: public MyTextBase::vtbl_t */{ - /* 0*/ void *release; - /* 4*/ void *MySharedObj_addRef; - /* 8*/ void *sub_62E3F0; - /* C*/ void *j_MySharedObj_release; - /* 10*/ void *j_MySharedObj_addRef; + /* 0*/ LONG(__thiscall *release)(MyTextMBToUni *self); // LONG (__thiscall *)(MySharedObj *this) + /* 4*/ LONG(__thiscall *MySharedObj_addRef)(MyTextMBToUni *self); // LONG (__thiscall *)(MySharedObj *this) + /* 8*/ void *(__thiscall *sub_62E3F0)(MyTextMBToUni *self, char); // void *(__thiscall *)(void *Block, char a2) + /* C*/ LONG(__thiscall *j_MySharedObj_release)(MyTextMBToUni *self); // LONG (__thiscall *)(volatile LONG *this) + /* 10*/ LONG(__thiscall *j_MySharedObj_addRef)(MyTextMBToUni *self); // LONG (__thiscall *)(volatile LONG *this) }; - + static_assert(sizeof(vtbl_t) == 0x14); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 8*/ char f8_maxChr; /* 9*/ uint8_t gap_9[1]; /* A*/ __int16 field_A; /* C*/ int field_C; - + virtual ~MyTextMBToUni(); void dump() { printf("f8_maxChr: %d\n", this->f8_maxChr); @@ -6529,13 +6556,13 @@ namespace dk2 { #pragma pack(push, 1) class BFMU_header { public: - + /* 0*/ int f0_signature; /* 4*/ char f4___maxChar; /* 5*/ char field_5; /* 6*/ char field_6; /* 7*/ char field_7; - + void dump() { printf("f0_signature: %d\n", this->f0_signature); printf("f4___maxChar: %d\n", this->f4___maxChar); @@ -6550,21 +6577,25 @@ namespace dk2 { #pragma pack(push, 1) class MyTextUniToMB : public MyTextBase { public: - static uint32_t const VFTABLE = 0x0067B9B0; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t /*: public MyTextBase::vtbl_t */{ - /* 0*/ void *release; - /* 4*/ void *MySharedObj_addRef; - /* 8*/ void *sub_62E090; - /* C*/ void *j_MySharedObj_release; - /* 10*/ void *j_MySharedObj_addRef; + /* 0*/ LONG(__thiscall *release)(MyTextUniToMB *self); // LONG (__thiscall *)(MySharedObj *this) + /* 4*/ LONG(__thiscall *MySharedObj_addRef)(MyTextUniToMB *self); // LONG (__thiscall *)(MySharedObj *this) + /* 8*/ void *(__thiscall *sub_62E090)(MyTextUniToMB *self, char); // void *(__thiscall *)(void *Block, char a2) + /* C*/ LONG(__thiscall *j_MySharedObj_release)(MyTextUniToMB *self); // LONG (__thiscall *)(volatile LONG *this) + /* 10*/ LONG(__thiscall *j_MySharedObj_addRef)(MyTextUniToMB *self); // LONG (__thiscall *)(volatile LONG *this) }; - + static_assert(sizeof(vtbl_t) == 0x14); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 8*/ int field_8; - + virtual ~MyTextUniToMB(); void dump() { printf("field_8: %d\n", this->field_8); @@ -6576,23 +6607,27 @@ namespace dk2 { #pragma pack(push, 1) class MyTextMB : public MyTextBase { public: - static uint32_t const VFTABLE = 0x0067BAE0; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t /*: public MyTextBase::vtbl_t */{ - /* 0*/ void *MySharedObj_release; - /* 4*/ void *MySharedObj_addRef; - /* 8*/ void *sub_633480; - /* C*/ void *j_MySharedObj_release; - /* 10*/ void *j_MySharedObj_addRef; + /* 0*/ LONG(__thiscall *MySharedObj_release)(MyTextMB *self); // LONG (__thiscall *)(MySharedObj *this) + /* 4*/ LONG(__thiscall *MySharedObj_addRef)(MyTextMB *self); // LONG (__thiscall *)(MySharedObj *this) + /* 8*/ void *(__thiscall *sub_633480)(MyTextMB *self, char); // void *(__thiscall *)(void *Block, char a2) + /* C*/ LONG(__thiscall *j_MySharedObj_release)(MyTextMB *self); // LONG (__thiscall *)(volatile LONG *this) + /* 10*/ LONG(__thiscall *j_MySharedObj_addRef)(MyTextMB *self); // LONG (__thiscall *)(volatile LONG *this) }; - + static_assert(sizeof(vtbl_t) == 0x14); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 8*/ char field_8; /* 9*/ uint8_t gap_9; /* A*/ __int16 field_A; - + virtual ~MyTextMB(); void dump() { printf("field_8: %d\n", this->field_8); @@ -6606,12 +6641,12 @@ namespace dk2 { #pragma pack(push, 1) class MyFontHeader { public: - + /* 0*/ int f0_magic; /* 4*/ char f4_maxWidth; /* 5*/ char f5_maxHeight; /* 6*/ __int16 f6_offsetCount; - + void dump() { printf("f0_magic: %d\n", this->f0_magic); printf("f4_maxWidth: %d\n", this->f4_maxWidth); @@ -6625,7 +6660,7 @@ namespace dk2 { #pragma pack(push, 1) class MyFontEntryHeader { public: - + /* 0*/ wchar_t f0_chr; /* 2*/ uint8_t gap_2[2]; /* 4*/ int field_4; @@ -6636,7 +6671,7 @@ namespace dk2 { /* 14*/ char f14_offsX; /* 15*/ char f15_offsY; /* 16*/ __int16 f16_outerWidth; - + void dump() { printf("f0_chr: %d\n", this->f0_chr); printf("field_4: %d\n", this->field_4); @@ -6655,7 +6690,7 @@ namespace dk2 { #pragma pack(push, 1) class MyStringTexture { public: - + /* 0*/ int f0_string_MB; /* 4*/ MySurface *f4_surf_360C; /* 8*/ MySurface *f8_surf_39A4; @@ -6666,7 +6701,7 @@ namespace dk2 { /* 1C*/ char f1C_3; /* 1D*/ int f1D_fontObjType; /* 21*/ int f21_2; - + void dump() { printf("f0_string_MB: %d\n", this->f0_string_MB); printf("f4_surf_360C: MySurface(%p)\n", this->f4_surf_360C); @@ -6686,17 +6721,17 @@ namespace dk2 { #pragma pack(push, 1) class MyTRBase_vtable { public: - + /* 0*/ void *scalar_destructor; /* 4*/ void *linesOneTypeEx_doCalcAabb_verticalMiddle; /* 8*/ void *linesOneTypeEx_doCalcAabbAndDraw_verticalMiddle; /* C*/ void *linesOneTypeEx_doDrawOrCalcAabb; - + void dump() { - printf("scalar_destructor: %p\n", this->scalar_destructor); - printf("linesOneTypeEx_doCalcAabb_verticalMiddle: %p\n", this->linesOneTypeEx_doCalcAabb_verticalMiddle); - printf("linesOneTypeEx_doCalcAabbAndDraw_verticalMiddle: %p\n", this->linesOneTypeEx_doCalcAabbAndDraw_verticalMiddle); - printf("linesOneTypeEx_doDrawOrCalcAabb: %p\n", this->linesOneTypeEx_doDrawOrCalcAabb); + printf("scalar_destructor: void(%p)\n", this->scalar_destructor); + printf("linesOneTypeEx_doCalcAabb_verticalMiddle: void(%p)\n", this->linesOneTypeEx_doCalcAabb_verticalMiddle); + printf("linesOneTypeEx_doCalcAabbAndDraw_verticalMiddle: void(%p)\n", this->linesOneTypeEx_doCalcAabbAndDraw_verticalMiddle); + printf("linesOneTypeEx_doDrawOrCalcAabb: void(%p)\n", this->linesOneTypeEx_doDrawOrCalcAabb); } }; #pragma pack(pop) @@ -6705,12 +6740,8 @@ namespace dk2 { #pragma pack(push, 1) class MyTRBase { public: - static uint32_t const VFTABLE = 0x0067BA08; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - - + + virtual ~MyTRBase(); void dump() { } @@ -6721,7 +6752,7 @@ namespace dk2 { #pragma pack(push, 1) class MyCharRenderCtx { public: - + /* 0*/ uint16_t f0_fontChrIdx; /* 2*/ uint8_t gap_A[2]; /* 4*/ uint32_t f4_chrType; @@ -6734,7 +6765,7 @@ namespace dk2 { /* 1C*/ int f1C_index; /* 20*/ int f20_arr; /* 24*/ Pos2i *f24_pChrStart; - + void dump() { printf("f0_fontChrIdx: %d\n", this->f0_fontChrIdx); printf("gap_A: %d\n", this->gap_A); @@ -6756,14 +6787,14 @@ namespace dk2 { #pragma pack(push, 1) class MyCRCtx { public: - + /* 0*/ MyDRBase *f0_myDR; /* 4*/ MyCharRenderCtx f4_saved; /* 2C*/ MyCharRenderCtx f2C_activeCtx; /* 54*/ int f54_chrType; /* 58*/ __int16 f58_visitedChars; /* 5A*/ uint8_t gap_5E[2]; - + void dump() { printf("f0_myDR: MyDRBase(%p)\n", this->f0_myDR); printf("f54_chrType: %d\n", this->f54_chrType); @@ -6777,11 +6808,11 @@ namespace dk2 { #pragma pack(push, 1) class MyTRCtx { public: - + /* 0*/ uint32_t field_0; /* 4*/ MyCRCtx f4_renderCtx; /* 60*/ MyCRCtx f60_activeCtx; - + void dump() { printf("field_0: %d\n", this->field_0); } @@ -6792,7 +6823,7 @@ namespace dk2 { #pragma pack(push, 1) class MyMultilineRenderCtx { public: - + /* 0*/ uint32_t field_0; /* 4*/ MyTRCtx f4_renderCtx; /* C0*/ MyTRCtx fC0_activeCtx; @@ -6800,7 +6831,7 @@ namespace dk2 { /* 17E*/ __int16 f17E_linesCount; /* 180*/ __int16 f180_renderZero; /* 182*/ __int16 _end_f182; - + void dump() { printf("field_0: %d\n", this->field_0); printf("field_17C: %d\n", this->field_17C); @@ -6815,7 +6846,7 @@ namespace dk2 { #pragma pack(push, 1) class MyTRCtx2Sub { public: - + /* 0*/ uint32_t field_0; /* 4*/ uint32_t field_4; /* 8*/ uint32_t field_8; @@ -6826,7 +6857,7 @@ namespace dk2 { /* 19*/ uint8_t gap_19[3]; /* 1C*/ int field_1C; /* 20*/ int field_20; - + void dump() { printf("field_0: %d\n", this->field_0); printf("field_4: %d\n", this->field_4); @@ -6846,12 +6877,12 @@ namespace dk2 { #pragma pack(push, 1) class MyTRArgs { public: - + /* 0*/ MyCRBase *f0_myCR; /* 4*/ MyMultilineRenderCtx f4_renderCtx; /* 188*/ MyMultilineRenderCtx f188_activeCtx; /* 30C*/ __int16 f30C_linesCount; - + void dump() { printf("f0_myCR: MyCRBase(%p)\n", this->f0_myCR); printf("f30C_linesCount: %d\n", this->f30C_linesCount); @@ -6863,15 +6894,15 @@ namespace dk2 { #pragma pack(push, 1) class MyCRBase_vtable { public: - + /* 0*/ void *scalar_destructor; /* 4*/ void *chars_doCalcAabbInMiddle; /* 8*/ void *chars_doCalcAabbAndRenderInMiddle; - + void dump() { - printf("scalar_destructor: %p\n", this->scalar_destructor); - printf("chars_doCalcAabbInMiddle: %p\n", this->chars_doCalcAabbInMiddle); - printf("chars_doCalcAabbAndRenderInMiddle: %p\n", this->chars_doCalcAabbAndRenderInMiddle); + printf("scalar_destructor: void(%p)\n", this->scalar_destructor); + printf("chars_doCalcAabbInMiddle: void(%p)\n", this->chars_doCalcAabbInMiddle); + printf("chars_doCalcAabbAndRenderInMiddle: void(%p)\n", this->chars_doCalcAabbAndRenderInMiddle); } }; #pragma pack(pop) @@ -6880,12 +6911,8 @@ namespace dk2 { #pragma pack(push, 1) class MyCRBase { public: - static uint32_t const VFTABLE = 0x0067B9F8; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - - + + virtual ~MyCRBase(); void dump() { } @@ -6896,19 +6923,19 @@ namespace dk2 { #pragma pack(push, 1) class MyDRBase_vtable { public: - + /* 0*/ void *scalar_destructor; /* 4*/ void *doCalcAabbOrRender_0; /* 8*/ void *doRender; /* C*/ void *doCalcAabbOrRender; /* 10*/ void *MyDR67B9E0_sub_62E8C0; - + void dump() { - printf("scalar_destructor: %p\n", this->scalar_destructor); - printf("doCalcAabbOrRender_0: %p\n", this->doCalcAabbOrRender_0); - printf("doRender: %p\n", this->doRender); - printf("doCalcAabbOrRender: %p\n", this->doCalcAabbOrRender); - printf("MyDR67B9E0_sub_62E8C0: %p\n", this->MyDR67B9E0_sub_62E8C0); + printf("scalar_destructor: void(%p)\n", this->scalar_destructor); + printf("doCalcAabbOrRender_0: void(%p)\n", this->doCalcAabbOrRender_0); + printf("doRender: void(%p)\n", this->doRender); + printf("doCalcAabbOrRender: void(%p)\n", this->doCalcAabbOrRender); + printf("MyDR67B9E0_sub_62E8C0: void(%p)\n", this->MyDR67B9E0_sub_62E8C0); } }; #pragma pack(pop) @@ -6917,12 +6944,8 @@ namespace dk2 { #pragma pack(push, 1) class MyDRBase { public: - static uint32_t const VFTABLE = 0x0067BA48; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - - + + virtual ~MyDRBase(); void dump() { } @@ -6933,7 +6956,7 @@ namespace dk2 { #pragma pack(push, 1) class MyFontRendererBase_vtable { public: - + /* 0*/ void *scalar_destructor; /* 4*/ void *renderChar; /* 8*/ void *render_r5g5b5a1; @@ -6941,15 +6964,15 @@ namespace dk2 { /* 10*/ void *render_r4g4b4a4; /* 14*/ void *render_6319F0; /* 18*/ void *render_r8g8b8a8; - + void dump() { - printf("scalar_destructor: %p\n", this->scalar_destructor); - printf("renderChar: %p\n", this->renderChar); - printf("render_r5g5b5a1: %p\n", this->render_r5g5b5a1); - printf("render_r5g6b5: %p\n", this->render_r5g6b5); - printf("render_r4g4b4a4: %p\n", this->render_r4g4b4a4); - printf("render_6319F0: %p\n", this->render_6319F0); - printf("render_r8g8b8a8: %p\n", this->render_r8g8b8a8); + printf("scalar_destructor: void(%p)\n", this->scalar_destructor); + printf("renderChar: void(%p)\n", this->renderChar); + printf("render_r5g5b5a1: void(%p)\n", this->render_r5g5b5a1); + printf("render_r5g6b5: void(%p)\n", this->render_r5g6b5); + printf("render_r4g4b4a4: void(%p)\n", this->render_r4g4b4a4); + printf("render_6319F0: void(%p)\n", this->render_6319F0); + printf("render_r8g8b8a8: void(%p)\n", this->render_r8g8b8a8); } }; #pragma pack(pop) @@ -6958,12 +6981,8 @@ namespace dk2 { #pragma pack(push, 1) class MyFontRendererBase { public: - static uint32_t const VFTABLE = 0x0067BB28; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - - + + virtual ~MyFontRendererBase(); void dump() { } @@ -6974,11 +6993,11 @@ namespace dk2 { #pragma pack(push, 1) class CharImageReader { public: - + /* 0*/ bool f0_isLowByte; /* 1*/ uint8_t gap_1[3]; /* 4*/ int f4_charBuf; - + void dump() { printf("f0_isLowByte: %d\n", this->f0_isLowByte); printf("gap_1: %d\n", this->gap_1); @@ -6991,13 +7010,13 @@ namespace dk2 { #pragma pack(push, 1) class CharImageWriter { public: - + /* 0*/ uint32_t f0_buf; /* 4*/ bool f4_isLowByte; /* 5*/ char f5_calcOnly; /* 6*/ uint8_t gap_6[2]; /* 8*/ uint32_t f8_pixCount; - + void dump() { printf("f0_buf: %d\n", this->f0_buf); printf("f4_isLowByte: %d\n", this->f4_isLowByte); @@ -7012,7 +7031,7 @@ namespace dk2 { #pragma pack(push, 1) class CharRenderCtx { public: - + /* 0*/ Pos2i *f0_pos; /* 4*/ uint32_t f4_buf; /* 8*/ uint32_t f8_half_width; @@ -7020,7 +7039,7 @@ namespace dk2 { /* 10*/ FontObj *f10_fontObj; /* 14*/ char f14_width; /* 15*/ uint8_t gap_15[3]; - + void dump() { printf("f0_pos: Pos2i(%p)\n", this->f0_pos); printf("f4_buf: %d\n", this->f4_buf); @@ -7034,13 +7053,30 @@ namespace dk2 { static_assert(sizeof(CharRenderCtx) == 0x18); #pragma pack(push, 1) - class MySignalBase_fields { + class MySignalBase { public: - - /* 0*/ uint8_t gap_4[4]; - /* 4*/ int f8_hEvent; - /* 8*/ ControlKeysUpdater *f8_pcontrolkeys; - + struct vtbl_t { + /* 0*/ LONG(__thiscall *MySharedObj_release)(MySignalBase *self); // LONG (__thiscall *)(MySharedObj *this) + /* 4*/ LONG(__thiscall *MySharedObj_addRef)(MySignalBase *self); // LONG (__thiscall *)(MySharedObj *this) + /* 8*/ void *(__thiscall *AsyncThing___scalar_deleting_destructor_uint)(MySignalBase *self, char); // void *(__thiscall *)(void *Block, char a2) + /* C*/ void(__stdcall *__purecall)(); // void (__stdcall __noreturn *)() + /* 10*/ uint32_t *(__thiscall *MyDirectInput_recreateEvent)(MySignalBase *self, uint32_t *); // int *(__thiscall *)(MyDxKeyboard *this, int *a2) + }; + static_assert(sizeof(vtbl_t) == 0x14); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + + /* 4*/ uint8_t gap_4[4]; + /* 8*/ int f8_hEvent; + /* C*/ ControlKeysUpdater *f8_pcontrolkeys; + + virtual ~MySignalBase(); void dump() { printf("gap_4: %d\n", this->gap_4); printf("f8_hEvent: %d\n", this->f8_hEvent); @@ -7048,22 +7084,26 @@ namespace dk2 { } }; #pragma pack(pop) - static_assert(sizeof(MySignalBase_fields) == 0xC); + static_assert(sizeof(MySignalBase) == 0x10); #pragma pack(push, 1) class MyDxDevice { public: - static uint32_t const VFTABLE = 0x00672868; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t { - /* 0*/ void *scalar_destructor; - /* 4*/ void *getGuid; - /* 8*/ void *getDataFormat; + /* 0*/ void *(__thiscall *scalar_destructor)(MyDxDevice *self, char); // void *(__thiscall *)(void *Block, char a2) + /* 4*/ GUID *(__thiscall *getGuid)(MyDxDevice *self); // GUID *(__thiscall *)(MyDxDevice *) + /* 8*/ const DIDATAFORMAT *(__thiscall *getDataFormat)(MyDxDevice *self); // LPCDIDATAFORMAT (__thiscall *)(MyDxDevice *) }; - + static_assert(sizeof(vtbl_t) == 0xC); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 4*/ int f4_nextCoopLevel; /* 8*/ int f8_curCoopLevel; /* C*/ IDirectInputDeviceA *fC_device; @@ -7071,7 +7111,7 @@ namespace dk2 { /* 14*/ int f14_hInstance; /* 18*/ HWND__ *f18_curHWnd; /* 1C*/ HWND__ *f1C_nextHWnd; - + virtual ~MyDxDevice(); void dump() { printf("f4_nextCoopLevel: %d\n", this->f4_nextCoopLevel); @@ -7087,26 +7127,29 @@ namespace dk2 { static_assert(sizeof(MyDxDevice) == 0x20); #pragma pack(push, 1) - class MyDirectInput { + class MyDirectInput : public MySignalBase { public: - static uint32_t const VFTABLE = 0x00673048; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - - struct vtbl_t { - /* 0*/ void *MySharedObj_release; - /* 4*/ void *MySharedObj_addRef; - /* 8*/ void *MyDirectInputSu1___scalar_deleting_destructor_uint; - /* C*/ void *sub_6005B0; - /* 10*/ void *MyDirectInputSu1_createObject; - /* 14*/ void *handleData; + struct vtbl_t /*: public MySignalBase::vtbl_t */{ + /* 0*/ LONG(__thiscall *MySharedObj_release)(MyDirectInput *self); // LONG (__thiscall *)(MySharedObj *this) + /* 4*/ LONG(__thiscall *MySharedObj_addRef)(MyDirectInput *self); // LONG (__thiscall *)(MySharedObj *this) + /* 8*/ void *(__thiscall *MyDirectInputSu1___scalar_deleting_destructor_uint)(MyDirectInput *self, char); // void *(__thiscall *)(void *Block, char a2) + /* C*/ uint32_t *(__thiscall *sub_6005B0)(MyDirectInput *self); // int *(__thiscall *)(_DWORD *this) + /* 10*/ uint32_t *(__thiscall *MyDirectInputSu1_createObject)(MyDirectInput *self, uint32_t *); // int *(__thiscall *)(MyDxKeyboard *this, HRESULT *pResult) + /* 14*/ int(__thiscall *handleData)(MyDirectInput *self, int); // int (__thiscall *)(MyDirectInput *, int) }; - - /* 4*/ MySignalBase_fields super; + static_assert(sizeof(vtbl_t) == 0x18); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 10*/ MyDxDevice dx_device; /* 30*/ LPDIDEVICEOBJECTDATA_10 *f2C_pdevObjArr; - + virtual ~MyDirectInput(); void dump() { printf("f2C_pdevObjArr: LPDIDEVICEOBJECTDATA_10(%p)\n", this->f2C_pdevObjArr); @@ -7118,17 +7161,21 @@ namespace dk2 { #pragma pack(push, 1) class MouseRgbDxActionList { public: - static uint32_t const VFTABLE = 0x006728FC; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t { - /* 0*/ void *Obj6728FC_scalar_destructor; + /* 0*/ void *(__thiscall *Obj6728FC_scalar_destructor)(MouseRgbDxActionList *self, char); // void *(__thiscall *)(void *Block, char a2) }; - + static_assert(sizeof(vtbl_t) == 0x4); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 4*/ MyLList2 f4_list; - + virtual ~MouseRgbDxActionList(); void dump() { } @@ -7139,22 +7186,26 @@ namespace dk2 { #pragma pack(push, 1) class MyDxKeyboard : public MyDirectInput { public: - static uint32_t const VFTABLE = 0x00672920; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t /*: public MyDirectInput::vtbl_t */{ - /* 0*/ void *MySharedObj_release; - /* 4*/ void *MySharedObj_addRef; - /* 8*/ void *scalar_destructor; - /* C*/ void *sub_6005B0; - /* 10*/ void *DirectInput_init_0; - /* 14*/ void *sub_5DE260; + /* 0*/ LONG(__thiscall *MySharedObj_release)(MyDxKeyboard *self); // LONG (__thiscall *)(MySharedObj *this) + /* 4*/ LONG(__thiscall *MySharedObj_addRef)(MyDxKeyboard *self); // LONG (__thiscall *)(MySharedObj *this) + /* 8*/ void *(__thiscall *scalar_destructor)(MyDxKeyboard *self, char); // void *(__thiscall *)(void *Block, char a2) + /* C*/ uint32_t *(__thiscall *sub_6005B0)(MyDxKeyboard *self); // int *(__thiscall *)(_DWORD *this) + /* 10*/ uint32_t *(__thiscall *DirectInput_init_0)(MyDxKeyboard *self, uint32_t *); // int *(__thiscall *)(int this, int *a2) + /* 14*/ int(__thiscall *sub_5DE260)(MyDxKeyboard *self, int); // int (__thiscall *)(int this, int a2) }; - + static_assert(sizeof(vtbl_t) == 0x18); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 34*/ MouseRgbDxActionList f34_listKb; - + virtual ~MyDxKeyboard(); void dump() { } @@ -7165,14 +7216,14 @@ namespace dk2 { #pragma pack(push, 1) class DIDATAFORMAT { public: - + /* 0*/ DWORD dwSize; /* 4*/ DWORD dwObjSize; /* 8*/ DWORD dwFlags; /* C*/ DWORD dwDataSize; /* 10*/ DWORD dwNumObjs; /* 14*/ _DIOBJECTDATAFORMAT *rgodf; - + void dump() { printf("dwSize: %d\n", this->dwSize); printf("dwObjSize: %d\n", this->dwObjSize); @@ -7188,12 +7239,12 @@ namespace dk2 { #pragma pack(push, 1) class DIOBJECTDATAFORMAT { public: - + /* 0*/ const GUID *pguid; /* 4*/ DWORD dwOfs; /* 8*/ DWORD dwType; /* C*/ DWORD dwFlags; - + void dump() { printf("pguid: const GUID(%p)\n", this->pguid); printf("dwOfs: %d\n", this->dwOfs); @@ -7207,12 +7258,12 @@ namespace dk2 { #pragma pack(push, 1) class DIPROPHEADER { public: - + /* 0*/ DWORD dwSize; /* 4*/ DWORD dwHeaderSize; /* 8*/ DWORD dwObj; /* C*/ DWORD dwHow; - + void dump() { printf("dwSize: %d\n", this->dwSize); printf("dwHeaderSize: %d\n", this->dwHeaderSize); @@ -7226,10 +7277,10 @@ namespace dk2 { #pragma pack(push, 1) class DIPROPDWORD { public: - + /* 0*/ DIPROPHEADER diph; /* 10*/ DWORD dwData; - + void dump() { printf("dwData: %d\n", this->dwData); } @@ -7237,52 +7288,22 @@ namespace dk2 { #pragma pack(pop) static_assert(sizeof(DIPROPDWORD) == 0x14); -#pragma pack(push, 1) - class MySignalBase { - public: - static uint32_t const VFTABLE = 0x00672800; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - - struct vtbl_t { - /* 0*/ void *MySharedObj_release; - /* 4*/ void *MySharedObj_addRef; - /* 8*/ void *AsyncThing___scalar_deleting_destructor_uint; - /* C*/ void *__purecall; - /* 10*/ void *MyDirectInput_recreateEvent; - }; - - /* 4*/ uint8_t gap_4[4]; - /* 8*/ int f8_hEvent; - /* C*/ ControlKeysUpdater *f8_pcontrolkeys; - - virtual ~MySignalBase(); - void dump() { - printf("gap_4: %d\n", this->gap_4); - printf("f8_hEvent: %d\n", this->f8_hEvent); - printf("f8_pcontrolkeys: ControlKeysUpdater(%p)\n", this->f8_pcontrolkeys); - } - }; -#pragma pack(pop) - static_assert(sizeof(MySignalBase) == 0x10); - #pragma pack(push, 1) class MyWindowMsgs_vtable { public: - + /* 0*/ void *MySharedObj_release; /* 4*/ void *MySharedObj_addRef; /* 8*/ void *scalar_destructor; /* C*/ void *sub_5DB130; /* 10*/ void *MySignalBase_createObject; - + void dump() { - printf("MySharedObj_release: %p\n", this->MySharedObj_release); - printf("MySharedObj_addRef: %p\n", this->MySharedObj_addRef); - printf("scalar_destructor: %p\n", this->scalar_destructor); - printf("sub_5DB130: %p\n", this->sub_5DB130); - printf("MySignalBase_createObject: %p\n", this->MySignalBase_createObject); + printf("MySharedObj_release: void(%p)\n", this->MySharedObj_release); + printf("MySharedObj_addRef: void(%p)\n", this->MySharedObj_addRef); + printf("scalar_destructor: void(%p)\n", this->scalar_destructor); + printf("sub_5DB130: void(%p)\n", this->sub_5DB130); + printf("MySignalBase_createObject: void(%p)\n", this->MySignalBase_createObject); } }; #pragma pack(pop) @@ -7291,11 +7312,11 @@ namespace dk2 { #pragma pack(push, 1) class Vtable_672434 { public: - + /* 0*/ void *sub_5BBE10; - + void dump() { - printf("sub_5BBE10: %p\n", this->sub_5BBE10); + printf("sub_5BBE10: void(%p)\n", this->sub_5BBE10); } }; #pragma pack(pop) @@ -7304,17 +7325,21 @@ namespace dk2 { #pragma pack(push, 1) class WndMsgDxActionList { public: - static uint32_t const VFTABLE = 0x00672450; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t { - /* 0*/ void *Obj672450_scalar_destructor; + /* 0*/ void *(__thiscall *Obj672450_scalar_destructor)(WndMsgDxActionList *self, char); // void *(__thiscall *)(void *Block, char a2) }; - + static_assert(sizeof(vtbl_t) == 0x4); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 4*/ MyLList2 f4_list; - + virtual ~WndMsgDxActionList(); void dump() { } @@ -7325,15 +7350,11 @@ namespace dk2 { #pragma pack(push, 1) class MyWindowMsgs : public MySignalBase { public: - static uint32_t const VFTABLE = 0x00672438; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - + /* 10*/ WndMsgDxActionList f10_listWm; /* 24*/ PtrArrList f24_handleArr; /* 34*/ _RTL_CRITICAL_SECTION *f34_pCritSection; - + virtual ~MyWindowMsgs(); void dump() { printf("f34_pCritSection: _RTL_CRITICAL_SECTION(%p)\n", this->f34_pCritSection); @@ -7345,11 +7366,11 @@ namespace dk2 { #pragma pack(push, 1) class Vtable_6728FC { public: - + /* 0*/ void *sub_5DDCB0; - + void dump() { - printf("sub_5DDCB0: %p\n", this->sub_5DDCB0); + printf("sub_5DDCB0: void(%p)\n", this->sub_5DDCB0); } }; #pragma pack(pop) @@ -7358,17 +7379,21 @@ namespace dk2 { #pragma pack(push, 1) class MouseXyzDxActionList { public: - static uint32_t const VFTABLE = 0x00672904; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t { - /* 0*/ void *scalar_destructor; + /* 0*/ void *(__thiscall *scalar_destructor)(MouseXyzDxActionList *self, char); // void *(__thiscall *)(void *Block, char a2) }; - + static_assert(sizeof(vtbl_t) == 0x4); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 4*/ MyLList2 f4_list; - + virtual ~MouseXyzDxActionList(); void dump() { } @@ -7379,23 +7404,27 @@ namespace dk2 { #pragma pack(push, 1) class MyDxMouse : public MyDirectInput { public: - static uint32_t const VFTABLE = 0x006728E0; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t /*: public MyDirectInput::vtbl_t */{ - /* 0*/ void *MySharedObj_release; - /* 4*/ void *MySharedObj_addRef; - /* 8*/ void *scalar_destructor; - /* C*/ void *sub_6005B0; - /* 10*/ void *MyDirectInput_createObject; - /* 14*/ void *MyDxMouse_5DDA90; + /* 0*/ LONG(__thiscall *MySharedObj_release)(MyDxMouse *self); // LONG (__thiscall *)(MySharedObj *this) + /* 4*/ LONG(__thiscall *MySharedObj_addRef)(MyDxMouse *self); // LONG (__thiscall *)(MySharedObj *this) + /* 8*/ void *(__thiscall *scalar_destructor)(MyDxMouse *self, char); // void *(__thiscall *)(void *Block, char a2) + /* C*/ uint32_t *(__thiscall *sub_6005B0)(MyDxMouse *self); // int *(__thiscall *)(_DWORD *this) + /* 10*/ uint32_t *(__thiscall *MyDirectInput_createObject)(MyDxMouse *self, uint32_t *); // int *(__thiscall *)(MyDirectInput *this, HRESULT *pResult) + /* 14*/ int(__thiscall *MyDxMouse_5DDA90)(MyDxMouse *self, int); // int (__thiscall *)(int this, int a2) }; - + static_assert(sizeof(vtbl_t) == 0x18); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 34*/ MouseXyzDxActionList f34_listXYZ; /* 48*/ MouseRgbDxActionList f48_listRGB; - + virtual ~MyDxMouse(); void dump() { } @@ -7406,15 +7435,19 @@ namespace dk2 { #pragma pack(push, 1) class Obj672844 { public: - static uint32_t const VFTABLE = 0x00672844; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t { - /* 0*/ void *Obj672844_scalar_destructor; + /* 0*/ void *(__thiscall *Obj672844_scalar_destructor)(Obj672844 *self, char); // void *(__thiscall *)(void *Block, char a2) }; - + static_assert(sizeof(vtbl_t) == 0x4); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 4*/ Obj6723B8 *f4_pobj; /* 8*/ void *f8_hSema; /* C*/ int fC_hThread; @@ -7426,11 +7459,11 @@ namespace dk2 { /* 18*/ int f18_timestampDelta; /* 1C*/ CursorDrawer *f1C_cursorDrawer; /* 20*/ Pos2i *f20_pMousePos; - + virtual ~Obj672844(); void dump() { printf("f4_pobj: Obj6723B8(%p)\n", this->f4_pobj); - printf("f8_hSema: %p\n", this->f8_hSema); + printf("f8_hSema: void(%p)\n", this->f8_hSema); printf("fC_hThread: %d\n", this->fC_hThread); printf("f10: %d\n", this->f10); printf("f11_aBool: %d\n", this->f11_aBool); @@ -7448,19 +7481,23 @@ namespace dk2 { #pragma pack(push, 1) class MyCb6723D0 { public: - static uint32_t const VFTABLE = 0x006723D0; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t { - /* 0*/ void *call; - /* 4*/ void *scalar_destructor; + /* 0*/ int(__thiscall *call)(MyCb6723D0 *self, int, uint32_t *); // int (__thiscall *)(MyCb6723D0 *this, int a2, int *a3) + /* 4*/ void *(__thiscall *scalar_destructor)(MyCb6723D0 *self, char); // void *(__thiscall *)(void *Block, char a2) }; - + static_assert(sizeof(vtbl_t) == 0x8); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 4*/ MyCbHandle f4_cbhandle; /* 10*/ Obj672844 f10_obj; - + virtual ~MyCb6723D0(); void dump() { } @@ -7471,19 +7508,23 @@ namespace dk2 { #pragma pack(push, 1) class ControlSurf { public: - static uint32_t const VFTABLE = 0x006729F8; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t { - /* 0*/ void *sub_5F80D0; + /* 0*/ void *(__thiscall *sub_5F80D0)(ControlSurf *self, char); // void *(__thiscall *)(void *Block, char a2) }; - + static_assert(sizeof(vtbl_t) == 0x4); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 4*/ MyDdSurfaceEx f4_ddSurfEx; /* 54*/ int f54_isSurfCreated; /* 58*/ int f58__isSurfBusy; - + virtual ~ControlSurf(); void dump() { printf("f54_isSurfCreated: %d\n", this->f54_isSurfCreated); @@ -7496,15 +7537,19 @@ namespace dk2 { #pragma pack(push, 1) class CursorDrawer { public: - static uint32_t const VFTABLE = 0x00672854; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t { - /* 0*/ void *Obj672854_scalar_destructor; + /* 0*/ void *(__thiscall *Obj672854_scalar_destructor)(CursorDrawer *self, char); // void *(__thiscall *)(void *Block, char a2) }; - + static_assert(sizeof(vtbl_t) == 0x4); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 4*/ uint8_t f4_00; /* 5*/ char f5_isCursorsCreated; /* 6*/ char f6_00; @@ -7529,7 +7574,7 @@ namespace dk2 { /* 1C4*/ AABB f1C4_cursorAabbScreenCut[3]; /* 1F4*/ AABB f1F4_bpt_cursorIntersection[3]; /* 224*/ MyDdSurfaceEx * f224_pScreen[3]; - + virtual ~CursorDrawer(); void dump() { printf("f4_00: %d\n", this->f4_00); @@ -7554,11 +7599,11 @@ namespace dk2 { #pragma pack(push, 1) class MyLList_fields { public: - + /* 0*/ MyLListEntry *f0_first; /* 4*/ MyLListEntry *f4_last; /* 8*/ int f8_count; - + void dump() { printf("f0_first: MyLListEntry(%p)\n", this->f0_first); printf("f4_last: MyLListEntry(%p)\n", this->f4_last); @@ -7571,17 +7616,21 @@ namespace dk2 { #pragma pack(push, 1) class SharedArr79DBD0List { public: - static uint32_t const VFTABLE = 0x00672340; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t { - /* 0*/ void *SharedArr79DBD0List_scalar_destructor; + /* 0*/ void *(__thiscall *SharedArr79DBD0List_scalar_destructor)(SharedArr79DBD0List *self, char); // void *(__thiscall *)(void *Block, char a2) }; - + static_assert(sizeof(vtbl_t) == 0x4); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 4*/ MyLList_fields f4_list; - + virtual ~SharedArr79DBD0List(); void dump() { } @@ -7592,11 +7641,11 @@ namespace dk2 { #pragma pack(push, 1) class SharedArr79DBD0 { public: - + /* 0*/ SharedArr79DBD0List f0_arr[6]; /* 60*/ _RTL_CRITICAL_SECTION *f60_crit_section; /* 64*/ int field_64; - + void dump() { printf("f60_crit_section: _RTL_CRITICAL_SECTION(%p)\n", this->f60_crit_section); printf("field_64: %d\n", this->field_64); @@ -7608,13 +7657,13 @@ namespace dk2 { #pragma pack(push, 1) class SharedArr79DBD0Item { public: - + /* 0*/ void *f0_obj; /* 4*/ void *f4_fun; - + void dump() { - printf("f0_obj: %p\n", this->f0_obj); - printf("f4_fun: %p\n", this->f4_fun); + printf("f0_obj: void(%p)\n", this->f0_obj); + printf("f4_fun: void(%p)\n", this->f4_fun); } }; #pragma pack(pop) @@ -7623,17 +7672,21 @@ namespace dk2 { #pragma pack(push, 1) class MyCallback { public: - static uint32_t const VFTABLE = 0x006723E0; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t { - /* 0*/ void *call; - /* 4*/ void *Obj6723E0_scalar_destructor; + /* 0*/ int(__thiscall *call)(MyCallback *self, int, void *); // int (__thiscall *)(MyCallback *, int, void *) + /* 4*/ void *(__thiscall *Obj6723E0_scalar_destructor)(MyCallback *self, char); // std::locale::facet *(__thiscall *)(std::locale::facet *this, char a2) }; - - + static_assert(sizeof(vtbl_t) == 0x8); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + + virtual ~MyCallback(); void dump() { } @@ -7644,20 +7697,23 @@ namespace dk2 { #pragma pack(push, 1) class ControlKeysUpdater : public MyComEx { public: - static uint32_t const VFTABLE = 0x00672888; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - - struct vtbl_t /*: public MyComEx::vtbl_t */{ - /* 0*/ void *super; + struct vtbl_t : public MyComEx::vtbl_t { }; - + static_assert(sizeof(vtbl_t) == 0x1C); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* C*/ MyCallback fC_mycb; /* 10*/ MyCbHandle f10_cbhandle; /* 1C*/ MyDirectInput *f1C_dinput; /* 20*/ int f20_controlKey_flags; - + virtual ~ControlKeysUpdater(); void dump() { printf("f1C_dinput: MyDirectInput(%p)\n", this->f1C_dinput); @@ -7670,10 +7726,10 @@ namespace dk2 { #pragma pack(push, 1) class Event5_keyboard { public: - + /* 0*/ int f0_v11; /* 4*/ MyDxDevice *f4_dev; - + void dump() { printf("f0_v11: %d\n", this->f0_v11); printf("f4_dev: MyDxDevice(%p)\n", this->f4_dev); @@ -7685,13 +7741,13 @@ namespace dk2 { #pragma pack(push, 1) class MyDxInputStateCb_vtbl { public: - + /* 0*/ void *sub_5DB630; /* 4*/ void *sub_5DB7B0; - + void dump() { - printf("sub_5DB630: %p\n", this->sub_5DB630); - printf("sub_5DB7B0: %p\n", this->sub_5DB7B0); + printf("sub_5DB630: void(%p)\n", this->sub_5DB630); + printf("sub_5DB7B0: void(%p)\n", this->sub_5DB7B0); } }; #pragma pack(pop) @@ -7700,15 +7756,18 @@ namespace dk2 { #pragma pack(push, 1) class MyDxInputState : public MyComEx { public: - static uint32_t const VFTABLE = 0x00672828; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - - struct vtbl_t /*: public MyComEx::vtbl_t */{ - /* 0*/ void *super; + struct vtbl_t : public MyComEx::vtbl_t { }; - + static_assert(sizeof(vtbl_t) == 0x1C); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* C*/ MyDxInputStateCb_vtbl *fC_cb; /* 10*/ MyCbHandle f10_cbhandle; /* 1C*/ uint8_t f1C_keyboardState[240]; @@ -7716,7 +7775,7 @@ namespace dk2 { /* 110*/ char field_110[12]; /* 11C*/ MyDxKeyboard *f11C_dxkeyboard; /* 120*/ MyDxMouse *f120_dxmouse; - + virtual ~MyDxInputState(); void dump() { printf("fC_cb: MyDxInputStateCb_vtbl(%p)\n", this->fC_cb); @@ -7733,12 +7792,12 @@ namespace dk2 { #pragma pack(push, 1) class LPDIDEVICEOBJECTDATA_10 { public: - + /* 0*/ int f0_dwOfs; /* 4*/ int f4_dwData; /* 8*/ int f8_dwTimeStamp; /* C*/ int fC_dwSequence; - + void dump() { printf("f0_dwOfs: %d\n", this->f0_dwOfs); printf("f4_dwData: %d\n", this->f4_dwData); @@ -7752,12 +7811,12 @@ namespace dk2 { #pragma pack(push, 1) class DIMOUSESTATE { public: - + /* 0*/ LONG lX; /* 4*/ LONG lY; /* 8*/ LONG lZ; /* C*/ BYTE rgbButtons[4]; - + void dump() { printf("lX: %d\n", this->lX); printf("lY: %d\n", this->lY); @@ -7771,14 +7830,15 @@ namespace dk2 { #pragma pack(push, 1) class DxAction { public: - struct vtbl_t { - /* 0*/ void *applyToState; + /* 0*/ int(__thiscall *applyToState)(DxAction *self, MyDxInputState *); // int (__thiscall *)(DxAction *this, MyDxInputState *) }; - + static_assert(sizeof(vtbl_t) == 0x4); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + /* 4*/ int f4_timestamp; /* 8*/ int f8_isNotHandled; - + virtual ~DxAction(); void dump() { printf("f4_timestamp: %d\n", this->f4_timestamp); @@ -7791,18 +7851,22 @@ namespace dk2 { #pragma pack(push, 1) class WndMsgDxAction : public DxAction { public: - static uint32_t const VFTABLE = 0x0067244C; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t /*: public DxAction::vtbl_t */{ - /* 0*/ void *Obj67244C_sub_5BBA00; + /* 0*/ int(__thiscall *Obj67244C_sub_5BBA00)(WndMsgDxAction *self, int); // int (__thiscall *)(void *this, int a2) }; - + static_assert(sizeof(vtbl_t) == 0x4); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* C*/ int fC_uMsg; /* 10*/ int f10_wParam; - + virtual ~WndMsgDxAction(); void dump() { printf("fC_uMsg: %d\n", this->fC_uMsg); @@ -7815,24 +7879,28 @@ namespace dk2 { #pragma pack(push, 1) class MyInputListenersHolder : public MyComEx { public: - static uint32_t const VFTABLE = 0x006723E8; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t /*: public MyComEx::vtbl_t */{ - /* 0*/ void *MySharedObj_release; - /* 4*/ void *MySharedObj_addRef; - /* 8*/ void *Obj6723E8___scalar_deleting_destructor_uint; - /* C*/ void *ret_void_1args; - /* 10*/ void *sub_5DC9E0; - /* 14*/ void *MySharedObj_fun3; - /* 18*/ void *sub_5DC920; + /* 0*/ LONG(__thiscall *MySharedObj_release)(MyInputListenersHolder *self); // LONG (__thiscall *)(MySharedObj *this) + /* 4*/ LONG(__thiscall *MySharedObj_addRef)(MyInputListenersHolder *self); // LONG (__thiscall *)(MySharedObj *this) + /* 8*/ void *(__thiscall *Obj6723E8___scalar_deleting_destructor_uint)(MyInputListenersHolder *self, char); // void *(__thiscall *)(void *Block, char a2) + /* C*/ void(__stdcall *ret_void_1args)(int); // void (__stdcall *)(int a1) + /* 10*/ void *(__thiscall *sub_5DC9E0)(MyInputListenersHolder *self, int); // int (__cdecl *(__thiscall *)(_DWORD *this, int a2))(int, _DWORD, _DWORD, int) + /* 14*/ int(__thiscall *MySharedObj_fun3)(MyInputListenersHolder *self, int); // int (__thiscall *)(MyComEx *this, int a2) + /* 18*/ void(__thiscall *sub_5DC920)(MyInputListenersHolder *self, uint32_t *); // void (__thiscall *)(_DWORD *this, _DWORD *a2) }; - + static_assert(sizeof(vtbl_t) == 0x1C); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* C*/ StaticListeners *fC_static_listeners; /* 10*/ CComponent *f10_ccomponent; - + virtual ~MyInputListenersHolder(); void dump() { printf("fC_static_listeners: StaticListeners(%p)\n", this->fC_static_listeners); @@ -7845,13 +7913,13 @@ namespace dk2 { #pragma pack(push, 1) class MyCollectDxAction_Action { public: - + /* 0*/ char type; /* 1*/ char KeyCode; /* 2*/ __int16 uMsg_isPressed; /* 4*/ int wParam_xy; /* 8*/ int btnPressFlags; - + void dump() { printf("type: %d\n", this->type); printf("KeyCode: %d\n", this->KeyCode); @@ -7866,23 +7934,27 @@ namespace dk2 { #pragma pack(push, 1) class MyCollectDxAction : public MyComEx { public: - static uint32_t const VFTABLE = 0x00672458; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t /*: public MyComEx::vtbl_t */{ - /* 0*/ void *MySharedObj_release; - /* 4*/ void *MySharedObj_addRef; - /* 8*/ void *Obj672458_scalar_destructor; - /* C*/ void *ret_void_1args; - /* 10*/ void *sub_5DCB20; - /* 14*/ void *MySharedObj_fun3; - /* 18*/ void *sub_5DCAE0; + /* 0*/ LONG(__thiscall *MySharedObj_release)(MyCollectDxAction *self); // LONG (__thiscall *)(MySharedObj *this) + /* 4*/ LONG(__thiscall *MySharedObj_addRef)(MyCollectDxAction *self); // LONG (__thiscall *)(MySharedObj *this) + /* 8*/ void *(__thiscall *Obj672458_scalar_destructor)(MyCollectDxAction *self, char); // void *(__thiscall *)(void *Block, char a2) + /* C*/ void(__stdcall *ret_void_1args)(int); // void (__stdcall *)(int a1) + /* 10*/ int(__thiscall *sub_5DCB20)(MyCollectDxAction *self, int); // int (__thiscall *)(int this, int a2) + /* 14*/ int(__thiscall *MySharedObj_fun3)(MyCollectDxAction *self, int); // int (__thiscall *)(MyComEx *this, int a2) + /* 18*/ int(__thiscall *sub_5DCAE0)(MyCollectDxAction *self, int); // int (__thiscall *)(int this, int a2) }; - + static_assert(sizeof(vtbl_t) == 0x1C); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* C*/ MyCollectDxAction_Action fC_act; - + virtual ~MyCollectDxAction(); void dump() { } @@ -7893,21 +7965,24 @@ namespace dk2 { #pragma pack(push, 1) class MouseRgbDxAction : public DxAction { public: - static uint32_t const VFTABLE = 0x006728F8; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - - struct vtbl_t /*: public DxAction::vtbl_t */{ - /* 0*/ void *super; + struct vtbl_t : public DxAction::vtbl_t { }; - + static_assert(sizeof(vtbl_t) == 0x4); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* C*/ uint8_t gap_C[4]; /* 10*/ uint32_t f10_KeyCode_F0toF3; /* 14*/ Pos2i f14_pos; /* 1C*/ int f1C_data; /* 20*/ int f20_btnPressFlags; - + virtual ~MouseRgbDxAction(); void dump() { printf("gap_C: %d\n", this->gap_C); @@ -7922,18 +7997,21 @@ namespace dk2 { #pragma pack(push, 1) class MouseXyzDxAction : public DxAction { public: - static uint32_t const VFTABLE = 0x00672900; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - - struct vtbl_t /*: public DxAction::vtbl_t */{ - /* 0*/ void *super; + struct vtbl_t : public DxAction::vtbl_t { }; - + static_assert(sizeof(vtbl_t) == 0x4); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* C*/ int fC_actedAxe; /* 10*/ int f10_value; - + virtual ~MouseXyzDxAction(); void dump() { printf("fC_actedAxe: %d\n", this->fC_actedAxe); @@ -7946,23 +8024,27 @@ namespace dk2 { #pragma pack(push, 1) class CNetworkComponent : public CComponent { public: - static uint32_t const VFTABLE = 0x0066EC84; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t /*: public CComponent::vtbl_t */{ - /* 0*/ void *CNetworkComponent__fun_5274C0; - /* 4*/ void *CNetworkComponent__fun_527530; - /* 8*/ void *ret_void_0args_0; - /* C*/ void *CNetworkComponent__fun_527560; - /* 10*/ void *CNetworkComponent__fun_527750; - /* 14*/ void *CNetworkComponent__fun_527790; + /* 0*/ void *(__thiscall *CNetworkComponent__fun_5274C0)(CNetworkComponent *self, char); // void *(__thiscall *)(void *Block, char a2) + /* 4*/ int(__thiscall *CNetworkComponent__fun_527530)(CNetworkComponent *self); // int (__thiscall *)(_DWORD *this) + /* 8*/ void(__thiscall *ret_void_0args_0)(CNetworkComponent *self); // void (__thiscall *)(void *this) + /* C*/ int(__thiscall *CNetworkComponent__fun_527560)(CNetworkComponent *self); // int (__thiscall *)(_DWORD *this) + /* 10*/ int(__thiscall *CNetworkComponent__fun_527750)(CNetworkComponent *self); // int (__thiscall *)(int *this) + /* 14*/ int(__thiscall *CNetworkComponent__fun_527790)(CNetworkComponent *self); // int (__thiscall *)(_DWORD *this) }; - + static_assert(sizeof(vtbl_t) == 0x18); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* C*/ StaticListeners fC_static_listeners; /* 20*/ MyStaticStruct f20_obj; - + virtual ~CNetworkComponent(); void dump() { } @@ -7973,17 +8055,17 @@ namespace dk2 { #pragma pack(push, 1) class TbWType_t_TbPalette_t__vtbl { public: - + /* 0*/ void *loc_401150; /* 4*/ void *TbWItemBase__fun_5B2D50; /* 8*/ void *TbWType__fun_5B2D10; /* C*/ void *TbWType__fun_5B2C70; - + void dump() { - printf("loc_401150: %p\n", this->loc_401150); - printf("TbWItemBase__fun_5B2D50: %p\n", this->TbWItemBase__fun_5B2D50); - printf("TbWType__fun_5B2D10: %p\n", this->TbWType__fun_5B2D10); - printf("TbWType__fun_5B2C70: %p\n", this->TbWType__fun_5B2C70); + printf("loc_401150: void(%p)\n", this->loc_401150); + printf("TbWItemBase__fun_5B2D50: void(%p)\n", this->TbWItemBase__fun_5B2D50); + printf("TbWType__fun_5B2D10: void(%p)\n", this->TbWType__fun_5B2D10); + printf("TbWType__fun_5B2C70: void(%p)\n", this->TbWType__fun_5B2C70); } }; #pragma pack(pop) @@ -7992,26 +8074,30 @@ namespace dk2 { #pragma pack(push, 1) class CEntryComponent : public CComponent { public: - static uint32_t const VFTABLE = 0x0066C424; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t /*: public CComponent::vtbl_t */{ - /* 0*/ void *CEntryComponent___scalar_deleting_destructor_uint; - /* 4*/ void *CEntryComponent__fun_4011D0; - /* 8*/ void *ret_void_0args_0; - /* C*/ void *CEntryComponent__init_console_commands; - /* 10*/ void *CEntryComponent__fun_4013E0; - /* 14*/ void *CEntryComponent__fun_401410; + /* 0*/ void *(__thiscall *CEntryComponent___scalar_deleting_destructor_uint)(CEntryComponent *self, char); // void *(__thiscall *)(void *Block, char a2) + /* 4*/ int(__thiscall *CEntryComponent__fun_4011D0)(CEntryComponent *self); // int (__thiscall *)(_DWORD *this) + /* 8*/ void(__thiscall *ret_void_0args_0)(CEntryComponent *self); // void (__thiscall *)(void *this) + /* C*/ int(__thiscall *CEntryComponent__init_console_commands)(CEntryComponent *self); // int (__thiscall *)(_DWORD *this) + /* 10*/ int(__thiscall *CEntryComponent__fun_4013E0)(CEntryComponent *self); // int (__thiscall *)(int *this) + /* 14*/ int(__thiscall *CEntryComponent__fun_401410)(CEntryComponent *self); // int (__thiscall *)(_DWORD *this) }; - + static_assert(sizeof(vtbl_t) == 0x18); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* C*/ StaticListeners fC_static_listeners; /* 20*/ TbWType_t_TbPalette_t__vtbl *f20__vftable; /* 24*/ int field_24; /* 28*/ int field_28; /* 2C*/ MyStaticStruct f2C_obj; - + virtual ~CEntryComponent(); void dump() { printf("f20__vftable: TbWType_t_TbPalette_t__vtbl(%p)\n", this->f20__vftable); @@ -8025,11 +8111,11 @@ namespace dk2 { #pragma pack(push, 1) class GameObj6A0B00 { public: - + /* 0*/ __int16 f0_flags; /* 2*/ GameObj6A0B00Item *f2_pitems; /* 6*/ uint32_t field_6; - + void dump() { printf("f0_flags: %d\n", this->f0_flags); printf("f2_pitems: GameObj6A0B00Item(%p)\n", this->f2_pitems); @@ -8042,11 +8128,11 @@ namespace dk2 { #pragma pack(push, 1) class GameObj6A0B00Item { public: - + /* 0*/ uint16_t field_0; /* 2*/ unsigned __int16 field_2; /* 4*/ int field_4; - + void dump() { printf("field_0: %d\n", this->field_0); printf("field_2: %d\n", this->field_2); @@ -8059,7 +8145,7 @@ namespace dk2 { #pragma pack(push, 1) class CvtItem { public: - + /* 0*/ int f0_code; /* 4*/ char f4_acode[8]; /* C*/ void *fC_name; @@ -8068,13 +8154,13 @@ namespace dk2 { /* 18*/ char f18_short_country[4]; /* 1C*/ char f1C_acode2[8]; /* 24*/ char f24_acode3[8]; - + void dump() { printf("f0_code: %d\n", this->f0_code); printf("f4_acode: %d\n", this->f4_acode); - printf("fC_name: %p\n", this->fC_name); + printf("fC_name: void(%p)\n", this->fC_name); printf("f10_short_name: %d\n", this->f10_short_name); - printf("f14_country: %p\n", this->f14_country); + printf("f14_country: void(%p)\n", this->f14_country); printf("f18_short_country: %d\n", this->f18_short_country); printf("f1C_acode2: %d\n", this->f1C_acode2); printf("f24_acode3: %d\n", this->f24_acode3); @@ -8086,12 +8172,12 @@ namespace dk2 { #pragma pack(push, 1) class Item5B06D0 { public: - + /* 0*/ uint32_t field_0; /* 4*/ int f4_flags; /* 8*/ int field_8; /* C*/ int fC_bitf; - + void dump() { printf("field_0: %d\n", this->field_0); printf("f4_flags: %d\n", this->f4_flags); @@ -8105,7 +8191,7 @@ namespace dk2 { #pragma pack(push, 1) class StubStruc6787B8 { public: - + /* 0*/ int field_0; /* 4*/ int field_4; /* 8*/ int field_8; @@ -8170,7 +8256,7 @@ namespace dk2 { /* F4*/ int field_F4; /* F8*/ int field_F8; /* FC*/ int field_FC; - + void dump() { printf("field_0: %d\n", this->field_0); printf("field_4: %d\n", this->field_4); @@ -8244,12 +8330,12 @@ namespace dk2 { #pragma pack(push, 1) class StubStruc67B320 { public: - + /* 0*/ int field_0; /* 4*/ int field_4; /* 8*/ int field_8; /* C*/ int field_C; - + void dump() { printf("field_0: %d\n", this->field_0); printf("field_4: %d\n", this->field_4); @@ -8263,7 +8349,7 @@ namespace dk2 { #pragma pack(push, 1) class StubStruc68F650 { public: - + /* 0*/ char *f0_name; /* 4*/ int field_4; /* 8*/ int field_8; @@ -8277,7 +8363,7 @@ namespace dk2 { /* 28*/ int field_28; /* 2C*/ int field_2C; /* 30*/ int field_30; - + void dump() { printf("f0_name: %s\n", this->f0_name); printf("field_4: %d\n", this->field_4); @@ -8286,7 +8372,7 @@ namespace dk2 { printf("field_10: %d\n", this->field_10); printf("field_14: %d\n", this->field_14); printf("field_18: %d\n", this->field_18); - printf("field_1C: %p\n", this->field_1C); + printf("field_1C: void(%p)\n", this->field_1C); printf("field_20: %d\n", this->field_20); printf("field_24: %d\n", this->field_24); printf("field_28: %d\n", this->field_28); @@ -8300,7 +8386,7 @@ namespace dk2 { #pragma pack(push, 1) class StubStruc6A1EC8 { public: - + /* 0*/ char field_0; /* 1*/ void *field_1; /* 5*/ void *field_5; @@ -8312,15 +8398,15 @@ namespace dk2 { /* 1D*/ int field_1D; /* 21*/ int field_21; /* 25*/ int field_25; - + void dump() { printf("field_0: %d\n", this->field_0); - printf("field_1: %p\n", this->field_1); - printf("field_5: %p\n", this->field_5); - printf("field_9: %p\n", this->field_9); - printf("field_D: %p\n", this->field_D); - printf("field_11: %p\n", this->field_11); - printf("field_15: %p\n", this->field_15); + printf("field_1: void(%p)\n", this->field_1); + printf("field_5: void(%p)\n", this->field_5); + printf("field_9: void(%p)\n", this->field_9); + printf("field_D: void(%p)\n", this->field_D); + printf("field_11: void(%p)\n", this->field_11); + printf("field_15: void(%p)\n", this->field_15); printf("field_19: %d\n", this->field_19); printf("field_1D: %d\n", this->field_1D); printf("field_21: %d\n", this->field_21); @@ -8333,13 +8419,13 @@ namespace dk2 { #pragma pack(push, 1) class StubStruc6B84C8 { public: - + /* 0*/ char *f0_name; /* 4*/ int field_4; /* 8*/ int field_8; /* C*/ int field_C; /* 10*/ int field_10; - + void dump() { printf("f0_name: %s\n", this->f0_name); printf("field_4: %d\n", this->field_4); @@ -8354,7 +8440,7 @@ namespace dk2 { #pragma pack(push, 1) class StubStruc6BF280 { public: - + /* 0*/ int field_0; /* 4*/ int field_4; /* 8*/ int field_8; @@ -8371,7 +8457,7 @@ namespace dk2 { /* 34*/ int field_34; /* 38*/ int field_38; /* 3C*/ int field_3C; - + void dump() { printf("field_0: %d\n", this->field_0); printf("field_4: %d\n", this->field_4); @@ -8397,11 +8483,11 @@ namespace dk2 { #pragma pack(push, 1) class StubStruc6C3DA0 { public: - + /* 0*/ char field_0[6]; /* 6*/ unsigned __int8 field_6; /* 7*/ char field_7; - + void dump() { printf("field_0: %d\n", this->field_0); printf("field_6: %d\n", this->field_6); @@ -8414,12 +8500,12 @@ namespace dk2 { #pragma pack(push, 1) class GameScoreRecord { public: - + /* 0*/ void *f0_name; /* 4*/ int f4_score; - + void dump() { - printf("f0_name: %p\n", this->f0_name); + printf("f0_name: void(%p)\n", this->f0_name); printf("f4_score: %d\n", this->f4_score); } }; @@ -8429,12 +8515,12 @@ namespace dk2 { #pragma pack(push, 1) class arr_769A78_t { public: - + /* 0*/ int field_0[1]; /* 4*/ int field_4[1]; /* 8*/ float f8_sqr[1]; /* C*/ int fC_pCEngineDynamicMesh; - + void dump() { printf("field_0: %d\n", this->field_0); printf("field_4: %d\n", this->field_4); @@ -8448,11 +8534,11 @@ namespace dk2 { #pragma pack(push, 1) class arr_7793A8_t { public: - + /* 0*/ int field_0; /* 4*/ int field_4; /* 8*/ int field_8; - + void dump() { printf("field_0: %d\n", this->field_0); printf("field_4: %d\n", this->field_4); @@ -8465,10 +8551,10 @@ namespace dk2 { #pragma pack(push, 1) class VLCtable { public: - + /* 0*/ char code; /* 1*/ char len; - + void dump() { printf("code: %d\n", this->code); printf("len: %d\n", this->len); @@ -8480,9 +8566,9 @@ namespace dk2 { #pragma pack(push, 1) class arr_6BEA7E_t1 { public: - + /* 0*/ VLCtable field_0[5]; - + void dump() { } }; @@ -8492,16 +8578,16 @@ namespace dk2 { #pragma pack(push, 1) class arr_66C780_t { public: - + /* 0*/ int f0_idx; /* 4*/ void *f8_name; /* 8*/ __int16 field_8; /* A*/ __int16 field_A; /* C*/ int field_C; - + void dump() { printf("f0_idx: %d\n", this->f0_idx); - printf("f8_name: %p\n", this->f8_name); + printf("f8_name: void(%p)\n", this->f8_name); printf("field_8: %d\n", this->field_8); printf("field_A: %d\n", this->field_A); printf("field_C: %d\n", this->field_C); @@ -8513,19 +8599,19 @@ namespace dk2 { #pragma pack(push, 1) class EXCEPTION_RECORD { public: - + /* 0*/ DWORD ExceptionCode; /* 4*/ DWORD ExceptionFlags; /* 8*/ _EXCEPTION_RECORD *ExceptionRecord; /* C*/ void *ExceptionAddress; /* 10*/ DWORD NumberParameters; /* 14*/ ULONG_PTR ExceptionInformation[15]; - + void dump() { printf("ExceptionCode: %d\n", this->ExceptionCode); printf("ExceptionFlags: %d\n", this->ExceptionFlags); printf("ExceptionRecord: _EXCEPTION_RECORD(%p)\n", this->ExceptionRecord); - printf("ExceptionAddress: %p\n", this->ExceptionAddress); + printf("ExceptionAddress: void(%p)\n", this->ExceptionAddress); printf("NumberParameters: %d\n", this->NumberParameters); printf("ExceptionInformation: %d\n", this->ExceptionInformation); } @@ -8536,13 +8622,13 @@ namespace dk2 { #pragma pack(push, 1) class MyDblNamedSurface { public: - + /* 0*/ uint32_t f0_blWidth; /* 4*/ uint32_t f4_blHeight; /* 8*/ char *f8_name; /* C*/ uint32_t fC_name2; /* 10*/ char *f10_name; - /* 14*/ void *f14_names; + /* 14*/ uint32_t *f14_names; /* 18*/ int f18_init1__height; /* 1C*/ MySurface f1C_surf; /* 44*/ int f44_flags; @@ -8551,14 +8637,14 @@ namespace dk2 { /* 50*/ int f50_init0; /* 54*/ int f54_init0; /* 58*/ int f58_init0; - + void dump() { printf("f0_blWidth: %d\n", this->f0_blWidth); printf("f4_blHeight: %d\n", this->f4_blHeight); printf("f8_name: %s\n", this->f8_name); printf("fC_name2: %d\n", this->fC_name2); printf("f10_name: %s\n", this->f10_name); - printf("f14_names: %p\n", this->f14_names); + printf("f14_names: uint32_t(%p)\n", this->f14_names); printf("f18_init1__height: %d\n", this->f18_init1__height); printf("f44_flags: %d\n", this->f44_flags); printf("f48_init1__width: %d\n", this->f48_init1__width); @@ -8574,11 +8660,11 @@ namespace dk2 { #pragma pack(push, 1) class BufCx400 { public: - + /* 0*/ int f0_count_to_add; /* 4*/ uint32_t f4_max_count; /* 8*/ BufCx400Item *f8_buf; - + void dump() { printf("f0_count_to_add: %d\n", this->f0_count_to_add); printf("f4_max_count: %d\n", this->f4_max_count); @@ -8591,11 +8677,11 @@ namespace dk2 { #pragma pack(push, 1) class MyNameObjMap { public: - + /* 0*/ uint32_t f0_hashTable[256]; /* 400*/ uint32_t f400_idx; /* 404*/ BufCx400 f404_buf; - + void dump() { printf("f0_hashTable: %d\n", this->f0_hashTable); printf("f400_idx: %d\n", this->f400_idx); @@ -8607,14 +8693,14 @@ namespace dk2 { #pragma pack(push, 1) class BufCx400Item { public: - + /* 0*/ int f0_name; /* 4*/ void *f4_value; /* 8*/ int f8_prev_idx_for_same_hash; - + void dump() { printf("f0_name: %d\n", this->f0_name); - printf("f4_value: %p\n", this->f4_value); + printf("f4_value: void(%p)\n", this->f4_value); printf("f8_prev_idx_for_same_hash: %d\n", this->f8_prev_idx_for_same_hash); } }; @@ -8624,16 +8710,16 @@ namespace dk2 { #pragma pack(push, 1) class Arrp31x400 { public: - + /* 0*/ uint32_t f0_count_to_add; /* 4*/ int f4_max_count; - /* 8*/ void *f8_buf; + /* 8*/ uint32_t *f8_buf; /* C*/ int fC_count; - + void dump() { printf("f0_count_to_add: %d\n", this->f0_count_to_add); printf("f4_max_count: %d\n", this->f4_max_count); - printf("f8_buf: %p\n", this->f8_buf); + printf("f8_buf: uint32_t(%p)\n", this->f8_buf); printf("fC_count: %d\n", this->fC_count); } }; @@ -8643,7 +8729,7 @@ namespace dk2 { #pragma pack(push, 1) class Arrp31x400Item { public: - + /* 0*/ uint32_t f0_idx; /* 4*/ MyCESurfScale *f4_scaledSurfArr; /* 8*/ MyCESurfHandle *f8_surfh; @@ -8657,7 +8743,7 @@ namespace dk2 { /* 25*/ float field_25; /* 29*/ float field_29; /* 2D*/ int field_2D; - + void dump() { printf("f0_idx: %d\n", this->f0_idx); printf("f4_scaledSurfArr: MyCESurfScale(%p)\n", this->f4_scaledSurfArr); @@ -8680,7 +8766,7 @@ namespace dk2 { #pragma pack(push, 1) class MyCESurfHandle { public: - + /* 0*/ CEngineSurface *f0_cesurf; /* 4*/ SurfaceHolder *f4_holder_parent; /* 8*/ MyCESurfHandle *f8_gnext; @@ -8703,7 +8789,7 @@ namespace dk2 { /* 43*/ char f43_y8; /* 44*/ int field_44; /* 48*/ int f48_sortTick; - + void dump() { printf("f0_cesurf: CEngineSurface(%p)\n", this->f0_cesurf); printf("f4_holder_parent: SurfaceHolder(%p)\n", this->f4_holder_parent); @@ -8735,28 +8821,32 @@ namespace dk2 { #pragma pack(push, 1) class CEngineSurfaceBase { public: - static uint32_t const VFTABLE = 0x00670374; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t { - /* 0*/ void *scalar_destructor; - /* 4*/ void *fill; - /* 8*/ void *copySurf; - /* C*/ void *paintSurf; - /* 10*/ void *f10_unk; - /* 14*/ void *hasBuf; - /* 18*/ void *lockBuf; - /* 1C*/ void *unlockBuf; - /* 20*/ void *getBufWithSize; + /* 0*/ void *(__thiscall *scalar_destructor)(CEngineSurfaceBase *self, unsigned int); // void *(__thiscall *)(void *this, unsigned int a2) + /* 4*/ int(__thiscall *fill)(CEngineSurfaceBase *self, __int16); // int (__thiscall *)(_DWORD *this, __int16 pix) + /* 8*/ int(__thiscall *copySurf)(CEngineSurfaceBase *self, CEngineSurfaceBase *, int, int); // int (__thiscall *)(_DWORD *this, CEngineSurfaceBase *, int a3, int a4) + /* C*/ int(__thiscall *paintSurf)(CEngineSurfaceBase *self, CEngineSurfaceBase *, int, int); // int (__thiscall *)(_DWORD *this, CEngineSurfaceBase *, int a3, int a4) + /* 10*/ void(__stdcall *f10_unk)(); // void (__stdcall __noreturn *)() + /* 14*/ int(__thiscall *hasBuf)(CEngineSurfaceBase *self); // int (__thiscall *)(_DWORD *this) + /* 18*/ void *(__thiscall *lockBuf)(CEngineSurfaceBase *self); // void *(__thiscall *)(_DWORD *this) + /* 1C*/ int(__thiscall *unlockBuf)(CEngineSurfaceBase *self, int); // int (__thiscall *)(_DWORD **this, int a2) + /* 20*/ void *(__thiscall *getBufWithSize)(CEngineSurfaceBase *self, uint32_t *); // void *(__thiscall *)(void *this, _DWORD *pSize) }; - + static_assert(sizeof(vtbl_t) == 0x24); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 4*/ int f4_width; /* 8*/ int f8_height; /* C*/ int fC_lineWidth; /* 10*/ MyCEngineSurfDesc *fC_desc; - + virtual ~CEngineSurfaceBase(); void dump() { printf("f4_width: %d\n", this->f4_width); @@ -8771,17 +8861,20 @@ namespace dk2 { #pragma pack(push, 1) class CEngineSurface : public CEngineSurfaceBase { public: - static uint32_t const VFTABLE = 0x0067034C; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - - struct vtbl_t /*: public CEngineSurfaceBase::vtbl_t */{ - /* 0*/ void *_; + struct vtbl_t : public CEngineSurfaceBase::vtbl_t { }; - + static_assert(sizeof(vtbl_t) == 0x24); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 14*/ int f14_pixels; - + virtual ~CEngineSurface(); void dump() { printf("f14_pixels: %d\n", this->f14_pixels); @@ -8793,14 +8886,14 @@ namespace dk2 { #pragma pack(push, 1) class MySurfaceWrapper { public: - + /* 0*/ uint32_t f0_flags; /* 4*/ uint32_t f4_prescaleWigth; /* 8*/ uint32_t f8_prescaleHeight; /* C*/ char *fC_name; /* 10*/ MySurface f10_surf; /* 38*/ int field_38; - + void dump() { printf("f0_flags: %d\n", this->f0_flags); printf("f4_prescaleWigth: %d\n", this->f4_prescaleWigth); @@ -8815,9 +8908,9 @@ namespace dk2 { #pragma pack(push, 1) class MyCESurfScale { public: - + /* 0*/ MyCESurfHandle * f0_surfScaledArr[4]; - + void dump() { printf("f0_surfScaledArr: %d\n", this->f0_surfScaledArr); } @@ -8828,17 +8921,17 @@ namespace dk2 { #pragma pack(push, 1) class Obj792D48 { public: - + /* 0*/ char f0_aBool; /* 1*/ CEngineSurface *f1_cEngineSurf; - /* 5*/ void *f5_cEngineSurf; + /* 5*/ uint32_t *f5_cEngineSurf; /* 9*/ int f9_prescaleWigth; /* D*/ int fD_prescaleHeight; - + void dump() { printf("f0_aBool: %d\n", this->f0_aBool); printf("f1_cEngineSurf: CEngineSurface(%p)\n", this->f1_cEngineSurf); - printf("f5_cEngineSurf: %p\n", this->f5_cEngineSurf); + printf("f5_cEngineSurf: uint32_t(%p)\n", this->f5_cEngineSurf); printf("f9_prescaleWigth: %d\n", this->f9_prescaleWigth); printf("fD_prescaleHeight: %d\n", this->fD_prescaleHeight); } @@ -8849,12 +8942,12 @@ namespace dk2 { #pragma pack(push, 1) class Obj79DC68 { public: - + /* 0*/ Obj672520Interface *f0_Obj672520Interface; /* 4*/ uint32_t f4_s1_dwRGBBitCount_aligned8; /* 8*/ uint32_t f8_s2_dwRGBBitCount_aligned8; /* C*/ int fC_objKind; - + void dump() { printf("f0_Obj672520Interface: Obj672520Interface(%p)\n", this->f0_Obj672520Interface); printf("f4_s1_dwRGBBitCount_aligned8: %d\n", this->f4_s1_dwRGBBitCount_aligned8); @@ -8868,18 +8961,22 @@ namespace dk2 { #pragma pack(push, 1) class Obj672520Interface { public: - static uint32_t const VFTABLE = 0x00672520; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t { - /* 0*/ void *scalar_destructor; - /* 4*/ void *convertPixel; - /* 8*/ void *selfConvertPixel; + /* 0*/ void *(__thiscall *scalar_destructor)(Obj672520Interface *self, char); // void *(__thiscall *)(void *Block, char a2) + /* 4*/ int(__thiscall *convertPixel)(Obj672520Interface *self, uint8_t *, uint32_t *, int); // int (__thiscall *)(_DWORD *this, _BYTE *a2, _DWORD *a3, int a4) + /* 8*/ int(__thiscall *selfConvertPixel)(Obj672520Interface *self, int, int, int); // int (__thiscall *)(_DWORD *this, int a2, int a3, int a4) }; - - + static_assert(sizeof(vtbl_t) == 0xC); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + + virtual ~Obj672520Interface(); void dump() { } @@ -8890,11 +8987,7 @@ namespace dk2 { #pragma pack(push, 1) class Obj672510 { public: - static uint32_t const VFTABLE = 0x00672510; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - + /* 4*/ int field_4; /* 8*/ int field_8; /* C*/ int field_C; @@ -8915,7 +9008,7 @@ namespace dk2 { /* 48*/ int f48_s1_dwRGBBitCount_align8; /* 4C*/ int field_4C; /* 50*/ int field_50; - + virtual ~Obj672510(); void dump() { printf("field_4: %d\n", this->field_4); @@ -8946,11 +9039,7 @@ namespace dk2 { #pragma pack(push, 1) class Obj672E70 { public: - static uint32_t const VFTABLE = 0x00672E70; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - + /* 4*/ uint8_t f4_arr[1024]; /* 404*/ int field_404; /* 408*/ int field_408; @@ -8966,7 +9055,7 @@ namespace dk2 { /* 430*/ int field_430; /* 434*/ int field_434; /* 438*/ int field_438; - + virtual ~Obj672E70(); void dump() { printf("f4_arr: %d\n", this->f4_arr); @@ -8992,11 +9081,7 @@ namespace dk2 { #pragma pack(push, 1) class Obj672500 { public: - static uint32_t const VFTABLE = 0x00672500; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - + /* 4*/ int f4__rMask; /* 8*/ int f8__gMask; /* C*/ int fC__bMask; @@ -9009,7 +9094,7 @@ namespace dk2 { /* 28*/ int field_28; /* 2C*/ int f2C; /* 30*/ int field_30[256]; - + virtual ~Obj672500(); void dump() { printf("f4__rMask: %d\n", this->f4__rMask); @@ -9032,11 +9117,7 @@ namespace dk2 { #pragma pack(push, 1) class Obj672E80 { public: - static uint32_t const VFTABLE = 0x00672E80; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - + /* 4*/ int field_4; /* 8*/ int f8_dst_dwRGBAlphaBitMask; /* C*/ int field_C; @@ -9047,7 +9128,7 @@ namespace dk2 { /* 20*/ int field_20; /* 24*/ int field_24; /* 28*/ int field_28; - + virtual ~Obj672E80(); void dump() { printf("field_4: %d\n", this->field_4); @@ -9066,21 +9147,64 @@ namespace dk2 { static_assert(sizeof(Obj672E80) == 0x2C); #pragma pack(push, 1) - class MyTextures { + class CDirectIFFFile { + public: + struct vtbl_t { + /* 0*/ FILE *(__thiscall *read)(CDirectIFFFile *self, void *, size_t); // FILE *(__thiscall *)(_DWORD *this, void *Buffer, size_t ElementSize) + /* 4*/ FILE *(__thiscall *write)(CDirectIFFFile *self, void *, size_t); // FILE *(__thiscall *)(_DWORD *this, void *Buffer, size_t ElementSize) + /* 8*/ int(__thiscall *seek)(CDirectIFFFile *self, int); // int (__thiscall *)(FILE **this, int Offset) + }; + static_assert(sizeof(vtbl_t) == 0xC); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + + /* 4*/ uint32_t f4_offset; + /* 8*/ int f8_aBool; + /* C*/ uint8_t gap_C[4]; + /* 10*/ int f10_count; + /* 14*/ int f14_arr1[128]; + /* 214*/ int f214_arr2[128]; + /* 414*/ int field_414; + /* 418*/ uint8_t gap_418[8]; + /* 420*/ FILE *f420_stdFileHandle; + + virtual ~CDirectIFFFile(); + void dump() { + printf("f4_offset: %d\n", this->f4_offset); + printf("f8_aBool: %d\n", this->f8_aBool); + printf("gap_C: %d\n", this->gap_C); + printf("f10_count: %d\n", this->f10_count); + printf("f14_arr1: %d\n", this->f14_arr1); + printf("f214_arr2: %d\n", this->f214_arr2); + printf("field_414: %d\n", this->field_414); + printf("gap_418: %d\n", this->gap_418); + printf("f420_stdFileHandle: FILE(%p)\n", this->f420_stdFileHandle); + } + }; +#pragma pack(pop) + static_assert(sizeof(CDirectIFFFile) == 0x424); - /* 0*/ char *f0_dirPath; - /* 4*/ char *f4_datPath; +#pragma pack(push, 1) + class MyTextures { + public: + + /* 0*/ char *f0_textureCacheFile_dir; + /* 4*/ char *f4_textureCacheFile_dat; /* 8*/ FILE *f8_fileHandle; - /* C*/ uint8_t gap_C[1060]; + /* C*/ CDirectIFFFile fC_rwfile; /* 430*/ uint32_t field_430; /* 434*/ MyNameObjMap f434_texNameToFileOffsetMap; - + void dump() { - printf("f0_dirPath: %s\n", this->f0_dirPath); - printf("f4_datPath: %s\n", this->f4_datPath); + printf("f0_textureCacheFile_dir: %s\n", this->f0_textureCacheFile_dir); + printf("f4_textureCacheFile_dat: %s\n", this->f4_textureCacheFile_dat); printf("f8_fileHandle: FILE(%p)\n", this->f8_fileHandle); - printf("gap_C: %d\n", this->gap_C); printf("field_430: %d\n", this->field_430); } }; @@ -9090,18 +9214,21 @@ namespace dk2 { #pragma pack(push, 1) class CEngineCompressedSurface : public CEngineSurfaceBase { public: - static uint32_t const VFTABLE = 0x0067039C; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - - struct vtbl_t /*: public CEngineSurfaceBase::vtbl_t */{ - /* 0*/ void *_; + struct vtbl_t : public CEngineSurfaceBase::vtbl_t { }; - + static_assert(sizeof(vtbl_t) == 0x24); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 14*/ int f14_pixelBuf; /* 18*/ int f18_bufSize; - + virtual ~CEngineCompressedSurface(); void dump() { printf("f14_pixelBuf: %d\n", this->f14_pixelBuf); @@ -9114,20 +9241,23 @@ namespace dk2 { #pragma pack(push, 1) class CEngineDDSurface : public CEngineSurfaceBase { public: - static uint32_t const VFTABLE = 0x006703C4; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - - struct vtbl_t /*: public CEngineSurfaceBase::vtbl_t */{ - /* 0*/ void *_; + struct vtbl_t : public CEngineSurfaceBase::vtbl_t { }; - + static_assert(sizeof(vtbl_t) == 0x24); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 14*/ uint32_t field_14; /* 18*/ IDirectDrawSurface4 *f18_ddSurf; /* 1C*/ IDirect3DTexture2 *f1C_d3dTex; /* 20*/ int field_20; - + virtual ~CEngineDDSurface(); void dump() { printf("field_14: %d\n", this->field_14); @@ -9142,7 +9272,7 @@ namespace dk2 { #pragma pack(push, 1) class MyCEngineSurfDesc { public: - + /* 0*/ uint32_t field_0; /* 4*/ int f4__bitsiz; /* 8*/ int f8_bytesize; @@ -9157,7 +9287,7 @@ namespace dk2 { /* 2C*/ char field_2C; /* 2D*/ MySurfDesc f2D_desc; /* 45*/ DDPIXELFORMAT f45_ddPixFmt; - + void dump() { printf("field_0: %d\n", this->field_0); printf("f4__bitsiz: %d\n", this->f4__bitsiz); @@ -9180,10 +9310,10 @@ namespace dk2 { #pragma pack(push, 1) class sVLCtable { public: - + /* 0*/ __int16 code; /* 2*/ uint8_t len; - + void dump() { printf("code: %d\n", this->code); printf("len: %d\n", this->len); @@ -9195,9 +9325,9 @@ namespace dk2 { #pragma pack(push, 1) class VLCtable_tab2 { public: - + /* 0*/ VLCtable arr[5]; - + void dump() { } }; @@ -9207,35 +9337,39 @@ namespace dk2 { #pragma pack(push, 1) class CLocalCommunication : public CCommunicationInterface { public: - static uint32_t const VFTABLE = 0x0066EB8C; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t /*: public CCommunicationInterface::vtbl_t */{ - /* 0*/ void *CLocalCommunication___scalar_deleting_destructor_uint; - /* 4*/ void *CLocalCommunication__fun_522740; - /* 8*/ void *ret_void_0args_0; - /* C*/ void *ret_0_2args; - /* 10*/ void *CLocalCommunication__fun_522750; - /* 14*/ void *CLocalCommunication__fun_522760; - /* 18*/ void *ret_1_0args_0; - /* 1C*/ void *ret_void_2args; - /* 20*/ void *duplicate_7_1; - /* 24*/ void *duplicate_7_2; - /* 28*/ void *ret_void_1args; - /* 2C*/ void *ret_void_0args; - /* 30*/ void *ret_1_0args; - /* 34*/ void *duplicate_12_1; - /* 38*/ void *ret_0_0args_0; - /* 3C*/ void *CCommunicationInterface__fun_521B40; - /* 40*/ void *duplicate_7_3; - /* 44*/ void *CCommunicationInterface__fun_52B700; - /* 48*/ void *ret_void_1args_0; + /* 0*/ void *(__thiscall *CLocalCommunication___scalar_deleting_destructor_uint)(CLocalCommunication *self, char); // void *(__thiscall *)(void *Block, char a2) + /* 4*/ int(__thiscall *CLocalCommunication__fun_522740)(CLocalCommunication *self); // int (__thiscall *)(_DWORD *this) + /* 8*/ void(__thiscall *ret_void_0args_0)(CLocalCommunication *self); // void (__thiscall *)(void *this) + /* C*/ int(__stdcall *ret_0_2args)(int, int); // int (__stdcall *)(int a1, int a2) + /* 10*/ int(__thiscall *CLocalCommunication__fun_522750)(CLocalCommunication *self, GameAction *); // int (__thiscall *)(int this, GameAction *a2) + /* 14*/ int(__thiscall *CLocalCommunication__fun_522760)(CLocalCommunication *self, int); // int (__thiscall *)(CCommunicationInterface *this, int a2) + /* 18*/ int(__stdcall *ret_1_0args_0)(); // int (__stdcall *)() + /* 1C*/ void(__stdcall *ret_void_2args)(int, int); // void (__stdcall *)(int a1, int a2) + /* 20*/ void *(__stdcall *duplicate_7_1)(); // void *(__stdcall *)() + /* 24*/ void *(__stdcall *duplicate_7_2)(); // void *(__stdcall *)() + /* 28*/ void(__stdcall *ret_void_1args)(int); // void (__stdcall *)(int a1) + /* 2C*/ void(__cdecl *ret_void_0args)(); // void (__cdecl *)() + /* 30*/ int(__stdcall *ret_1_0args)(); // int (__stdcall *)() + /* 34*/ void *(__stdcall *duplicate_12_1)(); // void *(__stdcall *)() + /* 38*/ int(__stdcall *ret_0_0args_0)(); // int (__stdcall *)() + /* 3C*/ int(__stdcall *CCommunicationInterface__fun_521B40)(int); // int (__stdcall *)(int a1) + /* 40*/ void *(__stdcall *duplicate_7_3)(); // void *(__stdcall *)() + /* 44*/ int(__stdcall *CCommunicationInterface__fun_52B700)(int); // int (__stdcall *)(int a1) + /* 48*/ void(__stdcall *ret_void_1args_0)(int); // void (__stdcall *)(int a1) }; - + static_assert(sizeof(vtbl_t) == 0x4C); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 14*/ GameActionArray f14_clickList; - + virtual ~CLocalCommunication(); void dump() { } @@ -9246,7 +9380,7 @@ namespace dk2 { #pragma pack(push, 1) class GameActionCtx { public: - + /* 0*/ unsigned __int8 f0_nextIdx; /* 1*/ int field_1; /* 5*/ int field_5; @@ -9256,7 +9390,7 @@ namespace dk2 { /* F*/ char field_F; /* 10*/ uint8_t field_10; /* 11*/ GameAction f11_actionArr[16]; - + void dump() { printf("f0_nextIdx: %d\n", this->f0_nextIdx); printf("field_1: %d\n", this->field_1); @@ -9274,10 +9408,10 @@ namespace dk2 { #pragma pack(push, 1) class GameActionRecord { public: - + /* 0*/ int f0_actionKind; /* 4*/ GameActionHandler f4_handler; - + void dump() { printf("f0_actionKind: %d\n", this->f0_actionKind); } @@ -9288,23 +9422,27 @@ namespace dk2 { #pragma pack(push, 1) class CListBox : public CButton { public: - static uint32_t const VFTABLE = 0x0066ED54; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t /*: public CButton::vtbl_t */{ - /* 0*/ void *CClickButton__fun_52CAA0; - /* 4*/ void *CListBox__fun_52AFB0; - /* 8*/ void *CListBox__fun_52B160; - /* C*/ void *CListBox__add_CVerticalSlider; + /* 0*/ void *(__thiscall *CClickButton__fun_52CAA0)(CListBox *self, char); // void *(__thiscall *)(void *Block, char a2) + /* 4*/ int(__thiscall *CListBox__fun_52AFB0)(CListBox *self, int, int); // int (__thiscall *)(int this, int a2, int a3) + /* 8*/ int(__thiscall *CListBox__fun_52B160)(CListBox *self, int); // int (__thiscall *)(int this, int a2) + /* C*/ int(__thiscall *CListBox__add_CVerticalSlider)(CListBox *self, int); // int (__thiscall *)(int this, int a2) }; - + static_assert(sizeof(vtbl_t) == 0x10); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 80*/ int field_80; /* 84*/ int field_84; /* 88*/ int field_88; /* 8C*/ int field_8C; - + virtual ~CListBox(); void dump() { printf("field_80: %d\n", this->field_80); @@ -9319,28 +9457,32 @@ namespace dk2 { #pragma pack(push, 1) class TbAudioSystem { public: - static uint32_t const VFTABLE = 0x0066F90C; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t { - /* 0*/ void *TbAudioSystem___scalar_deleting_destructor_uint; - /* 4*/ void *TbAudioSystem__fun_608A50; - /* 8*/ void *TbAudioSystem__fun_608B70; - /* C*/ void *TbAudioSystem__fun_608DA0; - /* 10*/ void *TbAudioSystem__fun_608C20; - /* 14*/ void *TbAudioSystem__fun_608FB0; - /* 18*/ void *TbAudioSystem__fun_608870; + /* 0*/ void *(__thiscall *TbAudioSystem___scalar_deleting_destructor_uint)(TbAudioSystem *self, char); // std::locale::facet *(__thiscall *)(std::locale::facet *this, char a2) + /* 4*/ uint32_t *(__thiscall *TbAudioSystem__fun_608A50)(TbAudioSystem *self, uint32_t *); // _DWORD *(__thiscall *)(_DWORD *this, _DWORD *a2) + /* 8*/ uint32_t *(__thiscall *TbAudioSystem__fun_608B70)(TbAudioSystem *self, uint32_t *, int, int, int); // _DWORD *(__thiscall *)(_DWORD *this, _DWORD *a2, int a3, int a4, int a5) + /* C*/ int(__thiscall *TbAudioSystem__fun_608DA0)(TbAudioSystem *self); // int (__thiscall *)(_DWORD *this) + /* 10*/ int(__thiscall *TbAudioSystem__fun_608C20)(TbAudioSystem *self, int, uint32_t *); // int (__thiscall *)(_DWORD *this, int a2, _DWORD *a3) + /* 14*/ int(__stdcall *TbAudioSystem__fun_608FB0)(int); // int (__stdcall *)(int a1) + /* 18*/ int(__thiscall *TbAudioSystem__fun_608870)(TbAudioSystem *self); // int (__thiscall *)(_DWORD *this) }; - + static_assert(sizeof(vtbl_t) == 0x1C); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 4*/ int field_0; /* 8*/ int field_4; /* C*/ int field_8; /* 10*/ int field_C; /* 14*/ int field_10; /* 18*/ int f14_numberOfChannels; - + virtual ~TbAudioSystem(); void dump() { printf("field_0: %d\n", this->field_0); @@ -9355,52 +9497,32 @@ namespace dk2 { static_assert(sizeof(TbAudioSystem) == 0x1C); #pragma pack(push, 1) - class TbAudioSystem_fields { + class MyTbAudioSystem : public TbAudioSystem { public: - - /* 0*/ int field_0; - /* 4*/ int field_4; - /* 8*/ int field_8; - /* C*/ int field_C; - /* 10*/ int field_10; - /* 14*/ int f14_numberOfChannels; - - void dump() { - printf("field_0: %d\n", this->field_0); - printf("field_4: %d\n", this->field_4); - printf("field_8: %d\n", this->field_8); - printf("field_C: %d\n", this->field_C); - printf("field_10: %d\n", this->field_10); - printf("f14_numberOfChannels: %d\n", this->f14_numberOfChannels); - } - }; -#pragma pack(pop) - static_assert(sizeof(TbAudioSystem_fields) == 0x18); - -#pragma pack(push, 1) - class MyTbAudioSystem { + struct vtbl_t /*: public TbAudioSystem::vtbl_t */{ + /* 0*/ void *(__thiscall *MyTbAudioSystem___scalar_deleting_destructor_uint)(MyTbAudioSystem *self, char); // void *(__thiscall *)(void *Block, char a2) + /* 4*/ uint32_t *(__thiscall *sub_6086F0)(MyTbAudioSystem *self, uint32_t *); // _DWORD *(__thiscall *)(_DWORD *this, _DWORD *a2) + /* 8*/ uint32_t *(__thiscall *TbAudioSystem__fun_608B70)(MyTbAudioSystem *self, uint32_t *, int, int, int); // _DWORD *(__thiscall *)(_DWORD *this, _DWORD *a2, int a3, int a4, int a5) + /* C*/ int(__thiscall *TbAudioSystem__fun_608DA0)(MyTbAudioSystem *self); // int (__thiscall *)(_DWORD *this) + /* 10*/ int(__thiscall *TbAudioSystem__fun_608C20)(MyTbAudioSystem *self, int, uint32_t *); // int (__thiscall *)(_DWORD *this, int a2, _DWORD *a3) + /* 14*/ uint32_t *(__thiscall *sub_608800)(MyTbAudioSystem *self, uint32_t *); // _DWORD *(__thiscall *)(_DWORD *this, _DWORD *a2) + /* 18*/ int(__thiscall *sub_608720)(MyTbAudioSystem *self); // int (__thiscall *)(_DWORD *this) + }; + static_assert(sizeof(vtbl_t) == 0x1C); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; public: - static uint32_t const VFTABLE = 0x00673E48; - + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - - struct vtbl_t { - /* 0*/ void *MyTbAudioSystem___scalar_deleting_destructor_uint; - /* 4*/ void *sub_6086F0; - /* 8*/ void *TbAudioSystem__fun_608B70; - /* C*/ void *TbAudioSystem__fun_608DA0; - /* 10*/ void *TbAudioSystem__fun_608C20; - /* 14*/ void *sub_608800; - /* 18*/ void *sub_608720; - }; - - /* 4*/ TbAudioSystem_fields super; + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 1C*/ void *f1C_obj_MyUnk673EB0; - + virtual ~MyTbAudioSystem(); void dump() { - printf("f1C_obj_MyUnk673EB0: %p\n", this->f1C_obj_MyUnk673EB0); + printf("f1C_obj_MyUnk673EB0: void(%p)\n", this->f1C_obj_MyUnk673EB0); } }; #pragma pack(pop) @@ -9409,46 +9531,50 @@ namespace dk2 { #pragma pack(push, 1) class CSoundSystem { public: - static uint32_t const VFTABLE = 0x0066F7FC; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t { - /* 0*/ void *CSoundSystem___scalar_deleting_destructor_uint; - /* 4*/ void *sub_567210; - /* 8*/ void *CSoundSystem__set_number_of_channels; - /* C*/ void *CSoundSystem__fun_5677E0; - /* 10*/ void *CSoundSystem__fun_567410; - /* 14*/ void *CSoundSystem__fun_5677D0; - /* 18*/ void *CSoundSystem__fun_5674F0; - /* 1C*/ void *CSoundSystem__fun_567790; - /* 20*/ void *CSoundSystem__fun_5678F0; - /* 24*/ void *CSoundSystem__fun_567810; - /* 28*/ void *CSoundSystem__fun_567730; - /* 2C*/ void *CSoundSystem__fun_567AF0; - /* 30*/ void *CSoundSystem__fun_567A70; - /* 34*/ void *CSoundSystem__fun_567A10; - /* 38*/ void *CSoundSystem__fun_567A40; - /* 3C*/ void *CSoundSystem__update_room_ambience; - /* 40*/ void *sub_567220; - /* 44*/ void *sub_567230; - /* 48*/ void *CSoundSystem__set_listener_direction; - /* 4C*/ void *CSoundSystem__fun_567BC0; - /* 50*/ void *CSoundSystem__fun_567BE0; - /* 54*/ void *CSoundSystem__setProperty; - /* 58*/ void *sub_567240; - /* 5C*/ void *CSoundSystem__set_view; - /* 60*/ void *CSoundSystem__fun_567440; - /* 64*/ void *CSoundSystem__destroy_sound; - /* 68*/ void *sub_567250; - /* 6C*/ void *sub_567260; - /* 70*/ void *sub_567270; - /* 74*/ void *sub_567280; - /* 78*/ void *CSoundSystem__init_sound; - /* 7C*/ void *sub_567290; + /* 0*/ uint32_t *(__thiscall *CSoundSystem___scalar_deleting_destructor_uint)(CSoundSystem *self, char); // _DWORD *(__thiscall *)(_DWORD *Block, char a2) + /* 4*/ int(__thiscall *sub_567210)(CSoundSystem *self); // int (__thiscall *)(_DWORD *this) + /* 8*/ int(__thiscall *CSoundSystem__set_number_of_channels)(CSoundSystem *self, int); // int (__thiscall *)(int *this, int a2) + /* C*/ BOOL(__thiscall *CSoundSystem__fun_5677E0)(CSoundSystem *self); // BOOL (__thiscall *)(_DWORD *this) + /* 10*/ int(__thiscall *CSoundSystem__fun_567410)(CSoundSystem *self); // int (__thiscall *)(_DWORD *this) + /* 14*/ int(__thiscall *CSoundSystem__fun_5677D0)(CSoundSystem *self); // int (__thiscall *)(_DWORD *this) + /* 18*/ int(__thiscall *CSoundSystem__fun_5674F0)(CSoundSystem *self); // int (__thiscall *)(int *this) + /* 1C*/ int(__thiscall *CSoundSystem__fun_567790)(CSoundSystem *self, int, char *); // int (__thiscall *)(_DWORD *this, int a2, const char *a3) + /* 20*/ int(__thiscall *CSoundSystem__fun_5678F0)(CSoundSystem *self, int, int, int, uint32_t *); // int (__thiscall *)(int *this, int a2, int a3, int a4, _DWORD *a5) + /* 24*/ int(__thiscall *CSoundSystem__fun_567810)(CSoundSystem *self, int, int, int); // int (__thiscall *)(_DWORD *this, int a2, int a3, int a4) + /* 28*/ int(__thiscall *CSoundSystem__fun_567730)(CSoundSystem *self, int, int); // int (__thiscall *)(int *this, int a2, int a3) + /* 2C*/ int(__thiscall *CSoundSystem__fun_567AF0)(CSoundSystem *self, int); // int (__thiscall *)(_DWORD *this, int a2) + /* 30*/ int(__thiscall *CSoundSystem__fun_567A70)(CSoundSystem *self, int, uint32_t *); // int (__thiscall *)(_DWORD *this, int a2, _DWORD *a3) + /* 34*/ int(__thiscall *CSoundSystem__fun_567A10)(CSoundSystem *self, int, int, int); // int (__thiscall *)(_DWORD *this, int a2, int a3, int a4) + /* 38*/ uint32_t *(__thiscall *CSoundSystem__fun_567A40)(CSoundSystem *self, uint32_t *, uint32_t *); // _DWORD *(__thiscall *)(_DWORD *this, _DWORD *a2, void (__thiscall ***a3)(_DWORD, int, void *)) + /* 3C*/ int(__thiscall *CSoundSystem__update_room_ambience)(CSoundSystem *self, uint32_t *, uint32_t *, uint32_t *, int); // int (__thiscall *)(_DWORD *this, void (__thiscall **a2)(_DWORD, int, void *), void (__thiscall **a3)(_DWORD, int, void *), void (__thiscall **a4)(_DWORD, int, void *), int a5) + /* 40*/ int(__thiscall *sub_567220)(CSoundSystem *self, int); // int (__thiscall *)(_DWORD *this, int a2) + /* 44*/ void(__thiscall *sub_567230)(CSoundSystem *self); // void (__thiscall *)(_DWORD *this) + /* 48*/ int(__thiscall *CSoundSystem__set_listener_direction)(CSoundSystem *self, uint16_t *); // int (__thiscall *)(_DWORD *this, unsigned __int16 *a2) + /* 4C*/ unsigned int(__thiscall *CSoundSystem__fun_567BC0)(CSoundSystem *self, unsigned int); // unsigned int (__thiscall *)(_DWORD *this, unsigned int a2) + /* 50*/ int(__thiscall *CSoundSystem__fun_567BE0)(CSoundSystem *self, int); // int (__thiscall *)(_DWORD *this, int a2) + /* 54*/ int(__thiscall *CSoundSystem__setProperty)(CSoundSystem *self, int, uint32_t *); // int (__thiscall *)(_DWORD *this, int a2, void (__thiscall **a3)(_DWORD, int, void *)) + /* 58*/ int(__thiscall *sub_567240)(CSoundSystem *self); // int (__thiscall *)(_DWORD *this) + /* 5C*/ int(__thiscall *CSoundSystem__set_view)(CSoundSystem *self, uint32_t *); // int (__thiscall *)(_DWORD *this, void (__thiscall **a2)(_DWORD, int, void *)) + /* 60*/ int(__thiscall *CSoundSystem__fun_567440)(CSoundSystem *self); // int (__thiscall *)(_DWORD *this) + /* 64*/ int(__thiscall *CSoundSystem__destroy_sound)(CSoundSystem *self); // int (__thiscall *)(_DWORD *this) + /* 68*/ int(__thiscall *sub_567250)(CSoundSystem *self); // int (__thiscall *)(_DWORD *this) + /* 6C*/ int(__thiscall *sub_567260)(CSoundSystem *self); // int (__thiscall *)(_DWORD *this) + /* 70*/ int(__thiscall *sub_567270)(CSoundSystem *self, int); // int (__thiscall *)(_DWORD *this, int a2) + /* 74*/ int(__thiscall *sub_567280)(CSoundSystem *self); // int (__thiscall *)(_DWORD *this) + /* 78*/ uint32_t *(__thiscall *CSoundSystem__init_sound)(CSoundSystem *self, uint32_t *); // void **(__thiscall *)(_DWORD *this, void **a2) + /* 7C*/ int(__thiscall *sub_567290)(CSoundSystem *self, uint32_t *); // int (__thiscall *)(_DWORD *this, _DWORD *a2) }; - + static_assert(sizeof(vtbl_t) == 0x80); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 4*/ int field_4; /* 8*/ int field_8; /* C*/ MyTbAudioSystem fC_audio; @@ -9465,7 +9591,7 @@ namespace dk2 { /* 54*/ int field_54; /* 58*/ int field_58; /* 5C*/ int field_5C; - + virtual ~CSoundSystem(); void dump() { printf("field_4: %d\n", this->field_4); @@ -9491,13 +9617,14 @@ namespace dk2 { #pragma pack(push, 1) class TbSysCommand_SetNumberOfChannels { public: - struct vtbl_t { - /* 0*/ void *TbSysCommand__SetNumberOfChannels__fun_608360; + /* 0*/ void(__thiscall *TbSysCommand__SetNumberOfChannels__fun_608360)(TbSysCommand_SetNumberOfChannels *self, int, MyTbAudioSystem *); // void (__thiscall *)(TbSysCommand_SetNumberOfChannels *, int, MyTbAudioSystem *) }; - + static_assert(sizeof(vtbl_t) == 0x4); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + /* 4*/ int f4_value; - + virtual ~TbSysCommand_SetNumberOfChannels(); void dump() { printf("f4_value: %d\n", this->f4_value); @@ -9509,7 +9636,7 @@ namespace dk2 { #pragma pack(push, 1) class SurfHashList { public: - + /* 0*/ SurfHashListItem * f0_arr5x5[5][5]; /* 64*/ MyCEngineSurfDesc *f64_pSurfDesc; /* 68*/ MyCESurfHandle *f68_surfh_first; @@ -9517,7 +9644,7 @@ namespace dk2 { /* 70*/ SurfaceHolder *f70_holder_first; /* 74*/ int f74_holders_count; /* 78*/ int f78_squareSide_size; - + void dump() { printf("f0_arr5x5: %d\n", this->f0_arr5x5); printf("f64_pSurfDesc: MyCEngineSurfDesc(%p)\n", this->f64_pSurfDesc); @@ -9534,7 +9661,7 @@ namespace dk2 { #pragma pack(push, 1) class SurfaceHolder { public: - + /* 0*/ SceneObject30 *f0_SceneObject30; /* 4*/ MyCESurfHandle *f4_surfh_first; /* 8*/ int f8_a3; @@ -9543,7 +9670,7 @@ namespace dk2 { /* 14*/ SurfaceHolder *f14_next; /* 18*/ SurfHashListItem *f18_hashItem_link; /* 1C*/ float f1C_1divSize; - + void dump() { printf("f0_SceneObject30: SceneObject30(%p)\n", this->f0_SceneObject30); printf("f4_surfh_first: MyCESurfHandle(%p)\n", this->f4_surfh_first); @@ -9561,7 +9688,7 @@ namespace dk2 { #pragma pack(push, 1) class SurfHashListItem { public: - + /* 0*/ SurfaceHolder *f0_holder_link; /* 4*/ SurfHashListItem *f4_next; /* 8*/ SurfHashListItem *f8_prev; @@ -9572,7 +9699,7 @@ namespace dk2 { /* 21*/ char f21_y; /* 22*/ char f22__aBool; /* 23*/ char field_23; - + void dump() { printf("f0_holder_link: SurfaceHolder(%p)\n", this->f0_holder_link); printf("f4_next: SurfHashListItem(%p)\n", this->f4_next); @@ -9592,22 +9719,26 @@ namespace dk2 { #pragma pack(push, 1) class CEngineSprite { public: - static uint32_t const VFTABLE = 0x0066FCCC; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t { - /* 0*/ void *CEngine2DPrimitive__fun_5769D0; - /* 4*/ void *CEngineSprite__fun_57F3D0; - /* 8*/ void *CEngineSprite__fun_57F7E0; - /* C*/ void *CEngineWorldPrimitive__fun_57F1C0; - /* 10*/ void *CEngineVirtualPerspective2DAnimMesh__fun_5785E0; - /* 14*/ void *ret_0_0args; - /* 18*/ void *ret_0_1args; - /* 1C*/ void *ret_void_1args; + /* 0*/ uint32_t *(__thiscall *CEngine2DPrimitive__fun_5769D0)(CEngineSprite *self, char); // _DWORD *(__thiscall *)(_DWORD *this, char a2) + /* 4*/ int(__thiscall *CEngineSprite__fun_57F3D0)(CEngineSprite *self, int, int); // int (__thiscall *)(int this, int a2, int a3) + /* 8*/ void(__thiscall *CEngineSprite__fun_57F7E0)(CEngineSprite *self, int); // void (__thiscall *)(int this, int a2) + /* C*/ int(__stdcall *CEngineWorldPrimitive__fun_57F1C0)(int, int, int, uint32_t *, int); // int (__stdcall *)(int a1, int a2, int a3, _DWORD *a4, int a5) + /* 10*/ uint32_t *(__stdcall *CEngineVirtualPerspective2DAnimMesh__fun_5785E0)(uint32_t *, int); // _DWORD *(__stdcall *)(_DWORD *a1, int a2) + /* 14*/ int(__stdcall *ret_0_0args)(); // int (__stdcall *)() + /* 18*/ int(__stdcall *ret_0_1args)(int); // int (__stdcall *)(int a1) + /* 1C*/ void(__stdcall *ret_void_1args)(int); // void (__stdcall *)(int a1) }; - + static_assert(sizeof(vtbl_t) == 0x20); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 4*/ int field_4; /* 8*/ int field_8; /* C*/ int field_C; @@ -9626,7 +9757,7 @@ namespace dk2 { /* 48*/ int field_48; /* 4C*/ int field_4C; /* 50*/ int field_50; - + virtual ~CEngineSprite(); void dump() { printf("field_4: %d\n", this->field_4); @@ -9655,11 +9786,11 @@ namespace dk2 { #pragma pack(push, 1) class SceneObject2EList { public: - + /* 0*/ int f0_unk; /* 4*/ int f4_maxCount; /* 8*/ SceneObject2E *f8_arr; - + void dump() { printf("f0_unk: %d\n", this->f0_unk); printf("f4_maxCount: %d\n", this->f4_maxCount); @@ -9672,11 +9803,11 @@ namespace dk2 { #pragma pack(push, 1) class SceneObject30List { public: - + /* 0*/ int f0_blockSize; /* 4*/ int f4_maxCount; /* 8*/ SceneObject30 *f8_arr; - + void dump() { printf("f0_blockSize: %d\n", this->f0_blockSize); printf("f4_maxCount: %d\n", this->f4_maxCount); @@ -9689,7 +9820,7 @@ namespace dk2 { #pragma pack(push, 1) class SceneObject2E { public: - + /* 0*/ MyCESurfHandle * f0_surfh[4]; /* 10*/ uint32_t f10_props_flags; /* 14*/ int f14_props_reductionLevel_andFlags; @@ -9705,7 +9836,7 @@ namespace dk2 { /* 24*/ int f24_onj__meshSprite; /* 28*/ SceneObject2E *f28_next; /* 2C*/ __int16 f2C_; - + void dump() { printf("f0_surfh: %d\n", this->f0_surfh); printf("f10_props_flags: %d\n", this->f10_props_flags); @@ -9729,16 +9860,20 @@ namespace dk2 { #pragma pack(push, 1) class CEngine2DMeshSurface { public: - static uint32_t const VFTABLE = 0x0066FB04; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t { - /* 0*/ void *CEngine2DMeshSurface_scalar_destructor; - /* 4*/ void *CEngine2DMeshSurface__fun_578C00; + /* 0*/ void *(__thiscall *CEngine2DMeshSurface_scalar_destructor)(CEngine2DMeshSurface *self, unsigned int); // std::ios_base *(__thiscall *)(std::ios_base *this, unsigned int a2) + /* 4*/ int(__thiscall *CEngine2DMeshSurface__fun_578C00)(CEngine2DMeshSurface *self, int, int); // int (__thiscall *)(int this, int a2, int a3) }; - + static_assert(sizeof(vtbl_t) == 0x8); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 4*/ int f4_zeroinit; /* 8*/ void *f8_16xbuf; /* C*/ void *fC_6xbuf; @@ -9749,12 +9884,12 @@ namespace dk2 { /* 20*/ float f20_f1; /* 24*/ float f24_f2; /* 28*/ int field_28; - + virtual ~CEngine2DMeshSurface(); void dump() { printf("f4_zeroinit: %d\n", this->f4_zeroinit); - printf("f8_16xbuf: %p\n", this->f8_16xbuf); - printf("fC_6xbuf: %p\n", this->fC_6xbuf); + printf("f8_16xbuf: void(%p)\n", this->f8_16xbuf); + printf("fC_6xbuf: void(%p)\n", this->fC_6xbuf); printf("f10_buf16_maxCount: %d\n", this->f10_buf16_maxCount); printf("f14_buf6_maxCount: %d\n", this->f14_buf6_maxCount); printf("field_18: %d\n", this->field_18); @@ -9770,24 +9905,28 @@ namespace dk2 { #pragma pack(push, 1) class CEngineStaticMesh { public: - static uint32_t const VFTABLE = 0x0066FD8C; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t { - /* 0*/ void *CEngineStaticMesh_scalar_destructor; - /* 4*/ void *CEngineStaticMesh__fun_586150; - /* 8*/ void *CEngineStaticMesh_appendToSceneObject2EList; - /* C*/ void *CEngineWorldPrimitive__fun_57F1C0; - /* 10*/ void *CEngineWorldPrimitive__fun_5785E0; - /* 14*/ void *ret_0_0args; - /* 18*/ void *ret_0_1args; - /* 1C*/ void *CEngineStaticMesh__fun_586130; + /* 0*/ void *(__thiscall *CEngineStaticMesh_scalar_destructor)(CEngineStaticMesh *self, char); // std::ios_base *(__thiscall *)(std::ios_base *this, char a2) + /* 4*/ int(__thiscall *CEngineStaticMesh__fun_586150)(CEngineStaticMesh *self, int, int); // int (__thiscall *)(int this, int a2, int a3) + /* 8*/ int(__thiscall *CEngineStaticMesh_appendToSceneObject2EList)(CEngineStaticMesh *self, int); // int (__thiscall *)(int this, int a2) + /* C*/ int(__stdcall *CEngineWorldPrimitive__fun_57F1C0)(int, int, int, uint32_t *, int); // int (__stdcall *)(int a1, int a2, int a3, _DWORD *a4, int a5) + /* 10*/ uint32_t *(__stdcall *CEngineWorldPrimitive__fun_5785E0)(uint32_t *, int); // _DWORD *(__stdcall *)(_DWORD *a1, int a2) + /* 14*/ int(__stdcall *ret_0_0args)(); // int (__stdcall *)() + /* 18*/ int(__stdcall *ret_0_1args)(int); // int (__stdcall *)(int a1) + /* 1C*/ int(__stdcall *CEngineStaticMesh__fun_586130)(int); // int (__stdcall *)(int a1) }; - + static_assert(sizeof(vtbl_t) == 0x20); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 4*/ int f4_zeroinit; - /* 8*/ void *f8_v14; + /* 8*/ uint32_t *f8_v14; /* C*/ uint8_t gap_C[4]; /* 10*/ int f10_a5; /* 14*/ uint8_t gap_14[8]; @@ -9797,11 +9936,11 @@ namespace dk2 { /* 28*/ uint32_t field_28; /* 2C*/ uint8_t gap_2C[5]; /* 31*/ char field_31; - + virtual ~CEngineStaticMesh(); void dump() { printf("f4_zeroinit: %d\n", this->f4_zeroinit); - printf("f8_v14: %p\n", this->f8_v14); + printf("f8_v14: uint32_t(%p)\n", this->f8_v14); printf("gap_C: %d\n", this->gap_C); printf("f10_a5: %d\n", this->f10_a5); printf("gap_14: %d\n", this->gap_14); @@ -9819,29 +9958,33 @@ namespace dk2 { #pragma pack(push, 1) class CEngineStaticHeightField { public: - static uint32_t const VFTABLE = 0x0066FDB4; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t { - /* 0*/ void *CEngineStaticHeightField__fun_586F70; - /* 4*/ void *CEngineStaticHeightField__fun_587010; - /* 8*/ void *CEngineStaticHeightField_appendToSceneObject2EList; - /* C*/ void *CEngineWorldPrimitive__fun_57F1C0; - /* 10*/ void *CEngineWorldPrimitive__fun_5785E0; - /* 14*/ void *ret_0_0args; - /* 18*/ void *ret_0_1args; - /* 1C*/ void *CEngineStaticHeightField__fun_586FF0; + /* 0*/ void *(__thiscall *CEngineStaticHeightField__fun_586F70)(CEngineStaticHeightField *self, char); // std::ios_base *(__thiscall *)(std::ios_base *this, char a2) + /* 4*/ int(__thiscall *CEngineStaticHeightField__fun_587010)(CEngineStaticHeightField *self, int, int); // int (__thiscall *)(int this, int a2, int a3) + /* 8*/ int(__thiscall *CEngineStaticHeightField_appendToSceneObject2EList)(CEngineStaticHeightField *self, int); // int (__thiscall *)(int this, int a2) + /* C*/ int(__stdcall *CEngineWorldPrimitive__fun_57F1C0)(int, int, int, uint32_t *, int); // int (__stdcall *)(int a1, int a2, int a3, _DWORD *a4, int a5) + /* 10*/ uint32_t *(__stdcall *CEngineWorldPrimitive__fun_5785E0)(uint32_t *, int); // _DWORD *(__stdcall *)(_DWORD *a1, int a2) + /* 14*/ int(__stdcall *ret_0_0args)(); // int (__stdcall *)() + /* 18*/ int(__stdcall *ret_0_1args)(int); // int (__stdcall *)(int a1) + /* 1C*/ int(__stdcall *CEngineStaticHeightField__fun_586FF0)(int); // int (__stdcall *)(int a1) }; - + static_assert(sizeof(vtbl_t) == 0x20); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 4*/ int f4_zeroinit; /* 8*/ int f8_a8; /* C*/ uint8_t gap_C[4]; /* 10*/ uint32_t f10_buf; /* 14*/ int field_14; /* 18*/ int field_18; - + virtual ~CEngineStaticHeightField(); void dump() { printf("f4_zeroinit: %d\n", this->f4_zeroinit); @@ -9858,22 +10001,26 @@ namespace dk2 { #pragma pack(push, 1) class CEngineUnlitProceduralMesh { public: - static uint32_t const VFTABLE = 0x0066FE04; - - template - bool isa() { return (*(uint32_t *) this) == T::VFTABLE; } - struct vtbl_t { - /* 0*/ void *CEngineUnlitProceduralMesh__fun_588480; - /* 4*/ void *CEngineUnlitProceduralMesh__fun_5884F0; - /* 8*/ void *CEngineUnlitProceduralMesh_appendToSceneObject2EList; - /* C*/ void *CEngineWorldPrimitive__fun_57F1C0; - /* 10*/ void *CEngineWorldPrimitive__fun_5785E0; - /* 14*/ void *ret_0_0args; - /* 18*/ void *ret_0_1args; - /* 1C*/ void *ret_void_1args; + /* 0*/ uint32_t *(__thiscall *CEngineUnlitProceduralMesh__fun_588480)(CEngineUnlitProceduralMesh *self, char); // _DWORD *(__thiscall *)(_DWORD *this, char a2) + /* 4*/ int(__thiscall *CEngineUnlitProceduralMesh__fun_5884F0)(CEngineUnlitProceduralMesh *self, int, int); // int (__thiscall *)(_DWORD *this, int a2, int a3) + /* 8*/ unsigned int(__thiscall *CEngineUnlitProceduralMesh_appendToSceneObject2EList)(CEngineUnlitProceduralMesh *self, int); // unsigned int (__thiscall *)(_DWORD *this, int a2) + /* C*/ int(__stdcall *CEngineWorldPrimitive__fun_57F1C0)(int, int, int, uint32_t *, int); // int (__stdcall *)(int a1, int a2, int a3, _DWORD *a4, int a5) + /* 10*/ uint32_t *(__stdcall *CEngineWorldPrimitive__fun_5785E0)(uint32_t *, int); // _DWORD *(__stdcall *)(_DWORD *a1, int a2) + /* 14*/ int(__stdcall *ret_0_0args)(); // int (__stdcall *)() + /* 18*/ int(__stdcall *ret_0_1args)(int); // int (__stdcall *)(int a1) + /* 1C*/ void(__stdcall *ret_void_1args)(int); // void (__stdcall *)(int a1) }; - + static_assert(sizeof(vtbl_t) == 0x20); + inline vtbl_t *&vtbl() { return *(vtbl_t **) this; } + + private: + static vtbl_t vtbl_instance; + public: + inline static vtbl_t *class_vtbl() { return (vtbl_t *) funptr<&vtbl_instance>(); }; + template + bool isa() { return (*(uint32_t *) this) == T::class_vtbl(); } + /* 4*/ int f4_zeroinit; /* 8*/ int f8_a2; /* C*/ uint32_t field_C; @@ -9889,7 +10036,7 @@ namespace dk2 { /* 54*/ unsigned __int16 field_54; /* 56*/ uint8_t gap_56[2]; /* 58*/ int field_58; - + virtual ~CEngineUnlitProceduralMesh(); void dump() { printf("f4_zeroinit: %d\n", this->f4_zeroinit); @@ -9915,22 +10062,21 @@ namespace dk2 { #pragma pack(push, 1) class SceneObject30 { public: - + /* 0*/ SurfaceHolder * f0_holders[4]; /* 10*/ uint32_t f10_props_flags; /* 14*/ int f14_props_reductionLevel_andFlags; /* 18*/ uint16_t f18_props_surfWidth8; /* 1A*/ uint16_t f1A_props_surfHeight8; /* 1C*/ char f1C_surfhCount; - /* 1D*/ char f1D_countOf_f1E; - /* 1E*/ char f1E_sceneObj2E_f1F; - /* 1F*/ uint8_t gap_1F; + /* 1D*/ char f1D_texStageCountArrSize; + /* 1E*/ unsigned __int8 f1E_d3dtexStageCount[2]; /* 20*/ char f20_sceneObj2E_f21; /* 21*/ uint8_t gap_21[3]; /* 24*/ SceneObject2E *f24_pobj2E; /* 28*/ SceneObject30 *f28_prev; /* 2C*/ SceneObject30 *f2C_next; - + void dump() { printf("f0_holders: %d\n", this->f0_holders); printf("f10_props_flags: %d\n", this->f10_props_flags); @@ -9938,9 +10084,8 @@ namespace dk2 { printf("f18_props_surfWidth8: %d\n", this->f18_props_surfWidth8); printf("f1A_props_surfHeight8: %d\n", this->f1A_props_surfHeight8); printf("f1C_surfhCount: %d\n", this->f1C_surfhCount); - printf("f1D_countOf_f1E: %d\n", this->f1D_countOf_f1E); - printf("f1E_sceneObj2E_f1F: %d\n", this->f1E_sceneObj2E_f1F); - printf("gap_1F: %d\n", this->gap_1F); + printf("f1D_texStageCountArrSize: %d\n", this->f1D_texStageCountArrSize); + printf("f1E_d3dtexStageCount: %d\n", this->f1E_d3dtexStageCount); printf("f20_sceneObj2E_f21: %d\n", this->f20_sceneObj2E_f21); printf("f24_pobj2E: SceneObject2E(%p)\n", this->f24_pobj2E); printf("f28_prev: SceneObject30(%p)\n", this->f28_prev); @@ -9953,7 +10098,7 @@ namespace dk2 { #pragma pack(push, 1) class SurfHashList2 { public: - + /* 0*/ MyCEngineSurfDesc *f0_surfDesc; /* 4*/ MyCESurfHandle *f4_surfh_first; /* 8*/ MyCESurfHandle * f8_arr5x5_surfh[5][5]; @@ -9963,7 +10108,7 @@ namespace dk2 { /* D8*/ SurfaceHolder *fD8_holder_first; /* DC*/ uint32_t fDC_holder_count; /* E0*/ int fE0_holder_size; - + void dump() { printf("f0_surfDesc: MyCEngineSurfDesc(%p)\n", this->f0_surfDesc); printf("f4_surfh_first: MyCESurfHandle(%p)\n", this->f4_surfh_first); @@ -9979,5 +10124,98 @@ namespace dk2 { #pragma pack(pop) static_assert(sizeof(SurfHashList2) == 0xE4); +#pragma pack(push, 1) + class DxDeviceInfo { + public: + + /* 0*/ char f0_name[30]; + /* 1E*/ char f1E_desc[80]; + /* 6E*/ int f6E_pGuid; + /* 72*/ GUID f72_guid; + /* 82*/ DDCAPS f82_ddcaps; + /* 1FE*/ int f1FE_modeListCount; + /* 202*/ int f202_infoListCount; + /* 206*/ DxModeInfo *f206_modeList; + /* 20A*/ DxD3dInfo *f20A_infoList; + /* 20E*/ int f20E_dwVendorId; + /* 212*/ int f212_dwDeviceId; + /* 216*/ int f216_isVendor121A; + + void dump() { + printf("f0_name: %d\n", this->f0_name); + printf("f1E_desc: %d\n", this->f1E_desc); + printf("f6E_pGuid: %d\n", this->f6E_pGuid); + printf("f72_guid: %d\n", this->f72_guid); + printf("f82_ddcaps: %d\n", this->f82_ddcaps); + printf("f1FE_modeListCount: %d\n", this->f1FE_modeListCount); + printf("f202_infoListCount: %d\n", this->f202_infoListCount); + printf("f206_modeList: DxModeInfo(%p)\n", this->f206_modeList); + printf("f20A_infoList: DxD3dInfo(%p)\n", this->f20A_infoList); + printf("f20E_dwVendorId: %d\n", this->f20E_dwVendorId); + printf("f212_dwDeviceId: %d\n", this->f212_dwDeviceId); + printf("f216_isVendor121A: %d\n", this->f216_isVendor121A); + } + }; +#pragma pack(pop) + static_assert(sizeof(DxDeviceInfo) == 0x21A); + +#pragma pack(push, 1) + class DxD3dInfo { + public: + + /* 0*/ char f0_name[30]; + /* 1E*/ char f1E_desc[80]; + /* 6E*/ GUID *f6E_pGuid; + /* 72*/ GUID f72_guid; + /* 82*/ int field_82; + /* 86*/ D3DDEVICEDESC f86_devDesc; + /* 182*/ uint32_t f182_hasDesc; + /* 186*/ uint32_t f186_texCapsAnd1; + /* 18A*/ uint32_t f18A_hasZbuffer; + /* 18E*/ int field_18E; + /* 192*/ int field_192; + /* 196*/ int field_196; + + void dump() { + printf("f0_name: %d\n", this->f0_name); + printf("f1E_desc: %d\n", this->f1E_desc); + printf("f6E_pGuid: GUID(%p)\n", this->f6E_pGuid); + printf("f72_guid: %d\n", this->f72_guid); + printf("field_82: %d\n", this->field_82); + printf("f86_devDesc: %d\n", this->f86_devDesc); + printf("f182_hasDesc: %d\n", this->f182_hasDesc); + printf("f186_texCapsAnd1: %d\n", this->f186_texCapsAnd1); + printf("f18A_hasZbuffer: %d\n", this->f18A_hasZbuffer); + printf("field_18E: %d\n", this->field_18E); + printf("field_192: %d\n", this->field_192); + printf("field_196: %d\n", this->field_196); + } + }; +#pragma pack(pop) + static_assert(sizeof(DxD3dInfo) == 0x19A); + +#pragma pack(push, 1) + class DxModeInfo { + public: + + /* 0*/ uint32_t f0_dwWidth; + /* 4*/ uint32_t f4_dwHeight; + /* 8*/ uint32_t f8_dwRGBBitCount; + /* C*/ uint32_t fC_hasFlag_shr5and1; + /* 10*/ uint8_t gap_10[107]; + /* 7B*/ char field_7B; + + void dump() { + printf("f0_dwWidth: %d\n", this->f0_dwWidth); + printf("f4_dwHeight: %d\n", this->f4_dwHeight); + printf("f8_dwRGBBitCount: %d\n", this->f8_dwRGBBitCount); + printf("fC_hasFlag_shr5and1: %d\n", this->fC_hasFlag_shr5and1); + printf("gap_10: %d\n", this->gap_10); + printf("field_7B: %d\n", this->field_7B); + } + }; +#pragma pack(pop) + static_assert(sizeof(DxModeInfo) == 0x7C); + } // namespace dk2 diff --git a/include/tools.h b/include/tools.h new file mode 100644 index 0000000..ff46b1d --- /dev/null +++ b/include/tools.h @@ -0,0 +1,14 @@ +// +// Created by DiaLight on 27.12.2022. +// + +#ifndef EMBER_TOOLS_H +#define EMBER_TOOLS_H + +namespace tools { + + bool unpack_texture_cache(); + +} + +#endif //EMBER_TOOLS_H diff --git a/launcher/CMakeLists.txt b/launcher/CMakeLists.txt index ed33582..eafca77 100644 --- a/launcher/CMakeLists.txt +++ b/launcher/CMakeLists.txt @@ -2,7 +2,16 @@ string (REPLACE "/RTC1" "" CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG}) string (REPLACE "/EHsc" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /GS-") -add_executable(launcher WIN32 launcher.cpp) -target_link_libraries(launcher Shcore Ddraw) +add_executable(launcher WIN32 + launcher.cpp + layout.cpp + registry.cpp + create_process.cpp + status.cpp + utils.cpp + dd_modes.cpp +) +target_include_directories(launcher PRIVATE include) +target_link_libraries(launcher Shcore Ddraw win32_gui_layout) add_dependencies(launcher bootstrap_patcher makedll dll_exports stack_map references_map) set_target_properties(launcher PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${BIN_DIR}") diff --git a/launcher/create_process.cpp b/launcher/create_process.cpp new file mode 100644 index 0000000..0ab8412 --- /dev/null +++ b/launcher/create_process.cpp @@ -0,0 +1,131 @@ +// +// Created by DiaLight on 27.12.2022. +// +#include "create_process.h" +#include +#include +#include +#include +#include +#include +#include + + +struct CollectWindows { + DWORD procId = 0; + DWORD count = 0; +}; + +BOOL CALLBACK CollectWindows_WndEnumProc(HWND hWnd, LPARAM lParam) { + CollectWindows &collect = *(CollectWindows *) lParam; + DWORD procId = 0; + GetWindowThreadProcessId(hWnd, &procId); + if(collect.procId == procId) { + DWORD dwStyle = GetWindowStyle(hWnd); + if((dwStyle & WS_VISIBLE) != 0) { + collect.count++; + } + } + return TRUE; +} + +bool CreateProcess_runAndWait(const wchar_t *cmd, const wchar_t *dir, DWORD &lastError, DWORD &exitCode) { + SECURITY_ATTRIBUTES saAttr; + saAttr.nLength = sizeof(SECURITY_ATTRIBUTES); + saAttr.bInheritHandle = TRUE; + saAttr.lpSecurityDescriptor = NULL; + + HANDLE hChildStd_OUT_Rd = NULL; + HANDLE hChildStd_OUT_Wr = NULL; + if (!CreatePipe(&hChildStd_OUT_Rd, &hChildStd_OUT_Wr, &saAttr, 0) ) { + printStatus("CreatePipe failed: %08X", GetLastError()); + return false; + } + + if (!SetHandleInformation(hChildStd_OUT_Rd, HANDLE_FLAG_INHERIT, 0) ) { + printStatus("SetHandleInformation failed: %08X", GetLastError()); + return false; + } + + STARTUPINFOW si; + ZeroMemory(&si, sizeof(si)); + si.cb = sizeof(STARTUPINFOW); + si.hStdError = hChildStd_OUT_Wr; + si.hStdOutput = hChildStd_OUT_Wr; + si.hStdInput = GetStdHandle(STD_INPUT_HANDLE); + si.dwFlags |= STARTF_USESTDHANDLES; + + PROCESS_INFORMATION pi; + ZeroMemory(&pi, sizeof(pi)); + + printStatus(""); + printStatus(L"CreateProcessW(%s) cwd=%s", cmd, dir); + int cmdLen = wcslen(cmd); + wchar_t *mcmd = (wchar_t *) malloc((cmdLen + 1) * sizeof(wchar_t)); + wcscpy(mcmd, cmd); + bool created = CreateProcessW( + NULL, mcmd, NULL, NULL, TRUE, + 0, NULL, dir, &si, &pi + ); + CloseHandle(hChildStd_OUT_Wr); + free(mcmd); + if(!created) { + lastError = GetLastError(); + CloseHandle(hChildStd_OUT_Rd); + return false; + } + + std::thread thr([&pi] { // window observer thread + while(WaitForSingleObject(pi.hProcess, 2000) == WAIT_TIMEOUT) { + CollectWindows collect; + std::stringstream ss; + collect.procId = pi.dwProcessId; + EnumWindows(CollectWindows_WndEnumProc, (LPARAM) &collect); + if(collect.count != 0) continue; + if(WaitForSingleObject(pi.hProcess, 2000) != WAIT_TIMEOUT) break; + collect.count = 0; + EnumWindows(CollectWindows_WndEnumProc, (LPARAM) &collect); + if(collect.count != 0) continue; + int iStatus = MessageBoxA(NULL, + "Running process without open windows detected\n" + "terminate DK2 process?", + "DK2 window observer thread", MB_OKCANCEL); + if(iStatus == IDOK) { + TerminateProcess(pi.hProcess, 1); + } + } + }); +#define BUFSIZE 4096 + DWORD dwRead; + std::string line; + size_t lineEndOffs = 0; + BOOL bSuccess = FALSE; + for (;;) { + line.resize(lineEndOffs + BUFSIZE); + bSuccess = ReadFile(hChildStd_OUT_Rd, (&*line.begin()) + lineEndOffs, BUFSIZE, &dwRead, NULL); + if(!bSuccess || dwRead == 0) break; + char *pos = (&*line.begin()) + lineEndOffs; + char *end = pos + dwRead; + lineEndOffs += dwRead; + for(;pos < end; pos++) { + if(*pos == '\n') { + size_t lineLen = pos - (&*line.begin()); + std::string tmp(&*line.begin(), lineLen); + printStatus(tmp.c_str()); + line.erase(0, lineLen + 1); + lineEndOffs -= lineLen + 1; + } + } + } + if(!line.empty()) { + printStatus(line.c_str()); + } + CloseHandle(hChildStd_OUT_Rd); + + WaitForSingleObject(pi.hProcess, INFINITE); + thr.join(); + GetExitCodeProcess(pi.hProcess, &exitCode); + CloseHandle(pi.hProcess); + CloseHandle(pi.hThread); + return true; +} diff --git a/launcher/dd_modes.cpp b/launcher/dd_modes.cpp new file mode 100644 index 0000000..683f457 --- /dev/null +++ b/launcher/dd_modes.cpp @@ -0,0 +1,44 @@ +// +// Created by DiaLight on 27.12.2022. +// +#include "dd_modes.h" +#include +#include +#include + +class DDClose { + LPDIRECTDRAW lpDD; +public: + explicit DDClose(LPDIRECTDRAW lpDD) : lpDD(lpDD) {} + ~DDClose() { + lpDD->Release(); + } +}; +std::vector g_screenModeList; + +HRESULT FAR PASCAL enumDDModesCallback(LPDDSURFACEDESC desc, LPVOID arg) { + auto *list = (std::vector *) arg; + if(desc->ddpfPixelFormat.dwRGBBitCount == 32) { + list->emplace_back(desc->dwWidth, desc->dwHeight); + } + return DDENUMRET_OK; +} + +bool collectModes(HWND hWnd) { + LPDIRECTDRAW lpDD; + if(DirectDrawCreate(NULL, &lpDD, NULL) != DD_OK) { + printStatus("failed to create dd"); + return false; + } + DDClose ddc(lpDD); + if (lpDD->SetCooperativeLevel(hWnd, DDSCL_ALLOWMODEX | DDSCL_EXCLUSIVE | DDSCL_NOWINDOWCHANGES | DDSCL_FULLSCREEN) != DD_OK) { + printStatus("failed to set coop level"); + return false; + } + if (lpDD->EnumDisplayModes(0, NULL, &g_screenModeList, (LPDDENUMMODESCALLBACK) enumDDModesCallback) != DD_OK) { + printStatus("failed to enum modes"); + return false; + } + lpDD->SetCooperativeLevel(hWnd, DDSCL_NORMAL); + return true; +} diff --git a/launcher/include/create_process.h b/launcher/include/create_process.h new file mode 100644 index 0000000..48cbce9 --- /dev/null +++ b/launcher/include/create_process.h @@ -0,0 +1,12 @@ +// +// Created by DiaLight on 27.12.2022. +// + +#ifndef EMBER_CREATE_PROCESS_H +#define EMBER_CREATE_PROCESS_H + +#include + +bool CreateProcess_runAndWait(const wchar_t *cmd, const wchar_t *dir, DWORD &lastError, DWORD &exitCode); + +#endif //EMBER_CREATE_PROCESS_H diff --git a/launcher/include/dd_modes.h b/launcher/include/dd_modes.h new file mode 100644 index 0000000..23661e3 --- /dev/null +++ b/launcher/include/dd_modes.h @@ -0,0 +1,20 @@ +// +// Created by DiaLight on 27.12.2022. +// + +#ifndef EMBER_DD_MODES_H +#define EMBER_DD_MODES_H + +#include +#include + +struct screen_mode { + int width; + int height; + screen_mode(int width, int height) : width(width), height(height) {} +}; +extern std::vector g_screenModeList; + +bool collectModes(HWND hWnd); + +#endif //EMBER_DD_MODES_H diff --git a/launcher/include/launcher.h b/launcher/include/launcher.h new file mode 100644 index 0000000..420b1bc --- /dev/null +++ b/launcher/include/launcher.h @@ -0,0 +1,15 @@ +// +// Created by DiaLight on 27.12.2022. +// + +#ifndef EMBER_LAUNCHER_H +#define EMBER_LAUNCHER_H + +#include +#include + +#define EmberLauncher_title _T("Ember - DK2 patching launcher") +#define EmberLauncher_class _T("EmberLauncher") +#define DEBUG_CONSOLE 0 + +#endif //EMBER_LAUNCHER_H diff --git a/launcher/include/layout.h b/launcher/include/layout.h new file mode 100644 index 0000000..c3e96d0 --- /dev/null +++ b/launcher/include/layout.h @@ -0,0 +1,33 @@ +// +// Created by DiaLight on 27.12.2022. +// + +#ifndef EMBER_LAYOUT_H +#define EMBER_LAYOUT_H + +#include +#include +#include +#include +#include +#include "../win32_gui_layout.h" + + +#define hex32(val) std::hex << std::uppercase << std::setfill(L'0') << std::setw(8) << ((uint32_t) val) << std::dec +#define hex16(val) std::hex << std::uppercase << std::setfill(L'0') << std::setw(4) << ((uint16_t) val) << std::dec +#define hex8(val) std::hex << std::uppercase << std::setfill(L'0') << std::setw(2) << ((uint8_t) val) << std::dec + +extern gui::edit_elem_t DirPath; +extern gui::button_elem_t SelectDir; +extern gui::edit_elem_t TextField; +extern gui::button_elem_t StartBtn; +extern gui::combobox_elem_t MenuModesCombo; +extern gui::combobox_elem_t GameModesCombo; +extern gui::button_elem_t DPIBtn; +extern gui::button_elem_t FullscreenBtn; +extern gui::button_elem_t ResExtractBtn; +extern gui::button_elem_t ResOpenBtn; + +void launcher_layout(HWND hwnd, int width, int height, bool reset=false); + +#endif //EMBER_LAYOUT_H diff --git a/launcher/include/registry.h b/launcher/include/registry.h new file mode 100644 index 0000000..263ee68 --- /dev/null +++ b/launcher/include/registry.h @@ -0,0 +1,17 @@ +// +// Created by DiaLight on 27.12.2022. +// + +#ifndef EMBER_REGISTRY_H +#define EMBER_REGISTRY_H + + +bool persistence_getStr(const std::wstring &name, std::wstring &value); +bool persistence_setStr(const std::wstring &name, const std::wstring &value); +bool persistence_getDword(const std::wstring &name, DWORD &value); +bool persistence_setDword(const std::wstring &name, DWORD value); + +void saveDk2Path(std::wstring &dk2Dir); +void loadDk2Path(std::wstring &dk2Dir); + +#endif //EMBER_REGISTRY_H diff --git a/launcher/include/status.h b/launcher/include/status.h new file mode 100644 index 0000000..00d8395 --- /dev/null +++ b/launcher/include/status.h @@ -0,0 +1,15 @@ +// +// Created by DiaLight on 27.12.2022. +// + +#ifndef EMBER_STATUS_H +#define EMBER_STATUS_H + +void printStatus(const char *fmt, ...); +void printStatus(const wchar_t *fmt, ...); +void clearStatus(); +void updateStatus(); + +void showError(const char *fmt, ...); + +#endif //EMBER_STATUS_H diff --git a/launcher/include/utils.h b/launcher/include/utils.h new file mode 100644 index 0000000..ca110a0 --- /dev/null +++ b/launcher/include/utils.h @@ -0,0 +1,16 @@ +// +// Created by DiaLight on 27.12.2022. +// + +#ifndef EMBER_UTILS_H +#define EMBER_UTILS_H + +#include +#include + +std::wstring utf8ToUtf16(const std::string& utf8Str); +bool dirExists(const wchar_t *path); +size_t fileSize(LPCWSTR pszFilename); +bool fileExist(LPCWSTR pszFilename); + +#endif //EMBER_UTILS_H diff --git a/launcher/launcher.cpp b/launcher/launcher.cpp index fb065b1..54d7c08 100644 --- a/launcher/launcher.cpp +++ b/launcher/launcher.cpp @@ -5,361 +5,32 @@ #include #include #include -#include #include #include -#include #include -#include -#include "../win32_gui_layout.h" #include "CItemIterator.h" #include #include #include - -#define hex32(val) std::hex << std::uppercase << std::setfill(L'0') << std::setw(8) << ((uint32_t) val) << std::dec -#define hex16(val) std::hex << std::uppercase << std::setfill(L'0') << std::setw(4) << ((uint16_t) val) << std::dec -#define hex8(val) std::hex << std::uppercase << std::setfill(L'0') << std::setw(2) << ((uint8_t) val) << std::dec - -#define EmberLauncher_title _T("Ember - DK2 patching launcher") -#define EmberLauncher_class _T("EmberLauncher") -#define DEBUG_CONSOLE 0 +#include +#include +#include "layout.h" +#include "registry.h" +#include "create_process.h" +#include "utils.h" +#include "launcher.h" +#include "status.h" std::wstring g_dk2Dir; std::wstring g_curExeDir; std::wstring g_cwdDir; std::wstring g_pathEnv; -std::wstring utf8ToUtf16(const std::string& utf8Str) { - try { - std::wstring_convert> conv; - return conv.from_bytes(utf8Str); - } catch(...) { - std::wstringstream wss; -// wss << L"failed to convert len=" << utf8Str.size(); -// for (int i = 0; i < utf8Str.length(); ++i) { -// wss << " " << hex8(utf8Str[i]); -// } -// wss << " "; - for (int i = 0; i < utf8Str.length(); ++i) { - wss << (char) utf8Str[i]; - } - return wss.str(); - } -} - -std::vector status; -void printStatus(const char *fmt, ...) { - va_list ap; - va_start(ap, fmt); - char tmp[1024]; - int len = wvsprintfA(tmp, fmt, ap); - tmp[len] = '\0'; - status.push_back(utf8ToUtf16(tmp)); - va_end(ap); -} -void printStatus(const wchar_t *fmt, ...) { - va_list ap; - va_start(ap, fmt); - wchar_t tmp[1024]; - int len = wvsprintfW(tmp, fmt, ap); - tmp[len] = '\0'; - status.emplace_back(tmp); - va_end(ap); -} -#if DEBUG_CONSOLE -void printConsole(const char *fmt, ...) { - va_list ap; - va_start(ap, fmt); - char tmp[1024]; - int len = wvsprintfA(tmp, fmt, ap); - tmp[len++] = '\n'; - tmp[len] = '\0'; - WriteConsoleA(GetStdHandle(STD_OUTPUT_HANDLE), tmp, len, NULL, NULL); - va_end(ap); -} -void printConsole(const wchar_t *fmt, ...) { - va_list ap; - va_start(ap, fmt); - wchar_t tmp[1024]; - int len = wvsprintfW(tmp, fmt, ap); - tmp[len++] = '\n'; - tmp[len] = '\0'; - WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE), tmp, len, NULL, NULL); - va_end(ap); -} -#else -#define printConsole(fmt, ...) -#endif -void showError(const char *fmt, ...) { - va_list ap; - va_start(ap, fmt); - char tmp[1024]; - int len = wvsprintfA(tmp, fmt, ap); -#if 0 - tmp[len++] = '\n'; - tmp[len] = '\0'; - WriteConsoleA(GetStdHandle(STD_OUTPUT_HANDLE), tmp, len, NULL, NULL); -#else - tmp[len] = '\0'; - MessageBox(NULL, tmp, EmberLauncher_title, NULL); -#endif - va_end(ap); -} - -bool dirExists(const wchar_t *path) { - DWORD ftyp = GetFileAttributesW(path); - if (ftyp == INVALID_FILE_ATTRIBUTES) return false; - if (ftyp & FILE_ATTRIBUTE_DIRECTORY) return true; - return false; -} -size_t fileSize(LPCWSTR pszFilename) { - HANDLE hFile = CreateFileW(pszFilename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); - if(hFile == INVALID_HANDLE_VALUE) return 0; - DWORD size = GetFileSize(hFile, NULL); - CloseHandle(hFile); - return size; -} - -bool fileExist(LPCWSTR pszFilename) { - DWORD dwAttrib = GetFileAttributesW(pszFilename); - if(dwAttrib & FILE_ATTRIBUTE_DEVICE) return false; - if(dwAttrib & FILE_ATTRIBUTE_DIRECTORY) return false; - return true; -} #include "dk2_versions.h" #include "open_directory.h" #include "md5_hash.h" -gui::edit_elem_t DirPath(L"", WS_VISIBLE | WS_BORDER); -gui::button_elem_t SelectDir(L"select", WS_VISIBLE | WS_BORDER); -gui::edit_elem_t TextField( - L"", - WS_VISIBLE | WS_BORDER | - ES_READONLY | - WS_HSCROLL | WS_VSCROLL | ES_LEFT | - ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL -); -gui::button_elem_t StartBtn(L"start", WS_VISIBLE | WS_BORDER); -gui::label_elem_t MenuLabel(L"Menu resolution:", WS_VISIBLE | WS_TABSTOP); -gui::combobox_elem_t MenuModesCombo(L"", CBS_DISABLENOSCROLL | CBS_DROPDOWNLIST | CBS_DROPDOWN | WS_OVERLAPPED | WS_VISIBLE); -gui::label_elem_t GameLabel(L"Game resolution:", WS_VISIBLE | WS_TABSTOP); -gui::combobox_elem_t GameModesCombo(L"", CBS_DISABLENOSCROLL | CBS_DROPDOWNLIST | CBS_DROPDOWN | WS_OVERLAPPED | WS_VISIBLE); -gui::button_elem_t DPIBtn(L"DPI aware:", BS_CHECKBOX | BS_AUTOCHECKBOX | BS_PUSHBUTTON | BS_LEFTTEXT | WS_VISIBLE | WS_BORDER); -gui::button_elem_t FullscreenBtn(L"Fullscreen:", BS_CHECKBOX | BS_AUTO3STATE | BS_PUSHBUTTON | BS_LEFTTEXT | WS_VISIBLE | WS_BORDER); - -struct : gui::layout_t { - void operator()(HWND hwnd, int width, int height) { - layout_t::operator()(hwnd, width, height); - hor(-1, -1, [this] { - gap(10); - ver([this] { - gap(10); - - // body start - hor(-1, 20, [this] { - visit(DirPath, -1, size.h); - gap(10); - visit(SelectDir, 65, size.h); - }); - gap(10); - visit(TextField, -1, -1); - gap(10); - hor(-1, 20, [this] { - visit(MenuLabel, 100, size.h); - visit(MenuModesCombo, 150, 50000); - gap(10); - visit(GameLabel, 100, size.h); - visit(GameModesCombo, 150, 50000); - }); - gap(10); - hor(-1, 20, [this] { - visit(DPIBtn, 80, size.h); - gap(20); - visit(FullscreenBtn, 80, size.h); - }); - // body end - - gap(10); - - // footer - hor(-1, 30, [this] { - gap(-1); - visit(StartBtn, 100, size.h); - gap(-1); - }); - // footer end - - gap(10); - }); - gap(10); - }); - } -} layout; - - -class DDClose { - LPDIRECTDRAW lpDD; -public: - explicit DDClose(LPDIRECTDRAW lpDD) : lpDD(lpDD) {} - ~DDClose() { - lpDD->Release(); - } -}; - -struct screen_mode { - int width; - int height; - screen_mode(int width, int height) : width(width), height(height) {} -}; -std::vector screenModeList; - -HRESULT FAR PASCAL enumDDModesCallback(LPDDSURFACEDESC desc, LPVOID arg) { - auto *list = (std::vector *) arg; - if(desc->ddpfPixelFormat.dwRGBBitCount == 32) { - list->emplace_back(desc->dwWidth, desc->dwHeight); - } - return DDENUMRET_OK; -} - -bool enumModes(HWND hWnd, std::vector &list) { - LPDIRECTDRAW lpDD; - if(DirectDrawCreate(NULL, &lpDD, NULL) != DD_OK) { - printStatus("failed to create dd"); - return false; - } - DDClose ddc(lpDD); - if (lpDD->SetCooperativeLevel(hWnd, DDSCL_ALLOWMODEX | DDSCL_EXCLUSIVE | DDSCL_NOWINDOWCHANGES | DDSCL_FULLSCREEN) != DD_OK) { - printStatus("failed to set coop level"); - return false; - } - if (lpDD->EnumDisplayModes(0, NULL, &list, (LPDDENUMMODESCALLBACK) enumDDModesCallback) != DD_OK) { - printStatus("failed to enum modes"); - return false; - } - lpDD->SetCooperativeLevel(hWnd, DDSCL_NORMAL); - return true; -} - -struct CollectWindows { - DWORD procId = 0; - DWORD count = 0; -}; - -BOOL CALLBACK CollectWindows_WndEnumProc(HWND hWnd, LPARAM lParam) { - CollectWindows &collect = *(CollectWindows *) lParam; - DWORD procId = 0; - GetWindowThreadProcessId(hWnd, &procId); - if(collect.procId == procId) { - DWORD dwStyle = GetWindowStyle(hWnd); - if((dwStyle & WS_VISIBLE) != 0) { - collect.count++; - } - } - return TRUE; -} - -bool CreateProcess_runAndWait(const wchar_t *cmd, const wchar_t *dir, DWORD &lastError, DWORD &exitCode) { - SECURITY_ATTRIBUTES saAttr; - saAttr.nLength = sizeof(SECURITY_ATTRIBUTES); - saAttr.bInheritHandle = TRUE; - saAttr.lpSecurityDescriptor = NULL; - - HANDLE hChildStd_OUT_Rd = NULL; - HANDLE hChildStd_OUT_Wr = NULL; - if (!CreatePipe(&hChildStd_OUT_Rd, &hChildStd_OUT_Wr, &saAttr, 0) ) { - printStatus("CreatePipe failed: %08X", GetLastError()); - return false; - } - - if (!SetHandleInformation(hChildStd_OUT_Rd, HANDLE_FLAG_INHERIT, 0) ) { - printStatus("SetHandleInformation failed: %08X", GetLastError()); - return false; - } - - STARTUPINFOW si; - ZeroMemory(&si, sizeof(si)); - si.cb = sizeof(STARTUPINFOW); - si.hStdError = hChildStd_OUT_Wr; - si.hStdOutput = hChildStd_OUT_Wr; - si.hStdInput = GetStdHandle(STD_INPUT_HANDLE); - si.dwFlags |= STARTF_USESTDHANDLES; - - PROCESS_INFORMATION pi; - ZeroMemory(&pi, sizeof(pi)); - - printStatus(""); - printStatus(L"CreateProcessW(%s) cwd=%s", cmd, dir); - int cmdLen = wcslen(cmd); - wchar_t *mcmd = (wchar_t *) malloc((cmdLen + 1) * sizeof(wchar_t)); - wcscpy(mcmd, cmd); - bool created = CreateProcessW( - NULL, mcmd, NULL, NULL, TRUE, - 0, NULL, dir, &si, &pi - ); - CloseHandle(hChildStd_OUT_Wr); - free(mcmd); - if(!created) { - lastError = GetLastError(); - CloseHandle(hChildStd_OUT_Rd); - return false; - } - - std::thread thr([&pi] { // window observer thread - while(WaitForSingleObject(pi.hProcess, 2000) == WAIT_TIMEOUT) { - CollectWindows collect; - std::stringstream ss; - collect.procId = pi.dwProcessId; - EnumWindows(CollectWindows_WndEnumProc, (LPARAM) &collect); - if(collect.count != 0) continue; - if(WaitForSingleObject(pi.hProcess, 2000) != WAIT_TIMEOUT) break; - collect.count = 0; - EnumWindows(CollectWindows_WndEnumProc, (LPARAM) &collect); - if(collect.count != 0) continue; - int iStatus = MessageBoxA(NULL, - "Running process without open windows detected\n" - "terminate DK2 process?", - "DK2 window observer thread", MB_OKCANCEL); - if(iStatus == IDOK) { - TerminateProcess(pi.hProcess, 1); - } - } - }); -#define BUFSIZE 4096 - DWORD dwRead; - std::string line; - size_t lineEndOffs = 0; - BOOL bSuccess = FALSE; - for (;;) { - line.resize(lineEndOffs + BUFSIZE); - bSuccess = ReadFile(hChildStd_OUT_Rd, (&*line.begin()) + lineEndOffs, BUFSIZE, &dwRead, NULL); - if(!bSuccess || dwRead == 0) break; - char *pos = (&*line.begin()) + lineEndOffs; - char *end = pos + dwRead; - lineEndOffs += dwRead; - for(;pos < end; pos++) { - if(*pos == '\n') { - size_t lineLen = pos - (&*line.begin()); - std::string tmp(&*line.begin(), lineLen); - printStatus(tmp.c_str()); - line.erase(0, lineLen + 1); - lineEndOffs -= lineLen + 1; - } - } - } - if(!line.empty()) { - printStatus(line.c_str()); - } - CloseHandle(hChildStd_OUT_Rd); - - WaitForSingleObject(pi.hProcess, INFINITE); - thr.join(); - GetExitCodeProcess(pi.hProcess, &exitCode); - CloseHandle(pi.hProcess); - CloseHandle(pi.hThread); - return true; -} void genDll() { DWORD exitCode = 0; @@ -378,35 +49,9 @@ void genDll() { else if(exitCode) printStatus("makedll exited with: %08X", exitCode); } -void startEmber(HWND hwnd) { +void startEmber(HWND hwnd, std::wstring &cmd) { DWORD exitCode = 0; DWORD lastError = 0; - std::wstringstream wss; - wss << L'\"' << g_curExeDir << L"/bootstrap_patcher.exe" << L'\"'; - wss << " -32BITEVERYTHING"; - int check = DPIBtn.getCheck(); - if(check == BST_CHECKED) { - wss << " -ember:dpi_aware"; - } - check = FullscreenBtn.getCheck(); - if(check != BST_INDETERMINATE) { - wss << " -ember:fullscreen="; - wss << (check == BST_CHECKED ? "true" : "false"); - } - check = MenuModesCombo.getCurSel(); - if(check != 0) { - auto &mode = screenModeList[check]; - wss << " -ember:menu_resolution="; - wss << mode.width << "x" << mode.height; - } - check = GameModesCombo.getCurSel(); - if(check != 0) { - auto &mode = screenModeList[check]; - wss << " -ember:game_resolution="; - wss << mode.width << "x" << mode.height; - } - - std::wstring cmd = wss.str(); ShowWindow(hwnd, SW_HIDE); bool created = CreateProcess_runAndWait(cmd.c_str(), g_dk2Dir.c_str(), lastError, exitCode); ShowWindow(hwnd, SW_SHOW); @@ -416,113 +61,6 @@ void startEmber(HWND hwnd) { else if(exitCode) printStatus("bootstrap patcher exited with: %08X", exitCode); } -bool persistence_getStr(const std::wstring &name, std::wstring &value) { - value.resize(MAX_PATH); - LSTATUS status; - DWORD BufferSize = MAX_PATH; - status = RegGetValueW( - HKEY_CURRENT_USER, - L"SOFTWARE\\Ember Launcher", - name.c_str(), RRF_RT_REG_SZ, NULL, (PVOID) &*value.begin(), &BufferSize - ); - if(status != ERROR_SUCCESS) { - return false; - } - value.resize(wcslen(&*value.begin())); - return true; -} - -bool persistence_setStr(const std::wstring &name, const std::wstring &value) { - LSTATUS status; - HKEY hKey = NULL; - status = RegOpenKeyExW(HKEY_CURRENT_USER, L"SOFTWARE\\Ember Launcher", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, &hKey); - if(status == ERROR_FILE_NOT_FOUND) { - status = RegCreateKeyExW(HKEY_CURRENT_USER, L"SOFTWARE\\Ember Launcher", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL); - } - bool ret = false; - if(status == ERROR_SUCCESS) { - status = RegSetValueExW(hKey, name.c_str(), 0, REG_SZ, (BYTE *) value.c_str(), value.length() * sizeof(wchar_t)); - if(status == ERROR_SUCCESS) { - ret = true; - } - RegCloseKey(hKey); - } - return ret; -} - -bool persistence_getDword(const std::wstring &name, DWORD &value) { - LSTATUS status; - DWORD BufferSize = sizeof(DWORD); - status = RegGetValueW( - HKEY_CURRENT_USER, - L"SOFTWARE\\Ember Launcher", - name.c_str(), RRF_RT_REG_DWORD, NULL, (PVOID) &value, &BufferSize - ); - if(status != ERROR_SUCCESS) { - return false; - } - return true; -} - -bool persistence_setDword(const std::wstring &name, DWORD value) { - LSTATUS status; - HKEY hKey = NULL; - status = RegOpenKeyExW(HKEY_CURRENT_USER, L"SOFTWARE\\Ember Launcher", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, &hKey); - if(status == ERROR_FILE_NOT_FOUND) { - status = RegCreateKeyExW(HKEY_CURRENT_USER, L"SOFTWARE\\Ember Launcher", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL); - } - bool ret = false; - if(status == ERROR_SUCCESS) { - status = RegSetValueExW(hKey, name.c_str(), 0, REG_DWORD, (BYTE *) &value, sizeof(value)); - if(status == ERROR_SUCCESS) { - ret = true; - } - RegCloseKey(hKey); - } - return ret; -} - -void loadDk2Path() { - g_dk2Dir.resize(MAX_PATH); - LSTATUS status; - DWORD BufferSize = MAX_PATH; - status = RegGetValueW( - HKEY_CURRENT_USER, - L"SOFTWARE\\Ember Launcher", - L"DK2Path", RRF_RT_REG_SZ, NULL, (PVOID) &*g_dk2Dir.begin(), &BufferSize - ); - if(status != ERROR_SUCCESS) { - BufferSize = MAX_PATH; - status = RegGetValueW( - HKEY_LOCAL_MACHINE, - L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\DKII.exe", - L"Path", RRF_RT_REG_SZ | RRF_SUBKEY_WOW6432KEY, NULL, (PVOID) &*g_dk2Dir.begin(), &BufferSize - ); - if(status != ERROR_SUCCESS) { - g_dk2Dir.resize(0); - } else { - g_dk2Dir.resize(wcslen(&*g_dk2Dir.begin())); - } - } else { - g_dk2Dir.resize(wcslen(&*g_dk2Dir.begin())); - } - DirPath.setText(g_dk2Dir.c_str()); -} -void saveDk2Path() { - LSTATUS status; - HKEY hKey = NULL; - status = RegOpenKeyExW(HKEY_CURRENT_USER, L"SOFTWARE\\Ember Launcher", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, &hKey); - if(status == ERROR_FILE_NOT_FOUND) { - status = RegCreateKeyExW(HKEY_CURRENT_USER, L"SOFTWARE\\Ember Launcher", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL); - } - if(status == ERROR_SUCCESS) { - status = RegSetValueExW(hKey, L"DK2Path", 0, REG_SZ, (BYTE *) g_dk2Dir.c_str(), g_dk2Dir.length() * sizeof(wchar_t)); - if(status == ERROR_SUCCESS) { - - } - RegCloseKey(hKey); - } -} bool validateDk2Path() { if(g_dk2Dir[0] == L'\0') { printStatus(L"path is empty"); @@ -554,14 +92,14 @@ bool validateDk2Path() { } return true; } -void startAction(HWND hwnd) { +bool prepareEmber() { // status.clear(); // if(!validateDk2Path()) return; std::wstring exePath = g_dk2Dir + L"/DKII.exe"; if(!fileExist(exePath.c_str())) { printStatus(L"DKII.exe - not found"); - return; + return false; } std::wstring dk2DllPath = g_curExeDir + L"/dk2.dll"; @@ -569,15 +107,15 @@ void startAction(HWND hwnd) { if(!fileExist(dk2DllPath.c_str()) || !filesHasSameContent(exePath.c_str(), dstExePath.c_str())) { if(!CopyFileW(exePath.c_str(), dstExePath.c_str(), FALSE)) { printStatus("copy DKII.exe failed: %08X", GetLastError()); - return; + return false; } genDll(); if(!fileExist(dk2DllPath.c_str())) { printStatus("error: dk2.dll was not generated"); - return; + return false; } } - startEmber(hwnd); + return true; } bool guiLocked = false; @@ -586,25 +124,22 @@ void lockGui(bool value) { DirPath.enable(!value); SelectDir.enable(!value); StartBtn.enable(!value); -} -void updateStatus() { - std::wstringstream wss; - for(auto &msg : status) wss << msg << "\r\n"; - TextField.setText(wss.str().c_str()); - TextField.lineScroll(0, status.size()); + ResExtractBtn.enable(!value); } void onDK2DirUpdated() { if(guiLocked) return; - status.clear(); + clearStatus(); if(validateDk2Path()) { - saveDk2Path(); + saveDk2Path(g_dk2Dir); std::wstring var = g_dk2Dir + L";" + g_pathEnv; if(!SetEnvironmentVariableW(L"Path", var.c_str())) { printStatus("failed to set Path env variable"); } StartBtn.enable(true); + ResExtractBtn.enable(true); } else { StartBtn.enable(false); + ResExtractBtn.enable(false); } updateStatus(); } @@ -631,7 +166,7 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) case WM_CREATE: { auto *create = (CREATESTRUCT *) lParam; gui::size2i_t size = {create->cx, create->cy}; - layout(hwnd, size.w, size.h); + launcher_layout(hwnd, size.w, size.h); gui::resizeWin(hwnd, size.w, size.h); DirPath.setWndProc(DirPath_WndProc); @@ -645,7 +180,8 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) TEXT("Courier New") )), TRUE); - loadDk2Path(); + loadDk2Path(g_dk2Dir); + DirPath.setText(g_dk2Dir.c_str()); onDK2DirUpdated(); { @@ -661,7 +197,7 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) if(persistence_getDword(L"dpi_aware", isDpiAware)) { DPIBtn.setCheck((int) isDpiAware); } else { - FullscreenBtn.setCheck(BST_UNCHECKED); + DPIBtn.setCheck(BST_UNCHECKED); } } std::wstring menu_resolution; @@ -669,15 +205,15 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) std::wstring game_resolution; persistence_getStr(L"game_resolution", game_resolution); - screenModeList.emplace_back(0, 0); - enumModes(hwnd, screenModeList); - std::sort(screenModeList.begin(), screenModeList.end(), [](screen_mode &i1, screen_mode &i2) -> bool { + g_screenModeList.emplace_back(0, 0); + collectModes(hwnd); + std::sort(g_screenModeList.begin(), g_screenModeList.end(), [](screen_mode &i1, screen_mode &i2) -> bool { return (i1.width * i1.height < i2.width * i2.height); }); int menuSel = 0; int gameSel = 0; int i = 0; - for(auto &mode : screenModeList) { + for(auto &mode : g_screenModeList) { std::wstringstream ss; if(mode.width == 0 && mode.height == 0) { ss << "let dk2 decide"; @@ -702,13 +238,13 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) case WM_SIZE: { UINT width = LOWORD(lParam); UINT height = HIWORD(lParam); - layout(hwnd, gui::revertDpi(width), gui::revertDpi(height)); + launcher_layout(hwnd, gui::revertDpi(width), gui::revertDpi(height)); break; } case WM_DPICHANGED: { gui::g_dpi = HIWORD(wParam); auto *rect = (RECT *) lParam; - layout(hwnd, rect->right - rect->left, rect->bottom - rect->top); + launcher_layout(hwnd, rect->right - rect->left, rect->bottom - rect->top); break; } case WM_COMMAND: { @@ -723,7 +259,34 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) std::thread thr([hwnd] { try { - startAction(hwnd); + if(prepareEmber()) { + std::wstringstream wss; + wss << L'\"' << g_curExeDir << L"/bootstrap_patcher.exe" << L'\"'; + wss << " -32BITEVERYTHING"; + int check = DPIBtn.getCheck(); + if(check == BST_CHECKED) { + wss << " -ember:dpi_aware"; + } + check = FullscreenBtn.getCheck(); + if(check != BST_INDETERMINATE) { + wss << " -ember:fullscreen="; + wss << (check == BST_CHECKED ? "true" : "false"); + } + check = MenuModesCombo.getCurSel(); + if(check != 0) { + auto &mode = g_screenModeList[check]; + wss << " -ember:menu_resolution="; + wss << mode.width << "x" << mode.height; + } + check = GameModesCombo.getCurSel(); + if(check != 0) { + auto &mode = g_screenModeList[check]; + wss << " -ember:game_resolution="; + wss << mode.width << "x" << mode.height; + } + std::wstring cmd = wss.str(); + startEmber(hwnd, cmd); + } } catch(...) { printStatus("launcher exception"); ShowWindow(hwnd, SW_SHOW); @@ -733,6 +296,60 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) updateStatus(); }); thr.detach(); + } else if (hm == ResExtractBtn.id) { + lockGui(true); + + std::thread thr([hwnd] { + try { + if(prepareEmber()) { + std::wstringstream wss; + wss << L'\"' << g_curExeDir << L"/bootstrap_patcher.exe" << L'\"'; + wss << " -32BITEVERYTHING"; + int check = DPIBtn.getCheck(); + if(check == BST_CHECKED) { + wss << " -ember:dpi_aware"; + } + check = FullscreenBtn.getCheck(); + if(check != BST_INDETERMINATE) { + wss << " -ember:fullscreen="; + wss << (check == BST_CHECKED ? "true" : "false"); + } + check = MenuModesCombo.getCurSel(); + if(check != 0) { + auto &mode = g_screenModeList[check]; + wss << " -ember:menu_resolution="; + wss << mode.width << "x" << mode.height; + } + check = GameModesCombo.getCurSel(); + if(check != 0) { + auto &mode = g_screenModeList[check]; + wss << " -ember:game_resolution="; + wss << mode.width << "x" << mode.height; + } + wss << " -ember:unpack_texture_cache"; + std::wstring cmd = wss.str(); + startEmber(hwnd, cmd); + std::wstringstream ss; + ss << g_dk2Dir << "/resources/default/"; + std::wstring path = ss.str(); + std::filesystem::create_directories(path); + ShellExecuteW(NULL, L"open", path.c_str(), NULL, NULL, SW_SHOWNORMAL); + } + } catch(...) { + printStatus("launcher exception"); + ShowWindow(hwnd, SW_SHOW); + } + + lockGui(false); + updateStatus(); + }); + thr.detach(); + } else if (hm == ResOpenBtn.id) { + std::wstringstream ss; + ss << g_dk2Dir << "/resources/default/"; + std::wstring path = ss.str(); + std::filesystem::create_directories(path); + ShellExecuteW(NULL, L"open", path.c_str(), NULL, NULL, SW_SHOWNORMAL); // } else if (hm == GameModesCombo.id) { // if(HIWORD(wParam) == CBN_SELCHANGE) { // auto &mode = screenModeList[GameModesCombo.getCurSel()]; @@ -763,13 +380,13 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) persistence_setDword(L"fullscreen", (DWORD) FullscreenBtn.getCheck()); persistence_setDword(L"dpi_aware", (DWORD) DPIBtn.getCheck()); { - auto &mode = screenModeList[MenuModesCombo.getCurSel()]; + auto &mode = g_screenModeList[MenuModesCombo.getCurSel()]; std::wstringstream ss; ss << mode.width << "x" << mode.height; persistence_setStr(L"menu_resolution", ss.str()); } { - auto &mode = screenModeList[GameModesCombo.getCurSel()]; + auto &mode = g_screenModeList[GameModesCombo.getCurSel()]; std::wstringstream ss; ss << mode.width << "x" << mode.height; persistence_setStr(L"game_resolution", ss.str()); diff --git a/launcher/layout.cpp b/launcher/layout.cpp new file mode 100644 index 0000000..2cfc005 --- /dev/null +++ b/launcher/layout.cpp @@ -0,0 +1,88 @@ +// +// Created by DiaLight on 27.12.2022. +// +#include "layout.h" + + +gui::edit_elem_t DirPath(L"", WS_VISIBLE | WS_BORDER); +gui::button_elem_t SelectDir(L"select", WS_VISIBLE | WS_BORDER); +gui::edit_elem_t TextField( + L"", + WS_VISIBLE | WS_BORDER | + ES_READONLY | + WS_HSCROLL | WS_VSCROLL | ES_LEFT | + ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL +); +gui::button_elem_t StartBtn(L"start", WS_VISIBLE | WS_BORDER); +gui::label_elem_t MenuLabel(L"Menu resolution:", WS_VISIBLE | WS_TABSTOP); +gui::combobox_elem_t MenuModesCombo(L"", CBS_DISABLENOSCROLL | CBS_DROPDOWNLIST | CBS_DROPDOWN | WS_OVERLAPPED | WS_VISIBLE); +gui::label_elem_t GameLabel(L"Game resolution:", WS_VISIBLE | WS_TABSTOP); +gui::combobox_elem_t GameModesCombo(L"", CBS_DISABLENOSCROLL | CBS_DROPDOWNLIST | CBS_DROPDOWN | WS_OVERLAPPED | WS_VISIBLE); +gui::button_elem_t DPIBtn(L"DPI aware:", BS_CHECKBOX | BS_AUTOCHECKBOX | BS_PUSHBUTTON | BS_LEFTTEXT | WS_VISIBLE | WS_BORDER); +gui::button_elem_t FullscreenBtn(L"Fullscreen:", BS_CHECKBOX | BS_AUTO3STATE | BS_PUSHBUTTON | BS_LEFTTEXT | WS_VISIBLE | WS_BORDER); + +gui::label_elem_t ResLabel(L"Resources:", WS_VISIBLE | WS_TABSTOP); +gui::button_elem_t ResExtractBtn(L"Extract", WS_VISIBLE | WS_BORDER); +gui::button_elem_t ResOpenBtn(L"Open", WS_VISIBLE | WS_BORDER); + + +struct : gui::layout_t { + void operator()(HWND hwnd, int width, int height, bool reset=false) { + layout_t::operator()(hwnd, width, height, reset); + hor(-1, -1, [this] { + gap(10); + ver([this] { + gap(10); + + // body start + hor(-1, 20, [this] { + visit(DirPath, -1, size.h); + gap(10); + visit(SelectDir, 65, size.h); + }); + gap(10); + visit(TextField, -1, -1); + gap(10); + hor(-1, 20, [this] { + visit(MenuLabel, 100, size.h); + visit(MenuModesCombo, 150, 50000); + gap(10); + visit(GameLabel, 100, size.h); + visit(GameModesCombo, 150, 50000); + }); + gap(10); + hor(-1, 20, [this] { + visit(DPIBtn, 80, size.h); + gap(20); + visit(FullscreenBtn, 80, size.h); + }); + gap(10); + hor(-1, 20, [this] { + visit(ResLabel, 60, size.h); + gap(20); + visit(ResExtractBtn, 80, size.h); + gap(20); + visit(ResOpenBtn, 80, size.h); + }); + // body end + + gap(10); + + // footer + hor(-1, 30, [this] { + gap(-1); + visit(StartBtn, 100, size.h); + gap(-1); + }); + // footer end + + gap(10); + }); + gap(10); + }); + } +} launcher_layout_; + +void launcher_layout(HWND hwnd, int width, int height, bool reset) { + launcher_layout_(hwnd, width, height, reset); +} diff --git a/launcher/registry.cpp b/launcher/registry.cpp new file mode 100644 index 0000000..e7f1ae6 --- /dev/null +++ b/launcher/registry.cpp @@ -0,0 +1,115 @@ +// +// Created by DiaLight on 27.12.2022. +// +#include +#include + + + +bool persistence_getStr(const std::wstring &name, std::wstring &value) { + value.resize(MAX_PATH); + LSTATUS status; + DWORD BufferSize = MAX_PATH; + status = RegGetValueW( + HKEY_CURRENT_USER, + L"SOFTWARE\\Ember Launcher", + name.c_str(), RRF_RT_REG_SZ, NULL, (PVOID) &*value.begin(), &BufferSize + ); + if(status != ERROR_SUCCESS) { + return false; + } + value.resize(wcslen(&*value.begin())); + return true; +} + +bool persistence_setStr(const std::wstring &name, const std::wstring &value) { + LSTATUS status; + HKEY hKey = NULL; + status = RegOpenKeyExW(HKEY_CURRENT_USER, L"SOFTWARE\\Ember Launcher", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, &hKey); + if(status == ERROR_FILE_NOT_FOUND) { + status = RegCreateKeyExW(HKEY_CURRENT_USER, L"SOFTWARE\\Ember Launcher", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL); + } + bool ret = false; + if(status == ERROR_SUCCESS) { + status = RegSetValueExW(hKey, name.c_str(), 0, REG_SZ, (BYTE *) value.c_str(), value.length() * sizeof(wchar_t)); + if(status == ERROR_SUCCESS) { + ret = true; + } + RegCloseKey(hKey); + } + return ret; +} + +bool persistence_getDword(const std::wstring &name, DWORD &value) { + LSTATUS status; + DWORD BufferSize = sizeof(DWORD); + status = RegGetValueW( + HKEY_CURRENT_USER, + L"SOFTWARE\\Ember Launcher", + name.c_str(), RRF_RT_REG_DWORD, NULL, (PVOID) &value, &BufferSize + ); + if(status != ERROR_SUCCESS) { + return false; + } + return true; +} + +bool persistence_setDword(const std::wstring &name, DWORD value) { + LSTATUS status; + HKEY hKey = NULL; + status = RegOpenKeyExW(HKEY_CURRENT_USER, L"SOFTWARE\\Ember Launcher", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, &hKey); + if(status == ERROR_FILE_NOT_FOUND) { + status = RegCreateKeyExW(HKEY_CURRENT_USER, L"SOFTWARE\\Ember Launcher", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL); + } + bool ret = false; + if(status == ERROR_SUCCESS) { + status = RegSetValueExW(hKey, name.c_str(), 0, REG_DWORD, (BYTE *) &value, sizeof(value)); + if(status == ERROR_SUCCESS) { + ret = true; + } + RegCloseKey(hKey); + } + return ret; +} + + +void saveDk2Path(std::wstring &dk2Dir) { + LSTATUS status; + HKEY hKey = NULL; + status = RegOpenKeyExW(HKEY_CURRENT_USER, L"SOFTWARE\\Ember Launcher", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, &hKey); + if(status == ERROR_FILE_NOT_FOUND) { + status = RegCreateKeyExW(HKEY_CURRENT_USER, L"SOFTWARE\\Ember Launcher", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL); + } + if(status == ERROR_SUCCESS) { + status = RegSetValueExW(hKey, L"DK2Path", 0, REG_SZ, (BYTE *) dk2Dir.c_str(), dk2Dir.length() * sizeof(wchar_t)); + if(status == ERROR_SUCCESS) { + + } + RegCloseKey(hKey); + } +} +void loadDk2Path(std::wstring &dk2Dir) { + dk2Dir.resize(MAX_PATH); + LSTATUS status; + DWORD BufferSize = MAX_PATH; + status = RegGetValueW( + HKEY_CURRENT_USER, + L"SOFTWARE\\Ember Launcher", + L"DK2Path", RRF_RT_REG_SZ, NULL, (PVOID) &*dk2Dir.begin(), &BufferSize + ); + if(status != ERROR_SUCCESS) { + BufferSize = MAX_PATH; + status = RegGetValueW( + HKEY_LOCAL_MACHINE, + L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\DKII.exe", + L"Path", RRF_RT_REG_SZ | RRF_SUBKEY_WOW6432KEY, NULL, (PVOID) &*dk2Dir.begin(), &BufferSize + ); + if(status != ERROR_SUCCESS) { + dk2Dir.resize(0); + } else { + dk2Dir.resize(wcslen(&*dk2Dir.begin())); + } + } else { + dk2Dir.resize(wcslen(&*dk2Dir.begin())); + } +} diff --git a/launcher/status.cpp b/launcher/status.cpp new file mode 100644 index 0000000..39242c6 --- /dev/null +++ b/launcher/status.cpp @@ -0,0 +1,80 @@ +// +// Created by DiaLight on 27.12.2022. +// +#include "status.h" +#include +#include +#include +#include +#include +#include + + +std::vector status; +void printStatus(const char *fmt, ...) { + va_list ap; + va_start(ap, fmt); + char tmp[1024]; + int len = wvsprintfA(tmp, fmt, ap); + tmp[len] = '\0'; + status.push_back(utf8ToUtf16(tmp)); + va_end(ap); +} +void printStatus(const wchar_t *fmt, ...) { + va_list ap; + va_start(ap, fmt); + wchar_t tmp[1024]; + int len = wvsprintfW(tmp, fmt, ap); + tmp[len] = '\0'; + status.emplace_back(tmp); + va_end(ap); +} +void clearStatus() { + status.clear(); +} +void updateStatus() { + std::wstringstream wss; + for(auto &msg : status) wss << msg << "\r\n"; + TextField.setText(wss.str().c_str()); + TextField.lineScroll(0, status.size()); +} + +#if DEBUG_CONSOLE +void printConsole(const char *fmt, ...) { + va_list ap; + va_start(ap, fmt); + char tmp[1024]; + int len = wvsprintfA(tmp, fmt, ap); + tmp[len++] = '\n'; + tmp[len] = '\0'; + WriteConsoleA(GetStdHandle(STD_OUTPUT_HANDLE), tmp, len, NULL, NULL); + va_end(ap); +} +void printConsole(const wchar_t *fmt, ...) { + va_list ap; + va_start(ap, fmt); + wchar_t tmp[1024]; + int len = wvsprintfW(tmp, fmt, ap); + tmp[len++] = '\n'; + tmp[len] = '\0'; + WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE), tmp, len, NULL, NULL); + va_end(ap); +} +#else +#define printConsole(fmt, ...) +#endif +void showError(const char *fmt, ...) { + va_list ap; + va_start(ap, fmt); + char tmp[1024]; + int len = wvsprintfA(tmp, fmt, ap); +#if 0 + tmp[len++] = '\n'; + tmp[len] = '\0'; + WriteConsoleA(GetStdHandle(STD_OUTPUT_HANDLE), tmp, len, NULL, NULL); +#else + tmp[len] = '\0'; + MessageBox(NULL, tmp, EmberLauncher_title, NULL); +#endif + va_end(ap); +} diff --git a/launcher/utils.cpp b/launcher/utils.cpp new file mode 100644 index 0000000..95fb98a --- /dev/null +++ b/launcher/utils.cpp @@ -0,0 +1,46 @@ +// +// Created by DiaLight on 27.12.2022. +// +#include +#include +#include +#include + +std::wstring utf8ToUtf16(const std::string& utf8Str) { + try { + std::wstring_convert> conv; + return conv.from_bytes(utf8Str); + } catch(...) { + std::wstringstream wss; +// wss << L"failed to convert len=" << utf8Str.size(); +// for (int i = 0; i < utf8Str.length(); ++i) { +// wss << " " << hex8(utf8Str[i]); +// } +// wss << " "; + for (int i = 0; i < utf8Str.length(); ++i) { + wss << (char) utf8Str[i]; + } + return wss.str(); + } +} + +bool dirExists(const wchar_t *path) { + DWORD ftyp = GetFileAttributesW(path); + if (ftyp == INVALID_FILE_ATTRIBUTES) return false; + if (ftyp & FILE_ATTRIBUTE_DIRECTORY) return true; + return false; +} +size_t fileSize(LPCWSTR pszFilename) { + HANDLE hFile = CreateFileW(pszFilename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); + if(hFile == INVALID_HANDLE_VALUE) return 0; + DWORD size = GetFileSize(hFile, NULL); + CloseHandle(hFile); + return size; +} + +bool fileExist(LPCWSTR pszFilename) { + DWORD dwAttrib = GetFileAttributesW(pszFilename); + if(dwAttrib & FILE_ATTRIBUTE_DEVICE) return false; + if(dwAttrib & FILE_ATTRIBUTE_DIRECTORY) return false; + return true; +} diff --git a/main.cpp b/main.cpp index 7ae9bc7..4221815 100644 --- a/main.cpp +++ b/main.cpp @@ -3,6 +3,7 @@ // #include #include +#include #if __has_include("dev/dev.h") #include "dev/dev.h" @@ -31,6 +32,8 @@ extern "C" __declspec(dllexport) bool __cdecl ember_initialize() { // if(!reimpl::draw3dScene()) return false; // if(!reimpl::SurfHashList__probablySort()) return false; + if(!tools::unpack_texture_cache()) return false; + // local research #if __has_include("dev/dev.h") if(!dev_test()) return false; diff --git a/mappings/names.map b/mappings/names.map index 8f5818c..cf58206 100644 --- a/mappings/names.map +++ b/mappings/names.map @@ -60,6 +60,7 @@ 00403FB0 CDefaultPlayerInterface::fun_403FB0 fun 00404DB0 AABB_constructor fun 00404DC0 AABB_constructor_0 fun +00404E00 MyGame_get_f4C fun 00405010 CDefaultPlayerInterface_onKeyboardAction fun 00406530 CDefaultPlayerInterface_onMouseAction fun 004066A0 CDefaultPlayerInterface_sub_4066A0 fun @@ -94,6 +95,7 @@ 0040A9AB def_40A78C 0040A9C4 jpt_40A78C 0040A9F0 cmd_toggleGui fun +0040AAE0 DefaultPlayerInterfaceCursor_cpp_40AAE0 fun 0040ACD0 CDefaultPlayerInterface_sub_40ACD0 fun 0040AE80 CDefaultPlayerInterface_sub_40AE80 fun 0040B160 CDefaultPlayerInterface_sub_40B160 fun @@ -159,6 +161,7 @@ 00412F0C jpt_412CD0 004137B1 def_413115 004141EC jpt_413115 +004152B0 CWorldEntry_createArr10 fun 00415B30 CDefaultPlayerInterface_sub_415B30 fun 00415BC0 CDefaultPlayerInterface_sub_415BC0 fun 00416070 BtnHandler_sub_416070 fun @@ -187,7 +190,7 @@ 00417E8C jpt_417D4A 00418B70 def_418AA7 00418B80 jpt_418AA7 -00419180 CDefaultPlayerInterface_sub_419180 fun +00419180 CDefaultPlayerInterface_sub_419180_loadSmth fun 00419C00 CDefaultPlayerInterface_sub_419C00 fun 00419DF0 CDefaultPlayerInterface_sub_419DF0 fun 0041A190 CDefaultPlayerInterface_sub_41A190 fun @@ -228,6 +231,11 @@ 0042C1E0 CDefaultPlayerInterface::fun_42C1E0 fun 0042C390 CDefaultPlayerInterface_sub_42C390 fun 0042C710 CDefaultPlayerInterface::fun_42C710 fun +0042C7D0 CDefaultPlayerInterface_42C7D0 fun +0042C9B0 RtGuiView_42C9B0 fun +0042CAB0 CDefaultPlayerInterface_whatEverFont_42CAB0 fun +0042CB60 CDefaultPlayerInterface_42CB60 fun +0042CDF0 CDefaultPlayerInterface_createSurfacesForView_42CDF0 fun 0042D090 CDefaultPlayerInterface::CTextIconDraw::fun_42D090 fun 0042D1C0 CDefaultPlayerInterface::CTextIconDraw::fun_42D1C0 fun 0042D38F def_42D265 @@ -280,6 +288,10 @@ 004347A0 CEffect::fun_4347A0 fun 004347B0 ??_GCEffect@@UAEPAXI@Z fun 004347D0 ??1CEffect@@UAE@XZ fun +004347E0 Effect_cpp_4347E0 fun +00435660 Effect_cpp_435660 fun +00435720 Effect_cpp_435720 fun +00435E30 EffectDescriptor_cpp_435E30 fun 00435E70 ??0CEffectElement@@QAE@XZ fun 00435EB0 CBridgeThing::fun_435EB0 fun 00435EC0 CEffectElement::fun_435EC0 fun @@ -287,6 +299,21 @@ 00435EE0 CEffectElement::fun_435EE0 fun 00435EF0 ??_GCEffectElement@@UAEPAXI@Z fun 00435F10 ??1CEffectElement@@UAE@XZ fun +00435F20 EffectElement_cpp_435F20 fun +00436970 EffectGeneration_cpp_436970 fun +00436AF0 EffectGeneration_cpp_436AF0 fun +00436C80 EffectGeneration_cpp_436C80 fun +00436E60 EffectGeneration_cpp_436E60 fun +004372A0 EffectGeneration_cpp_4372A0 fun +00437480 EffectGeneration_cpp_437480 fun +004375C0 EffectGeneration_cpp_4375C0 fun +004376E0 BridgeThing_h__4376E0 fun +00438020 EffectGeneration_cpp_438020 fun +004386F0 EffectGeneration_cpp_4386F0 fun +00439100 EffectGeneration_cpp_439100 fun +00439210 EffectGeneration_cpp_439210 fun +00439330 EffectGeneration_cpp_439330 fun +004395F0 EffectGeneration_cpp_4395F0 fun 004397E0 CBridge::fun_4397E0 fun 00439880 CBridge::fun_439880 fun 00439A20 CBridge::fun_439A20 fun @@ -359,9 +386,11 @@ 00441020 CBridge::fun_441020 fun 00441040 CBridge::fun_441040 fun 00441060 CBridge::fun_441060 fun +00441110 Bridge_cpp_441110 fun +00441250 Bridge_cpp_441250 fun 004412C0 CBridge::fun_4412C0 fun 004412E0 CBridge::fun_4412E0 fun -00441300 CBridge::fun_441300 fun +00441300 CBridge_createAndRegister fun 00441330 CBridge::fun_441330 fun 00441350 CBridge::fun_441350 fun 00441370 CBridge::fun_441370 fun @@ -371,10 +400,12 @@ 004413E0 CBridge::init_float_obj fun 00441400 CBridge::fun_441400 fun 00441420 CBridge::fun_441420 fun +004417A0 Bridge_cpp_4417A0 fun +00441870 Bridge_cpp_441870 fun 00441AA0 CBridge::fun_441AA0 fun 00441AD0 CBridge::fun_441AD0 fun 00441B00 CBridge::fun_441B00 fun -00441C70 CBridge::fun_441C70 fun +00441C70 CBridge::setTexturesPath_441C70 fun 00441CC0 CBridge::fun_441CC0 fun 00441E20 CBridge::fun_441E20 fun 00441E30 CBridge::fun_441E30 fun @@ -432,6 +463,7 @@ 00443380 create_dword_arr_x4 fun 004438C6 def_443638 004438D0 jpt_443638 +00444970 BridgeRooms_cpp_444970 fun 004468E0 ??0CBridgeThing@@QAE@HH@Z fun 00446A70 ??_GCBridgeThing@@UAEPAXI@Z fun 00446A90 ??1CBridgeThing@@UAE@XZ fun @@ -549,25 +581,54 @@ 00454B58 jpt_454A50 00455858 def_45554F 00455868 jpt_45554F +00455F30 CallToArmsState_cpp_455F30 fun +00456160 CasinoState_cpp_456160 fun +00456500 CasinoState_cpp_456500 fun +00456690 CasinoState_cpp_456690 fun +004567D0 CasinoState_cpp_4567D0 fun +00456980 CasinoState_cpp_456980 fun +00456B70 CasinoState_cpp_456B70 fun +00456EC0 CasinoState_cpp_456EC0 fun +00457010 CasinoState_cpp_457010 fun +00457D60 CombatPitState_cpp_457D60 fun +00457F40 CombatPitState_cpp_457F40 fun +00458EB0 DisArmTrapState_cpp_458EB0 fun +00458F60 DisArmTrapState_cpp_458F60 fun +0045A290 ExploreState_cpp_45A290 fun +0045A3E0 ExploreState_cpp_45A3E0 fun 0045D67A def_45D613 0045E174 jpt_45D613 00460197 def_45FB5E 004602C0 jpt_45FB5E +004611D0 FightWithDrawState_cpp_4611D0 fun +00461BB0 GoodState_cpp_461BB0 fun 00461C93 def_461C45 00461DB3 def_461D64 00461ED4 jpt_461C45 00461EE4 jpt_461D64 +00461F00 GoodState_cpp_461F00 fun +00462130 GoodState_cpp_462130 fun +00462560 GoodState_cpp_462560 fun 00462840 ?Win95IsDebuggerPresent@@YGHXZ fun +00462930 GuardState_cpp_462930 fun +00462D00 GuardState_cpp_462D00 fun 0046306D def_462DF1 00463120 jpt_462DF1 +00463190 GuardState_cpp_463190 fun +004632A0 GuardState_cpp_4632A0 fun +00463BE0 HungerState_cpp_463BE0 fun 00463CC2 def_463CA1 00463DA0 jpt_463CA1 +00463DF0 ImpState_cpp_463DF0 fun +00464240 ImpState_cpp_464240 fun +00464400 ImpState_cpp_464400 fun 00464A09 def_464840 00464A10 jpt_464840 00468763 def_46853D 00468770 jpt_46853D 004688C0 def_4687D6 004688C4 jpt_4687D6 +00468D10 ImpUtils_cpp_468D10 fun 004691A2 def_468E41 0046922C jpt_468E41 0046A127 def_46A0C0 @@ -580,19 +641,50 @@ 0046E35C jpt_46DACF 0046E36C jpt_46DCE9 0046E37C jpt_46E079 +0046EAB0 KeeperState_cpp_46EAB0 fun 0046F149 def_46F02D 0046F1B4 jpt_46F02D +0046F4F0 LairState_cpp_46F4F0 fun +00470110 ManufactureState_cpp_470110 fun +00470470 ManufactureState_cpp_470470 fun +00470B20 ManufactureState_cpp_470B20 fun +00471EB0 PatrolState_cpp_471EB0 fun +004721C0 PatrolState_cpp_4721C0 fun +00472390 PayState_cpp_472390 fun +00472AC0 PrayState_cpp_472AC0 fun +00472D30 PrayState_cpp_472D30 fun +00473350 PrisonState_cpp_473350 fun +004739E0 PrisonState_cpp_4739E0 fun +004748E0 ReaperState_cpp_4748E0 fun +00474960 ReaperState_cpp_474960 fun +00474AF0 ReaperState_cpp_474AF0 fun +00475A20 ResearchState_cpp_475A20 fun +00475D20 ResearchState_cpp_475D20 fun +004761F0 ResearchState_cpp_4761F0 fun +00476390 RunAway_cpp_476390 fun +004764A0 RunAway_cpp_4764A0 fun 00476B10 ??0CState@@QAE@XZ fun 00476B30 ??1CState@@UAE@XZ fun 00476CB0 CState::fun_476CB0 fun 00476CF0 CState::fun_476CF0 fun +004776B0 j_State_cpp_4776C0 fun +004776C0 State_cpp_4776C0 fun 004780C0 CompareFunction fun +004780E0 State_cpp_4780E0 fun +004782C0 State_cpp_4782C0 fun +004784C0 State_cpp_4784C0 fun +00478680 State_cpp_478680 fun 00478997 def_478882 004789A8 jpt_478882 00478B40 __RTC_NumErrors fun 0047973F def_47959A 0047986C jpt_47959A 00479DED __cfltcvt_init +0047AD70 StateGroup_cpp_47AD70 fun +0047B590 StateGroup_cpp_47B590 fun +00480750 StateUtils_cpp_480750 fun +004808E0 StateUtils_cpp_4808E0 fun +00480A00 StateUtils_cpp_480A00 fun 00480A81 def_480A79 00480AD5 def_480AC5 00480C3C def_480BEC @@ -601,15 +693,23 @@ 00480EF8 jpt_480AC5 00480F2C jpt_480BEC 00480F3C jpt_480D62 +00481610 StateUtils_cpp_481610 fun +00481D50 StateUtils_cpp_481D50 fun +00482F80 SulkState_cpp_482F80 fun +004833C0 ThrowingState_cpp_4833C0 fun 00483949 def_483928 00483990 jpt_483928 +00483B90 TourtureState_cpp_483B90 fun 00484940 ret_0_0args_0 fun +00485310 TrainState_cpp_485310 fun +00486CF0 WaitState_cpp_486CF0 fun 00486DF0 ??0Iostream_init@@QAE@XZ_0 fun 00488520 CCreature::fun_488520 fun 00488640 CCreature::fun_488640 fun 00488710 CCreature::fun_488710 fun 00488750 CCreature::fun_488750 fun 00488930 CCreature::fun_488930 fun +0048AD50 Creature_cpp_48AD50 fun 0048AF80 CCreature::fun_48AF80 fun 0048B9FC def_48B9F1 0048BD88 jpt_48B9F1 @@ -622,14 +722,19 @@ 0048D880 CCreature::fun_48D880 fun 0048DA23 def_48D940 0048DE50 jpt_48D940 +0048E160 Creature_cpp_48E160 fun 0048E830 CCreature::fun_48E830 fun 0048ED40 CCreature::fun_48ED40 fun 0048ED7F def_48ED78 0048EDC4 jpt_48ED78 +0048F410 Creature_cpp_48F410 fun +0048F930 Creature_cpp_48F930 fun 0048FCA1 def_48FB4C 0048FCC0 jpt_48FB4C 00490230 CCreature::fun_490230 fun 00490240 CCreature::fun_490240 fun +00491900 Creature_cpp_491900 fun +004919C0 Creature_cpp_4919C0 fun 004943E0 nullsub_3 fun 00494470 nullsub_4 fun 00494540 nullsub_5 fun @@ -644,8 +749,10 @@ 00494954 jpt_49490E 00494C6E def_494A83 00494C74 jpt_494A83 +00499300 CreatureInstance_cpp_499300 fun 00499993 def_4998F1 00499A24 jpt_4998F1 +00499CA0 CreatureInstance_cpp_499CA0 fun 0049A535 def_499CEF 0049A544 jpt_499CEF 0049A7A0 _Ctl3dAutoSubclass@4 fun @@ -653,6 +760,7 @@ 0049AC18 jpt_49AAC1 0049B151 def_49ACBA 0049B170 jpt_49ACBA +0049B1C0 Game_Object_cpp_49B1C0 fun 0049B54E def_49B50B 0049B564 jpt_49B50B 0049B9D0 ??0SetValue@TbSysCommand@@QAE@H@Z fun @@ -679,14 +787,30 @@ 0049D310 CObject::fun_49D310 fun 0049F390 def_49F1E8 0049F52C jpt_49F1E8 +0049FE60 ObjectState_cpp_49FE60 fun +004A0210 ObjectState_cpp_4A0210 fun +004A03E0 ObjectState_cpp_4A03E0 fun +004A05B0 ObjectState_cpp_4A05B0 fun +004A0770 ObjectState_cpp_4A0770 fun 004A0DE1 def_4A099E 004A0E14 jpt_4A099E 004A0FE5 def_4A0FC3 004A10C8 jpt_4A0FC3 +004A13F0 ObjectState_cpp_4A13F0 fun +004A15B0 ObjectState_cpp_4A15B0 fun 004A17B8 def_4A174F 004A17D0 jpt_4A174F +004A1A60 ObjectState_cpp_4A1A60 fun +004A1CF0 ObjectState_cpp_4A1CF0 fun +004A1F30 ObjectState_cpp_4A1F30 fun +004A21C0 ObjectState_cpp_4A21C0 fun +004A24A0 ObjectState_cpp_4A24A0 fun +004A26D0 ObjectState_cpp_4A26D0 fun +004A2CE0 ObjectState_cpp_4A2CE0 fun +004A3D90 ObjectState_cpp_4A3D90 fun 004A4262 def_4A4000 004A426C jpt_4A4000 +004A4980 Specials_cpp_4A4980 fun 004A4FC1 def_4A4F9A 004A5050 jpt_4A4F9A 004A54D0 CDoor::fun_4A54D0 fun @@ -724,6 +848,9 @@ 004AC924 jpt_4AC7E3 004AC940 probably_process_creature_damage fun 004ACAF0 probably_process_creature_damage_2 fun +004AD7A0 ShotProcess_cpp_4AD7A0 fun +004AF8E0 ShotProcess_cpp_4AF8E0 fun +004AFE50 ShotProcess_cpp_4AFE50 fun 004B0460 CActionPoint::fun_4B0460 fun 004B0550 CActionPoint::fun_4B0550 fun 004B05E0 CActionPoint::fun_4B05E0 fun @@ -749,6 +876,7 @@ 004B1E70 CMovingThing::fun_4B1E70 fun 004B1EC0 CMovingThing::fun_4B1EC0 fun 004B1F10 j_j_CMap::fun_4B4C20 fun +004B2030 CObject_4B2030 fun 004B2740 CMovingThing::fun_4B2740 fun 004B2760 CMovingThing::fun_4B2760 fun 004B27E0 CMovingThing::fun_4B27E0 fun @@ -761,8 +889,10 @@ 004B3560 CPhysicalThing::fun_4B3560 fun 004B3610 ??0CRenderInfo@@QAE@XZ fun 004B3740 ??1CRenderInfo@@UAE@XZ fun +004B37D0 RenderInfo_cpp_4B37D0 fun 004B39E8 def_4B39D1 004B3AA0 jpt_4B39D1 +004B4430 RenderInfo_cpp_4B4430 fun 004B4537 def_4B44E9 004B4540 jpt_4B44E9 004B4710 CRenderInfo::fun_4B4710 fun @@ -832,12 +962,19 @@ 004B8450 ??0CPlayer@@QAE@XZ fun 004B85A0 ??1CPlayer@@UAE@XZ fun 004B8D40 CPlayer::fun_4B8D40 fun +004B9740 Player_cpp_4B9740 fun +004BA0D0 Player_cpp_4BA0D0 fun +004BB130 Player_cpp_4BB130 fun +004BB2A0 Player_cpp_4BB2A0 fun +004BB6D0 Player_cpp_4BB6D0 fun 004BC6AE def_4BC5B4 004BC6F0 jpt_4BC5B4 004BED50 def_4BEC1E 004BF348 jpt_4BEC1E +004BF410 Player_cpp_4BF410 fun 004BF65E def_4BF655 004BF9AC jpt_4BF655 +004BF9E0 Player_cpp_4BF9E0 fun 004C02B9 def_4C0298 004C046C jpt_4C0298 004C0DA4 def_4C0D42 @@ -856,6 +993,10 @@ 004C55F0 jpt_4C5567 004C571F def_4C5681 004C5724 jpt_4C5681 +004C63D0 PlayerRooms_cpp_4C63D0 fun +004C6460 PlayerRooms_cpp_4C6460 fun +004C6860 PlayerRooms_cpp_4C6860 fun +004C6CF0 PlayerRooms_cpp_4C6CF0 fun 004C856C def_4C7B44 004C8580 jpt_4C7B44 004C8A3E def_4C865B @@ -906,24 +1047,37 @@ 004D35C0 Avoid_Walls::fun_4D35C0 fun 004D3C40 Follow_Path::fun_4D3C40 fun 004D5F50 ??0Obj6ECAE0@@QAE@XZ fun +004D6270 Casino_cpp_4D6270 fun +004D6CB0 Casino_cpp_4D6CB0 fun +004D7A60 CombatPit_cpp_4D7A60 fun 004D9142 def_4D8EB0 004D9267 def_4D917D 004D9274 jpt_4D8EB0 004D9328 jpt_4D917D +004D9410 Crypt_cpp_4D9410 fun 004D9C80 def_4D9C22 004DA134 jpt_4D9C22 +004DA560 DungeonHeart_cpp_4DA560 fun +004DAE40 DungeonHeart_cpp_4DAE40 fun 004DAF32 def_4DAF24 004DAF8A def_4DAF6D 004DB6B0 jpt_4DAF24 004DB6D8 jpt_4DAF6D +004DBF90 Entrance_cpp_4DBF90 fun 004DC8A6 def_4DC851 004DC8D4 jpt_4DC851 +004DD820 Graveyard_cpp_4DD820 fun +004DD9B0 Graveyard_cpp_4DD9B0 fun 004DE1CD def_4DE112 fun 004DE1D0 jpt_4DE112 +004DE220 Hatchery_cpp_4DE220 fun +004DE620 Hatchery_cpp_4DE620 fun +004DEF30 HeroGateFrontEnd_cpp_4DEF30 fun 004DF016 def_4DEFFC 004DF10B def_4DF0E9 004DF600 jpt_4DEFFC 004DF634 jpt_4DF0E9 +004DF6E0 HeroGateFrontEnd_cpp_4DF6E0 fun 004DFA3F def_4DF8F5 004DFA6C jpt_4DF8F5 004DFB3D def_4DFAD8 @@ -934,6 +1088,9 @@ 004E0A40 jpt_4E08DA 004E13DA def_4E1371 004E1580 jpt_4E1371 +004E1AC0 Library_cpp_4E1AC0 fun +004E1ED0 Library_cpp_4E1ED0 fun +004E2E70 Prison_cpp_4E2E70 fun 004E3790 ??0CRoom@@QAE@XZ fun 004E37F0 ??1CRoom@@UAE@XZ fun 004E3B10 CRoom::fun_4E3B10 fun @@ -948,6 +1105,12 @@ 004E4549 def_4E451C 004E4560 jpt_4E451C 004E4AC0 jpt_4E45C9 +004E4C10 Room_cpp_4E4C10 fun +004E4D90 Room_cpp_4E4D90 fun +004E4EA0 Room_cpp_4E4EA0 fun +004E50F0 Room_cpp_4E50F0 fun +004E5A70 Room_cpp_4E5A70 fun +004E6A20 Room_cpp_4E6A20 fun 004E7C30 def_4E750A 004E7C34 jpt_4E750A 004E7F39 def_4E7E40 @@ -956,6 +1119,8 @@ 004E7FC0 jpt_4E7FAB 004E8192 def_4E7FFF 004E81E0 jpt_4E7FFF +004E8210 Room_cpp_4E8210 fun +004E8430 Room_cpp_4E8430 fun 004E8876 def_4E8676 004E887C jpt_4E8676 004E8EEA def_4E8DFA @@ -971,6 +1136,7 @@ 004EC130 CRoom::fun_4EC130 fun 004EDECB def_4EDC81 004EDEE0 jpt_4EDC81 +004EDFC0 RoomManager_cpp_4EDFC0 fun 004EE053 def_4EE006 004EE78D def_4EE2BC 004EEA77 def_4EEA35 @@ -997,22 +1163,45 @@ 004F02B8 jpt_4F013F 004F18B0 def_4F17B5 004F1928 jpt_4F17B5 +004F1D60 Tourture_cpp_4F1D60 fun +004F2370 Tourture_cpp_4F2370 fun 004F27CA def_4F2792 004F27E0 jpt_4F2792 +004F2FF0 Training_cpp_4F2FF0 fun +004F3310 Training_cpp_4F3310 fun +004F3A00 Treasure_cpp_4F3A00 fun +004F3C60 Treasure_cpp_4F3C60 fun +004F4090 Treasure_cpp_4F4090 fun +004F48E0 Treasure_cpp_4F48E0 fun +004F4A60 Workshop_cpp_4F4A60 fun +004F4B20 Workshop_cpp_4F4B20 fun 004F4E94 def_4F4E5F 004F5030 jpt_4F4E5F 004F99B2 def_4F9786 004F9B74 jpt_4F9786 +004F9B90 ComputerPlayer_cpp_4F9B90 fun +004FA000 ComputerPlayer_cpp_4FA000 fun 004FA709 def_4FA445 004FA744 jpt_4FA445 004FB4F7 def_4FB3B5 004FB590 def_4FB513 004FBD54 jpt_4FB3B5 004FBD64 jpt_4FB513 +004FC690 ComputerPlayer_cpp_4FC690 fun +004FCE70 ComputerPlayer_cpp_4FCE70 fun +004FE9C0 ComputerPlayer_cpp_4FE9C0 fun +004FFD80 ComputerPlayer_cpp_4FFD80 fun +005000A0 ComputerPlayer_cpp_5000A0 fun +005003A0 ComputerPlayer_cpp_5003A0 fun 00500622 def_5005D8 00500638 jpt_5005D8 +005006D0 ComputerPlayer_cpp_5006D0 fun +00500C20 ComputerPlayer_cpp_500C20 fun 0050122F def_5010FC 0050127C jpt_5010FC +00502F00 ComputerPlayer_cpp_502F00 fun +00503060 ComputerPlayer_cpp_503060 fun +00503690 ComputerPlayer_cpp_503690 fun 00504D60 CWorldEntry_constructor fun 00504E82 def_504D9E 00504E9C jpt_504D9E @@ -1180,6 +1369,7 @@ 0050A450 CWorld::tick fun 0050AA60 CWorld_sub_50AA60 fun 0050ADE0 probably_start_editor fun +0050B5B0 World_cpp_50B5B0 fun 0050CD10 CWorld::fun_50CD10 fun 0050CD60 CWorld::fun_50CD60 fun 0050CE00 CWorld::fun_50CE00 fun @@ -1257,6 +1447,7 @@ 0050F3D0 CWorld::fun_50F3D0 fun 0050F830 CWorld::fun_50F830 fun 0050F880 CWorld::fun_50F880 fun +0050F8C0 World_cpp_50F8C0 fun 0050FAE0 CWorld::fun_50FAE0 fun 0050FB10 CWorld::fun_50FB10 fun 0050FBA0 CWorld::fun_50FBA0 fun @@ -1267,6 +1458,8 @@ 005101C0 CWorld::fun_5101C0 fun 00510210 CWorld::fun_510210 fun 00510230 CWorld::fun_510230 fun +00510370 World_cpp_510370 fun +00510440 World_cpp_510440 fun 00510700 CWorld::fun_510700 fun 00510730 CWorld::fun_510730 fun 005108F0 TbSysCommand::PauseOrRestart fun @@ -1400,6 +1593,8 @@ 00519964 jpt_518FE4 005199FD def_51998A 00519A04 jpt_51998A +00519B20 WorldTrigger_cpp_519B20 fun +00519F90 WorldTrigger_cpp_519F90 fun 0051A890 CWorld_sub_51A890 fun 0051CB63 def_51CAF6 0051CB6C jpt_51CAF6 @@ -1411,6 +1606,7 @@ 00520D57 def_520D25 00520D64 jpt_520C30 00520DA8 jpt_520D25 +005212D0 WorldWDL_cpp_5212D0 fun 0052154E def_5214D7 005215CC jpt_5214D7 00521B20 ??0CCommunicationInterface@@QAE@XZ fun @@ -1605,7 +1801,7 @@ 0052C464 jpt_52C3FB 0052C520 CGuiManager_sub_52C520 fun 0052C540 CGuiManager_findGameWindowById fun -0052C5A0 CGuiManager_sub_52C5A0 fun +0052C5A0 CGuiManager_scaleSize fun 0052C5F0 CGuiManager_sub_52C5F0 fun 0052C630 CGuiManager_scaleAabb fun 0052C6D0 ?create@CButton@@SAPAU1@HPADH@Z fun @@ -1615,6 +1811,7 @@ 0052CA90 CTextInput::fun_52CA90 fun 0052CAA0 CClickButton::fun_52CAA0 fun 0052CAC0 j_??1CButton@@UAE@XZ fun +0052CB40 CWorldEntry_createArr277 fun 0052CCB0 CGuiManager_sub_52CCB0 fun 0052CCE0 ??0CWindow@@QAE@XZ fun 0052CD00 ??_GCWindow@@UAEPAXI@Z fun @@ -1636,6 +1833,7 @@ 0052E4C0 ?static_init@CFrontEndComponent3D@@SAXXZ fun 0052E4E0 ?static_destroy@CFrontEndComponent3D@@SAXXZ fun 0052E500 ??0CFrontEndComponent@@QAE@XZ fun +0052EF00 PixelMask_init fun 0052EF50 ??_GCFrontEndComponent@@UAEPAXI@Z fun 0052EF70 ??1CFrontEndComponent@@UAE@XZ fun 0052EFE0 CFrontEndComponent::fun_52EFE0 fun @@ -1857,6 +2055,7 @@ 00553A90 MyTextText_getMbString_idx1056_1081 fun 00553AC0 MyTextText_getMbString_idx1000_1023 fun 00553AF0 ?idx1090_getMbString@MyTextText@dk2@@SAPBDI@Z fun +00553B20 MyLangObj_static_toUniToMB_2 fun 00553B90 ?convert@MBToUni@dk2@@SA_NPBDPA_WH@Z fun 00553DD0 MyTextText_getMbString_idx1024_1029 fun 00553E48 def_553DED @@ -1894,7 +2093,7 @@ 005557A8 jpt_5556AE 005557E0 unicodeToUtf8 fun 00555850 utf8_to_unicode fun -005558D0 Random fun +005558D0 badRandomCall fun 00555B90 ??0CWindowTest@@QAE@XZ fun 00555BD0 ??1CWindowTest@@UAE@XZ fun 00555CC0 ?create@CWindowTest@dk2@@QAEAAHAAHPAUAABB@2@@Z fun @@ -1934,9 +2133,10 @@ 00557FD0 ?isOsVersionGE@dk2@@YGHHHG@Z fun 005580E0 MyGame_release fun 005581B0 ?prepareScreen@MyGame@dk2@@QAEHHHHHHH@Z fun +005585C0 MyGame_5585C0 fun 005586E0 MyGame_sub_5586E0 fun 00558770 MyGame_sub_558770 fun -005587C0 MyGame_sub_5587C0 fun +005587C0 MyGame_getScreenSurf fun 005587E0 Obj6723A0_getDdSurface1 fun 005587F0 MyGame_sub_5587F0 fun 005588A0 MyGame_sub_5588A0 fun @@ -1958,6 +2158,7 @@ 00559710 MyGame_static_callback fun 00559770 MyGame_sub_559770 fun 005597F0 MyGame_5597F0 fun +00559820 MyGame_f4C_559820 fun 00559BB0 unknown_libname_38 fun 00559D00 MldPlay_reinitializeNetworkSystem fun 00559F57 def_559EE5 @@ -1992,7 +2193,7 @@ 0055E0C0 string_appendIpWithHostname fun 0055E5A0 MyResources_f2E38Obj_constructor fun 0055E630 save_sav_file fun -0055E7D0 load_sav_file fun +0055E7D0 MyResources_f2E38Obj_load_sav_file fun 0055EA10 MyResources_f2E38Obj_55EA10 fun 0055EAB0 MyResources_f2E38Obj_55EAB0 fun 0055EC20 MyKeyboard_init fun @@ -2008,6 +2209,8 @@ 00561A20 MyKeyboard_sub_561A20_levelAttempts fun 00561BF0 MyKeyboard_sub_561BF0_totalEvilRating fun 00561E40 MyKeyboard_sub_561E40 fun +005621E0 RegKey_close fun +00562670 RegKey_setValue_562670 fun 005626C0 settings_fun fun 00562960 MyResources_f29CB_constructor fun 005629C0 MyResources_f29CB_resolveValues fun @@ -2028,7 +2231,11 @@ 00563B40 MyResources_f29CB_setSfx fun 00563BD0 MyResources_f29CB_setNumberOfVoices fun 00563C50 MyVideoSettings_constructor fun +00563E30 RegKey_static_checkDk2Keys_563E30 fun +00563FB0 MyVideoSettings_563FB0 fun +00564B00 MyVideoSettings_564B00 fun 00565CF0 set_spec fun +00565FD0 MyVideoSettings_565FD0 fun 005663A0 set_shadows_type fun 005665A0 set_high_resolution_textures_enabled fun 00566620 set_texture_reduction_level fun @@ -2091,6 +2298,7 @@ 0056F850 My_sub_56F850_init fun 00570027 def_56FB84 00570068 jpt_56FB84 +00571910 set_g2_screenArea fun 00571940 nullsub_26 fun 00571950 nullsub_27 fun 00571960 nullsub_28 fun @@ -2099,10 +2307,16 @@ 005719C5 __cfltcvt_init_1 00571A01 __cfltcvt_init_2 00571A60 nullsub_31 fun +00573C20 cleanupDirectDraw fun +00573CF0 configureFlagsAndTexturesCount fun +00573ED0 settupDirectDraw fun 00574200 setGammaRamp fun +005742F0 MyHeap_autoremoveObjects fun +00574310 LoadCachedTextures fun +005747C0 setPmeshReductionLevel fun 00575780 drawScene fun 00576940 ??0CEngine2DSprite@@QAE@FFFFHHHHHHFFFF@Z fun -005769D0 CEngine2DPrimitive::fun_5769D0 fun +005769D0 CEngine2DPrimitive::scalar_destructor fun 005769F0 ??_GCEnginePrimitiveBase@@UAEPAXI@Z fun 00577640 CEngine2DSprite::fun_577640 fun 005776C0 CEngine2DRotatableSprite::fun_5776C0 fun @@ -2116,29 +2330,50 @@ 005783A0 CEngine2DAnimMesh::fun_5783A0 fun 005783D0 CEngine2DAnimMesh::fun_5783D0 fun 00578530 ??0CEngineVirtualPerspective2DAnimMesh@@QAE@HHHHPBXHHHHIPAH@Z fun -005785E0 CEngineVirtualPerspective2DAnimMesh::fun_5785E0 fun +005785E0 CEngineWorldPrimitive::fun_5785E0 fun 00578600 CEngineVirtualPerspective2DAnimMesh::fun_578600 fun 00578A80 ??0CEngine2DMeshSurface@@QAE@HHPBX0HPAHH@Z fun -00578B80 ??_Gios_base@std@@UAEPAXI@Z fun +00578B80 CEngine2DMeshSurface_scalar_destructor fun 00578BA0 ??1CEngine2DMeshSurface@@UAE@XZ fun 00578C00 CEngine2DMeshSurface::fun_578C00 fun 00578EC0 ?create@CEngine2DRotatableSprite@@SAPAU1@FFHHHHHHHHHMH@Z fun 00579170 ??0CEngine2DPrimitive@@QAE@XZ fun +00579180 CEngine2DSprite_create fun +005794B0 CEngine2DMeshSurface_create fun +00579730 CEngine2DStaticMesh_create fun +00579A10 CEngine2DAnimMesh_create fun +00579CF0 CEngineVirtualPerspective2DAnimMesh_create fun +00579FD0 objects2EToDraw_enlarge fun 0057A080 ??0CIFFFile@@QAE@XZ fun +0057A1E0 CDirectIFFFile_57A1E0 fun +0057A310 CDirectIFFFile_57A310 fun +0057A3A0 CDirectIFFFile_writeIf2 fun +0057A3C0 CDirectIFFFile_readInt fun +0057A3E0 CDirectIFFFile_readString fun +0057A430 CDirectIFFFile_seekTo fun 0057A450 ??0CDirectIFFFile@@QAE@XZ fun -0057A470 CDirectIFFFile::fun_57A470 fun +0057A470 CDirectIFFFile_seek fun 0057A490 ??1CDirectIFFFile@@UAE@XZ fun -0057A7A0 CDirectIFFFile::fun_57A7A0 fun -0057A7D0 CDirectIFFFile::fun_57A7D0 fun +0057A560 CDirectIFFFile_open fun +0057A6F0 CDirectIFFFile_57A6F0 fun +0057A7A0 CDirectIFFFile_readFile_57A7A0 fun +0057A7D0 CDirectIFFFile_writeFile_57A7D0 fun 0057A960 CMemLoadIFFFile::fun_57A960 fun 0057C270 Arrp31x400_static_init fun 0057C2D0 MyDblNamedSurface_constructor fun +0057C3B0 MyDblNamedSurface_57C3B0 fun 0057C420 Arrp31x400Item_init fun 0057C700 Arrp31x400Item_sub_57C700 fun +0057C780 Arrp31x400_getByIdx fun +0057C7B0 Arrp31x400_static_alloc fun 0057C850 MyDblNamedSurface_registerInArrp31x400 fun +0057C920 CPCEngineInterface_57C920 fun 0057CB70 Arrp31x400_resize fun -0057CEB0 MyHeap::alloc fun -0057D0B0 MyHeap::free fun +0057CBE0 MyHeap_static_init fun +0057CCF0 MyHeap_static_destroy fun +0057CD30 MyHeap_alloc_impl fun +0057CEB0 MyHeap_alloc fun +0057D0B0 MyHeap_free fun 0057D210 ?static_init@CIFFFile@@SAXXZ fun 0057D230 ?destroy@CIFFFile@@SAXXZ fun 0057D250 ??0CMemLoadIFFFile@@QAE@XZ fun @@ -2155,16 +2390,17 @@ 0057EB70 ??_GCMeshGroup@@UAEPAXI@Z fun 0057EB90 CMeshGroup::fun_57EB90 fun 0057EC90 ??1CMeshGroup@@UAE@XZ fun +0057EDE0 cleanup_57EDE0 fun 0057F020 nullsub_32 fun 0057F110 ??0CEngineSprite@@QAE@PAMHHH0HHHHHH@Z fun 0057F1C0 CEngineWorldPrimitive::fun_57F1C0 fun 0057F1D0 ??1CEnginePrimitiveBase@@UAE@XZ fun 0057F1E0 ??0CEngineSprite@@QAE@HHMMHHHHMMMHH@Z fun 0057F3D0 CEngineSprite::fun_57F3D0 fun -0057F7E0 CEngineSprite::fun_57F7E0 fun +0057F7E0 CEngineSprite_appendToSceneObject2EList fun 0057FAF0 ??0CEngineQuadPlane@@QAE@PAMHH0HHHH@Z fun 0057FB80 CEngineQuadPlane::fun_57FB80 fun -0057FF30 CEngineQuadPlane::fun_57FF30 fun +0057FF30 CEngineQuadPlane_appendToSceneObject2EList fun 005801E0 ??0CEngineDynamicMesh@@QAE@HHMMHHHHHHHHHHHH@Z fun 00580460 ??0CEngineWorldPrimitive@@QAE@XZ fun 00580470 ret_void_2args fun @@ -2172,37 +2408,48 @@ 00580DF0 CEngineDynamicMesh::fun_580DF0 fun 00580E10 CEngineDynamicMesh::fun_580E10 fun 00580E40 CEngineDynamicMesh::fun_580E40 fun -00580EC0 CEngineDynamicMesh::fun_580EC0 fun +00580EC0 CEngineDynamicMesh_appendToSceneObject2EList fun +00581B80 Arrp31x400Item_581B80 fun 00582CE0 CEngineDynamicMesh::fun_582CE0 fun 00582D30 CEngineDynamicMesh::fun_582D30 fun 00583120 ??0CEngineAnimMesh@@QAE@HHMMMMMMHHHMMHHHHHHDHH@Z fun 005835E0 CEngineAnimMesh::fun_5835E0 fun 00583680 CEngine2DAnimMesh::fun_583680 fun 005848B0 CEngineAnimMesh::fun_5848B0 fun -00584900 CEngineAnimMesh::fun_584900 fun +00584900 CEngineAnimMesh_appendToSceneObject2EList fun 00585AD0 CEngineAnimMesh::fun_585AD0 fun 00585F90 ??0CEngineStaticMesh@@QAE@PAMHHHHHHHH@Z fun -005860B0 CEngineStaticMesh::fun_5860B0 fun +005860B0 CEngineStaticMesh_scalar_destructor fun 005860D0 ??1CEngineStaticMesh@@UAE@XZ fun 00586130 CEngineStaticMesh::fun_586130 fun 00586150 CEngineStaticMesh::fun_586150 fun -00586190 CEngineStaticMesh::fun_586190 fun +00586190 CEngineStaticMesh_appendToSceneObject2EList fun +00586A70 static_appendToSceneObject2EList fun 00586BC0 ??0CEngineStaticHeightField@@QAE@PAMHHHHHHHH@Z fun 00586F70 CEngineStaticHeightField::fun_586F70 fun 00586F90 ??1CEngineStaticHeightField@@UAE@XZ fun 00586FF0 CEngineStaticHeightField::fun_586FF0 fun 00587010 CEngineStaticHeightField::fun_587010 fun -00587060 CEngineStaticHeightField::fun_587060 fun +00587060 CEngineStaticHeightField_appendToSceneObject2EList fun 005873A0 ??0CEngineDynamicHeightField@@QAE@HHHHHHHHMHM@Z fun 00587550 CEngineDynamicHeightField::fun_587550 fun 00587570 ??1CEngineDynamicHeightField@@UAE@XZ fun 005875D0 CEngineDynamicHeightField::fun_5875D0 fun -00587DA0 CEngineDynamicHeightField::fun_587DA0 fun +00587DA0 CEngineDynamicHeightField_appendToSceneObject2EList fun 00588190 ??0CEngineUnlitProceduralMesh@@QAE@HHHPBX0PAGHH@Z fun 00588480 CEngineUnlitProceduralMesh::fun_588480 fun 005884A0 ??1CEngineUnlitProceduralMesh@@UAE@XZ fun 005884F0 CEngineUnlitProceduralMesh::fun_5884F0 fun -005888A0 CEngineUnlitProceduralMesh::fun_5888A0 fun +005888A0 CEngineUnlitProceduralMesh_appendToSceneObject2EList fun +00588D00 draw_tex_to_buf_impl2 fun +00588F90 draw_tex_to_buf_impl1 fun +00589140 MyCESurfHandle_static_addToHashList_flagsOr400 fun +00589160 DirectDraw_setProp fun +00589250 DirectDraw_prepareTexture fun +005898F0 draw_tex_to_buf fun +005899F0 init_mydd_cpy fun +00589D90 something_static_setSceneObject30_589D90 fun +0058A150 setupLastSceneObject fun 0058A3E5 __cfltcvt_init_3 0058A421 __cfltcvt_init_4 0058A480 nullsub_33 fun @@ -2212,19 +2459,36 @@ 0058A4C0 nullsub_37 fun 0058A4D0 nullsub_38 fun 0058A4E0 nullsub_39 fun +0058A520 init_mydd_cpy2 fun +0058DD60 MyNameObjMap_of_MyCESurfHandle_constructor fun +0058DD90 MyNameObjMap_cleanup fun 0058DE00 ?put@MyNameObjMap@dk2@@QAEHPBDPAX@Z fun 0058DF40 MyNameObjMap_getSlotIdx fun 0058E000 BufCx400_resize fun +0058E330 init_shadows fun 0058EE40 nullsub_40 fun 0058EE50 nullsub_41 fun +0058F510 SceneObject2EList_static_destructor fun +0058F530 objects30ToDraw_static_destructor fun +0058F550 SceneObject2EList_SceneObject30List_static_init fun +0058F5F0 SceneObject2EList_SceneObject30List_static_destroy fun 0058F640 draw3dScene fun +0058F8E0 SceneObject30List_enlarge fun 0058F9A0 __cfltcvt_init_5 fun +0058F9E0 MyNameObjMap_of_MyCESurfHandle_static_constructor fun +0058FA00 MyNameObjMap_of_MyCESurfHandle_static_destructor fun 0058FA20 MyTextures_static_constructor fun 0058FA40 MyTextures_static_destructor fun 0058FAA0 MyTextures_constructor fun 0058FAF0 nullsub_42 fun +0058FB00 MySurface_58FB00 fun +0058FCB0 MySurface_58FCB0 fun +0058FE80 MySurface_58FE80 fun +0058FF70 MySurface_58FF70 fun +00590000 MySurface_590000 fun +00590260 MyCEngineSurfDesc_590260 fun 00590360 MyCEngineSurfDesc_constructor fun -00590450 CEngineSurfaceBase_590450 fun +00590450 CEngineSurfaceBase_paintSurf fun 00590520 CEngineSurfaceBase_fill fun 00590580 ??0CEngineSurface@@QAE@HHH@Z fun 00590610 CEngineSurfaceBase_scalar_destructor fun @@ -2243,19 +2507,46 @@ 00590AC0 CEngineDDSurface_lockBuf fun 00590B20 CEngineDDSurface_unlockBuf fun 00590B40 MySurfaceWrapper_init fun +00590BC0 MySurface::MySurface_withData fun 00590BF0 MyCESurfHandle_init fun -00590EC0 MyCESurfHandle_sub_590EC0 fun -00591070 MyTextures_loadAll fun +00590C30 MyCESurfHandle_590C30 fun +00590DA0 MyCESurfHandle_createReduction fun +00590EC0 MyCESurfHandle_resolveSurface fun +00591070 MyTextures_loadCompressed fun 005911E0 MyCESurfHandle_sub_5911E0 fun 005914E0 Obj792D48_convertCopyFrom fun 00591820 Obj792D48_createCEngineCompressedSurface fun 00591BF0 ??0CEngineSurfaceBase@@QAE@HHH@Z fun 00591C20 CEngineSurface_create fun -00591DA0 ?create@CEngineSurface@@SAPAU1@HHH@Z fun +00591CF0 MyCESurfHandle_setSurfaceHolder fun +00591DA0 SurfaceHolder_create fun +00591ED0 SurfaceHolder_calcWeight fun +00591F90 SurfHashListItem_recursive_scalar_delete fun 005924A0 MyNameObjMap_createPrescaled fun -00592720 __fillTextures_path fun +00592720 MyTextures_resetCacheDir fun +00592890 SurfHashList_clear fun +00592950 destroySurfHashLists fun +00592B80 SurfaceHolder_setTexture fun +00592BD0 SurfHashList2_init fun +00592DB0 SurfHashList_init fun +00592EA0 initSurfHashLists_mydd_cpy3 fun +00593280 surfaces_cleanup fun +00593350 D3DENUMPIXELFORMATSCALLBACK_proc fun +005934C0 MyCESurfHandle_cleanup fun +005935C0 SurfHashList_markAndDeleteP1of4_recursive fun +00593600 SurfHashList2_deleteHolders fun +00593720 MyCESurfHandle_static_addToHashList fun +00593880 SurfHashList2_593880 fun +00593E10 SurfHashList2_calcHandleCountToFitHolder fun +00593E90 SurfHashList2_593E90 fun +00593F20 __probablySortSurfListX3_593F20 fun 00593F3E ??__F?m_badAllocExceptionPtr@__ExceptionPtr@@0V?$shared_ptr@V__ExceptionPtr@@@tr1@std@@A@@YAXXZ -00594FA0 CBridge_594FA0 fun +00593F50 SurfHashList2__probablySort fun +00594170 SurfHashList_putItem fun +005941B0 SurfHashList_addSurfhAndPaint fun +00594790 SurfHashList_deleteItem fun +005948D0 SurfHashList__probablySort fun +00594BC0 SurfHashList2_deleteHolder fun 005964B8 def_5964B1 00596523 def_596437 00596534 jpt_596437 @@ -2295,7 +2586,7 @@ 0059A050 CPCEngineInterface::fun_59A050 fun 0059A200 CPCEngineInterface::fun_59A200 fun 0059A4B0 ?loadPng@MyResources@dk2@@SAPAUMySurface@2@PBD@Z fun -0059A650 CPCEngineInterface::fun_59A650 fun +0059A650 CPCEngineInterface_createAndPutInArrp31x400 fun 0059A6A0 CPCEngineInterface::fun_59A6A0 fun 0059AC60 def_59A6F2 0059AC70 jpt_59A6F2 @@ -2320,19 +2611,33 @@ 0059D890 CPCEngineInterface::fun_59D890 fun 0059D900 CPCEngineInterface::fun_59D900 fun 0059DAB0 CPCEngineInterface::fun_59DAB0 fun +0059E750 ProceduralMesh_cpp_59E750 fun +0059ED80 ProceduralMesh_cpp_59ED80 fun 0059F80F __cfltcvt_init_8 +005A1340 ProceduralMesh_cpp_5A1340 fun 005A1CA0 CPCEngineInterface::fun_5A1CA0 fun 005A2570 CPCEngineInterface::fun_5A2570 fun 005A2BE0 CPCEngineInterface::fun_5A2BE0 fun 005A2F10 CPCEngineInterface::fun_5A2F10 fun +005A3310 ProceduralMesh_cpp_5A3310 fun 005A4730 mpeg2::_putpict fun 005A58A0 mpeg2::putbits fun 005A5980 mpeg2::putintrablk fun 005A5DA0 ?main@dk2@@YAHHQAPAD@Z fun 005A63B0 parse_command_line fun -005A6CD0 probably_cleanupScene fun -005A7100 probably_cleanupScene32bit fun -005A7210 probably_lightningOrShadowProc fun +005A6CD0 drawToSurface fun +005A7100 drawToSurface32bit fun +005A7210 render_clearBuffers fun +005A7270 draw_1024tex_to_buf_impl4 fun +005A73F0 draw_1024tex_to_buf_impl2 fun +005A74B0 draw_1024tex_to_buf_impl1 fun +005A7550 draw_1024tex_to_buf_impl3 fun +005A7600 mydd_allocateBuffers fun +005A7980 mydd_alloc_buf fun +005A79C0 mydd_alloc_buf2 fun +005A7A00 mydd_freeBuffers fun +005A7A20 mydd_free_buf fun +005A7A50 mydd_free_buf2 fun 005A88D0 def_5A8891 005A88F4 jpt_5A8891 005A8AE0 StartAddress fun @@ -2517,6 +2822,7 @@ 005B9740 MyStr_scalar_destructor fun 005B97A0 SharedArr79DBD0_static_init fun 005B97B0 SharedArr79DBD0_constructor fun +005B97D0 SharedArr79DBD0_static_destructor fun 005B9840 SharedArr79DBD0List_constructor fun 005B9860 SharedArr79DBD0List_destructor fun 005B98A0 SharedArr79DBD0List_scalar_destructor fun @@ -2621,7 +2927,7 @@ 005D0FC0 AABB_intersect fun 005D1040 AABB_collapseToMax fun 005D1050 AABB_normalize fun -005D1230 GObj_79D250_constructor fun +005D1230 DdModeList_constructor fun 005D1250 llist_insert fun 005D1290 libpng::png_set_sig_bytes fun 005D12C0 libpng::png_sig_cmp fun @@ -3232,6 +3538,7 @@ 0062C240 FontObj_constructor fun 0062C290 FontObj_scalar_destructor fun 0062C2B0 FontObj_destructor fun +0062C2D0 FontObj_copy_constructor fun 0062C340 FontObj_assign_constructor fun 0062C3C0 FontObj_setFontMask fun 0062C410 FontObj_checkFlag8 fun @@ -3308,7 +3615,10 @@ 0062E050 MyTextUniToMB_constructor fun 0062E090 MyTextUniToMB_scalar_destructor fun 0062E0B0 MyTextUniToMB_destructor fun +0062E0E0 MyTextUniToMB_convertChar fun +0062E0F0 MyTextUniToMB_62E0F0 fun 0062E140 MyTextUniToMB_create fun +0062E1F0 MyTextUniToMB_convert fun 0062E280 MyTextMBToUni_create fun 0062E3A0 MyTextMBToUni_constructor fun 0062E3F0 MyTextMBToUni_scalar_destructor fun @@ -3619,6 +3929,7 @@ 00637FD0 __fclose_lk fun 00638040 readFromFile fun 00638080 _fread fun +006381C0 writeFile fun 00638200 _fwrite fun 00638350 _free fun 006383C0 __alloca_probe fun @@ -3792,9 +4103,9 @@ 0063CC5D _rtfor0tox 0063CC77 zerotoxdone fun 0063CC78 _rtfor0toneg -0063CC92 tranzeropop fun +0063CC92 tranzeropop 0063CC94 tranzeronpop -0063CC99 tranindfpop fun +0063CC99 tranindfpop 0063CC9B tranindfnpop 0063CCA0 ExpArgOutOfRange fun 0063CCC2 _expbigret @@ -5066,6 +5377,10 @@ 00652A58 SEH_634330 00652A70 unknown_libname_123 00652A80 SEH_634490 +00653080 draw_1024tex_to_buf_impl5 fun +00653B6E draw_1024tex_to_buf_impl6 fun +006542E0 draw_1024tex_to_buf_impl7 fun +00654C10 draw_1024tex_to_buf_impl8 fun 0065C120 fill_buf_special fun 00665EBB __cfltcvt_init_16 0066C000 RegQueryValueExA import @@ -10437,8 +10752,10 @@ 006D39B8 Obj6D39B8_instance 006D3CC8 CBridge_instance 006D6458 sceneLightningObjects +006DA458 g_pCBridge_0 006DA8A8 g_empty_string 006E4FD8 funcs_4A8BE5 +006E5054 g_pCWorld 006EB988 Stream 006ECA60 Obj6ECA60_instance 006ECA70 Obj6ECA70_instance @@ -10505,6 +10822,7 @@ 00740E70 g_FontObj1_instance 007410C0 MyLangObj_lang_instance 007410D0 FontObj_1_instance +00741120 MBStr_741120 00741320 FontObj_3_instance 00741370 FontObj_2_instance 007413C0 g_FontObj2_instance @@ -10536,6 +10854,7 @@ 00741C28 TbPNGLoader_instance 00742070 TbTQILoader_instance 007428A0 probably_Console_instance +00756EC8 client_rect 00756EE8 ?instance@MyGame@dk2@@0V12@A 00758040 isCreateDDState 00758048 ddraw_device_count @@ -10559,13 +10878,26 @@ 0075B468 MySound_ptr 0075B880 CSoundSystem_instance 0075BA60 String +0075CA68 g2_sceneWidth +00760AB0 g_pmeshReductionLevel 00760B0C dd_gamma_control +00760B44 g2_sceneHeight 00760B54 g_sceneWidth +00760B5C g2_sceneLeft 00760B88 g_sceneHeight 00764B90 mydd +00764BBC g2_sceneTop +00764BC0 EngineTestCross_a31x400_idx +00764BC4 EngineTestLight_a31x400_idx +00764BC8 EngineTextureWhite_a31x400_idx 00764BE8 gamma_ramp +00765224 g_pCEngine2DPrimitive 007656E8 MyNameObjMap_instance 00765AF8 Arrp31x400_instance +00765B08 MyHeap_increaseCount +00765B14 MyHeap_size +00765B18 MyHeap_increaseBlocks +00765DA0 MyHeap_bufArr 00766228 CMemLoadIFFFile_instance 00769A78 arr_769A78 0076AA78 arr_769A78_itemsCount @@ -10579,6 +10911,7 @@ 0076C2B0 my_buf2_tex_and_header 0076C2B4 my_buf2_6000 0076C2B8 mydd_cpy +0076C2F0 lastSceneObject 0076D2F8 tex_and_header_size1 0076D300 my_buf_400_width_512 0076D304 my_buf_400_height_512 @@ -10591,13 +10924,28 @@ 0076F32C my_buf_3000_height_512 0076F330 my_buf_3000 007793A8 arr_7793A8 +0077F3F0 mydd_cpy2_buf +0077F8F8 mydd_cpy2 +007820A8 SceneObject2EList_instance +007820B8 SceneObject30List_instance +007820C4 objectsToDraw_count 007820D0 mpeg2::_image_buf +007920D0 pSurfHashList2_2 +007920D4 pSurfHashList2 007920D8 MyTextures_instance +0079291C g_surfh_first 00792920 MySurfDesc_792920 00792938 MyNameObjMap_instance_of_MyCESurfHandle 00792D48 Obj792D48_instance -00792D68 myDdCopy +00792D5C g_surfh_count +00792D60 pSurfHashList +00792D68 mydd_cpy3 00792D98 MyCEngineSurfDesc_argb32_instance +00792E62 MyCEngineSurfDesc_unk16_instance +00792EC8 sizeHashTable_257 +007932CC g_surfh_last +007932D8 SurfHashList_sortTick +007932DC g_ReductionLevel 00793388 CPCEngineInterface_instance_start 00795700 g_pCBridge 00796170 mpeg2::dc_dct_pred @@ -10606,6 +10954,11 @@ 007962A8 cmd_flag_FrontEnd3D_unk8 007962AC cmd_flag_DDD 007962B0 cmd_flag_DDD_value +00797B5C mydd_bufsAllocated +00797B74 mydd_buf_25635 +00797B78 mydd_buf_aligned32 +00797B7C mydd_buf2_12835 +00797B80 mydd_buf2_aligned32 0079CF90 ?instance@MyInputManagerCb@dk2@@0U12@A 0079D018 appCloseStatus 0079D01C ?hInstance@globals@dk2@@0PAUHINSTANCE__@@A @@ -10625,8 +10978,9 @@ 0079D0A8 PathName 0079D1D4 lpDDAttachedSurface 0079D200 g_fullscreen_ddSurf +0079D250 DdModeList_instance 0079D260 bullfrogClassName -0079D364 g_pDdSurface +0079D364 g_pDdSurface_windowed 0079D378 g_dd_surface2 0079D3C8 hWnd 0079D3CC hBullfrogWindow @@ -10691,6 +11045,17 @@ 007A5DB0 Addend 007A6DC0 Count 007A6DC4 g_commandLineA +007A7020 mydd_buf +007A7024 mydd_buf2 +007A7028 mydd_buf_width +007A702C mydd_buf2_width +007A7034 currentTex_lockedBuf +007A7044 g_redShift +007A7048 g_greenShift +007A704C g_blueShift +007A7050 g_red +007A7054 g_green +007A7058 g_blue 007ACAAC jpt_5AC905 007AF058 tqia_src_pos 007AF08C tqia_offs diff --git a/mappings/stack.map b/mappings/stack.map index e6476b3..5fe6fba 100644 --- a/mappings/stack.map +++ b/mappings/stack.map @@ -3194,7 +3194,7 @@ 0040AABD 0 ret 0 0040AAC0 sub_40AAC0 0040AAD9 0 ret -4 -0040AAE0 sub_40AAE0 +0040AAE0 DefaultPlayerInterfaceCursor_cpp_40AAE0 0040AAE0 0 sp 4 # push ebx 0040AAE1 4 sp 4 # push esi 0040AAE4 8 sp 4 # push edi @@ -3917,7 +3917,7 @@ 0040CDFC 232 sp 4 # push 0 0040CDFE 236 sp -4 # call unknown_libname_3 0040CE15 232 sp 4 # push eax - 0040CE16 236 sp -16 # call sub_4B37D0 + 0040CE16 236 sp -16 # call RenderInfo_cpp_4B37D0 0040CE2E 220 sp 4 # push ecx 0040CE33 224 sp 4 # push 1 0040CE48 228 sp 4 # push edx @@ -3955,7 +3955,7 @@ 0040CF29 232 sp 4 # push 0 0040CF2B 236 sp -4 # call unknown_libname_3 0040CF3E 232 sp 4 # push eax - 0040CF3F 236 sp -16 # call sub_4B37D0 + 0040CF3F 236 sp -16 # call RenderInfo_cpp_4B37D0 0040CF66 220 sp 4 # push eax 0040CF6B 224 sp 4 # push 1 0040CF6D 228 sp 4 # push ecx @@ -4007,7 +4007,7 @@ 0040D1EB 232 sp 4 # push edi 0040D1EC 236 sp -4 # call unknown_libname_3 0040D200 232 sp 4 # push eax - 0040D201 236 sp -16 # call sub_4B37D0 + 0040D201 236 sp -16 # call RenderInfo_cpp_4B37D0 0040D233 220 sp 4 # push edi 0040D253 224 sp 4 # push 1 0040D26A 228 sp 4 # push edx @@ -4036,7 +4036,7 @@ 0040D3AE 220 sp 4 # push eax 0040D3B8 224 sp -16 # call dword ptr [edx+110h] 0040D3C5 208 sp 4 # push eax - 0040D3CA 212 sp -16 # call sub_4B37D0 + 0040D3CA 212 sp -16 # call RenderInfo_cpp_4B37D0 0040D3E7 196 sp 4 # push eax 0040D3F1 200 sp 4 # push 1 0040D3F3 204 sp 4 # push ecx @@ -4065,7 +4065,7 @@ 0040D52A 224 sp 4 # push eax 0040D52B 228 sp -4 # call unknown_libname_3 0040D546 224 sp 4 # push eax - 0040D54B 228 sp -16 # call sub_4B37D0 + 0040D54B 228 sp -16 # call RenderInfo_cpp_4B37D0 0040D557 212 sp 4 # push eax 0040D558 216 sp 4 # push 1 0040D55A 220 sp 4 # push edi @@ -4077,7 +4077,7 @@ 0040D584 224 sp 4 # push 0 0040D586 228 sp -4 # call unknown_libname_3 0040D598 224 sp 4 # push edx - 0040D599 228 sp -16 # call sub_4B37D0 + 0040D599 228 sp -16 # call RenderInfo_cpp_4B37D0 0040D5A5 212 sp 4 # push ecx 0040D5A6 216 sp 4 # push 1 0040D5AB 220 sp 4 # push edi @@ -4089,7 +4089,7 @@ 0040D5C3 224 sp 4 # push 0 0040D5C5 228 sp -4 # call unknown_libname_3 0040D5E0 224 sp 4 # push eax - 0040D5E5 228 sp -16 # call sub_4B37D0 + 0040D5E5 228 sp -16 # call RenderInfo_cpp_4B37D0 0040D5F1 212 sp 4 # push ecx 0040D5F2 216 sp 4 # push 1 0040D5F4 220 sp 4 # push edi @@ -4134,7 +4134,7 @@ 0040D756 64 sp 4 # push 0 0040D758 68 sp -4 # call unknown_libname_3 0040D767 64 sp 4 # push ecx - 0040D76A 68 sp -16 # call sub_4B37D0 + 0040D76A 68 sp -16 # call RenderInfo_cpp_4B37D0 0040D804 52 sp 4 # push esi 0040D805 56 sp 4 # push 1 0040D809 60 sp 4 # push eax @@ -4146,7 +4146,7 @@ 0040D841 64 sp 4 # push 0 0040D847 68 sp -4 # call unknown_libname_3 0040D856 64 sp 4 # push ecx - 0040D859 68 sp -16 # call sub_4B37D0 + 0040D859 68 sp -16 # call RenderInfo_cpp_4B37D0 0040D8A8 52 sp 4 # push esi 0040D8A9 56 sp 4 # push 1 0040D8C7 60 sp 4 # push edx @@ -4933,7 +4933,7 @@ 0041068C 220 sp 4 # push 0 0041068E 224 sp -4 # call unknown_libname_3 004106A1 220 sp 4 # push ecx - 004106A6 224 sp -16 # call sub_4B37D0 + 004106A6 224 sp -16 # call RenderInfo_cpp_4B37D0 004106C1 208 sp 4 # push ecx 004106D0 212 sp 4 # push ebp 004106D1 216 sp 4 # push eax @@ -5524,7 +5524,7 @@ 00411B9B 224 sp 4 # push ebx 00411B9C 228 sp -4 # call unknown_libname_3 00411BAD 224 sp 4 # push ecx - 00411BB2 228 sp -16 # call sub_4B37D0 + 00411BB2 228 sp -16 # call RenderInfo_cpp_4B37D0 00411BCA 212 sp 4 # push eax 00411BEC 216 sp 4 # push 9 00411BEE 220 sp 4 # push ecx @@ -5536,7 +5536,7 @@ 00411BFF 224 sp 4 # push ebx 00411C00 228 sp -4 # call unknown_libname_3 00411C11 224 sp 4 # push ecx - 00411C16 228 sp -16 # call sub_4B37D0 + 00411C16 228 sp -16 # call RenderInfo_cpp_4B37D0 00411C3D 212 sp 4 # push eax 00411C45 216 sp 4 # push 9 00411C59 220 sp 4 # push eax @@ -5548,7 +5548,7 @@ 00411C6A 224 sp 4 # push ebx 00411C6B 228 sp -4 # call unknown_libname_3 00411C7C 224 sp 4 # push ecx - 00411C81 228 sp -16 # call sub_4B37D0 + 00411C81 228 sp -16 # call RenderInfo_cpp_4B37D0 00411CAF 212 sp 4 # push eax 00411CB0 216 sp 4 # push 9 00411CB9 220 sp 4 # push ecx @@ -5575,7 +5575,7 @@ 00411D8A 248 sp 4 # push edx 00411DA2 252 sp -4 # call unknown_libname_3 00411DB7 248 sp 4 # push edx - 00411DB8 252 sp -16 # call sub_4B37D0 + 00411DB8 252 sp -16 # call RenderInfo_cpp_4B37D0 00411DD1 236 sp 4 # push ecx 00411DDE 240 sp 4 # push edi 00411DE2 244 sp 4 # push edx @@ -5587,7 +5587,7 @@ 00411DF4 248 sp 4 # push 0 00411DF6 252 sp -4 # call unknown_libname_3 00411E0B 248 sp 4 # push edx - 00411E0C 252 sp -16 # call sub_4B37D0 + 00411E0C 252 sp -16 # call RenderInfo_cpp_4B37D0 00411E36 236 sp 4 # push eax 00411E37 240 sp 4 # push edi 00411E38 244 sp 4 # push ecx @@ -5604,7 +5604,7 @@ 00411E89 248 sp 4 # push ebx 00411E9A 252 sp -4 # call unknown_libname_3 00411EAE 248 sp 4 # push eax - 00411EAF 252 sp -16 # call sub_4B37D0 + 00411EAF 252 sp -16 # call RenderInfo_cpp_4B37D0 00411EC4 236 sp 4 # push eax 00411ECC 240 sp 4 # push edi 00411ECD 244 sp 4 # push ecx @@ -5616,7 +5616,7 @@ 00411EDE 248 sp 4 # push ebx 00411EDF 252 sp -4 # call unknown_libname_3 00411EF0 248 sp 4 # push ecx - 00411EF5 252 sp -16 # call sub_4B37D0 + 00411EF5 252 sp -16 # call RenderInfo_cpp_4B37D0 00411F1F 236 sp 4 # push ecx 00411F20 240 sp 4 # push edi 00411F21 244 sp 4 # push ebx @@ -5635,7 +5635,7 @@ 00411F81 248 sp 4 # push ebx 00411F82 252 sp -4 # call unknown_libname_3 00411F93 248 sp 4 # push ecx - 00411F98 252 sp -16 # call sub_4B37D0 + 00411F98 252 sp -16 # call RenderInfo_cpp_4B37D0 00411FE7 236 sp 4 # push eax 00411FF2 240 sp 4 # push edi 00411FF3 244 sp 4 # push eax @@ -5649,7 +5649,7 @@ 00412060 248 sp 4 # push ebx 00412071 252 sp -4 # call unknown_libname_3 00412086 248 sp 4 # push edx - 00412087 252 sp -16 # call sub_4B37D0 + 00412087 252 sp -16 # call RenderInfo_cpp_4B37D0 004120AE 236 sp 4 # push eax 004120AF 240 sp 4 # push edi 004120B0 244 sp 4 # push ebp @@ -5666,7 +5666,7 @@ 00412102 248 sp 4 # push ebx 0041210B 252 sp -4 # call unknown_libname_3 00412120 248 sp 4 # push ecx - 00412125 252 sp -16 # call sub_4B37D0 + 00412125 252 sp -16 # call RenderInfo_cpp_4B37D0 00412137 236 sp 4 # push eax 0041213F 240 sp 4 # push edi 00412143 244 sp 4 # push ecx @@ -5678,7 +5678,7 @@ 00412154 248 sp 4 # push ebx 00412155 252 sp -4 # call unknown_libname_3 00412166 248 sp 4 # push ecx - 0041216B 252 sp -16 # call sub_4B37D0 + 0041216B 252 sp -16 # call RenderInfo_cpp_4B37D0 00412192 236 sp 4 # push ecx 00412193 240 sp 4 # push edi 00412194 244 sp 4 # push edx @@ -5695,7 +5695,7 @@ 004121E6 248 sp 4 # push ebx 004121EF 252 sp -4 # call unknown_libname_3 00412204 248 sp 4 # push ecx - 00412209 252 sp -16 # call sub_4B37D0 + 00412209 252 sp -16 # call RenderInfo_cpp_4B37D0 0041221B 236 sp 4 # push eax 00412223 240 sp 4 # push edi 00412224 244 sp 4 # push ecx @@ -5729,7 +5729,7 @@ 004123AD 312 sp 4 # push ebx 004123AE 316 sp -4 # call unknown_libname_3 004123C3 312 sp 4 # push edx - 004123C4 316 sp -16 # call sub_4B37D0 + 004123C4 316 sp -16 # call RenderInfo_cpp_4B37D0 004123D4 300 sp 4 # push ecx 004123D9 304 sp 4 # push 3 004123DB 308 sp 4 # push edx @@ -5745,7 +5745,7 @@ 00412522 312 sp 4 # push ebx 00412523 316 sp -4 # call unknown_libname_3 00412539 312 sp 4 # push ecx - 0041253E 316 sp -16 # call sub_4B37D0 + 0041253E 316 sp -16 # call RenderInfo_cpp_4B37D0 0041259A 300 sp 4 # push 33Ah 004125A5 304 sp 4 # push eax 004125A6 308 sp 4 # push ebx @@ -5759,7 +5759,7 @@ 0041261C 312 sp 4 # push ebx 0041261D 316 sp -4 # call unknown_libname_3 0041263E 312 sp 4 # push eax - 0041263F 316 sp -16 # call sub_4B37D0 + 0041263F 316 sp -16 # call RenderInfo_cpp_4B37D0 0041264C 300 sp 4 # push edx 0041265E 304 sp 4 # push 1 0041266D 308 sp 4 # push edx @@ -5771,7 +5771,7 @@ 004126BD 312 sp 4 # push ebx 004126D7 316 sp -4 # call unknown_libname_3 004126F8 312 sp 4 # push eax - 004126F9 316 sp -16 # call sub_4B37D0 + 004126F9 316 sp -16 # call RenderInfo_cpp_4B37D0 00412745 300 sp 4 # push edx 0041274C 304 sp -4 # call sub_506930 0041278D 300 sp 4 # push ebx @@ -5802,7 +5802,7 @@ 004128B9 312 sp 4 # push ebx 004128C1 316 sp -4 # call unknown_libname_3 004128DB 312 sp 4 # push edx - 004128DC 316 sp -16 # call sub_4B37D0 + 004128DC 316 sp -16 # call RenderInfo_cpp_4B37D0 004128EC 300 sp 4 # push ecx 004128F1 304 sp 4 # push 4 004128F3 308 sp 4 # push edx @@ -5814,7 +5814,7 @@ 00412915 312 sp 4 # push ebx 0041291D 316 sp -4 # call unknown_libname_3 00412932 312 sp 4 # push edx - 00412933 316 sp -16 # call sub_4B37D0 + 00412933 316 sp -16 # call RenderInfo_cpp_4B37D0 00412943 300 sp 4 # push ecx 00412948 304 sp 4 # push 2 0041294A 308 sp 4 # push edx @@ -5857,7 +5857,7 @@ 00412AD2 268 sp 4 # push ebx 00412AD3 272 sp -4 # call unknown_libname_3 00412AED 268 sp 4 # push edx - 00412AEE 272 sp -16 # call sub_4B37D0 + 00412AEE 272 sp -16 # call RenderInfo_cpp_4B37D0 00412B31 256 sp 4 # push ebp 00412B32 260 sp 4 # push ebx 00412B33 264 sp 4 # push ecx @@ -5875,49 +5875,49 @@ 00412B85 268 sp 4 # push ebx 00412B86 272 sp -4 # call unknown_libname_3 00412BA6 268 sp 4 # push eax - 00412BAB 272 sp -16 # call sub_4B37D0 + 00412BAB 272 sp -16 # call RenderInfo_cpp_4B37D0 00412BCE 256 sp 4 # push ebp 00412BCF 260 sp 4 # push ebx 00412BD0 264 sp 4 # push ecx 00412BD7 268 sp 4 # push ebx 00412BD8 272 sp -4 # call unknown_libname_3 00412BEE 268 sp 4 # push ecx - 00412BF3 272 sp -16 # call sub_4B37D0 + 00412BF3 272 sp -16 # call RenderInfo_cpp_4B37D0 00412C09 256 sp 4 # push ebp 00412C0A 260 sp 4 # push ebx 00412C0B 264 sp 4 # push ecx 00412C12 268 sp 4 # push ebx 00412C13 272 sp -4 # call unknown_libname_3 00412C2D 268 sp 4 # push edx - 00412C2E 272 sp -16 # call sub_4B37D0 + 00412C2E 272 sp -16 # call RenderInfo_cpp_4B37D0 00412C43 256 sp 4 # push ebp 00412C44 260 sp 4 # push ebx 00412C45 264 sp 4 # push ecx 00412C4C 268 sp 4 # push ebx 00412C4D 272 sp -4 # call unknown_libname_3 00412C67 268 sp 4 # push eax - 00412C68 272 sp -16 # call sub_4B37D0 + 00412C68 272 sp -16 # call RenderInfo_cpp_4B37D0 00412C7C 256 sp 4 # push ebp 00412C7D 260 sp 4 # push ebx 00412C7E 264 sp 4 # push ecx 00412C85 268 sp 4 # push ebx 00412C86 272 sp -4 # call unknown_libname_3 00412C9C 268 sp 4 # push ecx - 00412CA1 272 sp -16 # call sub_4B37D0 + 00412CA1 272 sp -16 # call RenderInfo_cpp_4B37D0 00412CD7 256 sp 4 # push ebp 00412CD8 260 sp 4 # push ebx 00412CD9 264 sp 4 # push ecx 00412CE0 268 sp 4 # push ebx 00412CE1 272 sp -4 # call unknown_libname_3 00412CFC 268 sp 4 # push eax - 00412CFD 272 sp -16 # call sub_4B37D0 + 00412CFD 272 sp -16 # call RenderInfo_cpp_4B37D0 00412D2A 256 sp 4 # push ebp 00412D2B 260 sp 4 # push ebx 00412D2C 264 sp 4 # push ecx 00412D37 268 sp 4 # push ebx 00412D44 272 sp -4 # call unknown_libname_3 00412D59 268 sp 4 # push edx - 00412D5A 272 sp -16 # call sub_4B37D0 + 00412D5A 272 sp -16 # call RenderInfo_cpp_4B37D0 00412D6F 256 sp 4 # push ecx 00412D74 260 sp 4 # push edx 00412D79 264 sp 4 # push ecx @@ -5929,7 +5929,7 @@ 00412D8A 268 sp 4 # push ebx 00412D8B 272 sp -4 # call unknown_libname_3 00412DA5 268 sp 4 # push eax - 00412DA6 272 sp -16 # call sub_4B37D0 + 00412DA6 272 sp -16 # call RenderInfo_cpp_4B37D0 00412E92 256 sp 4 # push eax 00412E97 260 sp 4 # push ecx 00412E9C 264 sp 4 # push eax @@ -6031,7 +6031,7 @@ 00413835 556 sp 4 # push 0 00413840 560 sp -4 # call unknown_libname_3 00413850 556 sp 4 # push eax - 00413851 560 sp -16 # call sub_4B37D0 + 00413851 560 sp -16 # call RenderInfo_cpp_4B37D0 0041391F 544 sp 4 # push 0 00413921 548 sp 4 # push eax 0041392D 552 sp 4 # push edx @@ -6067,7 +6067,7 @@ 00413B77 556 sp 4 # push 0 00413B79 560 sp -4 # call unknown_libname_3 00413B9D 556 sp 4 # push eax - 00413B9E 560 sp -16 # call sub_4B37D0 + 00413B9E 560 sp -16 # call RenderInfo_cpp_4B37D0 00413BB6 544 sp 4 # push ecx 00413BBB 548 sp 4 # push 1 00413BD0 552 sp 4 # push edx @@ -6158,7 +6158,7 @@ 004140C6 556 sp 4 # push ebp 004140CE 560 sp -4 # call unknown_libname_3 004140DF 556 sp 4 # push edx - 004140E7 560 sp -16 # call sub_4B37D0 + 004140E7 560 sp -16 # call RenderInfo_cpp_4B37D0 004140F9 544 sp 4 # push ecx 004140FE 548 sp 4 # push 4 00414100 552 sp 4 # push edx @@ -6170,7 +6170,7 @@ 0041411E 556 sp 4 # push ebp 0041411F 560 sp -4 # call unknown_libname_3 0041414C 556 sp 4 # push eax - 0041414D 560 sp -16 # call sub_4B37D0 + 0041414D 560 sp -16 # call RenderInfo_cpp_4B37D0 0041415F 544 sp 4 # push eax 00414164 548 sp 4 # push 5 00414166 552 sp 4 # push ecx @@ -6182,7 +6182,7 @@ 0041417F 556 sp 4 # push ebp 00414180 560 sp -4 # call unknown_libname_3 00414191 556 sp 4 # push ecx - 00414199 560 sp -16 # call sub_4B37D0 + 00414199 560 sp -16 # call RenderInfo_cpp_4B37D0 004141AB 544 sp 4 # push eax 004141B0 548 sp 4 # push 3 004141B2 552 sp 4 # push ecx @@ -6222,7 +6222,7 @@ 0041435D 288 sp 4 # push ebp 0041435E 292 sp -4 # call unknown_libname_3 0041436F 288 sp 4 # push ecx - 00414374 292 sp -16 # call sub_4B37D0 + 00414374 292 sp -16 # call RenderInfo_cpp_4B37D0 00414391 276 sp 4 # push eax 0041439C 280 sp 4 # push 7 0041439E 284 sp 4 # push ecx @@ -6259,7 +6259,7 @@ 0041451D 264 sp 4 # push ebx 00414526 268 sp -4 # call unknown_libname_3 00414531 264 sp 4 # push ecx - 00414536 268 sp -16 # call sub_4B37D0 + 00414536 268 sp -16 # call RenderInfo_cpp_4B37D0 00414553 252 sp 4 # push eax 0041455E 256 sp 4 # push 3 00414560 260 sp 4 # push ecx @@ -6271,7 +6271,7 @@ 00414571 264 sp 4 # push ebx 00414572 268 sp -4 # call unknown_libname_3 00414580 264 sp 4 # push ecx - 00414585 268 sp -16 # call sub_4B37D0 + 00414585 268 sp -16 # call RenderInfo_cpp_4B37D0 00414594 252 sp 4 # push eax 0041459F 256 sp 4 # push 3 004145A1 260 sp 4 # push ecx @@ -6283,7 +6283,7 @@ 004145B2 264 sp 4 # push ebx 004145B3 268 sp -4 # call unknown_libname_3 004145C1 264 sp 4 # push ecx - 004145C6 268 sp -16 # call sub_4B37D0 + 004145C6 268 sp -16 # call RenderInfo_cpp_4B37D0 004145E7 252 sp 4 # push eax 004145F2 256 sp 4 # push 3 004145FE 260 sp 4 # push eax @@ -6300,7 +6300,7 @@ 0041466D 264 sp 4 # push ebx 00414676 268 sp -4 # call unknown_libname_3 00414684 264 sp 4 # push ecx - 00414689 268 sp -16 # call sub_4B37D0 + 00414689 268 sp -16 # call RenderInfo_cpp_4B37D0 00414696 252 sp 4 # push edx 00414697 256 sp 4 # push eax 004146AA 260 sp -8 # call CGuiManager_scaleSize @@ -6377,7 +6377,7 @@ 0041496B 264 sp 4 # push edi 00414974 268 sp -4 # call unknown_libname_3 00414985 264 sp 4 # push ecx - 0041498A 268 sp -16 # call sub_4B37D0 + 0041498A 268 sp -16 # call RenderInfo_cpp_4B37D0 004149A7 252 sp 4 # push eax 004149B2 256 sp 4 # push 3 004149B4 260 sp 4 # push ecx @@ -6389,7 +6389,7 @@ 004149C5 264 sp 4 # push edi 004149C6 268 sp -4 # call unknown_libname_3 004149D7 264 sp 4 # push ecx - 004149DC 268 sp -16 # call sub_4B37D0 + 004149DC 268 sp -16 # call RenderInfo_cpp_4B37D0 00414A07 252 sp 4 # push eax 00414A08 256 sp 4 # push 3 00414A0E 260 sp 4 # push ecx @@ -6401,7 +6401,7 @@ 00414A29 264 sp 4 # push edi 00414A3A 268 sp -4 # call unknown_libname_3 00414A4F 264 sp 4 # push edx - 00414A50 268 sp -16 # call sub_4B37D0 + 00414A50 268 sp -16 # call RenderInfo_cpp_4B37D0 00414A5F 252 sp 4 # push ecx 00414A64 256 sp 4 # push 3 00414A66 260 sp 4 # push edx @@ -6418,7 +6418,7 @@ 00414ADB 264 sp 4 # push edi 00414AE4 268 sp -4 # call unknown_libname_3 00414AF5 264 sp 4 # push ecx - 00414AFA 268 sp -16 # call sub_4B37D0 + 00414AFA 268 sp -16 # call RenderInfo_cpp_4B37D0 00414B17 252 sp 4 # push edx 00414B18 256 sp 4 # push eax 00414B1B 260 sp -8 # call CGuiManager_scaleSize @@ -6474,7 +6474,7 @@ 00414EE6 308 sp 4 # push ebx 00414EEB 312 sp -4 # call unknown_libname_3 00414EFF 308 sp 4 # push eax - 00414F00 312 sp -16 # call sub_4B37D0 + 00414F00 312 sp -16 # call RenderInfo_cpp_4B37D0 00414F2D 296 sp 4 # push ecx 00414F32 300 sp 4 # push 8 00414F34 304 sp 4 # push edx @@ -6486,7 +6486,7 @@ 00414F4E 308 sp 4 # push ebx 00414F4F 312 sp -4 # call unknown_libname_3 00414F64 308 sp 4 # push edx - 00414F65 312 sp -16 # call sub_4B37D0 + 00414F65 312 sp -16 # call RenderInfo_cpp_4B37D0 00414F72 296 sp 4 # push edx 00414F77 300 sp 4 # push 8 00414F7B 304 sp 4 # push edx @@ -6525,7 +6525,7 @@ 004150C7 268 sp 4 # push ebx 004150DC 272 sp -4 # call unknown_libname_3 004150F0 268 sp 4 # push eax - 004150F1 272 sp -16 # call sub_4B37D0 + 004150F1 272 sp -16 # call RenderInfo_cpp_4B37D0 00415104 256 sp 4 # push eax 0041510C 260 sp 4 # push 2 0041510E 264 sp 4 # push ecx @@ -6557,7 +6557,7 @@ 00415228 268 sp 4 # push ebx 00415229 272 sp -4 # call unknown_libname_3 0041523D 268 sp 4 # push eax - 0041523E 272 sp -16 # call sub_4B37D0 + 0041523E 272 sp -16 # call RenderInfo_cpp_4B37D0 00415268 256 sp 4 # push eax 00415270 260 sp 4 # push 3 00415272 264 sp 4 # push ecx @@ -6661,7 +6661,7 @@ 004157A5 248 sp 4 # push edi 004157A6 252 sp -4 # call unknown_libname_3 004157BE 248 sp 4 # push eax - 004157BF 252 sp -16 # call sub_4B37D0 + 004157BF 252 sp -16 # call RenderInfo_cpp_4B37D0 004157D8 236 sp 4 # push eax 004157D9 240 sp 4 # push 2 004157DB 244 sp 4 # push ebx @@ -6673,7 +6673,7 @@ 004157EF 248 sp 4 # push 0 004157F1 252 sp -4 # call unknown_libname_3 00415810 248 sp 4 # push eax - 00415811 252 sp -16 # call sub_4B37D0 + 00415811 252 sp -16 # call RenderInfo_cpp_4B37D0 0041582A 236 sp 4 # push ecx 00415832 240 sp 4 # push 2 00415836 244 sp 4 # push ebx @@ -6710,7 +6710,7 @@ 00415982 248 sp 4 # push ebp 00415983 252 sp -4 # call unknown_libname_3 00415998 248 sp 4 # push edx - 00415999 252 sp -16 # call sub_4B37D0 + 00415999 252 sp -16 # call RenderInfo_cpp_4B37D0 004159BF 236 sp 4 # push eax 004159C0 240 sp 4 # push 1 004159C2 244 sp 4 # push ecx @@ -6725,7 +6725,7 @@ 004159ED 248 sp 4 # push ebp 004159EE 252 sp -4 # call unknown_libname_3 00415A03 248 sp 4 # push edx - 00415A04 252 sp -16 # call sub_4B37D0 + 00415A04 252 sp -16 # call RenderInfo_cpp_4B37D0 00415A2A 236 sp 4 # push eax 00415A2B 240 sp 4 # push 1 00415A2D 244 sp 4 # push ecx @@ -6737,7 +6737,7 @@ 00415A3F 236 sp 4 # push 0 00415A41 240 sp -4 # call unknown_libname_3 00415A52 236 sp 4 # push edx - 00415A57 240 sp -16 # call sub_4B37D0 + 00415A57 240 sp -16 # call RenderInfo_cpp_4B37D0 00415A75 224 sp 4 # push eax 00415A76 228 sp 4 # push 1 00415A78 232 sp 4 # push ecx @@ -6749,7 +6749,7 @@ 00415A9A 248 sp 4 # push 0 00415A9C 252 sp -4 # call unknown_libname_3 00415ABD 248 sp 4 # push edx - 00415ABE 252 sp -16 # call sub_4B37D0 + 00415ABE 252 sp -16 # call RenderInfo_cpp_4B37D0 00415ADD 236 sp 4 # push eax 00415ADE 240 sp 4 # push 1 00415AE0 244 sp 4 # push ecx @@ -7482,7 +7482,7 @@ 00417991 284 sp 4 # push 0 00417993 288 sp -4 # call unknown_libname_3 004179A8 284 sp 4 # push edx - 004179A9 288 sp -16 # call sub_4B37D0 + 004179A9 288 sp -16 # call RenderInfo_cpp_4B37D0 004179DB 272 sp 4 # push eax 004179E0 276 sp 4 # push 3 004179E2 280 sp 4 # push eax @@ -7523,28 +7523,28 @@ 00417BD6 264 sp 4 # push ebx 00417BD7 268 sp -4 # call unknown_libname_3 00417BE8 264 sp 4 # push ecx - 00417BED 268 sp -16 # call sub_4B37D0 + 00417BED 268 sp -16 # call RenderInfo_cpp_4B37D0 00417C03 252 sp 4 # push 1 00417C05 256 sp 4 # push ebx 00417C06 260 sp 4 # push ecx 00417C0D 264 sp 4 # push ebx 00417C0E 268 sp -4 # call unknown_libname_3 00417C23 264 sp 4 # push edx - 00417C24 268 sp -16 # call sub_4B37D0 + 00417C24 268 sp -16 # call RenderInfo_cpp_4B37D0 00417C34 252 sp 4 # push 1 00417C36 256 sp 4 # push ebx 00417C37 260 sp 4 # push ecx 00417C3E 264 sp 4 # push ebx 00417C3F 268 sp -4 # call unknown_libname_3 00417C54 264 sp 4 # push edx - 00417C55 268 sp -16 # call sub_4B37D0 + 00417C55 268 sp -16 # call RenderInfo_cpp_4B37D0 00417C62 252 sp 4 # push 1 00417C64 256 sp 4 # push ebx 00417C65 260 sp 4 # push ecx 00417C6C 264 sp 4 # push ebx 00417C6D 268 sp -4 # call unknown_libname_3 00417C7E 264 sp 4 # push ecx - 00417C83 268 sp -16 # call sub_4B37D0 + 00417C83 268 sp -16 # call RenderInfo_cpp_4B37D0 00417C97 252 sp 4 # push edx 00417C98 256 sp -4 # call CButton_getScreenAABB 00417CD4 252 sp 4 # push eax @@ -7566,7 +7566,7 @@ 00417DFA 264 sp 4 # push ebx 00417DFB 268 sp -4 # call unknown_libname_3 00417E10 264 sp 4 # push edx - 00417E11 268 sp -16 # call sub_4B37D0 + 00417E11 268 sp -16 # call RenderInfo_cpp_4B37D0 00417E31 252 sp 4 # push eax 00417E45 256 sp 4 # push 3 00417E47 260 sp 4 # push ecx @@ -7848,7 +7848,7 @@ 00418FEA 260 sp 4 # push edi 00418FFE 264 sp -4 # call unknown_libname_3 00419012 260 sp 4 # push eax - 00419013 264 sp -16 # call sub_4B37D0 + 00419013 264 sp -16 # call RenderInfo_cpp_4B37D0 0041902C 248 sp 4 # push edx 00419033 252 sp 4 # push 9 00419040 256 sp 4 # push eax @@ -7866,7 +7866,7 @@ 004190D4 260 sp 4 # push 0 004190DA 264 sp -4 # call unknown_libname_3 004190EB 260 sp 4 # push ecx - 004190F0 264 sp -16 # call sub_4B37D0 + 004190F0 264 sp -16 # call RenderInfo_cpp_4B37D0 004190FF 248 sp 4 # push eax 00419104 252 sp 4 # push 5 00419106 256 sp 4 # push ecx @@ -7878,7 +7878,7 @@ 00419118 260 sp 4 # push 0 0041911A 264 sp -4 # call unknown_libname_3 0041912B 260 sp 4 # push ecx - 00419130 264 sp -16 # call sub_4B37D0 + 00419130 264 sp -16 # call RenderInfo_cpp_4B37D0 0041913F 248 sp 4 # push eax 00419144 252 sp 4 # push 5 00419146 256 sp 4 # push ecx @@ -8387,7 +8387,7 @@ 0041A22E 248 sp 4 # push edi 0041A243 252 sp -4 # call unknown_libname_3 0041A257 248 sp 4 # push eax - 0041A258 252 sp -16 # call sub_4B37D0 + 0041A258 252 sp -16 # call RenderInfo_cpp_4B37D0 0041A267 236 sp 4 # push eax 0041A26C 240 sp 4 # push 6 0041A26E 244 sp 4 # push ecx @@ -8809,7 +8809,7 @@ 0041C6AA 432 sp 4 # push edi 0041C6AB 436 sp -4 # call unknown_libname_3 0041C6B6 432 sp 4 # push ecx - 0041C6BE 436 sp -16 # call sub_4B37D0 + 0041C6BE 436 sp -16 # call RenderInfo_cpp_4B37D0 0041C751 420 sp 4 # push edx 0041C752 424 sp 4 # push eax 0041C77B 428 sp -8 # call CGuiManager_scaleSize @@ -9128,7 +9128,7 @@ 0041EE48 244 sp 4 # push ebp 0041EE55 248 sp -4 # call unknown_libname_3 0041EE69 244 sp 4 # push eax - 0041EE6A 248 sp -16 # call sub_4B37D0 + 0041EE6A 248 sp -16 # call RenderInfo_cpp_4B37D0 0041EE82 232 sp 4 # push ecx 0041EE83 236 sp 4 # push edx 0041EEA6 240 sp -8 # call CGuiManager_scaleSize @@ -9277,7 +9277,7 @@ 0041FBE1 232 sp 4 # push 0 0041FBE3 236 sp -4 # call unknown_libname_3 0041FBF7 232 sp 4 # push eax - 0041FBF8 236 sp -16 # call sub_4B37D0 + 0041FBF8 236 sp -16 # call RenderInfo_cpp_4B37D0 0041FC0D 220 sp 4 # push edx 0041FC19 224 sp 4 # push 8 0041FC2E 228 sp 4 # push eax @@ -9289,7 +9289,7 @@ 0041FC6D 232 sp 4 # push 0 0041FC6F 236 sp -4 # call unknown_libname_3 0041FC85 232 sp 4 # push ecx - 0041FC8A 236 sp -16 # call sub_4B37D0 + 0041FC8A 236 sp -16 # call RenderInfo_cpp_4B37D0 0041FC9C 220 sp 4 # push eax 0041FCA6 224 sp 4 # push 7 0041FCA8 228 sp 4 # push ecx @@ -9449,7 +9449,7 @@ 0042038E 328 sp 4 # push ebp 0042038F 332 sp -4 # call unknown_libname_3 004203A1 328 sp 4 # push ebx - 004203A2 332 sp -16 # call sub_4B37D0 + 004203A2 332 sp -16 # call RenderInfo_cpp_4B37D0 004203B6 316 sp 4 # push eax 004203C3 320 sp 4 # push 7 004203C5 324 sp 4 # push eax @@ -9465,7 +9465,7 @@ 0042048F 328 sp 4 # push ebp 00420490 332 sp -4 # call unknown_libname_3 004204A2 328 sp 4 # push esi - 004204A3 332 sp -16 # call sub_4B37D0 + 004204A3 332 sp -16 # call RenderInfo_cpp_4B37D0 004204AE 316 sp 4 # push eax 004204AF 320 sp -4 # call CButton_getScreenAABB 004204D3 316 sp 4 # push eax @@ -9739,7 +9739,7 @@ 00420FAC 436 sp 4 # push ebx 00420FB1 440 sp -4 # call unknown_libname_3 00420FC6 436 sp 4 # push eax - 00420FC7 440 sp -16 # call sub_4B37D0 + 00420FC7 440 sp -16 # call RenderInfo_cpp_4B37D0 00420FDB 424 sp 4 # push ecx 00420FDC 428 sp 4 # push edx 0042100B 432 sp -8 # call CGuiManager_scaleSize @@ -9754,7 +9754,7 @@ 00421066 436 sp 4 # push ebx 0042107C 440 sp -4 # call unknown_libname_3 0042108D 436 sp 4 # push ecx - 00421095 440 sp -16 # call sub_4B37D0 + 00421095 440 sp -16 # call RenderInfo_cpp_4B37D0 004210A7 424 sp 4 # push eax 004210AC 428 sp 4 # push 3 004210AE 432 sp 4 # push ecx @@ -9766,7 +9766,7 @@ 004210BF 436 sp 4 # push ebx 004210C0 440 sp -4 # call unknown_libname_3 004210D1 436 sp 4 # push ecx - 004210D9 440 sp -16 # call sub_4B37D0 + 004210D9 440 sp -16 # call RenderInfo_cpp_4B37D0 004210EB 424 sp 4 # push eax 004210F0 428 sp 4 # push 1 004210F2 432 sp 4 # push ecx @@ -9778,7 +9778,7 @@ 00421214 436 sp 4 # push ebx 00421223 440 sp -4 # call unknown_libname_3 0042123A 436 sp 4 # push eax - 0042123B 440 sp -16 # call sub_4B37D0 + 0042123B 440 sp -16 # call RenderInfo_cpp_4B37D0 00421257 424 sp 4 # push ecx 00421258 428 sp 4 # push 2 00421267 432 sp 4 # push eax @@ -9795,7 +9795,7 @@ 0042131B 436 sp 4 # push ebx 00421320 440 sp -4 # call unknown_libname_3 00421331 436 sp 4 # push ecx - 00421339 440 sp -16 # call sub_4B37D0 + 00421339 440 sp -16 # call RenderInfo_cpp_4B37D0 0042135A 424 sp 4 # push eax 00421376 428 sp 4 # push 7 0042137A 432 sp 4 # push ecx @@ -9817,7 +9817,7 @@ 004213D6 436 sp 4 # push ebx 004213D7 440 sp -4 # call unknown_libname_3 004213E0 436 sp 4 # push ecx - 004213E8 440 sp -16 # call sub_4B37D0 + 004213E8 440 sp -16 # call RenderInfo_cpp_4B37D0 004213F8 424 sp 4 # push eax 0042141B 428 sp 4 # push 1 0042141D 432 sp 4 # push ecx @@ -9829,7 +9829,7 @@ 0042146C 436 sp 4 # push ebx 0042146D 440 sp -4 # call unknown_libname_3 00421484 436 sp 4 # push eax - 00421485 440 sp -16 # call sub_4B37D0 + 00421485 440 sp -16 # call RenderInfo_cpp_4B37D0 00421497 424 sp 4 # push eax 0042149C 428 sp 4 # push 1 0042149E 432 sp 4 # push ecx @@ -9841,7 +9841,7 @@ 004214BD 436 sp 4 # push ebx 004214BE 440 sp -4 # call unknown_libname_3 004214CE 436 sp 4 # push edx - 004214CF 440 sp -16 # call sub_4B37D0 + 004214CF 440 sp -16 # call RenderInfo_cpp_4B37D0 004214EA 424 sp 4 # push ecx 004214EF 428 sp 4 # push 2 004214F1 432 sp 4 # push edx @@ -9882,7 +9882,7 @@ 004216A6 436 sp 4 # push ebx 004216A7 440 sp -4 # call unknown_libname_3 004216BE 436 sp 4 # push eax - 004216BF 440 sp -16 # call sub_4B37D0 + 004216BF 440 sp -16 # call RenderInfo_cpp_4B37D0 004216D1 424 sp 4 # push eax 004216D6 428 sp 4 # push 1 004216D8 432 sp 4 # push ecx @@ -9894,7 +9894,7 @@ 004216E9 436 sp 4 # push ebx 004216EA 440 sp -4 # call unknown_libname_3 004216EF 436 sp 4 # push ebp - 004216F7 440 sp -16 # call sub_4B37D0 + 004216F7 440 sp -16 # call RenderInfo_cpp_4B37D0 00421712 424 sp 4 # push eax 00421717 428 sp 4 # push 2 00421719 432 sp 4 # push ecx @@ -9928,7 +9928,7 @@ 004218A8 436 sp 4 # push ebx 004218A9 440 sp -4 # call unknown_libname_3 004218C1 436 sp 4 # push edx - 004218C2 440 sp -16 # call sub_4B37D0 + 004218C2 440 sp -16 # call RenderInfo_cpp_4B37D0 004218D4 424 sp 4 # push ecx 004218D9 428 sp 4 # push ebp 004218DA 432 sp 4 # push edx @@ -9940,14 +9940,14 @@ 004218F0 436 sp 4 # push ebx 004218F1 440 sp -4 # call unknown_libname_3 00421909 436 sp 4 # push edx - 0042190A 440 sp -16 # call sub_4B37D0 + 0042190A 440 sp -16 # call RenderInfo_cpp_4B37D0 00421917 424 sp 4 # push 1 0042191C 428 sp 4 # push ebx 0042191D 432 sp 4 # push ecx 00421928 436 sp 4 # push ebx 00421929 440 sp -4 # call unknown_libname_3 0042193A 436 sp 4 # push ecx - 00421942 440 sp -16 # call sub_4B37D0 + 00421942 440 sp -16 # call RenderInfo_cpp_4B37D0 00421954 424 sp 4 # push eax 00421959 428 sp 4 # push 1 0042195B 432 sp 4 # push ecx @@ -9959,19 +9959,19 @@ 00421972 436 sp 4 # push ebx 00421973 440 sp -4 # call unknown_libname_3 00421984 436 sp 4 # push ecx - 0042198C 440 sp -16 # call sub_4B37D0 + 0042198C 440 sp -16 # call RenderInfo_cpp_4B37D0 00421991 424 jmp 00421BE5 0042199A 436 sp 4 # push ebx 0042199B 440 sp -4 # call unknown_libname_3 004219B3 436 sp 4 # push edx - 004219B4 440 sp -16 # call sub_4B37D0 + 004219B4 440 sp -16 # call RenderInfo_cpp_4B37D0 004219CE 424 sp 4 # push 1 004219D0 428 sp 4 # push ebx 004219D1 432 sp 4 # push ecx 004219D8 436 sp 4 # push ebx 004219D9 440 sp -4 # call unknown_libname_3 004219EA 436 sp 4 # push ecx - 004219F2 440 sp -16 # call sub_4B37D0 + 004219F2 440 sp -16 # call RenderInfo_cpp_4B37D0 00421A08 424 sp 4 # push eax 00421A0D 428 sp 4 # push 1 00421A11 432 sp 4 # push ecx @@ -9983,14 +9983,14 @@ 00421A22 436 sp 4 # push ebx 00421A23 440 sp -4 # call unknown_libname_3 00421A34 436 sp 4 # push ecx - 00421A3C 440 sp -16 # call sub_4B37D0 + 00421A3C 440 sp -16 # call RenderInfo_cpp_4B37D0 00421A5F 424 sp 4 # push ebp 00421A60 428 sp 4 # push ebx 00421A61 432 sp 4 # push ecx 00421A68 436 sp 4 # push ebx 00421A69 440 sp -4 # call unknown_libname_3 00421A80 436 sp 4 # push eax - 00421A81 440 sp -16 # call sub_4B37D0 + 00421A81 440 sp -16 # call RenderInfo_cpp_4B37D0 00421A93 424 sp 4 # push eax 00421A98 428 sp 4 # push ebp 00421A99 432 sp 4 # push ecx @@ -10002,14 +10002,14 @@ 00421AB0 436 sp 4 # push ebx 00421AB1 440 sp -4 # call unknown_libname_3 00421AC2 436 sp 4 # push ecx - 00421ACA 440 sp -16 # call sub_4B37D0 + 00421ACA 440 sp -16 # call RenderInfo_cpp_4B37D0 00421AE6 424 sp 4 # push ebp 00421AE7 428 sp 4 # push ebx 00421AE8 432 sp 4 # push ecx 00421AEF 436 sp 4 # push ebx 00421AF0 440 sp -4 # call unknown_libname_3 00421B07 436 sp 4 # push eax - 00421B08 440 sp -16 # call sub_4B37D0 + 00421B08 440 sp -16 # call RenderInfo_cpp_4B37D0 00421B1A 424 sp 4 # push eax 00421B1F 428 sp 4 # push ebp 00421B20 432 sp 4 # push ecx @@ -10021,14 +10021,14 @@ 00421B37 436 sp 4 # push ebx 00421B38 440 sp -4 # call unknown_libname_3 00421B49 436 sp 4 # push ecx - 00421B51 440 sp -16 # call sub_4B37D0 + 00421B51 440 sp -16 # call RenderInfo_cpp_4B37D0 00421B6F 424 sp 4 # push ebp 00421B70 428 sp 4 # push ebx 00421B71 432 sp 4 # push ecx 00421B78 436 sp 4 # push ebx 00421B79 440 sp -4 # call unknown_libname_3 00421B90 436 sp 4 # push eax - 00421B91 440 sp -16 # call sub_4B37D0 + 00421B91 440 sp -16 # call RenderInfo_cpp_4B37D0 00421BA3 424 sp 4 # push eax 00421BA8 428 sp 4 # push ebp 00421BA9 432 sp 4 # push ecx @@ -10040,7 +10040,7 @@ 00421BC0 436 sp 4 # push ebx 00421BC1 440 sp -4 # call unknown_libname_3 00421BD2 436 sp 4 # push ecx - 00421BDA 440 sp -16 # call sub_4B37D0 + 00421BDA 440 sp -16 # call RenderInfo_cpp_4B37D0 00421BFB 424 sp 4 # push eax 00421C00 428 sp 4 # push 2 00421C04 432 sp 4 # push ecx @@ -10054,7 +10054,7 @@ 00421C49 436 sp 4 # push ebx 00421C4A 440 sp -4 # call unknown_libname_3 00421C61 436 sp 4 # push eax - 00421C62 440 sp -16 # call sub_4B37D0 + 00421C62 440 sp -16 # call RenderInfo_cpp_4B37D0 00421C74 424 sp 4 # push eax 00421C79 428 sp 4 # push ebp 00421C7A 432 sp 4 # push ecx @@ -10066,7 +10066,7 @@ 00421C91 436 sp 4 # push ebx 00421C92 440 sp -4 # call unknown_libname_3 00421CA3 436 sp 4 # push ecx - 00421CAB 440 sp -16 # call sub_4B37D0 + 00421CAB 440 sp -16 # call RenderInfo_cpp_4B37D0 00421CC6 424 sp 4 # push eax 00421CCB 428 sp 4 # push 2 00421CCF 432 sp 4 # push ecx @@ -10081,7 +10081,7 @@ 00421D5B 436 sp 4 # push ebx 00421D5C 440 sp -4 # call unknown_libname_3 00421D73 436 sp 4 # push eax - 00421D74 440 sp -16 # call sub_4B37D0 + 00421D74 440 sp -16 # call RenderInfo_cpp_4B37D0 00421D86 424 sp 4 # push eax 00421D8B 428 sp 4 # push 1 00421D8D 432 sp 4 # push ecx @@ -10093,7 +10093,7 @@ 00421DA4 436 sp 4 # push ebx 00421DA5 440 sp -4 # call unknown_libname_3 00421DB6 436 sp 4 # push ecx - 00421DBE 440 sp -16 # call sub_4B37D0 + 00421DBE 440 sp -16 # call RenderInfo_cpp_4B37D0 00421DD0 424 sp 4 # push eax 00421DD5 428 sp 4 # push 2 00421DD7 432 sp 4 # push ecx @@ -10105,7 +10105,7 @@ 00421E44 436 sp 4 # push ebx 00421E45 440 sp -4 # call unknown_libname_3 00421E56 436 sp 4 # push ecx - 00421E5E 440 sp -16 # call sub_4B37D0 + 00421E5E 440 sp -16 # call RenderInfo_cpp_4B37D0 00421E6E 424 sp 4 # push ecx 00421E7A 428 sp 4 # push 2 00421E7C 432 sp 4 # push ecx @@ -10117,7 +10117,7 @@ 00421EC5 436 sp 4 # push ebx 00421ED4 440 sp -4 # call unknown_libname_3 00421EEB 436 sp 4 # push eax - 00421EEC 440 sp -16 # call sub_4B37D0 + 00421EEC 440 sp -16 # call RenderInfo_cpp_4B37D0 00421EFC 424 sp 4 # push eax 00421F09 428 sp 4 # push 1 00421F11 432 sp 4 # push ecx @@ -10129,7 +10129,7 @@ 00421F48 436 sp 4 # push ebx 00421F49 440 sp -4 # call unknown_libname_3 00421F61 436 sp 4 # push edx - 00421F62 440 sp -16 # call sub_4B37D0 + 00421F62 440 sp -16 # call RenderInfo_cpp_4B37D0 00421F81 424 sp 4 # push eax 00421F99 428 sp 4 # push 9 00421F9B 432 sp 4 # push ebx @@ -10153,7 +10153,7 @@ 0042207E 436 sp 4 # push ebx 0042207F 440 sp -4 # call unknown_libname_3 00422090 436 sp 4 # push ecx - 00422098 440 sp -16 # call sub_4B37D0 + 00422098 440 sp -16 # call RenderInfo_cpp_4B37D0 004220C1 424 sp 4 # push eax 004220CF 428 sp 4 # push 7 004220D1 432 sp 4 # push ecx @@ -10173,7 +10173,7 @@ 004221E0 436 sp 4 # push ebx 004221E7 440 sp -4 # call unknown_libname_3 004221EC 436 sp 4 # push ebp - 004221F4 440 sp -16 # call sub_4B37D0 + 004221F4 440 sp -16 # call RenderInfo_cpp_4B37D0 00422207 424 sp 4 # push eax 00422219 428 sp 4 # push 7 0042221B 432 sp 4 # push ecx @@ -10191,7 +10191,7 @@ 004222E8 436 sp 4 # push ebx 004222F0 440 sp -4 # call unknown_libname_3 00422301 436 sp 4 # push ecx - 00422309 440 sp -16 # call sub_4B37D0 + 00422309 440 sp -16 # call RenderInfo_cpp_4B37D0 0042231B 424 sp 4 # push eax 0042231C 428 sp 4 # push 9 0042231E 432 sp 4 # push ecx @@ -10209,7 +10209,7 @@ 004223EC 436 sp 4 # push ebx 00422402 440 sp -4 # call unknown_libname_3 00422419 436 sp 4 # push eax - 0042241A 440 sp -16 # call sub_4B37D0 + 0042241A 440 sp -16 # call RenderInfo_cpp_4B37D0 0042243F 424 sp 4 # push eax 00422440 428 sp 4 # push 9 00422442 432 sp 4 # push ecx @@ -10236,7 +10236,7 @@ 004224F9 240 sp 4 # push ebp 0042250A 244 sp -4 # call unknown_libname_3 0042251B 240 sp 4 # push ecx - 00422520 244 sp -16 # call sub_4B37D0 + 00422520 244 sp -16 # call RenderInfo_cpp_4B37D0 0042254F 228 sp 4 # push edx 00422550 232 sp 4 # push eax 00422553 236 sp -8 # call CGuiManager_scaleSize @@ -10391,7 +10391,7 @@ 00422AA6 252 sp 4 # push ebp 00422AB2 256 sp -4 # call unknown_libname_3 00422AC3 252 sp 4 # push ecx - 00422AC8 256 sp -16 # call sub_4B37D0 + 00422AC8 256 sp -16 # call RenderInfo_cpp_4B37D0 00422AE9 240 sp 4 # push ebx 00422AF8 244 sp 4 # push 8 00422AFA 248 sp 4 # push ecx @@ -10403,7 +10403,7 @@ 00422B0B 252 sp 4 # push ebp 00422B0C 256 sp -4 # call unknown_libname_3 00422B1D 252 sp 4 # push ecx - 00422B22 256 sp -16 # call sub_4B37D0 + 00422B22 256 sp -16 # call RenderInfo_cpp_4B37D0 00422B31 240 sp 4 # push eax 00422B36 244 sp 4 # push 7 00422B38 248 sp 4 # push ecx @@ -10444,7 +10444,7 @@ 00422D47 296 sp 4 # push ebx 00422D4C 300 sp -4 # call unknown_libname_3 00422D65 296 sp 4 # push edx - 00422D66 300 sp -16 # call sub_4B37D0 + 00422D66 300 sp -16 # call RenderInfo_cpp_4B37D0 00422D83 284 sp 4 # push eax 00422D88 288 sp 4 # push 8 00422D8A 292 sp 4 # push ecx @@ -10456,7 +10456,7 @@ 00422DB3 296 sp 4 # push ebx 00422DB4 300 sp -4 # call unknown_libname_3 00422DCD 296 sp 4 # push edx - 00422DCE 300 sp -16 # call sub_4B37D0 + 00422DCE 300 sp -16 # call RenderInfo_cpp_4B37D0 00422DDB 284 sp 4 # push ecx 00422DE0 288 sp 4 # push 8 00422DE2 292 sp 4 # push edx @@ -10520,7 +10520,7 @@ 00423095 272 sp 4 # push ebx 004230AA 276 sp -4 # call unknown_libname_3 004230BE 272 sp 4 # push eax - 004230BF 276 sp -16 # call sub_4B37D0 + 004230BF 276 sp -16 # call RenderInfo_cpp_4B37D0 004230DC 260 sp 4 # push eax 004230DD 264 sp 4 # push 2 004230DF 268 sp 4 # push edi @@ -10532,7 +10532,7 @@ 00423126 272 sp 4 # push ebx 00423127 276 sp -4 # call unknown_libname_3 0042313B 272 sp 4 # push eax - 0042313C 276 sp -16 # call sub_4B37D0 + 0042313C 276 sp -16 # call RenderInfo_cpp_4B37D0 00423149 260 sp 4 # push eax 0042314A 264 sp 4 # push 1 0042314E 268 sp 4 # push edi @@ -10564,7 +10564,7 @@ 00423289 272 sp 4 # push ebx 0042328A 276 sp -4 # call unknown_libname_3 0042329B 272 sp 4 # push ecx - 004232A0 276 sp -16 # call sub_4B37D0 + 004232A0 276 sp -16 # call RenderInfo_cpp_4B37D0 004232C9 260 sp 4 # push edx 004232CA 264 sp 4 # push 3 004232CC 268 sp 4 # push edi @@ -10576,7 +10576,7 @@ 004232DD 272 sp 4 # push ebx 004232DE 276 sp -4 # call unknown_libname_3 004232F2 272 sp 4 # push eax - 004232F3 276 sp -16 # call sub_4B37D0 + 004232F3 276 sp -16 # call RenderInfo_cpp_4B37D0 00423319 260 sp 4 # push eax 0042331A 264 sp 4 # push 3 0042331C 268 sp 4 # push edi @@ -11100,7 +11100,7 @@ 00424935 272 sp 4 # push ebx 00424942 276 sp -4 # call unknown_libname_3 00424957 272 sp 4 # push edx - 00424958 276 sp -16 # call sub_4B37D0 + 00424958 276 sp -16 # call RenderInfo_cpp_4B37D0 00424967 260 sp 4 # push ecx 00424968 264 sp 4 # push 6 0042496E 268 sp 4 # push edx @@ -11159,7 +11159,7 @@ 00424C44 272 sp 4 # push ebx 00424C45 276 sp -4 # call unknown_libname_3 00424C55 272 sp 4 # push eax - 00424C5A 276 sp -16 # call sub_4B37D0 + 00424C5A 276 sp -16 # call RenderInfo_cpp_4B37D0 00424C83 260 sp 4 # push eax 00424C88 264 sp 4 # push 5 00424C8A 268 sp 4 # push ecx @@ -11171,7 +11171,7 @@ 00424C9D 272 sp 4 # push ebx 00424C9E 276 sp -4 # call unknown_libname_3 00424CAF 272 sp 4 # push ecx - 00424CB4 276 sp -16 # call sub_4B37D0 + 00424CB4 276 sp -16 # call RenderInfo_cpp_4B37D0 00424CDC 260 sp 4 # push ecx 00424CE1 264 sp 4 # push 5 00424CE3 268 sp 4 # push edx @@ -11186,7 +11186,7 @@ 00424D81 272 sp 4 # push ebx 00424D82 276 sp -4 # call unknown_libname_3 00424DA0 272 sp 4 # push eax - 00424DA1 276 sp -16 # call sub_4B37D0 + 00424DA1 276 sp -16 # call RenderInfo_cpp_4B37D0 00424DAE 260 sp 4 # push eax 00424DB7 264 sp 4 # push 2 00424DB9 268 sp 4 # push ecx @@ -11196,7 +11196,7 @@ 00424DCF 272 sp 4 # push ebx 00424DD0 276 sp -4 # call unknown_libname_3 00424DFA 272 sp 4 # push ecx - 00424DFF 276 sp -16 # call sub_4B37D0 + 00424DFF 276 sp -16 # call RenderInfo_cpp_4B37D0 00424E0C 260 sp 4 # push edx 00424E15 264 sp 4 # push 2 00424E17 268 sp 4 # push edx @@ -11208,7 +11208,7 @@ 00424E3B 272 sp 4 # push ebx 00424E3C 276 sp -4 # call unknown_libname_3 00424E5D 272 sp 4 # push edx - 00424E5E 276 sp -16 # call sub_4B37D0 + 00424E5E 276 sp -16 # call RenderInfo_cpp_4B37D0 00424E7F 260 sp 4 # push eax 00424E82 264 sp 4 # push 2 00424E84 268 sp 4 # push edx @@ -11434,7 +11434,7 @@ 00425821 284 sp 4 # push ebx 0042582E 288 sp -4 # call unknown_libname_3 00425842 284 sp 4 # push eax - 00425843 288 sp -16 # call sub_4B37D0 + 00425843 288 sp -16 # call RenderInfo_cpp_4B37D0 00425852 272 sp 4 # push eax 00425857 276 sp 4 # push 8 0042585B 280 sp 4 # push ecx @@ -11448,7 +11448,7 @@ 00425979 284 sp 4 # push 0 0042597B 288 sp -4 # call unknown_libname_3 0042598F 284 sp 4 # push eax - 00425990 288 sp -16 # call sub_4B37D0 + 00425990 288 sp -16 # call RenderInfo_cpp_4B37D0 0042599F 272 sp 4 # push eax 004259A4 276 sp 4 # push 4 004259A6 280 sp 4 # push ecx @@ -11460,7 +11460,7 @@ 004259BB 284 sp 4 # push 0 004259BD 288 sp -4 # call unknown_libname_3 004259D2 284 sp 4 # push edx - 004259D3 288 sp -16 # call sub_4B37D0 + 004259D3 288 sp -16 # call RenderInfo_cpp_4B37D0 004259E2 272 sp 4 # push ecx 004259E7 276 sp 4 # push 7 004259EB 280 sp 4 # push edx @@ -11472,7 +11472,7 @@ 004259FD 284 sp 4 # push 0 004259FF 288 sp -4 # call unknown_libname_3 00425A14 284 sp 4 # push edx - 00425A15 288 sp -16 # call sub_4B37D0 + 00425A15 288 sp -16 # call RenderInfo_cpp_4B37D0 00425A24 272 sp 4 # push ecx 00425A29 276 sp 4 # push 4 00425A2B 280 sp 4 # push edx @@ -11484,7 +11484,7 @@ 00425A40 284 sp 4 # push 0 00425A42 288 sp -4 # call unknown_libname_3 00425A56 284 sp 4 # push eax - 00425A57 288 sp -16 # call sub_4B37D0 + 00425A57 288 sp -16 # call RenderInfo_cpp_4B37D0 00425A66 272 sp 4 # push eax 00425A6B 276 sp 4 # push 7 00425A6F 280 sp 4 # push ecx @@ -11565,7 +11565,7 @@ 00425F4F 268 sp 4 # push esi 00425F50 272 sp -4 # call unknown_libname_3 00425F66 268 sp 4 # push ecx - 00425F6B 272 sp -16 # call sub_4B37D0 + 00425F6B 272 sp -16 # call RenderInfo_cpp_4B37D0 00425FA7 256 sp 4 # push eax 00425FB7 260 sp 4 # push 6 00425FB9 264 sp 4 # push eax @@ -11631,7 +11631,7 @@ 00426243 272 sp 4 # push 0 00426247 276 sp -4 # call unknown_libname_3 00426261 272 sp 4 # push eax - 00426262 276 sp -16 # call sub_4B37D0 + 00426262 276 sp -16 # call RenderInfo_cpp_4B37D0 004262C7 260 sp 4 # push 0 004262C9 264 sp 4 # push esi 004262CC 268 sp -8 # call dword ptr [eax+290h] @@ -11950,7 +11950,7 @@ 004270F8 264 sp 4 # push esi 004270FD 268 sp -4 # call unknown_libname_3 0042711E 264 sp 4 # push edx - 0042711F 268 sp -16 # call sub_4B37D0 + 0042711F 268 sp -16 # call RenderInfo_cpp_4B37D0 00427146 252 sp 4 # push eax 0042714B 256 sp 4 # push 8 0042714D 260 sp 4 # push ecx @@ -11962,7 +11962,7 @@ 0042717C 264 sp 4 # push esi 00427181 268 sp -4 # call unknown_libname_3 00427192 264 sp 4 # push ecx - 00427197 268 sp -16 # call sub_4B37D0 + 00427197 268 sp -16 # call RenderInfo_cpp_4B37D0 004271A4 252 sp 4 # push edx 004271A5 256 sp 4 # push eax 004271B8 260 sp -8 # call CGuiManager_scaleSize @@ -12201,7 +12201,7 @@ 00427A8E 256 sp 4 # push esi 00427A93 260 sp -4 # call unknown_libname_3 00427AA4 256 sp 4 # push ecx - 00427AA9 260 sp -16 # call sub_4B37D0 + 00427AA9 260 sp -16 # call RenderInfo_cpp_4B37D0 00427AC6 244 sp 4 # push eax 00427ACB 248 sp 4 # push 8 00427AD3 252 sp 4 # push ecx @@ -12218,7 +12218,7 @@ 00427B29 256 sp 4 # push esi 00427B2A 260 sp -4 # call unknown_libname_3 00427B2F 256 sp 4 # push edi - 00427B34 260 sp -16 # call sub_4B37D0 + 00427B34 260 sp -16 # call RenderInfo_cpp_4B37D0 00427B41 244 sp 4 # push ecx 00427B46 248 sp 4 # push 8 00427B48 252 sp 4 # push ecx @@ -13321,14 +13321,14 @@ 0042A569 280 sp 4 # push ebx 0042A56A 284 sp -4 # call unknown_libname_3 0042A57F 280 sp 4 # push edx - 0042A580 284 sp -16 # call sub_4B37D0 + 0042A580 284 sp -16 # call RenderInfo_cpp_4B37D0 0042A5AC 268 sp 4 # push 1 0042A5AE 272 sp 4 # push ebx 0042A5AF 276 sp 4 # push ecx 0042A5B6 280 sp 4 # push ebx 0042A5B7 284 sp -4 # call unknown_libname_3 0042A5CB 280 sp 4 # push eax - 0042A5CC 284 sp -16 # call sub_4B37D0 + 0042A5CC 284 sp -16 # call RenderInfo_cpp_4B37D0 0042A5EA 268 sp 4 # push ecx 0042A5F5 272 sp 4 # push 7 0042A5F7 276 sp 4 # push ecx @@ -13488,14 +13488,14 @@ 0042ABAD 292 sp 4 # push ebx 0042ABAE 296 sp -4 # call unknown_libname_3 0042ABBF 292 sp 4 # push ecx - 0042ABC4 296 sp -16 # call sub_4B37D0 + 0042ABC4 296 sp -16 # call RenderInfo_cpp_4B37D0 0042ABD9 280 sp 4 # push 1 0042ABDB 284 sp 4 # push ebx 0042ABDC 288 sp 4 # push ecx 0042ABE3 292 sp 4 # push ebx 0042ABE4 296 sp -4 # call unknown_libname_3 0042ABF9 292 sp 4 # push edx - 0042ABFA 296 sp -16 # call sub_4B37D0 + 0042ABFA 296 sp -16 # call RenderInfo_cpp_4B37D0 0042AC18 280 sp 4 # push eax 0042AC23 284 sp 4 # push 7 0042AC25 288 sp 4 # push eax @@ -13872,7 +13872,7 @@ 0042B89B 260 sp 4 # push esi 0042B89C 264 sp -4 # call unknown_libname_3 0042B8B6 260 sp 4 # push eax - 0042B8B7 264 sp -16 # call sub_4B37D0 + 0042B8B7 264 sp -16 # call RenderInfo_cpp_4B37D0 0042B909 248 sp 4 # push edx 0042B910 252 sp 4 # push 6 0042B912 256 sp 4 # push edx @@ -14234,9 +14234,12 @@ 0042C882 100 sp 4 # push offset aSPageDD 0042C887 104 sp 4 # push offset temp_string 0042C89F 108 sp -20 # add esp 14h - 0042C8AC 76 sp 4 # push 20h - 0042C8AE 80 sp 4 # push 80h - 0042C8B3 84 sp 4 # push offset temp_string + 0042C8A6 88 sp 4 # push ecx + 0042C8A7 92 sp 4 # push 101h + 0042C8AC 96 sp 4 # push 20h + 0042C8AE 100 sp 4 # push 80h + 0042C8B3 104 sp 4 # push offset temp_string + 0042C8BA 108 sp -20 # call dword ptr [edx+58h] 0042C901 88 sp 4 # push ecx 0042C906 92 sp 4 # push edx 0042C90B 96 sp 4 # push eax @@ -14401,7 +14404,7 @@ 0042CFB8 272 sp 4 # push 0 0042CFC2 276 sp -4 # call unknown_libname_3 0042CFCF 272 sp 4 # push edx - 0042CFD0 276 sp -16 # call sub_4B37D0 + 0042CFD0 276 sp -16 # call RenderInfo_cpp_4B37D0 0042CFE2 260 sp 4 # push ecx 0042D021 264 sp 4 # push edx 0042D022 268 sp 4 # push ecx @@ -14428,7 +14431,7 @@ 0042D12D 236 sp 4 # push ebp 0042D12E 240 sp -4 # call unknown_libname_3 0042D146 236 sp 4 # push edx - 0042D147 240 sp -16 # call sub_4B37D0 + 0042D147 240 sp -16 # call RenderInfo_cpp_4B37D0 0042D153 224 sp 4 # push ecx 0042D15E 228 sp 4 # push 6 0042D178 232 sp 4 # push edx @@ -14857,7 +14860,7 @@ 0042E236 412 sp 4 # push ebx 0042E23F 416 sp -4 # call unknown_libname_3 0042E253 412 sp 4 # push eax - 0042E254 416 sp -16 # call sub_4B37D0 + 0042E254 416 sp -16 # call RenderInfo_cpp_4B37D0 0042E26F 400 sp 4 # push ecx 0042E274 404 sp 4 # push 9 0042E276 408 sp 4 # push ecx @@ -14875,7 +14878,7 @@ 0042E308 412 sp 4 # push ebx 0042E30D 416 sp -4 # call unknown_libname_3 0042E31E 412 sp 4 # push ecx - 0042E323 416 sp -16 # call sub_4B37D0 + 0042E323 416 sp -16 # call RenderInfo_cpp_4B37D0 0042E334 400 sp 4 # push eax 0042E335 404 sp 4 # push 8 0042E337 408 sp 4 # push ebx @@ -15189,7 +15192,7 @@ 0042F3B6 364 sp 4 # push 0 0042F3B8 368 sp -4 # call unknown_libname_3 0042F3CA 364 sp 4 # push edx - 0042F3CB 368 sp -16 # call sub_4B37D0 + 0042F3CB 368 sp -16 # call RenderInfo_cpp_4B37D0 0042F41C 352 sp 4 # push eax 0042F41D 356 sp 4 # push 1 0042F427 360 sp 4 # push eax @@ -17293,7 +17296,7 @@ 004347CB 0 ret -4 004347D0 ??1CEffect@@UAE@XZ 004347D6 0 jmp 00446A90 -004347E0 sub_4347E0 +004347E0 Effect_cpp_4347E0 004347E0 0 sp 4 # push ebp 004347E3 4 sp 4 # push 0FFFFFFFFh 004347E5 8 sp 4 # push offset SEH_4347E0 @@ -17331,7 +17334,7 @@ 00434A2D 72 sp 4 # push ebx 00434A2E 76 sp -4 # call unknown_libname_3 00434A48 72 sp 4 # push eax - 00434A4B 76 sp -16 # call sub_4B37D0 + 00434A4B 76 sp -16 # call RenderInfo_cpp_4B37D0 00434A86 60 sp 4 # push eax 00434A87 64 sp 4 # push edx 00434A91 68 sp -8 # call sub_4B4160 @@ -17386,7 +17389,7 @@ 00434D61 72 sp 4 # push ebx 00434D62 76 sp -4 # call unknown_libname_3 00434D6D 72 sp 4 # push edi - 00434D71 76 sp -16 # call sub_4B37D0 + 00434D71 76 sp -16 # call RenderInfo_cpp_4B37D0 00434DA8 60 sp 4 # push edi 00434DAF 64 sp 4 # push edi 00434DB3 68 sp 4 # push 80h @@ -17504,7 +17507,7 @@ 004353BA 24 sp 4 # push ebx 004353BB 28 sp 4 # push ecx 004353BC 32 sp 4 # push ebp - 004353BF 36 sp -20 # call sub_435F20 + 004353BF 36 sp -20 # call EffectElement_cpp_435F20 00435407 16 sp -4 # pop edi 00435408 12 sp -4 # pop esi 00435409 8 sp -4 pop_bp 0 @@ -17570,7 +17573,7 @@ 00435653 8 sp -4 # pop esi 00435654 4 sp -4 # pop ecx 00435655 0 ret -4 -00435660 sub_435660 +00435660 Effect_cpp_435660 00435660 0 sp 12 # sub esp 0Ch 00435663 12 sp 4 # push ebx 00435664 16 sp 4 # push ebp @@ -17597,7 +17600,7 @@ 00435709 16 sp -4 # pop ebx 0043570F 12 sp -12 # add esp 0Ch 00435712 0 ret -20 -00435720 sub_435720 +00435720 Effect_cpp_435720 0043572E 0 sp 4 # push esi 00435738 4 sp 4 # push 285h 0043573F 8 sp 4 # push offset aDDevDk2Project @@ -17681,7 +17684,7 @@ 00435E14 0 ret 0 00435E20 sub_435E20 00435E2D 0 ret 0 -00435E30 sub_435E30 +00435E30 EffectDescriptor_cpp_435E30 00435E30 0 sp 4 # push esi 00435E46 4 sp 4 # push 0DBh 00435E4C 8 sp 4 # push offset aDDevDk2Project_37 @@ -17715,7 +17718,7 @@ 00435F0B 0 ret -4 00435F10 ??1CEffectElement@@UAE@XZ 00435F16 0 jmp 00446A90 -00435F20 sub_435F20 +00435F20 EffectElement_cpp_435F20 00435F20 0 sp 4 # push ebp 00435F23 4 sp 4 # push 0FFFFFFFFh 00435F25 8 sp 4 # push offset SEH_435F20 @@ -17770,7 +17773,7 @@ 00436214 56 sp 4 # push ebx 00436215 60 sp -4 # call unknown_libname_3 0043622F 56 sp 4 # push eax - 00436232 60 sp -16 # call sub_4B37D0 + 00436232 60 sp -16 # call RenderInfo_cpp_4B37D0 00436259 44 sp 4 # push 6Ah 0043625B 48 sp 4 # push offset aDDevDk2Project_1 00436260 52 sp 4 # push offset dword_6D6450 @@ -17899,7 +17902,7 @@ 0043695B 276 sp -4 # pop ebx 0043695C 272 sp -272 # add esp 110h 00436962 0 ret -8 -00436970 sub_436970 +00436970 EffectGeneration_cpp_436970 00436970 0 sp 4 # push ebp 00436973 4 sp 16 # sub esp 10h 00436979 20 sp 4 # push ebx @@ -17928,7 +17931,7 @@ 00436AE0 20 sp -16 mov_sp_bp 0 00436AE2 4 sp -4 pop_bp 0 00436AE3 0 ret -8 -00436AF0 sub_436AF0 +00436AF0 EffectGeneration_cpp_436AF0 00436AF0 0 sp 4 # push ebp 00436AF3 4 sp 28 # sub esp 1Ch 00436AF9 32 sp 4 # push ebx @@ -17962,7 +17965,7 @@ 00436C72 32 sp -28 mov_sp_bp 0 00436C74 4 sp -4 pop_bp 0 00436C75 0 ret -8 -00436C80 sub_436C80 +00436C80 EffectGeneration_cpp_436C80 00436C80 0 sp 4 # push ebp 00436C83 4 sp 24 # sub esp 18h 00436C89 28 sp 4 # push ebx @@ -18006,7 +18009,7 @@ 00436E53 28 sp -24 mov_sp_bp 0 00436E55 4 sp -4 pop_bp 0 00436E56 0 ret -8 -00436E60 sub_436E60 +00436E60 EffectGeneration_cpp_436E60 00436E60 0 sp 4 # push 0FFFFFFFFh 00436E62 4 sp 4 # push offset SEH_436E60 00436E6D 8 sp 4 # push eax @@ -18111,7 +18114,7 @@ 0043728D 8 sp -4 # pop esi 00437294 4 sp -4 # pop ecx 00437295 0 ret -4 -004372A0 sub_4372A0 +004372A0 EffectGeneration_cpp_4372A0 004372A0 0 sp 4 # push 0FFFFFFFFh 004372A2 4 sp 4 # push offset SEH_4372A0 004372AD 8 sp 4 # push eax @@ -18155,7 +18158,7 @@ 00437478 40 sp -4 # pop ebx 00437479 36 sp -36 # add esp 24h 0043747C 0 ret -8 -00437480 sub_437480 +00437480 EffectGeneration_cpp_437480 00437480 0 sp 4 # push 0FFFFFFFFh 00437482 4 sp 4 # push offset SEH_437480 0043748D 8 sp 4 # push eax @@ -18191,7 +18194,7 @@ 004375A4 0 sp 4 # push eax 004375A5 4 sp -4 # call sub_435600 004375AF 0 ret -8 -004375C0 sub_4375C0 +004375C0 EffectGeneration_cpp_4375C0 004375C0 0 sp 4 # push 0FFFFFFFFh 004375C2 4 sp 4 # push offset SEH_4375C0 004375CD 8 sp 4 # push eax @@ -18218,7 +18221,7 @@ 004376CF 40 sp -4 # pop ebx 004376D0 36 sp -36 # add esp 24h 004376D3 0 ret -8 -004376E0 sub_4376E0 +004376E0 BridgeThing_h__4376E0 004376E6 0 sp 4 # push 0FFFFFFFFh 004376E8 4 sp 4 # push offset SEH_4376E0 004376ED 8 sp 4 # push eax @@ -18234,16 +18237,16 @@ 0043788A 308 sp 4 # push ebp 0043788D 312 sp -4 # call sub_447A70 004378EE 308 sp 4 # push offset dword_6D6450 - 004378F3 312 sp -4 # call sub_435E30 + 004378F3 312 sp -4 # call EffectDescriptor_cpp_435E30 00437906 308 sp 4 # push edx 0043790B 312 sp 4 # push eax 0043790C 316 sp 4 # push ecx 00437914 320 sp 4 # push edx 00437915 324 sp 4 # push eax - 00437918 328 sp -20 # call sub_435660 + 00437918 328 sp -20 # call Effect_cpp_435660 0043794D 308 sp 4 # push ecx 0043794E 312 sp 4 # push edx - 00437958 316 sp -8 # call sub_435720 + 00437958 316 sp -8 # call Effect_cpp_435720 0043796A 308 sp 4 # push ecx 0043796D 312 sp 4 # push edx 00437977 316 sp 4 # push eax @@ -18274,10 +18277,10 @@ 00437AC0 316 sp 4 # push eax 00437AC8 320 sp 4 # push ecx 00437AC9 324 sp 4 # push edx - 00437ACC 328 sp -20 # call sub_435660 + 00437ACC 328 sp -20 # call Effect_cpp_435660 00437B01 308 sp 4 # push ecx 00437B02 312 sp 4 # push edx - 00437B0C 316 sp -8 # call sub_435720 + 00437B0C 316 sp -8 # call Effect_cpp_435720 00437B1E 308 sp 4 # push ecx 00437B21 312 sp 4 # push edx 00437B2B 316 sp 4 # push eax @@ -18304,16 +18307,16 @@ 00437BF3 320 sp 4 # push edi 00437C06 324 sp -16 # add esp 10h 00437C73 308 sp 4 # push offset dword_6D6450 - 00437C78 312 sp -4 # call sub_435E30 + 00437C78 312 sp -4 # call EffectDescriptor_cpp_435E30 00437C8B 308 sp 4 # push eax 00437C90 312 sp 4 # push ecx 00437C91 316 sp 4 # push edx 00437C99 320 sp 4 # push eax 00437C9A 324 sp 4 # push ecx - 00437C9D 328 sp -20 # call sub_435660 + 00437C9D 328 sp -20 # call Effect_cpp_435660 00437CCE 308 sp 4 # push ecx 00437CCF 312 sp 4 # push edx - 00437CD9 316 sp -8 # call sub_435720 + 00437CD9 316 sp -8 # call Effect_cpp_435720 00437CE6 308 sp 4 # push eax 00437CEE 312 sp 4 # push ecx 00437CEF 316 sp 4 # push edx @@ -18342,10 +18345,10 @@ 00437E25 316 sp 4 # push eax 00437E2D 320 sp 4 # push ecx 00437E2E 324 sp 4 # push edx - 00437E31 328 sp -20 # call sub_435660 + 00437E31 328 sp -20 # call Effect_cpp_435660 00437E66 308 sp 4 # push ecx 00437E67 312 sp 4 # push edx - 00437E71 316 sp -8 # call sub_435720 + 00437E71 316 sp -8 # call Effect_cpp_435720 00437E7E 308 sp 4 # push eax 00437E86 312 sp 4 # push ecx 00437E87 316 sp 4 # push edx @@ -18384,7 +18387,7 @@ 00438012 8 sp -4 # pop esi 00438013 4 sp -4 # pop ecx 00438014 0 ret -8 -00438020 sub_438020 +00438020 EffectGeneration_cpp_438020 00438020 0 sp 4 # push ebp 00438023 4 sp 40 # sub esp 28h 00438029 44 sp 4 # push ebx @@ -18516,7 +18519,7 @@ 004386E5 20 sp -4 # pop ebx 004386E6 16 sp -16 # add esp 10h 004386E9 0 ret -4 -004386F0 sub_4386F0 +004386F0 EffectGeneration_cpp_4386F0 004386F6 0 sp 4 # push 0FFFFFFFFh 004386F8 4 sp 4 # push offset SEH_4386F0 004386FD 8 sp 4 # push eax @@ -18558,16 +18561,16 @@ 00438947 132 sp 4 # push eax 00438957 136 sp -8 # add esp 8 0043899D 128 sp 4 # push offset dword_6D6450 - 004389A4 132 sp -4 # call sub_435E30 + 004389A4 132 sp -4 # call EffectDescriptor_cpp_435E30 004389B7 128 sp 4 # push edx 004389BC 132 sp 4 # push eax 004389BD 136 sp 4 # push ecx 004389C2 140 sp 4 # push edx 004389C3 144 sp 4 # push eax - 004389C6 148 sp -20 # call sub_435660 + 004389C6 148 sp -20 # call Effect_cpp_435660 004389EF 128 sp 4 # push ecx 004389F0 132 sp 4 # push edx - 004389F7 136 sp -8 # call sub_435720 + 004389F7 136 sp -8 # call Effect_cpp_435720 00438A11 128 sp 4 # push ecx 00438A12 132 sp 4 # push edx 00438A34 136 sp 4 # push eax @@ -18598,10 +18601,10 @@ 00438B78 136 sp 4 # push eax 00438B7D 140 sp 4 # push ecx 00438B7E 144 sp 4 # push edx - 00438B81 148 sp -20 # call sub_435660 + 00438B81 148 sp -20 # call Effect_cpp_435660 00438BB3 128 sp 4 # push ecx 00438BB4 132 sp 4 # push edx - 00438BBB 136 sp -8 # call sub_435720 + 00438BBB 136 sp -8 # call Effect_cpp_435720 00438BD0 128 sp 4 # push ecx 00438BD3 132 sp 4 # push edx 00438BDA 136 sp 4 # push eax @@ -18628,16 +18631,16 @@ 00438C9F 140 sp 4 # push edi 00438CB2 144 sp -16 # add esp 10h 00438D83 128 sp 4 # push offset dword_6D6450 - 00438D8A 132 sp -4 # call sub_435E30 + 00438D8A 132 sp -4 # call EffectDescriptor_cpp_435E30 00438D9D 128 sp 4 # push edx 00438DA2 132 sp 4 # push eax 00438DA3 136 sp 4 # push ecx 00438DA8 140 sp 4 # push edx 00438DA9 144 sp 4 # push eax - 00438DAC 148 sp -20 # call sub_435660 + 00438DAC 148 sp -20 # call Effect_cpp_435660 00438DD8 128 sp 4 # push ecx 00438DD9 132 sp 4 # push edx - 00438DE0 136 sp -8 # call sub_435720 + 00438DE0 136 sp -8 # call Effect_cpp_435720 00438DF0 128 sp 4 # push eax 00438DF5 132 sp 4 # push ecx 00438DF6 136 sp 4 # push edx @@ -18666,10 +18669,10 @@ 00438F31 136 sp 4 # push eax 00438F36 140 sp 4 # push ecx 00438F37 144 sp 4 # push edx - 00438F3A 148 sp -20 # call sub_435660 + 00438F3A 148 sp -20 # call Effect_cpp_435660 00438F69 128 sp 4 # push ecx 00438F6A 132 sp 4 # push edx - 00438F71 136 sp -8 # call sub_435720 + 00438F71 136 sp -8 # call Effect_cpp_435720 00438F88 128 sp 4 # push eax 00438FA4 132 sp 4 # push ecx 00438FA5 136 sp 4 # push edx @@ -18705,7 +18708,7 @@ 004390F0 8 sp -4 # pop edi 004390F9 4 sp -4 # pop esi 004390FA 0 ret -8 -00439100 sub_439100 +00439100 EffectGeneration_cpp_439100 00439100 0 sp 28 # sub esp 1Ch 00439103 28 sp 4 # push ebp 00439104 32 sp 4 # push esi @@ -18729,7 +18732,7 @@ 00439202 32 sp -4 pop_bp 0 00439203 28 sp -28 # add esp 1Ch 00439206 0 ret -8 -00439210 sub_439210 +00439210 EffectGeneration_cpp_439210 00439216 0 sp 4 # push 0FFFFFFFFh 00439218 4 sp 4 # push offset SEH_439210 0043921D 8 sp 4 # push eax @@ -18763,7 +18766,7 @@ 00439324 44 sp -4 # pop ebx 00439325 40 sp -40 # add esp 28h 00439328 0 ret -8 -00439330 sub_439330 +00439330 EffectGeneration_cpp_439330 00439334 0 sp 20 # sub esp 14h 00439337 20 sp 4 # push ebx 00439338 24 sp 4 # push ebp @@ -18826,7 +18829,7 @@ 004395D8 36 sp -36 # add esp 24h 004395DB 0 ret -8 004395E0 52 jmp 004395C9 -004395F0 sub_4395F0 +004395F0 EffectGeneration_cpp_4395F0 004395F0 0 sp 4 # push 0FFFFFFFFh 004395F2 4 sp 4 # push offset SEH_4395F0 004395FD 8 sp 4 # push eax @@ -19052,7 +19055,7 @@ 00439FBF 92 sp 4 # push 0 00439FC1 96 sp -4 # call unknown_libname_3 00439FD4 92 sp 4 # push edx - 00439FD8 96 sp -16 # call sub_4B37D0 + 00439FD8 96 sp -16 # call RenderInfo_cpp_4B37D0 00439FE5 80 sp 4 # push 1BEh 00439FEA 84 sp 4 # push offset aDDevDk2Project_38 0043A03D 88 sp 4 # push eax @@ -20477,7 +20480,7 @@ 0043FC30 128 sp 4 # push eax 0043FC35 132 sp 4 # push ecx 0043FC3A 136 sp 4 # push edx - 0043FC3B 140 sp -16 # call sub_441870 + 0043FC3B 140 sp -16 # call Bridge_cpp_441870 0043FC4E 124 sp 4 # push eax 0043FC4F 128 sp 4 # push ecx 0043FC5F 132 sp -8 # call sub_4435E0 @@ -20531,7 +20534,7 @@ 004403A8 28 sp 4 # push ecx 004403A9 32 sp 4 # push edx 004403AA 36 sp 4 # push ebx - 004403AD 40 sp -20 # call sub_4347E0 + 004403AD 40 sp -20 # call Effect_cpp_4347E0 0044040B 20 sp -4 # pop edi 0044040C 16 sp -4 # pop esi 0044040D 12 sp -4 pop_bp 0 @@ -20928,7 +20931,7 @@ 00441100 8 sp -4 # pop esi 00441101 4 sp -4 # pop ebx 00441102 0 ret -16 -00441110 sub_441110 +00441110 Bridge_cpp_441110 00441110 0 sp 32 # sub esp 20h 00441113 32 sp 4 # push ebx 00441114 36 sp 4 # push ebp @@ -20944,7 +20947,7 @@ 0044117A 56 sp 4 # push edx 0044117B 60 sp 4 # push eax 0044117F 64 sp 4 # push ecx - 00441182 68 sp -20 # call sub_4417A0 + 00441182 68 sp -20 # call Bridge_cpp_4417A0 0044118B 48 sp 4 # push 0FACh 00441190 52 sp 4 # push offset aDDevDk2Project_39 00441195 56 sp 4 # push edi @@ -20968,7 +20971,7 @@ 0044122A 0 ret -8 00441230 sub_441230 00441242 0 ret -4 -00441250 sub_441250 +00441250 Bridge_cpp_441250 0044125A 0 sp 4 # push edi 0044125B 4 sp 4 # push esi 0044125F 8 sp 4 # push 0FE6h @@ -21065,7 +21068,7 @@ 0044178B 48 sp -4 # pop ebx 0044178C 44 sp -44 # add esp 2Ch 0044178F 0 ret -16 -004417A0 sub_4417A0 +004417A0 Bridge_cpp_4417A0 004417A0 0 sp 8 # sub esp 8 004417AA 8 sp 4 # push ebx 004417AB 12 sp 4 # push ebp @@ -21091,7 +21094,7 @@ 00441865 12 sp -4 # pop ebx 00441866 8 sp -8 # add esp 8 00441869 0 ret -20 -00441870 sub_441870 +00441870 Bridge_cpp_441870 00441870 0 sp 4 # push 0FFFFFFFFh 00441872 4 sp 4 # push offset SEH_441870 0044187D 8 sp 4 # push eax @@ -21181,7 +21184,7 @@ 00441C64 12 sp -4 # pop ebx 00441C65 8 sp -8 # add esp 8 00441C68 0 ret -8 -00441C70 CBridge::fun_441C70 +00441C70 CBridge::setTexturesPath_441C70 00441C70 0 sp 4 # push ebx 00441C75 4 sp 4 # push ebp 00441C76 8 sp 4 # push esi @@ -21898,7 +21901,7 @@ 004437F2 24 sp 4 # push ebp 004437F3 28 sp 4 # push edx 004437F4 32 sp 4 # push eax - 004437F7 36 sp -20 # call sub_444970 + 004437F7 36 sp -20 # call BridgeRooms_cpp_444970 00443804 16 sp 4 # push ebx 00443805 20 sp 4 # push esi 00443806 24 sp 4 # push ebp @@ -22079,7 +22082,7 @@ 0044495D 40 sp -4 # pop ebx 0044495E 36 sp -36 # add esp 24h 00444961 0 ret -20 -00444970 sub_444970 +00444970 BridgeRooms_cpp_444970 00444970 0 sp 8 # sub esp 8 0044497A 8 sp 4 # push ebx 0044497B 12 sp 4 # push ebp @@ -22618,7 +22621,7 @@ 00447F29 92 sp 4 # push ebp 00447F2D 96 sp -4 # call unknown_libname_3 00447F36 92 sp 4 # push esi - 00447F46 96 sp -16 # call sub_4B37D0 + 00447F46 96 sp -16 # call RenderInfo_cpp_4B37D0 00447F6A 80 sp 4 # push eax 00447F6B 84 sp 4 # push ebp 00447F6C 88 sp 4 # push ebp @@ -22634,7 +22637,7 @@ 00448019 92 sp 4 # push ebp 0044801D 96 sp -4 # call unknown_libname_3 00448026 92 sp 4 # push esi - 00448036 96 sp -16 # call sub_4B37D0 + 00448036 96 sp -16 # call RenderInfo_cpp_4B37D0 00448056 80 sp 4 # push eax 00448057 84 sp 4 # push ebp 00448058 88 sp 4 # push 1200h @@ -22657,7 +22660,7 @@ 0044812B 84 sp 4 # push ebp 0044812C 88 sp 4 # push eax 0044813F 92 sp 4 # push edx - 00448143 96 sp -16 # call sub_4B37D0 + 00448143 96 sp -16 # call RenderInfo_cpp_4B37D0 004481BF 80 sp 4 # push ebp 004481C0 84 sp 4 # push esi 004481C1 88 sp -8 # call dword ptr [eax+1D8h] @@ -23540,7 +23543,7 @@ 0044CCCB 68 sp 4 # push eax 0044CCD6 72 sp -8 # add esp 8 0044CCE7 64 sp 4 # push ecx - 0044CCEA 68 sp -4 # call sub_441250 + 0044CCEA 68 sp -4 # call Bridge_cpp_441250 0044CE0C 64 sp -4 # pop edi 0044CE0D 60 sp -4 # pop esi 0044CE0E 56 sp -4 pop_bp 0 @@ -26249,7 +26252,7 @@ 00455F1E 12 sp -4 # pop esi 00455F1F 8 sp -8 # add esp 8 00455F22 0 ret 0 -00455F30 sub_455F30 +00455F30 CallToArmsState_cpp_455F30 00455F30 0 sp 40 # sub esp 28h 00455F33 40 sp 4 # push ebx 00455F36 44 sp 4 # push ebp @@ -26306,7 +26309,7 @@ 00456152 8 sp -4 # pop esi 00456153 4 sp -4 # pop ecx 00456154 0 ret 0 -00456160 sub_456160 +00456160 CasinoState_cpp_456160 00456160 0 sp 28 # sub esp 1Ch 00456163 28 sp 4 # push ebx 00456164 32 sp 4 # push esi @@ -26336,7 +26339,7 @@ 00456267 48 sp -8 # add esp 8 004562B2 40 sp 4 # push eax 004562B3 44 sp 4 # push ecx - 004562B6 48 sp -8 # call sub_456500 + 004562B6 48 sp -8 # call CasinoState_cpp_456500 004562BB 40 sp -4 # pop edi 004562BC 36 sp -4 # pop esi 004562BD 32 sp -4 # pop ebx @@ -26346,7 +26349,7 @@ 004562CA 44 sp 4 # push eax 004562D8 48 sp -8 # add esp 8 00456308 40 sp 4 # push edx - 0045631F 44 sp -4 # call sub_456690 + 0045631F 44 sp -4 # call CasinoState_cpp_456690 00456324 40 sp -4 # pop edi 00456325 36 sp -4 # pop esi 00456326 32 sp -4 # pop ebx @@ -26356,7 +26359,7 @@ 00456333 44 sp 4 # push ecx 00456341 48 sp -8 # add esp 8 0045637F 40 sp 4 # push eax - 00456384 44 sp -4 # call sub_456690 + 00456384 44 sp -4 # call CasinoState_cpp_456690 00456389 40 sp -4 # pop edi 0045638A 36 sp -4 # pop esi 0045638B 32 sp -4 # pop ebx @@ -26367,14 +26370,14 @@ 004563A6 48 sp -8 # add esp 8 004563F1 40 sp 4 # push eax 004563F2 44 sp 4 # push ecx - 004563F5 48 sp -8 # call sub_456500 + 004563F5 48 sp -8 # call CasinoState_cpp_456500 004563FA 40 sp -4 # pop edi 004563FB 36 sp -4 # pop esi 004563FC 32 sp -4 # pop ebx 004563FD 28 sp -28 # add esp 1Ch 00456400 0 ret 0 00456407 40 sp 4 # push edx - 00456414 44 sp -4 # call sub_4E4EA0 + 00456414 44 sp -4 # call Room_cpp_4E4EA0 0045641D 40 sp 4 # push 80h 00456426 44 sp 4 # push 96h 0045642B 48 sp 4 # push eax @@ -26413,7 +26416,7 @@ 004564F3 12 sp -8 # call sub_476D30 004564FC 4 sp -4 # pop esi 004564FF 0 ret 0 -00456500 sub_456500 +00456500 CasinoState_cpp_456500 00456500 0 sp 8 # sub esp 8 00456503 8 sp 4 # push ebx 00456504 12 sp 4 # push ebp @@ -26453,7 +26456,7 @@ 0045667E 12 sp -4 # pop ebx 0045667F 8 sp -8 # add esp 8 00456682 0 ret -8 -00456690 sub_456690 +00456690 CasinoState_cpp_456690 00456690 0 sp 4 # push esi 00456695 4 sp 4 # push edi 00456698 8 sp 4 # push esi @@ -26483,7 +26486,7 @@ 004567C0 8 sp -4 # pop edi 004567C3 4 sp -4 # pop esi 004567C4 0 ret -4 -004567D0 sub_4567D0 +004567D0 CasinoState_cpp_4567D0 004567D0 0 sp 4 # push ecx 004567D1 4 sp 4 # push ebx 004567D2 8 sp 4 # push ebp @@ -26546,7 +26549,7 @@ 00456971 8 sp -4 # pop ebx 00456972 4 sp -4 # pop ecx 00456973 0 ret 0 -00456980 sub_456980 +00456980 CasinoState_cpp_456980 00456980 0 sp 4 # push ecx 00456981 4 sp 4 # push ebx 00456982 8 sp 4 # push ebp @@ -26586,7 +26589,7 @@ 00456B62 8 sp -4 # pop ebx 00456B63 4 sp -4 # pop ecx 00456B64 0 ret 0 -00456B70 sub_456B70 +00456B70 CasinoState_cpp_456B70 00456B70 0 sp 4 # push ecx 00456B71 4 sp 4 # push esi 00456B74 8 sp 4 # push edi @@ -26702,7 +26705,7 @@ 00456EAF 12 sp -8 # call sub_476D30 00456EB9 4 sp -4 # pop esi 00456EBA 0 ret 0 -00456EC0 sub_456EC0 +00456EC0 CasinoState_cpp_456EC0 00456EC0 0 sp 4 # push esi 00456EE0 4 sp 4 # push 1Ch 00456EE8 8 sp -4 # call sub_494860 @@ -26758,7 +26761,7 @@ 00456FFA 0 ret 0 00457000 4 sp -4 # pop esi 00457001 0 ret 0 -00457010 sub_457010 +00457010 CasinoState_cpp_457010 00457010 0 sp 4 # push ebp 00457013 4 sp 80 # sub esp 50h 00457016 84 sp 4 # push ebx @@ -26777,7 +26780,7 @@ 004572BC 96 sp 4 # push edx 004572C0 100 sp 4 # push 1 004572C2 104 sp 4 # push eax - 004572C3 108 sp -12 # call sub_4E4D90 + 004572C3 108 sp -12 # call Room_cpp_4E4D90 004572FE 96 sp 4 # push esi 004572FF 100 sp 4 # push edi 00457307 104 sp -8 # call dword ptr [eax+1D8h] @@ -27071,7 +27074,7 @@ 00457CB0 32 sp 4 # push 4 00457CB5 36 sp 4 # push eax 00457CB6 40 sp 4 # push ecx - 00457CC0 44 sp -20 # call sub_4E50F0 + 00457CC0 44 sp -20 # call Room_cpp_4E50F0 00457CCD 24 sp 4 # push 0E8h 00457CD6 28 sp 4 # push 8Bh 00457CDB 32 sp 4 # push edx @@ -27098,7 +27101,7 @@ 00457D4A 16 sp -12 # call sub_478B80 00457D54 4 sp -4 # pop esi 00457D55 0 ret 0 -00457D60 sub_457D60 +00457D60 CombatPitState_cpp_457D60 00457D60 0 sp 16 # sub esp 10h 00457D63 16 sp 4 # push ebx 00457D64 20 sp 4 # push esi @@ -27110,7 +27113,7 @@ 00457E00 36 sp 4 # push edx 00457E04 40 sp 4 # push eax 00457E05 44 sp 4 # push ecx - 00457E08 48 sp -20 # call sub_4E50F0 + 00457E08 48 sp -20 # call Room_cpp_4E50F0 00457E16 28 sp 4 # push 155h 00457E21 32 sp 4 # push offset aDDevDk2Project_42 00457E26 36 sp 4 # push edx @@ -27121,7 +27124,7 @@ 00457E61 36 sp 4 # push ecx 00457E65 40 sp 4 # push edx 00457E66 44 sp 4 # push eax - 00457E69 48 sp -20 # call sub_4E50F0 + 00457E69 48 sp -20 # call Room_cpp_4E50F0 00457E8F 28 sp 4 # push 166h 00457E9A 32 sp 4 # push offset aDDevDk2Project_42 00457E9F 36 sp 4 # push edx @@ -27149,7 +27152,7 @@ 00457F35 20 sp -4 # pop ebx 00457F38 16 sp -16 # add esp 10h 00457F3B 0 ret 0 -00457F40 sub_457F40 +00457F40 CombatPitState_cpp_457F40 00457F40 0 sp 24 # sub esp 18h 00457F43 24 sp 4 # push ebx 00457F44 28 sp 4 # push ebp @@ -27359,7 +27362,7 @@ 0045856F 20 sp 4 # push 0 00458575 24 sp 4 # push 1 00458577 28 sp 4 # push edx - 00458578 32 sp -12 # call sub_4E4D90 + 00458578 32 sp -12 # call Room_cpp_4E4D90 0045857D 20 sp 4 # push 0 00458583 24 sp 4 # push 0B4h 00458588 28 sp 4 # push eax @@ -27423,11 +27426,11 @@ 004586F8 104 sp 4 # push eax 004586F9 108 sp -12 # call sub_48BE20 00458718 96 sp 4 # push edx - 00458721 100 sp -4 # call sub_4C63D0 + 00458721 100 sp -4 # call PlayerRooms_cpp_4C63D0 00458732 96 sp 4 # push ebx 00458737 100 sp 4 # push 1 00458739 104 sp 4 # push eax - 0045873A 108 sp -12 # call sub_4E4D90 + 0045873A 108 sp -12 # call Room_cpp_4E4D90 00458763 96 sp 4 # push edi 00458764 100 sp 4 # push esi 00458765 104 sp -8 # call dword ptr [edx+1FCh] @@ -27465,11 +27468,11 @@ 004589C7 88 sp 4 # push esi 004589D1 92 sp 4 # push edi 004589D4 96 sp 4 # push edx - 004589EF 100 sp -4 # call sub_4C63D0 + 004589EF 100 sp -4 # call PlayerRooms_cpp_4C63D0 00458A00 96 sp 4 # push ebx 00458A05 100 sp 4 # push 1 00458A07 104 sp 4 # push eax - 00458A08 108 sp -12 # call sub_4E4D90 + 00458A08 108 sp -12 # call Room_cpp_4E4D90 00458A22 96 sp 4 # push edi 00458A26 100 sp 4 # push esi 00458A27 104 sp -8 # call dword ptr [edx+1FCh] @@ -27578,7 +27581,7 @@ 00458EA6 16 sp -4 # pop ebx 00458EA7 12 sp -12 # add esp 0Ch 00458EAA 0 ret 0 -00458EB0 sub_458EB0 +00458EB0 DisArmTrapState_cpp_458EB0 00458EB0 0 sp 16 # sub esp 10h 00458EB3 16 sp 4 # push esi 00458EB6 20 sp 4 # push edi @@ -27603,7 +27606,7 @@ 00458F59 20 sp -4 # pop esi 00458F5A 16 sp -16 # add esp 10h 00458F5D 0 ret 0 -00458F60 sub_458F60 +00458F60 DisArmTrapState_cpp_458F60 00458F60 0 sp 20 # sub esp 14h 00458F63 20 sp 4 # push ebx 00458F64 24 sp 4 # push ebp @@ -27773,10 +27776,10 @@ 0045959E 48 sp -8 # call sub_476D30 004595B2 40 sp 4 # push ebx 004595B3 44 sp 4 # push eax - 004595B4 48 sp -8 # call sub_48F410 + 004595B4 48 sp -8 # call Creature_cpp_48F410 004595C3 40 sp 4 # push ebx 004595CE 44 sp 4 # push eax - 004595CF 48 sp -8 # call sub_48F410 + 004595CF 48 sp -8 # call Creature_cpp_48F410 004595E8 40 sp 4 # push eax 004595E9 44 sp -4 # call sub_48F690 004595F1 40 sp 4 # push eax @@ -27808,10 +27811,10 @@ 0045970E 48 sp -8 # call sub_476D30 00459722 40 sp 4 # push ebx 00459723 44 sp 4 # push eax - 00459724 48 sp -8 # call sub_48F410 + 00459724 48 sp -8 # call Creature_cpp_48F410 00459733 40 sp 4 # push ebx 0045973E 44 sp 4 # push eax - 0045973F 48 sp -8 # call sub_48F410 + 0045973F 48 sp -8 # call Creature_cpp_48F410 00459758 40 sp 4 # push eax 00459759 44 sp -4 # call sub_48F690 00459761 40 sp 4 # push eax @@ -27872,7 +27875,7 @@ 004599E4 32 sp 4 # push edx 004599E5 36 sp -4 # call dword ptr [eax+1D4h] 00459A99 32 sp 4 # push edx - 00459A9A 36 sp -4 # call sub_4E8430 + 00459A9A 36 sp -4 # call Room_cpp_4E8430 00459ABA 32 sp 4 # push edi 00459B17 36 sp 4 # push edi 00459B1C 40 sp 4 # push edi @@ -28100,7 +28103,7 @@ 0045A27C 8 sp -4 # pop esi 0045A27D 4 sp -4 # pop ebx 0045A280 0 ret 0 -0045A290 sub_45A290 +0045A290 ExploreState_cpp_45A290 0045A290 0 sp 16 # sub esp 10h 0045A293 16 sp 4 # push ebx 0045A294 20 sp 4 # push ebp @@ -28142,7 +28145,7 @@ 0045A3D6 20 sp -4 # pop ebx 0045A3D7 16 sp -16 # add esp 10h 0045A3DA 0 ret 0 -0045A3E0 sub_45A3E0 +0045A3E0 ExploreState_cpp_45A3E0 0045A3E0 0 sp 24 # sub esp 18h 0045A3E3 24 sp 4 # push ebx 0045A3E8 28 sp 4 # push ebp @@ -29607,7 +29610,7 @@ 004611C5 8 sp -4 # pop esi 004611C6 4 sp -4 # pop ecx 004611C7 0 ret 0 -004611D0 sub_4611D0 +004611D0 FightWithDrawState_cpp_4611D0 004611D0 0 sp 44 # sub esp 2Ch 004611D3 44 sp 4 # push ebx 004611D4 48 sp 4 # push ebp @@ -29619,7 +29622,7 @@ 0046126B 72 sp -12 # call sub_4D0E60 004612E3 60 sp 4 # push edx 004612E4 64 sp 4 # push 5 - 004612E6 68 sp -8 # call sub_4C6460 + 004612E6 68 sp -8 # call PlayerRooms_cpp_4C6460 004612F6 60 sp 4 # push 3Ch 004612FD 64 sp 4 # push offset aDDevDk2Project_5 00461302 68 sp 4 # push eax @@ -29635,13 +29638,13 @@ 004613A4 68 sp 4 # push eax 004613AB 72 sp -12 # call sub_4D0E60 004613DD 60 sp 4 # push edx - 004613E3 64 sp -4 # call sub_4C63D0 + 004613E3 64 sp -4 # call PlayerRooms_cpp_4C63D0 00461443 60 sp 4 # push ecx 00461444 64 sp 4 # push edx 00461445 68 sp 4 # push eax 0046144C 72 sp -12 # call sub_4D0E60 0046146E 60 sp 4 # push eax - 00461472 64 sp -4 # call sub_4C63D0 + 00461472 64 sp -4 # call PlayerRooms_cpp_4C63D0 004614DE 60 sp 4 # push 63h 004614E6 64 sp 4 # push offset aDDevDk2Project_5 004614EB 68 sp 4 # push ecx @@ -29820,7 +29823,7 @@ 00461B68 0 ret 0 00461B6B 16 sp 4 # push 0Ah 00461B7D 20 sp 4 # push eax - 00461B80 24 sp -8 # call sub_461BB0 + 00461B80 24 sp -8 # call GoodState_cpp_461BB0 00461B89 16 sp 4 # push 80h 00461B92 20 sp 4 # push 10Ah 00461B97 24 sp 4 # push ecx @@ -29828,7 +29831,7 @@ 00461BA4 16 sp -4 # pop esi 00461BA5 12 sp -12 # add esp 0Ch 00461BA8 0 ret 0 -00461BB0 sub_461BB0 +00461BB0 GoodState_cpp_461BB0 00461BB0 0 sp 32 # sub esp 20h 00461BB6 32 sp 4 # push ebx 00461BBE 36 sp 4 # push ebp @@ -29879,7 +29882,7 @@ 00461EB4 36 sp -4 # pop ebx 00461ECE 32 sp -32 # add esp 20h 00461ED1 0 ret -8 -00461F00 sub_461F00 +00461F00 GoodState_cpp_461F00 00461F00 0 sp 20 # sub esp 14h 00461F03 20 sp 4 # push ebx 00461F04 24 sp 4 # push ebp @@ -29924,7 +29927,7 @@ 0046211E 12 sp -8 # call sub_476D30 00462128 4 sp -4 # pop esi 00462129 0 ret 0 -00462130 sub_462130 +00462130 GoodState_cpp_462130 00462130 0 sp 20 # sub esp 14h 00462133 20 sp 4 # push ebx 00462136 24 sp 4 # push ebp @@ -30013,7 +30016,7 @@ 00462526 24 sp 4 # push 0 0046252C 28 sp 4 # push 0 0046252E 32 sp 4 # push ecx - 00462531 36 sp -12 # call sub_4E4D90 + 00462531 36 sp -12 # call Room_cpp_4E4D90 00462536 24 sp 4 # push 1 0046253C 28 sp 4 # push 0B2h 00462541 32 sp 4 # push edx @@ -30026,7 +30029,7 @@ 0046255B 20 sp -4 # pop esi 0046255C 16 sp -16 # add esp 10h 0046255F 0 ret 0 -00462560 sub_462560 +00462560 GoodState_cpp_462560 00462560 0 sp 20 # sub esp 14h 00462563 20 sp 4 # push ebx 00462564 24 sp 4 # push esi @@ -30141,7 +30144,7 @@ 0046292C 8 sp -4 # pop esi 0046292D 4 sp -4 # pop ecx 0046292E 0 ret 0 -00462930 sub_462930 +00462930 GuardState_cpp_462930 00462930 0 sp 44 # sub esp 2Ch 00462933 44 sp 4 # push ebx 00462934 48 sp 4 # push ebp @@ -30250,7 +30253,7 @@ 00462CF0 8 sp -4 # pop ebx 00462CF1 4 sp -4 # pop ecx 00462CF2 0 ret -8 -00462D00 sub_462D00 +00462D00 GuardState_cpp_462D00 00462D00 0 sp 28 # sub esp 1Ch 00462D03 28 sp 4 # push ebx 00462D04 32 sp 4 # push ebp @@ -30382,7 +30385,7 @@ 00463187 0 ret 0 0046318D 4 sp -4 # pop esi 0046318E 0 ret 0 -00463190 sub_463190 +00463190 GuardState_cpp_463190 00463190 0 sp 4 # push ebx 00463191 4 sp 4 # push ebp 00463192 8 sp 4 # push esi @@ -30411,7 +30414,7 @@ 00463293 8 sp -4 pop_bp 0 00463296 4 sp -4 # pop ebx 00463297 0 ret 0 -004632A0 sub_4632A0 +004632A0 GuardState_cpp_4632A0 004632A0 0 sp 12 # sub esp 0Ch 004632A3 12 sp 4 # push ebx 004632A4 16 sp 4 # push esi @@ -30426,7 +30429,7 @@ 004632F4 32 sp 4 # push 0 00463300 36 sp 4 # push 1 00463302 40 sp 4 # push edx - 00463305 44 sp -12 # call sub_4E4D90 + 00463305 44 sp -12 # call Room_cpp_4E4D90 0046330A 32 sp 4 # push eax 0046330D 36 sp -12 # call sub_471890 00463316 24 sp -4 # pop edi @@ -30658,7 +30661,7 @@ 00463BCF 12 sp -4 # pop ebx 00463BD0 8 sp -8 # add esp 8 00463BD3 0 ret 0 -00463BE0 sub_463BE0 +00463BE0 HungerState_cpp_463BE0 00463BE0 0 sp 44 # sub esp 2Ch 00463BE3 44 sp 4 # push ebx 00463BE4 48 sp 4 # push ebp @@ -30673,7 +30676,7 @@ 00463C13 60 sp 4 # push edi 00463C18 64 sp 4 # push 1 00463C1A 68 sp 4 # push eax - 00463C1B 72 sp -12 # call sub_4E4D90 + 00463C1B 72 sp -12 # call Room_cpp_4E4D90 00463C24 60 sp 4 # push 80h 00463C29 64 sp 4 # push 60h 00463C2B 68 sp 4 # push ecx @@ -30716,7 +30719,7 @@ 00463DE7 0 ret 0 00463DEA 4 sp -4 # pop esi 00463DEB 0 ret 0 -00463DF0 sub_463DF0 +00463DF0 ImpState_cpp_463DF0 00463DF0 0 sp 4 # push ecx 00463DF1 4 sp 4 # push ebx 00463DF2 8 sp 4 # push ebp @@ -30822,7 +30825,7 @@ 0046403D 28 sp 4 # push eax 0046403E 32 sp 16 # sub esp 10h 00464047 48 sp 16 # sub esp 10h - 0046406B 64 sp -44 # call sub_468D10 + 0046406B 64 sp -44 # call ImpUtils_cpp_468D10 00464085 20 sp -4 # pop edi 00464086 16 sp -4 # pop esi 00464087 12 sp -4 pop_bp 0 @@ -30837,7 +30840,7 @@ 004640CE 28 sp 4 # push eax 004640CF 32 sp 16 # sub esp 10h 004640D8 48 sp 16 # sub esp 10h - 004640FC 64 sp -44 # call sub_468D10 + 004640FC 64 sp -44 # call ImpUtils_cpp_468D10 0046410A 20 sp -4 # pop edi 0046410B 16 sp -4 # pop esi 0046410C 12 sp -4 pop_bp 0 @@ -30889,7 +30892,7 @@ 00464230 8 sp -4 # pop ebx 00464231 4 sp -4 # pop ecx 00464232 0 ret 0 -00464240 sub_464240 +00464240 ImpState_cpp_464240 00464240 0 sp 4 # push esi 00464261 4 sp -4 # pop esi 00464262 0 ret 0 @@ -30938,7 +30941,7 @@ 004643E7 0 ret -4 004643EF 4 sp -4 # pop esi 004643F0 0 ret -4 -00464400 sub_464400 +00464400 ImpState_cpp_464400 00464400 0 sp 4 # push ebp 00464403 4 sp 72 # sub esp 48h 00464406 76 sp 4 # push ebx @@ -30992,7 +30995,7 @@ 0046462C 88 sp 4 # push 0 00464631 92 sp 4 # push 1 00464633 96 sp 4 # push eax - 00464634 100 sp -12 # call sub_4E4D90 + 00464634 100 sp -12 # call Room_cpp_4E4D90 00464668 88 sp 4 # push edx 00464672 92 sp 4 # push edx 00464673 96 sp -8 # call dword ptr [eax+1D8h] @@ -32163,7 +32166,7 @@ 00466B55 12 sp 4 # push edi 00466B56 16 sp 4 # push ecx 00466B5A 20 sp 4 # push edx - 00466B5D 24 sp -12 # call sub_4F3C60 + 00466B5D 24 sp -12 # call Treasure_cpp_4F3C60 00466B65 12 sp 4 # push edi 00466B66 16 sp -4 # call sub_48AF50 00466B6E 12 sp 4 # push 1 @@ -32608,7 +32611,7 @@ 00467903 40 sp 4 # push eax 00467904 44 sp -4 # call dword ptr [edx+1D4h] 004679DE 40 sp 4 # push edx - 004679DF 44 sp -4 # call sub_4E6A20 + 004679DF 44 sp -4 # call Room_cpp_4E6A20 004679EC 40 sp 4 # push 1 004679F3 44 sp 4 # push 0E8h 004679FD 48 sp 4 # push 29h @@ -32672,9 +32675,9 @@ 00467BE9 68 sp 4 # push eax 00467BEA 72 sp -24 # call sub_4C6610 00467C22 48 sp 4 # push edx - 00467C23 52 sp -4 # call sub_4E6A20 + 00467C23 52 sp -4 # call Room_cpp_4E6A20 00467C7B 48 sp 4 # push edx - 00467C7C 52 sp -4 # call sub_4E6A20 + 00467C7C 52 sp -4 # call Room_cpp_4E6A20 00467CA6 48 sp 4 # push 0 00467CA8 52 sp 4 # push 0E8h 00467CB1 56 sp 4 # push 29h @@ -32876,7 +32879,7 @@ 004682B8 24 sp 4 # push eax 004682B9 28 sp -8 # call dword ptr [edx+1D8h] 004682D8 20 sp 4 # push ecx - 004682DB 24 sp -4 # call sub_4E8430 + 004682DB 24 sp -4 # call Room_cpp_4E8430 004682E4 20 sp 4 # push 1 004682E6 24 sp 4 # push 0ECh 004682EF 28 sp 4 # push 30h @@ -32972,7 +32975,7 @@ 00468570 40 sp 4 # push eax 00468571 44 sp 16 # sub esp 10h 0046857A 60 sp 16 # sub esp 10h - 004685A4 76 sp -44 # call sub_468D10 + 004685A4 76 sp -44 # call ImpUtils_cpp_468D10 004685AB 32 sp -4 # pop edi 004685AC 28 sp -4 # pop esi 004685AD 24 sp -4 pop_bp 0 @@ -32984,7 +32987,7 @@ 004685C6 40 sp 4 # push eax 004685C7 44 sp 16 # sub esp 10h 004685D1 60 sp 16 # sub esp 10h - 004685FB 76 sp -44 # call sub_468D10 + 004685FB 76 sp -44 # call ImpUtils_cpp_468D10 00468602 32 sp -4 # pop edi 00468603 28 sp -4 # pop esi 00468604 24 sp -4 pop_bp 0 @@ -33004,7 +33007,7 @@ 0046864A 40 sp 4 # push eax 0046864B 44 sp 16 # sub esp 10h 00468655 60 sp 16 # sub esp 10h - 0046867F 76 sp -44 # call sub_468D10 + 0046867F 76 sp -44 # call ImpUtils_cpp_468D10 00468686 32 sp -4 # pop edi 00468687 28 sp -4 # pop esi 00468688 24 sp -4 pop_bp 0 @@ -33016,7 +33019,7 @@ 004686A1 40 sp 4 # push eax 004686A2 44 sp 16 # sub esp 10h 004686AC 60 sp 16 # sub esp 10h - 004686D6 76 sp -44 # call sub_468D10 + 004686D6 76 sp -44 # call ImpUtils_cpp_468D10 004686DD 32 sp -4 # pop edi 004686DE 28 sp -4 # pop esi 004686DF 24 sp -4 pop_bp 0 @@ -33202,7 +33205,7 @@ 00468D03 84 sp -80 mov_sp_bp 0 00468D05 4 sp -4 pop_bp 0 00468D06 0 ret -4 -00468D10 sub_468D10 +00468D10 ImpUtils_cpp_468D10 00468D10 0 sp 64 # sub esp 40h 00468D13 64 sp 4 # push ebx 00468D14 68 sp 4 # push ebp @@ -34581,7 +34584,7 @@ 0046D037 140 sp 4 # push eax 0046D04A 144 sp 4 # push edx 0046D04B 148 sp 4 # push 0Eh - 0046D04D 152 sp -12 # call sub_4C6860 + 0046D04D 152 sp -12 # call PlayerRooms_cpp_4C6860 0046D059 140 sp 4 # push 0Eh 0046D05B 144 sp -4 # call sub_4BAB20 0046D082 140 sp 4 # push eax @@ -34685,7 +34688,7 @@ 0046D48F 140 sp 4 # push eax 0046D49E 144 sp 4 # push edx 0046D49F 148 sp 4 # push 0Eh - 0046D4A8 152 sp -12 # call sub_4C6860 + 0046D4A8 152 sp -12 # call PlayerRooms_cpp_4C6860 0046D4C7 140 sp 4 # push ecx 0046D4CB 144 sp 4 # push edx 0046D4CF 148 sp 4 # push 0Ch @@ -35058,7 +35061,7 @@ 0046E574 44 sp 4 # push ecx 0046E578 48 sp -24 # call sub_4C6610 0046E58A 24 sp 4 # push ecx - 0046E58F 28 sp -4 # call sub_4E8430 + 0046E58F 28 sp -4 # call Room_cpp_4E8430 0046E59C 24 sp 4 # push 1 0046E59E 28 sp 4 # push 0E8h 0046E5A7 32 sp 4 # push edi @@ -35098,7 +35101,7 @@ 0046E716 48 sp 4 # push eax 0046E717 52 sp -24 # call sub_4C6610 0046E728 28 sp 4 # push eax - 0046E729 32 sp -4 # call sub_4E8430 + 0046E729 32 sp -4 # call Room_cpp_4E8430 0046E738 28 sp 4 # push 1 0046E73A 32 sp 4 # push 0E0h 0046E743 36 sp 4 # push 2Dh @@ -35202,7 +35205,7 @@ 0046EA96 16 sp -4 # pop esi 0046EAA6 12 sp -12 # add esp 0Ch 0046EAA9 0 ret 0 -0046EAB0 sub_46EAB0 +0046EAB0 KeeperState_cpp_46EAB0 0046EAB0 0 sp 4 # push ebp 0046EAB3 4 sp 4 # push 0FFFFFFFFh 0046EAB5 8 sp 4 # push offset SEH_46EAB0 @@ -35425,7 +35428,7 @@ 0046F4D9 24 sp -20 # call sub_4C4600 0046F4E0 4 sp -4 # pop esi 0046F4E1 0 ret 0 -0046F4F0 sub_46F4F0 +0046F4F0 LairState_cpp_46F4F0 0046F4F0 0 sp 12 # sub esp 0Ch 0046F4F3 12 sp 4 # push ebx 0046F4F4 16 sp 4 # push esi @@ -35636,7 +35639,7 @@ 0046FB88 56 sp 4 # push 0 0046FB8A 60 sp -4 # call unknown_libname_3 0046FB8F 56 sp 4 # push ebp - 0046FB9D 60 sp -16 # call sub_4B37D0 + 0046FB9D 60 sp -16 # call RenderInfo_cpp_4B37D0 0046FBB1 44 sp 4 # push edx 0046FBBC 48 sp -4 # call sub_43D730 0046FBD2 44 sp 4 # push eax @@ -35709,21 +35712,21 @@ 0046FF10 56 sp 4 # push 0 0046FF12 60 sp -4 # call unknown_libname_3 0046FF17 56 sp 4 # push ebp - 0046FF29 60 sp -16 # call sub_4B37D0 + 0046FF29 60 sp -16 # call RenderInfo_cpp_4B37D0 0046FF83 44 sp 4 # push 1 0046FF85 48 sp 4 # push 0 0046FF87 52 sp 4 # push ecx 0046FF8E 56 sp 4 # push 0 0046FF90 60 sp -4 # call unknown_libname_3 0046FF95 56 sp 4 # push ebp - 0046FFA7 60 sp -16 # call sub_4B37D0 + 0046FFA7 60 sp -16 # call RenderInfo_cpp_4B37D0 0046FFC3 44 sp 4 # push 1 0046FFCB 48 sp -4 # call sub_494860 0046FFD9 44 sp 4 # push 0 0046FFDB 48 sp 4 # push 0 0046FFDD 52 sp 4 # push ecx 0046FFE1 56 sp 4 # push eax - 0046FFED 60 sp -16 # call sub_4B37D0 + 0046FFED 60 sp -16 # call RenderInfo_cpp_4B37D0 00470050 44 sp 4 # push edx 00470051 48 sp -4 # call sub_4B5560 00470056 44 sp 4 # push 0 @@ -35761,7 +35764,7 @@ 00470104 8 sp -4 # pop esi 00470105 4 sp -4 # pop ecx 00470106 0 ret 0 -00470110 sub_470110 +00470110 ManufactureState_cpp_470110 00470110 0 sp 44 # sub esp 2Ch 00470113 44 sp 4 # push ebx 00470114 48 sp 4 # push ebp @@ -35833,7 +35836,7 @@ 00470462 48 sp -4 # pop ebx 00470463 44 sp -44 # add esp 2Ch 00470466 0 ret 0 -00470470 sub_470470 +00470470 ManufactureState_cpp_470470 00470470 0 sp 20 # sub esp 14h 00470473 20 sp 4 # push esi 004704A3 24 sp 4 # push edi @@ -36017,7 +36020,7 @@ 00470B17 36 sp -4 # pop ebx 00470B18 32 sp -32 # add esp 20h 00470B1B 0 ret 0 -00470B20 sub_470B20 +00470B20 ManufactureState_cpp_470B20 00470B20 0 sp 4 # push esi 00470B40 4 sp 4 # push 8 00470B48 8 sp -4 # call sub_494860 @@ -36391,7 +36394,7 @@ 00471ACF 12 sp -12 # add esp 0Ch 00471AD2 0 ret -12 00471ADB 28 sp 4 # push edx - 00471AE8 32 sp -4 # call sub_4E4C10 + 00471AE8 32 sp -4 # call Room_cpp_4E4C10 00471AFC 28 sp 4 # push eax 00471AFD 32 sp -4 # call sub_4B35C0 00471B15 28 sp 4 # push ebx @@ -36488,7 +36491,7 @@ 00471E9B 8 sp -8 # call sub_476D30 00471EA9 0 ret 0 00471EAC 0 ret 0 -00471EB0 sub_471EB0 +00471EB0 PatrolState_cpp_471EB0 00471EB0 0 sp 36 # sub esp 24h 00471EB3 36 sp 4 # push ebx 00471EB4 40 sp 4 # push ebp @@ -36556,7 +36559,7 @@ 004721B2 8 sp -4 # pop edi 004721B5 4 sp -4 # pop esi 004721B6 0 ret 0 -004721C0 sub_4721C0 +004721C0 PatrolState_cpp_4721C0 004721C0 0 sp 28 # sub esp 1Ch 004721C3 28 sp 4 # push ebx 004721C6 32 sp 4 # push esi @@ -36601,7 +36604,7 @@ 0047237E 0 ret 0 00472386 4 sp -4 # pop esi 00472387 0 ret 0 -00472390 sub_472390 +00472390 PayState_cpp_472390 00472390 0 sp 4 # push ebp 00472393 4 sp 48 # sub esp 30h 00472396 52 sp 4 # push ebx @@ -36623,7 +36626,7 @@ 004724E6 64 sp 4 # push 0 004724EB 68 sp 4 # push 1 004724ED 72 sp 4 # push eax - 004724EE 76 sp -12 # call sub_4E4D90 + 004724EE 76 sp -12 # call Room_cpp_4E4D90 00472522 64 sp 4 # push edx 0047252C 68 sp 4 # push edx 0047252D 72 sp -8 # call dword ptr [eax+1D8h] @@ -36823,7 +36826,7 @@ 00472AB2 4 sp 4 # push 65h 00472AB4 8 sp -8 # call sub_476D30 00472ABE 0 ret 0 -00472AC0 sub_472AC0 +00472AC0 PrayState_cpp_472AC0 00472AC0 0 sp 20 # sub esp 14h 00472AC3 20 sp 4 # push ebx 00472AC4 24 sp 4 # push ebp @@ -36836,7 +36839,7 @@ 00472B55 44 sp 4 # push edx 00472B59 48 sp 4 # push eax 00472B5A 52 sp 4 # push ecx - 00472B5D 56 sp -20 # call sub_4E50F0 + 00472B5D 56 sp -20 # call Room_cpp_4E50F0 00472B6B 36 sp 4 # push 96h 00472B76 40 sp 4 # push offset aDDevDk2Project_52 00472B7B 44 sp 4 # push ecx @@ -36847,7 +36850,7 @@ 00472BBD 44 sp 4 # push edx 00472BC1 48 sp 4 # push eax 00472BC2 52 sp 4 # push ecx - 00472BC5 56 sp -20 # call sub_4E50F0 + 00472BC5 56 sp -20 # call Room_cpp_4E50F0 00472C37 36 sp 4 # push edx 00472C38 40 sp 4 # push esi 00472C5E 44 sp -8 # add esp 8 @@ -36894,7 +36897,7 @@ 00472D29 24 sp -4 # pop ebx 00472D2A 20 sp -20 # add esp 14h 00472D2D 0 ret 0 -00472D30 sub_472D30 +00472D30 PrayState_cpp_472D30 00472D30 0 sp 24 # sub esp 18h 00472D33 24 sp 4 # push ebx 00472D34 28 sp 4 # push ebp @@ -36978,7 +36981,7 @@ 0047308D 64 sp 4 # push edx 0047308E 68 sp -20 # call dword ptr [eax+38Ch] 0047309A 48 sp 4 # push eax - 004730A7 52 sp -4 # call sub_4E8430 + 004730A7 52 sp -4 # call Room_cpp_4E8430 004730B0 48 sp 4 # push 80h 004730B9 52 sp 4 # push 1 004730BB 56 sp 4 # push ecx @@ -37058,7 +37061,7 @@ 004732E0 40 sp 4 # push 4 004732E2 44 sp 4 # push edx 004732FB 48 sp 4 # push ecx - 00473303 52 sp -20 # call sub_4E50F0 + 00473303 52 sp -20 # call Room_cpp_4E50F0 0047330F 32 sp 4 # push edx 00473312 36 sp -4 # call dword ptr [eax+1D4h] 00473323 32 sp 4 # push 80h @@ -37074,7 +37077,7 @@ 00473349 20 sp -4 # pop ebx 0047334A 16 sp -16 # add esp 10h 0047334D 0 ret 0 -00473350 sub_473350 +00473350 PrisonState_cpp_473350 00473350 0 sp 4 # push ebp 00473353 4 sp 4 # push 0FFFFFFFFh 00473355 8 sp 4 # push offset SEH_473350 @@ -37240,7 +37243,7 @@ 004739C0 sub_4739C0 004739D8 0 ret 0 004739DB 0 ret 0 -004739E0 sub_4739E0 +004739E0 PrisonState_cpp_4739E0 004739E0 0 sp 24 # sub esp 18h 004739E3 24 sp 4 # push ebx 004739E4 28 sp 4 # push ebp @@ -37254,7 +37257,7 @@ 00473A41 44 sp 4 # push eax 00473A57 48 sp -8 # call sub_4E3270 00473A74 40 sp 4 # push ecx - 00473A86 44 sp -4 # call sub_4E8430 + 00473A86 44 sp -4 # call Room_cpp_4E8430 00473A93 40 sp 4 # push 6Ch 00473A99 44 sp 4 # push 79h 00473A9B 48 sp 4 # push edx @@ -37379,7 +37382,7 @@ 00473DAB 52 sp 4 # push ebx 00473DB0 56 sp 4 # push ecx 00473DB1 60 sp 4 # push 1 - 00473DB5 64 sp -12 # call sub_4E2E70 + 00473DB5 64 sp -12 # call Prison_cpp_4E2E70 00473DBA 52 sp 4 # push ebx 00473DBB 56 sp 4 # push 1 00473DBF 60 sp -8 # call sub_476D30 @@ -37678,7 +37681,7 @@ 004748CE 8 sp -4 # pop edi 004748D4 4 sp -4 # pop esi 004748D5 0 ret 0 -004748E0 sub_4748E0 +004748E0 ReaperState_cpp_4748E0 004748E0 0 sp 4 # push esi 004748E3 4 sp 4 # push 1 004748E8 8 sp -4 # call sub_48DF10 @@ -37701,7 +37704,7 @@ 0047494E 12 sp -8 # call sub_476D30 00474958 4 sp -4 # pop esi 00474959 0 ret 0 -00474960 sub_474960 +00474960 ReaperState_cpp_474960 00474960 0 sp 16 # sub esp 10h 00474963 16 sp 4 # push ebx 00474964 20 sp 4 # push esi @@ -37738,7 +37741,7 @@ 00474A23 44 sp -16 # add esp 10h 00474A3C 28 sp 4 # push edx 00474A3D 32 sp 4 # push eax - 00474A3E 36 sp -8 # call sub_480A00 + 00474A3E 36 sp -8 # call StateUtils_cpp_480A00 00474A72 28 sp 4 # push 21Ch 00474A7D 32 sp 4 # push offset aDDevDk2Project_53 00474A82 36 sp 4 # push edx @@ -37756,7 +37759,7 @@ 00474AE7 20 sp -4 # pop ebx 00474AE8 16 sp -16 # add esp 10h 00474AEB 0 ret 0 -00474AF0 sub_474AF0 +00474AF0 ReaperState_cpp_474AF0 00474AF0 0 sp 8 # sub esp 8 00474AF3 8 sp 4 # push esi 00474AF6 12 sp 4 # push edi @@ -38024,7 +38027,7 @@ 004753D5 64 sp 4 # push ebx 004753D9 68 sp 4 # push ebx 004753DA 72 sp 4 # push ecx - 004753DD 76 sp -12 # call sub_4E4D90 + 004753DD 76 sp -12 # call Room_cpp_4E4D90 00475406 64 sp 4 # push ebx 00475407 68 sp 4 # push 0C7h 0047540E 72 sp -8 # call sub_476D30 @@ -38157,7 +38160,7 @@ 00475A18 8 sp -4 # pop esi 00475A19 4 sp -4 # pop ecx 00475A1A 0 ret 0 -00475A20 sub_475A20 +00475A20 ResearchState_cpp_475A20 00475A20 0 sp 32 # sub esp 20h 00475A23 32 sp 4 # push ebx 00475A24 36 sp 4 # push ebp @@ -38172,7 +38175,7 @@ 00475A83 48 sp 4 # push edx 00475A8F 52 sp 4 # push edx 00475A90 56 sp 4 # push eax - 00475AB4 60 sp -12 # call sub_4E1ED0 + 00475AB4 60 sp -12 # call Library_cpp_4E1ED0 00475AEA 48 sp 4 # push edx 00475AEB 52 sp 4 # push eax 00475AEE 56 sp -4 # call dword ptr [edx+1D4h] @@ -38221,7 +38224,7 @@ 00475CD0 0 ret 0 00475CE0 sub_475CE0 00475D10 0 ret -8 -00475D20 sub_475D20 +00475D20 ResearchState_cpp_475D20 00475D20 0 sp 20 # sub esp 14h 00475D23 20 sp 4 # push esi 00475D53 24 sp 4 # push edi @@ -38302,7 +38305,7 @@ 00475F99 44 sp 4 # push eax 00475F9A 48 sp 4 # push ecx 00475F9B 52 sp 4 # push edx - 00475FAE 56 sp -12 # call sub_4E1ED0 + 00475FAE 56 sp -12 # call Library_cpp_4E1ED0 00475FB8 44 sp 4 # push ebx 00475FB9 48 sp 4 # push 35h 00475FBD 52 sp -8 # call sub_476D30 @@ -38377,7 +38380,7 @@ 004761EB 36 sp -4 # pop esi 004761EC 32 sp -32 # add esp 20h 004761EF 0 ret 0 -004761F0 sub_4761F0 +004761F0 ResearchState_cpp_4761F0 004761F0 0 sp 4 # push esi 00476210 4 sp 4 # push 8 00476218 8 sp -4 # call sub_494860 @@ -38421,7 +38424,7 @@ 004762F2 24 sp 4 # push eax 004762F7 28 sp 4 # push 1 00476300 32 sp 4 # push eax - 00476301 36 sp -12 # call sub_4E4D90 + 00476301 36 sp -12 # call Room_cpp_4E4D90 00476306 24 sp 4 # push eax 00476309 28 sp -12 # call sub_471890 00476313 16 sp -4 # pop esi @@ -38444,7 +38447,7 @@ 0047637B 0 ret 0 00476381 4 sp -4 # pop esi 00476382 0 ret 0 -00476390 sub_476390 +00476390 RunAway_cpp_476390 00476390 0 sp 24 # sub esp 18h 00476393 24 sp 4 # push ebx 00476394 28 sp 4 # push ebp @@ -38483,7 +38486,7 @@ 00476499 28 sp -4 # pop ebx 0047649A 24 sp -24 # add esp 18h 0047649D 0 ret 0 -004764A0 sub_4764A0 +004764A0 RunAway_cpp_4764A0 004764A0 0 sp 40 # sub esp 28h 004764A3 40 sp 4 # push ebx 004764A4 44 sp 4 # push ebp @@ -38833,9 +38836,9 @@ 004776A8 0 ret 0 004776AE 4 sp -4 # pop esi 004776AF 0 ret 0 -004776B0 sub_4776B0 +004776B0 j_State_cpp_4776C0 004776B0 0 jmp 004776C0 -004776C0 sub_4776C0 +004776C0 State_cpp_4776C0 004776C0 0 sp 4 # push ecx 004776C1 4 sp 4 # push esi 004776D5 8 sp 4 # push 401h @@ -39052,7 +39055,7 @@ 004780B1 0 ret 0 004780C0 CompareFunction 004780D3 0 ret 0 -004780E0 sub_4780E0 +004780E0 State_cpp_4780E0 004780E0 0 sp 48 # sub esp 30h 004780E3 48 sp 4 # push ebx 004780E4 52 sp 4 # push ebp @@ -39100,7 +39103,7 @@ 004782B5 48 sp -48 # add esp 30h 004782B8 0 ret 0 004782BD 64 jmp 00478276 -004782C0 sub_4782C0 +004782C0 State_cpp_4782C0 004782C0 0 sp 36 # sub esp 24h 004782C3 36 sp 4 # push ebx 004782C4 40 sp 4 # push ebp @@ -39156,7 +39159,7 @@ 004784B2 36 sp -36 # add esp 24h 004784B5 0 ret 0 004784BA 52 jmp 00478491 -004784C0 sub_4784C0 +004784C0 State_cpp_4784C0 004784C0 0 sp 48 # sub esp 30h 004784C3 48 sp 4 # push ebx 004784C4 52 sp 4 # push ebp @@ -39206,7 +39209,7 @@ 00478672 48 sp -48 # add esp 30h 00478675 0 ret 0 0047867A 64 jmp 00478651 -00478680 sub_478680 +00478680 State_cpp_478680 00478680 0 sp 24 # sub esp 18h 00478683 24 sp 4 # push esi 00478684 28 sp 4 # push edi @@ -39236,7 +39239,7 @@ 00478714 0 ret 0 0047871C 32 sp 4 # push eax 0047871D 36 sp 4 # push 5 - 00478722 40 sp -8 # call sub_4C6460 + 00478722 40 sp -8 # call PlayerRooms_cpp_4C6460 00478732 32 sp 4 # push 834h 0047873D 36 sp 4 # push offset aDDevDk2Project_12 00478742 40 sp 4 # push edx @@ -39398,7 +39401,7 @@ 00478FAE 28 sp 4 # push 0 00478FB0 32 sp 4 # push ecx 00478FB4 36 sp 4 # push eax - 00478FC0 40 sp -16 # call sub_4B37D0 + 00478FC0 40 sp -16 # call RenderInfo_cpp_4B37D0 00478FCF 24 sp 4 # push 0 00478FD5 28 sp 4 # push 0 00478FD7 32 sp 4 # push ecx @@ -39791,7 +39794,7 @@ 0047AA46 8 sp 4 # push ecx 0047AA49 12 sp -4 # call sub_4E7F80 0047AA57 8 sp 4 # push edx - 0047AA5F 12 sp -4 # call sub_4E5A70 + 0047AA5F 12 sp -4 # call Room_cpp_4E5A70 0047AA64 8 sp -4 # pop edi 0047AA65 4 sp -4 # pop esi 0047AA66 0 ret 0 @@ -39830,7 +39833,7 @@ 0047AB5E 8 sp 4 # push ecx 0047AB61 12 sp -4 # call sub_4E7F80 0047AB6F 8 sp 4 # push edx - 0047AB77 12 sp -4 # call sub_4E5A70 + 0047AB77 12 sp -4 # call Room_cpp_4E5A70 0047AB7C 8 sp -4 # pop edi 0047AB7D 4 sp -4 # pop esi 0047AB7E 0 ret 0 @@ -39878,7 +39881,7 @@ 0047AD48 12 sp 4 # push ecx 0047AD4B 16 sp -4 # call sub_4E7F80 0047AD59 12 sp 4 # push edx - 0047AD61 16 sp -4 # call sub_4E5A70 + 0047AD61 16 sp -4 # call Room_cpp_4E5A70 0047AD66 12 sp -4 # pop edi 0047AD67 8 sp -4 # pop esi 0047AD68 4 sp -4 # pop ebx @@ -39887,7 +39890,7 @@ 0047AD6B 8 sp -4 # pop esi 0047AD6E 4 sp -4 # pop ebx 0047AD6F 0 ret 0 -0047AD70 sub_47AD70 +0047AD70 StateGroup_cpp_47AD70 0047AD70 0 sp 4 # push ebx 0047AD71 4 sp 4 # push esi 0047AD74 8 sp 4 # push edi @@ -39954,7 +39957,7 @@ 0047AFDA 8 sp 4 # push ecx 0047AFDD 12 sp -4 # call sub_4E7F80 0047AFEB 8 sp 4 # push edx - 0047AFF3 12 sp -4 # call sub_4E5A70 + 0047AFF3 12 sp -4 # call Room_cpp_4E5A70 0047AFF8 8 sp -4 # pop edi 0047AFF9 4 sp -4 # pop esi 0047AFFA 0 ret 0 @@ -39980,7 +39983,7 @@ 0047B0F7 8 sp 4 # push ecx 0047B0FA 12 sp -4 # call sub_4E7F80 0047B108 8 sp 4 # push edx - 0047B110 12 sp -4 # call sub_4E5A70 + 0047B110 12 sp -4 # call Room_cpp_4E5A70 0047B115 8 sp -4 # pop edi 0047B116 4 sp -4 # pop esi 0047B117 0 ret 0 @@ -40028,7 +40031,7 @@ 0047B29E 8 sp 4 # push ecx 0047B2A1 12 sp -4 # call sub_4E7F80 0047B2AF 8 sp 4 # push edx - 0047B2B7 12 sp -4 # call sub_4E5A70 + 0047B2B7 12 sp -4 # call Room_cpp_4E5A70 0047B2BC 8 sp -4 # pop edi 0047B2BD 4 sp -4 # pop esi 0047B2BE 0 ret 0 @@ -40077,7 +40080,7 @@ 0047B45A 8 sp 4 # push ecx 0047B45D 12 sp -4 # call sub_4E7F80 0047B46B 8 sp 4 # push edx - 0047B473 12 sp -4 # call sub_4E5A70 + 0047B473 12 sp -4 # call Room_cpp_4E5A70 0047B490 8 sp -4 # pop edi 0047B491 4 sp -4 # pop esi 0047B492 0 ret 0 @@ -40104,7 +40107,7 @@ 0047B58B 12 sp -4 # pop esi 0047B58C 8 sp -8 # add esp 8 0047B58F 0 ret 0 -0047B590 sub_47B590 +0047B590 StateGroup_cpp_47B590 0047B590 0 sp 4 # push ecx 0047B591 4 sp 4 # push ebx 0047B592 8 sp 4 # push esi @@ -40120,7 +40123,7 @@ 0047B615 24 sp 4 # push 5 0047B617 28 sp -12 # call sub_478B80 0047B64A 16 sp 4 # push ecx - 0047B64D 20 sp -4 # call sub_4F2370 + 0047B64D 20 sp -4 # call Tourture_cpp_4F2370 0047B657 16 sp -4 # pop edi 0047B658 12 sp -4 # pop esi 0047B659 8 sp -4 # pop ebx @@ -40156,7 +40159,7 @@ 0047B76A 8 sp 4 # push ecx 0047B76D 12 sp -4 # call sub_4E7F80 0047B77B 8 sp 4 # push edx - 0047B783 12 sp -4 # call sub_4E5A70 + 0047B783 12 sp -4 # call Room_cpp_4E5A70 0047B798 8 sp 4 # push 0 0047B79A 12 sp 4 # push 0 0047B79C 16 sp 4 # push 7 @@ -40195,7 +40198,7 @@ 0047B8F5 8 sp 4 # push ecx 0047B8F8 12 sp -4 # call sub_4E7F80 0047B906 8 sp 4 # push edx - 0047B90E 12 sp -4 # call sub_4E5A70 + 0047B90E 12 sp -4 # call Room_cpp_4E5A70 0047B913 8 sp -4 # pop edi 0047B914 4 sp -4 # pop esi 0047B915 0 ret 0 @@ -40288,7 +40291,7 @@ 00480713 0 ret -16 00480731 0 ret -16 00480747 0 ret -16 -00480750 sub_480750 +00480750 StateUtils_cpp_480750 00480750 0 sp 28 # sub esp 1Ch 00480753 28 sp 4 # push ebx 00480756 32 sp 4 # push ebp @@ -40329,7 +40332,7 @@ 004808CF 32 sp -4 # pop ebx 004808D0 28 sp -28 # add esp 1Ch 004808D3 0 ret 0 -004808E0 sub_4808E0 +004808E0 StateUtils_cpp_4808E0 004808E0 0 sp 16 # sub esp 10h 004808E3 16 sp 4 # push esi 004808F7 20 sp -4 # pop esi @@ -40343,7 +40346,7 @@ 00480927 40 sp -16 # add esp 10h 0048093D 24 sp 4 # push ecx 00480941 28 sp 4 # push edx - 00480942 32 sp -8 # call sub_480A00 + 00480942 32 sp -8 # call StateUtils_cpp_480A00 00480976 24 sp 4 # push 152h 00480981 28 sp 4 # push offset aDDevDk2Project_44 00480986 32 sp 4 # push ecx @@ -40357,7 +40360,7 @@ 004809F8 20 sp -4 # pop esi 004809F9 16 sp -16 # add esp 10h 004809FC 0 ret 0 -00480A00 sub_480A00 +00480A00 StateUtils_cpp_480A00 00480A00 0 sp 44 # sub esp 2Ch 00480A03 44 sp 4 # push ebx 00480A04 48 sp 4 # push ebp @@ -40369,7 +40372,7 @@ 00480A2E 72 sp 4 # push 8 00480A3D 76 sp -16 # add esp 10h 00480ADF 60 sp 4 # push edx - 00480AE0 64 sp -4 # call sub_4E8430 + 00480AE0 64 sp -4 # call Room_cpp_4E8430 00480AF3 60 sp 4 # push edx 00480AF6 64 sp -4 # call dword ptr [eax+1D4h] 00480B02 60 sp 4 # push eax @@ -40479,7 +40482,7 @@ 00481074 32 sp -8 # call sub_476D30 00481084 24 sp 4 # push 0 00481086 28 sp 4 # push edx - 00481087 32 sp -8 # call sub_48F410 + 00481087 32 sp -8 # call Creature_cpp_48F410 004810A0 24 sp 4 # push eax 004810A1 28 sp -4 # call sub_48F690 004810A9 24 sp 4 # push eax @@ -40666,7 +40669,7 @@ 00481603 0 ret 0 00481606 4 sp -4 # pop esi 00481607 0 ret 0 -00481610 sub_481610 +00481610 StateUtils_cpp_481610 00481610 0 sp 4 # push esi 00481613 4 sp 4 # push edi 00481623 8 sp 4 # push 0 @@ -40863,7 +40866,7 @@ 00481D39 0 ret 0 00481D3F 4 sp -4 # pop esi 00481D40 0 ret 0 -00481D50 sub_481D50 +00481D50 StateUtils_cpp_481D50 00481D50 0 sp 4 # push 0FFFFFFFFh 00481D52 4 sp 4 # push offset SEH_481D50 00481D5D 8 sp 4 # push eax @@ -41432,7 +41435,7 @@ 00482F69 24 sp -20 # call sub_4C4600 00482F70 4 sp -4 # pop esi 00482F71 0 ret 0 -00482F80 sub_482F80 +00482F80 SulkState_cpp_482F80 00482F80 0 sp 20 # sub esp 14h 00482F83 20 sp 4 # push ebx 00482F84 24 sp 4 # push ebp @@ -41511,7 +41514,7 @@ 004833B4 32 sp -28 mov_sp_bp 0 004833B6 4 sp -4 pop_bp 0 004833B7 0 ret 0 -004833C0 sub_4833C0 +004833C0 ThrowingState_cpp_4833C0 004833C0 0 sp 4 # push ebp 004833C3 4 sp 4 # push 0FFFFFFFFh 004833C5 8 sp 4 # push offset SEH_4833C0 @@ -41636,7 +41639,7 @@ 0048390A 4 sp -4 # pop ecx 0048390B 0 ret 0 0048394E 12 sp 4 # push edx - 00483951 16 sp -4 # call sub_4D9410 + 00483951 16 sp -4 # call Crypt_cpp_4D9410 00483959 12 sp 4 # push 0 0048395B 16 sp 4 # push 0 0048395D 20 sp 4 # push 0 @@ -41727,7 +41730,7 @@ 00483B80 12 sp -4 # pop esi 00483B81 8 sp -8 # add esp 8 00483B84 0 ret 0 -00483B90 sub_483B90 +00483B90 TourtureState_cpp_483B90 00483B90 0 sp 24 # sub esp 18h 00483B93 24 sp 4 # push ebx 00483B94 28 sp 4 # push ebp @@ -42158,7 +42161,7 @@ 0048530A 8 sp -4 # pop ebx 0048530B 4 sp -4 # pop ecx 0048530C 0 ret 0 -00485310 sub_485310 +00485310 TrainState_cpp_485310 00485310 0 sp 32 # sub esp 20h 00485313 32 sp 4 # push ebx 00485314 36 sp 4 # push ebp @@ -42173,12 +42176,12 @@ 0048538A 48 sp 4 # push 64h 0048538C 52 sp 4 # push edx 0048538D 56 sp 4 # push eax - 004853A0 60 sp -12 # call sub_4F2FF0 + 004853A0 60 sp -12 # call Training_cpp_4F2FF0 004853F8 48 sp 4 # push 64h 004853FA 52 sp 4 # push ecx 004853FB 56 sp 4 # push eax 004853FC 60 sp 4 # push edx - 00485403 64 sp -16 # call sub_4F3310 + 00485403 64 sp -16 # call Training_cpp_4F3310 00485455 48 sp 4 # push 65h 0048545C 52 sp 4 # push offset aDDevDk2Project_60 00485461 56 sp 4 # push eax @@ -42187,7 +42190,7 @@ 004854AD 48 sp 4 # push ebx 004854B2 52 sp 4 # push ebx 004854B3 56 sp 4 # push edx - 004854B6 60 sp -12 # call sub_4E4D90 + 004854B6 60 sp -12 # call Room_cpp_4E4D90 004854BD 48 sp 4 # push 86h 004854D6 52 sp 4 # push offset aDDevDk2Project_60 004854DE 56 sp 4 # push ecx @@ -42364,7 +42367,7 @@ 004859F4 20 sp 4 # push eax 00485A00 24 sp 4 # push 1 00485A02 28 sp 4 # push eax - 00485A0A 32 sp -12 # call sub_4E4D90 + 00485A0A 32 sp -12 # call Room_cpp_4E4D90 00485A16 20 sp 4 # push edx 00485A19 24 sp -4 # call dword ptr [eax+1D4h] 00485A23 20 sp 4 # push ecx @@ -42666,7 +42669,7 @@ 00486CE5 0 ret 0 00486CE8 4 sp -4 # pop esi 00486CE9 0 ret 0 -00486CF0 sub_486CF0 +00486CF0 WaitState_cpp_486CF0 00486CF0 0 sp 12 # sub esp 0Ch 00486CF3 12 sp 4 # push esi 00486CF6 16 sp 4 # push edi @@ -42876,7 +42879,7 @@ 00487A08 60 sp 4 # push eax 00487A09 64 sp -4 # call unknown_libname_3 00487A0E 60 sp 4 # push ebp - 00487A11 64 sp -16 # call sub_4B37D0 + 00487A11 64 sp -16 # call RenderInfo_cpp_4B37D0 00487A1A 48 jmp 00487A54 00487A1C 52 sp -4 # call sub_494860 00487A2B 48 sp 4 # push ebx @@ -42885,7 +42888,7 @@ 00487A3D 60 sp 4 # push eax 00487A3E 64 sp -4 # call unknown_libname_3 00487A43 60 sp 4 # push ebp - 00487A46 64 sp -16 # call sub_4B37D0 + 00487A46 64 sp -16 # call RenderInfo_cpp_4B37D0 00487B15 48 sp 4 # push ebx 00487B18 52 sp 4 # push ebx 00487B19 56 sp 4 # push ecx @@ -43512,7 +43515,7 @@ 0048AD36 4 sp 4 # push eax 0048AD3D 8 sp -8 # call sub_476D30 0048AD42 0 ret -4 -0048AD50 sub_48AD50 +0048AD50 Creature_cpp_48AD50 0048AD50 0 sp 4 # push ecx 0048AD51 4 sp 4 # push esi 0048AD54 8 sp 4 # push edi @@ -43926,7 +43929,7 @@ 0048C1B4 80 sp 4 # push 0 0048C1B6 84 sp 4 # push eax 0048C1D2 88 sp 4 # push eax - 0048C1D5 92 sp -16 # call sub_4B37D0 + 0048C1D5 92 sp -16 # call RenderInfo_cpp_4B37D0 0048C1FC 76 sp 4 # push ecx 0048C1FF 80 sp -4 # call sub_48FD70 0048C236 76 sp 4 # push 13h @@ -43980,7 +43983,7 @@ 0048C642 80 sp 4 # push eax 0048C643 84 sp 4 # push ecx 0048C644 88 sp 4 # push ebp - 0048C647 92 sp -16 # call sub_4B37D0 + 0048C647 92 sp -16 # call RenderInfo_cpp_4B37D0 0048C714 76 sp 4 # push eax 0048C715 80 sp -4 # call sub_43D730 0048C733 76 sp -4 # pop edi @@ -44536,7 +44539,7 @@ 0048E134 0 ret 0 0048E140 sub_48E140 0048E15B 0 ret -4 -0048E160 sub_48E160 +0048E160 Creature_cpp_48E160 0048E166 0 sp 4 # push 0FFFFFFFFh 0048E168 4 sp 4 # push offset SEH_48E160 0048E16D 8 sp 4 # push eax @@ -44877,7 +44880,7 @@ 0048F3E7 0 ret 0 0048F3F0 sub_48F3F0 0048F407 0 jmp 0045EF50 -0048F410 sub_48F410 +0048F410 Creature_cpp_48F410 0048F410 0 sp 36 # sub esp 24h 0048F413 36 sp 4 # push ebx 0048F414 40 sp 4 # push ebp @@ -44979,7 +44982,7 @@ 0048F928 36 sp -4 # pop ebx 0048F929 32 sp -32 # add esp 20h 0048F92C 0 ret -4 -0048F930 sub_48F930 +0048F930 Creature_cpp_48F930 0048F930 0 sp 20 # sub esp 14h 0048F933 20 sp 4 # push ebx 0048F934 24 sp 4 # push esi @@ -45126,7 +45129,7 @@ 0048FFE0 40 sp -4 # call sub_453A20 00490011 36 sp 4 # push eax 00490012 40 sp 4 # push 0Eh - 00490018 44 sp -8 # call sub_4C6460 + 00490018 44 sp -8 # call PlayerRooms_cpp_4C6460 00490084 36 sp 4 # push eax 00490089 40 sp -4 # call sub_4B5560 004900F2 36 sp 4 # push ebx @@ -45982,7 +45985,7 @@ 004918AC 0 ret 0 004918B0 sub_4918B0 004918FD 0 ret -4 -00491900 sub_491900 +00491900 Creature_cpp_491900 00491900 0 sp 4 # push ebx 00491901 4 sp 4 # push ebp 00491902 8 sp 4 # push esi @@ -45997,7 +46000,7 @@ 004919B2 8 sp -4 pop_bp 0 004919B3 4 sp -4 # pop ebx 004919B4 0 ret 0 -004919C0 sub_4919C0 +004919C0 Creature_cpp_4919C0 004919C0 0 sp 4 # push ebx 004919C1 4 sp 4 # push ebp 004919C2 8 sp 4 # push esi @@ -47041,7 +47044,7 @@ 00496848 52 sp 4 # push ecx 00496849 56 sp 4 # push eax 0049684A 60 sp 4 # push ebp - 0049684E 64 sp -16 # call sub_4B37D0 + 0049684E 64 sp -16 # call RenderInfo_cpp_4B37D0 00496862 48 sp 4 # push edx 00496865 52 sp -4 # call sub_496960 00496872 48 sp 4 # push eax @@ -47958,7 +47961,7 @@ 004992F6 36 sp -4 # pop ebx 004992F7 32 sp -32 # add esp 20h 004992FA 0 ret 0 -00499300 sub_499300 +00499300 CreatureInstance_cpp_499300 00499300 0 sp 12 # sub esp 0Ch 00499303 12 sp 4 # push ebx 00499304 16 sp 4 # push ebp @@ -48177,7 +48180,7 @@ 00499C93 8 sp -4 # pop esi 00499C94 4 sp -4 # pop ecx 00499C95 0 ret 0 -00499CA0 sub_499CA0 +00499CA0 CreatureInstance_cpp_499CA0 00499CA0 0 sp 16 # sub esp 10h 00499CA3 16 sp 4 # push ebx 00499CA4 20 sp 4 # push esi @@ -48723,7 +48726,7 @@ 0049B167 52 sp -4 # pop ebx 0049B168 48 sp -48 # add esp 30h 0049B16B 0 ret -4 -0049B1C0 sub_49B1C0 +0049B1C0 Game_Object_cpp_49B1C0 0049B1C0 0 sp 4 # push 0FFFFFFFFh 0049B1C2 4 sp 4 # push offset SEH_49B1C0 0049B1CD 8 sp 4 # push eax @@ -48759,7 +48762,7 @@ 0049B43C 36 sp 4 # push ebx 0049B43D 40 sp 4 # push eax 0049B44A 44 sp 4 # push eax - 0049B451 48 sp -16 # call sub_4B37D0 + 0049B451 48 sp -16 # call RenderInfo_cpp_4B37D0 0049B462 32 sp 4 # push ecx 0049B465 36 sp -4 # call sub_4B49D0 0049B4B5 32 sp 4 # push ebp @@ -48814,7 +48817,7 @@ 0049B797 64 sp -4 # call sub_4B7B10 0049B7CC 60 sp 4 # push eax 0049B7CD 64 sp 4 # push esi - 0049B7CE 68 sp -8 # call sub_4DA560 + 0049B7CE 68 sp -8 # call DungeonHeart_cpp_4DA560 0049B828 60 sp 4 # push edx 0049B82D 64 sp -4 # call sub_50E5C0 0049B869 60 sp 4 # push eax @@ -48950,7 +48953,7 @@ 0049BCA7 32 sp 4 # push 2 0049BCB2 36 sp -4 # call sub_49BD00 0049BCB7 32 sp 4 # push eax - 0049BCBB 36 sp -16 # call sub_4B37D0 + 0049BCBB 36 sp -16 # call RenderInfo_cpp_4B37D0 0049BCD0 20 sp -4 # pop esi 0049BCD1 16 sp -16 # add esp 10h 0049BCD4 0 ret 0 @@ -49124,7 +49127,7 @@ 0049C65D 68 sp 4 # push 2 0049C66B 72 sp -4 # call sub_49BD00 0049C670 68 sp 4 # push eax - 0049C674 72 sp -16 # call sub_4B37D0 + 0049C674 72 sp -16 # call RenderInfo_cpp_4B37D0 0049C679 56 sp 4 # push 0Fh 0049C67D 60 sp -4 # call sub_49EF60 0049C68C 56 sp -4 # pop edi @@ -49147,7 +49150,7 @@ 0049C719 32 sp 4 # push 2 0049C72C 36 sp -4 # call sub_49BD00 0049C731 32 sp 4 # push eax - 0049C735 36 sp -16 # call sub_4B37D0 + 0049C735 36 sp -16 # call RenderInfo_cpp_4B37D0 0049C73A 20 sp 4 # push 0Fh 0049C73E 24 sp -4 # call sub_49EF60 0049C74E 20 sp -4 # pop esi @@ -49167,7 +49170,7 @@ 0049C806 16 sp 4 # push edi 0049C837 20 sp 4 # push edi 0049C838 24 sp 4 # push edx - 0049C83B 28 sp -8 # call sub_49B1C0 + 0049C83B 28 sp -8 # call Game_Object_cpp_49B1C0 0049C840 20 sp -4 # pop edi 0049C841 16 sp -4 # pop esi 0049C842 12 sp -12 # add esp 0Ch @@ -50138,7 +50141,7 @@ 0049F4A9 60 sp 4 # push 0 0049F4AB 64 sp -4 # call unknown_libname_3 0049F4B0 60 sp 4 # push edi - 0049F4B3 64 sp -16 # call sub_4B37D0 + 0049F4B3 64 sp -16 # call RenderInfo_cpp_4B37D0 0049F4FD 48 sp 4 # push eax 0049F50C 52 sp -4 # call sub_4B5560 0049F511 48 sp -4 # pop edi @@ -50159,7 +50162,7 @@ 0049F5A6 20 sp 4 # push 0 0049F5AC 24 sp 4 # push 1 0049F5AE 28 sp 4 # push ecx - 0049F5B1 32 sp -12 # call sub_4E4D90 + 0049F5B1 32 sp -12 # call Room_cpp_4E4D90 0049F5B6 20 sp 4 # push 1 0049F5B8 24 sp 4 # push 0 0049F5BE 28 sp 4 # push 8 @@ -50227,7 +50230,7 @@ 0049F795 12 sp 4 # push edx 0049F79E 16 sp 4 # push ecx 0049F79F 20 sp 4 # push edx - 0049F7A2 24 sp -12 # call sub_4F3C60 + 0049F7A2 24 sp -12 # call Treasure_cpp_4F3C60 0049F7AE 12 sp -4 # pop edi 0049F7AF 8 sp -4 # pop esi 0049F7B2 4 sp -4 # pop ebx @@ -50321,7 +50324,7 @@ 0049FC03 40 sp 4 # push 0 0049FC16 44 sp -4 # call sub_49BD00 0049FC1B 40 sp 4 # push eax - 0049FC1E 44 sp -16 # call sub_4B37D0 + 0049FC1E 44 sp -16 # call RenderInfo_cpp_4B37D0 0049FC3B 28 sp -4 # pop edi 0049FC48 24 sp -4 # pop esi 0049FC49 20 sp -20 # add esp 14h @@ -50365,13 +50368,13 @@ 0049FDEB 32 sp 4 # push 1 0049FDFE 36 sp -4 # call sub_49BD00 0049FE03 32 sp 4 # push eax - 0049FE07 36 sp -16 # call sub_4B37D0 + 0049FE07 36 sp -16 # call RenderInfo_cpp_4B37D0 0049FE37 20 sp -4 # pop esi 0049FE38 16 sp -16 # add esp 10h 0049FE3B 0 ret 0 0049FE40 sub_49FE40 0049FE5B 0 ret 0 -0049FE60 sub_49FE60 +0049FE60 ObjectState_cpp_49FE60 0049FE60 0 sp 32 # sub esp 20h 0049FE68 32 sp 4 # push ebx 0049FE69 36 sp 4 # push ebp @@ -50438,7 +50441,7 @@ 004A0208 48 sp -4 # pop ebx 004A0209 44 sp -44 # add esp 2Ch 004A020C 0 ret -12 -004A0210 sub_4A0210 +004A0210 ObjectState_cpp_4A0210 004A0216 0 sp 4 # push 0FFFFFFFFh 004A0218 4 sp 4 # push offset SEH_4A0210 004A021D 8 sp 4 # push eax @@ -50463,7 +50466,7 @@ 004A03D1 32 sp -4 pop_bp 0 004A03D2 28 sp -28 # add esp 1Ch 004A03D5 0 ret 0 -004A03E0 sub_4A03E0 +004A03E0 ObjectState_cpp_4A03E0 004A03E6 0 sp 4 # push 0FFFFFFFFh 004A03E8 4 sp 4 # push offset SEH_4A03E0 004A03ED 8 sp 4 # push eax @@ -50488,7 +50491,7 @@ 004A05A1 32 sp -4 pop_bp 0 004A05A2 28 sp -28 # add esp 1Ch 004A05A5 0 ret 0 -004A05B0 sub_4A05B0 +004A05B0 ObjectState_cpp_4A05B0 004A05B6 0 sp 4 # push 0FFFFFFFFh 004A05B8 4 sp 4 # push offset SEH_4A05B0 004A05BD 8 sp 4 # push eax @@ -50513,7 +50516,7 @@ 004A0769 32 sp -4 pop_bp 0 004A076A 28 sp -28 # add esp 1Ch 004A076D 0 ret 0 -004A0770 sub_4A0770 +004A0770 ObjectState_cpp_4A0770 004A0776 0 sp 4 # push 0FFFFFFFFh 004A0778 4 sp 4 # push offset SEH_4A0770 004A077D 8 sp 4 # push eax @@ -50686,7 +50689,7 @@ 004A13DC 20 sp -16 # call dword ptr [eax+20h] 004A13E7 4 sp -4 # pop esi 004A13E8 0 ret 0 -004A13F0 sub_4A13F0 +004A13F0 ObjectState_cpp_4A13F0 004A13F0 0 sp 8 # sub esp 8 004A13F3 8 sp 4 # push ebp 004A13F4 12 sp 4 # push esi @@ -50708,7 +50711,7 @@ 004A14B2 32 sp 4 # push 0 004A14BA 36 sp -4 # call unknown_libname_3 004A14BF 32 sp 4 # push ebp - 004A14C2 36 sp -16 # call sub_4B37D0 + 004A14C2 36 sp -16 # call RenderInfo_cpp_4B37D0 004A14D9 20 sp 4 # push eax 004A14E2 24 sp 4 # push 311h 004A14ED 28 sp 4 # push eax @@ -50720,7 +50723,7 @@ 004A1516 32 sp 4 # push 0 004A151B 36 sp -4 # call unknown_libname_3 004A1520 32 sp 4 # push edi - 004A1523 36 sp -16 # call sub_4B37D0 + 004A1523 36 sp -16 # call RenderInfo_cpp_4B37D0 004A158A 20 sp -4 # pop edi 004A158B 16 sp -4 # pop esi 004A158C 12 sp -4 pop_bp 0 @@ -50731,7 +50734,7 @@ 004A15A9 12 sp -4 pop_bp 0 004A15AA 8 sp -8 # add esp 8 004A15AD 0 ret 0 -004A15B0 sub_4A15B0 +004A15B0 ObjectState_cpp_4A15B0 004A15B0 0 sp 8 # sub esp 8 004A15B3 8 sp 4 # push esi 004A15B6 12 sp 4 # push edi @@ -50804,7 +50807,7 @@ 004A19CB 72 sp 4 # push 0 004A19CD 76 sp -4 # call unknown_libname_3 004A19D2 72 sp 4 # push edi - 004A19D6 76 sp -16 # call sub_4B37D0 + 004A19D6 76 sp -16 # call RenderInfo_cpp_4B37D0 004A19DE 60 sp -4 # pop edi 004A19DF 56 sp -4 # pop esi 004A19EC 52 sp -4 # pop ebx @@ -50813,7 +50816,7 @@ 004A19F0 0 ret 0 004A1A00 sub_4A1A00 004A1A54 0 ret 0 -004A1A60 sub_4A1A60 +004A1A60 ObjectState_cpp_4A1A60 004A1A60 0 sp 4 # push ebp 004A1A63 4 sp 4 # push ecx 004A1A64 8 sp 4 # push esi @@ -50842,7 +50845,7 @@ 004A1C01 24 sp 4 # push 0 004A1C03 28 sp -4 # call unknown_libname_3 004A1C08 24 sp 4 # push edi - 004A1C0C 28 sp -16 # call sub_4B37D0 + 004A1C0C 28 sp -16 # call RenderInfo_cpp_4B37D0 004A1C16 12 sp -4 # pop edi 004A1C17 8 sp -4 # pop esi 004A1C18 4 sp -4 # pop ecx @@ -50853,7 +50856,7 @@ 004A1C41 24 sp 4 # push 0 004A1C43 28 sp -4 # call unknown_libname_3 004A1C48 24 sp 4 # push esi - 004A1C4B 28 sp -16 # call sub_4B37D0 + 004A1C4B 28 sp -16 # call RenderInfo_cpp_4B37D0 004A1C50 12 sp -4 # pop edi 004A1C53 8 sp -4 # pop esi 004A1C54 4 sp -4 # pop ecx @@ -50879,7 +50882,7 @@ 004A1CDE 8 sp -4 pop_bp 0 004A1CDF 4 sp -4 # pop ebx 004A1CE0 0 ret 0 -004A1CF0 sub_4A1CF0 +004A1CF0 ObjectState_cpp_4A1CF0 004A1CF0 0 sp 12 # sub esp 0Ch 004A1CF3 12 sp 4 # push ebx 004A1CF4 16 sp 4 # push esi @@ -50892,7 +50895,7 @@ 004A1D47 36 sp 4 # push 0 004A1D49 40 sp -4 # call unknown_libname_3 004A1D4E 36 sp 4 # push esi - 004A1D51 40 sp -16 # call sub_4B37D0 + 004A1D51 40 sp -16 # call RenderInfo_cpp_4B37D0 004A1D5B 24 sp -4 # pop edi 004A1D5C 20 sp -4 # pop esi 004A1D5D 16 sp -4 # pop ebx @@ -50946,7 +50949,7 @@ 004A1F22 16 sp -4 # pop ebx 004A1F23 12 sp -12 # add esp 0Ch 004A1F26 0 ret 0 -004A1F30 sub_4A1F30 +004A1F30 ObjectState_cpp_4A1F30 004A1F30 0 sp 32 # sub esp 20h 004A1F33 32 sp 4 # push ebx 004A1F34 36 sp 4 # push ebp @@ -51009,7 +51012,7 @@ 004A21AF 36 sp -4 # pop ebx 004A21B0 32 sp -32 # add esp 20h 004A21B3 0 ret 0 -004A21C0 sub_4A21C0 +004A21C0 ObjectState_cpp_4A21C0 004A21C0 0 sp 4 # push ebp 004A21C3 4 sp 4 # push 0FFFFFFFFh 004A21C5 8 sp 4 # push offset SEH_4A21C0 @@ -51058,14 +51061,14 @@ 004A23F8 72 sp 4 # push 0 004A23FA 76 sp -4 # call unknown_libname_3 004A2402 72 sp 4 # push ebx - 004A2405 76 sp -16 # call sub_4B37D0 + 004A2405 76 sp -16 # call RenderInfo_cpp_4B37D0 004A2482 60 sp -4 # pop edi 004A2483 56 sp -4 # pop esi 004A2490 52 sp -4 # pop ebx 004A2491 48 sp -44 mov_sp_bp 0 004A2493 4 sp -4 pop_bp 0 004A2494 0 ret 0 -004A24A0 sub_4A24A0 +004A24A0 ObjectState_cpp_4A24A0 004A24A0 0 sp 8 # sub esp 8 004A24A3 8 sp 4 # push ebx 004A24A4 12 sp 4 # push ebp @@ -51084,7 +51087,7 @@ 004A2527 36 sp 4 # push ebx 004A2528 40 sp -4 # call unknown_libname_3 004A252D 36 sp 4 # push edi - 004A2531 40 sp -16 # call sub_4B37D0 + 004A2531 40 sp -16 # call RenderInfo_cpp_4B37D0 004A253A 24 sp 4 # push ebx 004A253B 28 sp 4 # push ecx 004A253C 32 sp 4 # push 4 @@ -51117,7 +51120,7 @@ 004A25E7 36 sp 4 # push ebx 004A25E8 40 sp -4 # call unknown_libname_3 004A25ED 36 sp 4 # push edi - 004A25F1 40 sp -16 # call sub_4B37D0 + 004A25F1 40 sp -16 # call RenderInfo_cpp_4B37D0 004A2626 24 sp -4 # pop edi 004A2627 20 sp -4 # pop esi 004A2628 16 sp -4 pop_bp 0 @@ -51138,7 +51141,7 @@ 004A26C2 12 sp -4 # pop ebx 004A26C3 8 sp -8 # add esp 8 004A26C6 0 ret 0 -004A26D0 sub_4A26D0 +004A26D0 ObjectState_cpp_4A26D0 004A26D0 0 sp 52 # sub esp 34h 004A26D3 52 sp 4 # push ebx 004A26D4 56 sp 4 # push ebp @@ -51302,7 +51305,7 @@ 004A2CD5 12 sp -4 # pop ebx 004A2CD6 8 sp -8 # add esp 8 004A2CD9 0 ret 0 -004A2CE0 sub_4A2CE0 +004A2CE0 ObjectState_cpp_4A2CE0 004A2CE6 0 sp 4 # push 0FFFFFFFFh 004A2CE8 4 sp 4 # push offset SEH_4A2CE0 004A2CED 8 sp 4 # push eax @@ -51483,7 +51486,7 @@ 004A367C 28 sp 4 # push 0 004A367E 32 sp 4 # push ecx 004A367F 36 sp 4 # push eax - 004A368A 40 sp -16 # call sub_4B37D0 + 004A368A 40 sp -16 # call RenderInfo_cpp_4B37D0 004A36AC 24 sp -4 # pop edi 004A36AD 20 sp -4 # pop esi 004A36AE 16 sp -16 # add esp 10h @@ -51503,7 +51506,7 @@ 004A370C 28 sp 4 # push 0 004A370E 32 sp 4 # push ecx 004A370F 36 sp 4 # push eax - 004A371A 40 sp -16 # call sub_4B37D0 + 004A371A 40 sp -16 # call RenderInfo_cpp_4B37D0 004A373C 24 sp -4 # pop edi 004A373D 20 sp -4 # pop esi 004A373E 16 sp -16 # add esp 10h @@ -51524,7 +51527,7 @@ 004A3795 32 sp 4 # push ebx 004A3796 36 sp 4 # push eax 004A37A5 40 sp 4 # push eax - 004A37AA 44 sp -16 # call sub_4B37D0 + 004A37AA 44 sp -16 # call RenderInfo_cpp_4B37D0 004A380E 28 sp 4 # push edi 004A380F 32 sp 4 # push 0E7h 004A3814 36 sp 4 # push eax @@ -51546,7 +51549,7 @@ 004A3872 28 sp 4 # push 0 004A3874 32 sp 4 # push eax 004A3881 36 sp 4 # push eax - 004A388C 40 sp -16 # call sub_4B37D0 + 004A388C 40 sp -16 # call RenderInfo_cpp_4B37D0 004A38D8 24 sp 4 # push esi 004A38D9 28 sp 4 # push 0E8h 004A38E4 32 sp 4 # push eax @@ -51567,7 +51570,7 @@ 004A393E 28 sp 4 # push 0 004A3940 32 sp 4 # push eax 004A394D 36 sp 4 # push eax - 004A3958 40 sp -16 # call sub_4B37D0 + 004A3958 40 sp -16 # call RenderInfo_cpp_4B37D0 004A3973 24 sp 4 # push ecx 004A397E 28 sp -4 # call sub_43D730 004A39DA 24 sp -4 # pop edi @@ -51589,7 +51592,7 @@ 004A3A2E 28 sp 4 # push 0 004A3A30 32 sp 4 # push eax 004A3A3D 36 sp 4 # push eax - 004A3A48 40 sp -16 # call sub_4B37D0 + 004A3A48 40 sp -16 # call RenderInfo_cpp_4B37D0 004A3A63 24 sp 4 # push ecx 004A3A6E 28 sp -4 # call sub_43D730 004A3ACC 24 sp -4 # pop edi @@ -51611,7 +51614,7 @@ 004A3B1E 28 sp 4 # push 0 004A3B20 32 sp 4 # push eax 004A3B2D 36 sp 4 # push eax - 004A3B38 40 sp -16 # call sub_4B37D0 + 004A3B38 40 sp -16 # call RenderInfo_cpp_4B37D0 004A3B4B 24 sp -4 # pop esi 004A3B60 20 sp 4 # push ecx 004A3B64 24 sp -4 # call sub_43D730 @@ -51629,7 +51632,7 @@ 004A3BBE 28 sp 4 # push 0 004A3BC0 32 sp 4 # push eax 004A3BCF 36 sp 4 # push eax - 004A3BDA 40 sp -16 # call sub_4B37D0 + 004A3BDA 40 sp -16 # call RenderInfo_cpp_4B37D0 004A3BED 24 sp -4 # pop esi 004A3C02 20 sp 4 # push ecx 004A3C06 24 sp -4 # call sub_43D730 @@ -51668,7 +51671,7 @@ 004A3D89 8 sp -4 # pop edi 004A3D8C 4 sp -4 # pop esi 004A3D8D 0 ret 0 -004A3D90 sub_4A3D90 +004A3D90 ObjectState_cpp_4A3D90 004A3D90 0 sp 8 # sub esp 8 004A3D93 8 sp 4 # push esi 004A3D96 12 sp 4 # push edi @@ -51817,7 +51820,7 @@ 004A418D 4 sp -4 # pop ecx 004A418E 0 ret -8 004A4191 16 sp 4 # push edi - 004A4194 20 sp -4 # call sub_4A4980 + 004A4194 20 sp -4 # call Specials_cpp_4A4980 004A4199 16 sp -4 # pop edi 004A419A 12 sp -4 # pop esi 004A419B 8 sp -4 # pop ebx @@ -51987,11 +51990,11 @@ 004A4786 24 sp 4 # push ebp 004A4787 28 sp 4 # push edx 004A4788 32 sp 4 # push eax - 004A478B 36 sp -12 # call sub_4F3C60 + 004A478B 36 sp -12 # call Treasure_cpp_4F3C60 004A479E 24 sp 4 # push edi 004A479F 28 sp 4 # push ecx 004A47A0 32 sp 4 # push edx - 004A47A3 36 sp -12 # call sub_4F3C60 + 004A47A3 36 sp -12 # call Treasure_cpp_4F3C60 004A47D4 24 sp 4 # push ebp 004A47D5 28 sp 4 # push ecx 004A47DC 32 sp -8 # call sub_4510C0 @@ -52051,7 +52054,7 @@ 004A4974 8 sp -4 # pop ebx 004A4975 4 sp -4 # pop ecx 004A4976 0 ret -4 -004A4980 sub_4A4980 +004A4980 Specials_cpp_4A4980 004A4980 0 sp 4 # push ebp 004A4983 4 sp 60 # sub esp 3Ch 004A4989 64 sp 4 # push ebx @@ -52285,7 +52288,7 @@ 004A5188 44 sp 4 # push 1 004A5192 48 sp 4 # push ecx 004A5196 52 sp 4 # push eax - 004A5199 56 sp -16 # call sub_4B37D0 + 004A5199 56 sp -16 # call RenderInfo_cpp_4B37D0 004A51CF 40 sp 4 # push eax 004A51D0 44 sp -4 # call sub_4A66F0 004A523E 40 sp 4 # push edx @@ -52482,7 +52485,7 @@ 004A5C09 116 sp 4 # push 1 004A5C0B 120 sp 4 # push eax 004A5C17 124 sp 4 # push eax - 004A5C1C 128 sp -16 # call sub_4B37D0 + 004A5C1C 128 sp -16 # call RenderInfo_cpp_4B37D0 004A5C5E 112 sp 4 # push edx 004A5C5F 116 sp 4 # push eax 004A5C67 120 sp -8 # call sub_441990 @@ -52495,7 +52498,7 @@ 004A5CC9 116 sp 4 # push eax 004A5CCD 120 sp 4 # push eax 004A5CCE 124 sp 4 # push ecx - 004A5CD5 128 sp -16 # call sub_4B37D0 + 004A5CD5 128 sp -16 # call RenderInfo_cpp_4B37D0 004A5D17 112 sp 4 # push edx 004A5D18 116 sp 4 # push eax 004A5D20 120 sp -8 # call sub_441990 @@ -53096,7 +53099,7 @@ 004A7A38 36 sp 4 # push ebx 004A7A4C 40 sp -4 # call unknown_libname_3 004A7A6A 36 sp 4 # push eax - 004A7A6D 40 sp -16 # call sub_4B37D0 + 004A7A6D 40 sp -16 # call RenderInfo_cpp_4B37D0 004A7A78 24 sp 4 # push eax 004A7A79 28 sp -4 # call sub_4B49D0 004A7AA3 24 sp 4 # push ebx @@ -53338,7 +53341,7 @@ 004A833E 60 sp 4 # push 0 004A8340 64 sp -4 # call unknown_libname_3 004A835B 60 sp 4 # push eax - 004A835E 64 sp -16 # call sub_4B37D0 + 004A835E 64 sp -16 # call RenderInfo_cpp_4B37D0 004A838C 48 sp 4 # push edx 004A838D 52 sp -4 # call sub_4C19C0 004A8457 48 sp 4 # push ecx @@ -53451,7 +53454,7 @@ 004A8CA8 84 sp 4 # push 0 004A8CAA 88 sp -4 # call unknown_libname_3 004A8CC4 84 sp 4 # push eax - 004A8CC7 88 sp -16 # call sub_4B37D0 + 004A8CC7 88 sp -16 # call RenderInfo_cpp_4B37D0 004A8CF3 72 sp 4 # push edx 004A8CF4 76 sp 4 # push eax 004A8CF9 80 sp 4 # push eax @@ -54067,7 +54070,7 @@ 004AADD3 44 sp 4 # push edi 004AADD4 48 sp -4 # call unknown_libname_3 004AADF2 44 sp 4 # push eax - 004AADF5 48 sp -16 # call sub_4B37D0 + 004AADF5 48 sp -16 # call RenderInfo_cpp_4B37D0 004AAE00 32 sp 4 # push eax 004AAE01 36 sp -4 # call sub_4B49D0 004AAE29 32 sp 4 # push edx @@ -54784,7 +54787,7 @@ 004AD790 16 sp -12 # call sub_4B32A0 004AD79A 4 sp -4 # pop esi 004AD79B 0 ret -4 -004AD7A0 sub_4AD7A0 +004AD7A0 ShotProcess_cpp_4AD7A0 004AD7A0 0 sp 4 # push ebp 004AD7A3 4 sp 4 # push 0FFFFFFFFh 004AD7A5 8 sp 4 # push offset SEH_4AD7A0 @@ -55371,7 +55374,7 @@ 004AF8D3 80 sp -76 mov_sp_bp 0 004AF8D5 4 sp -4 pop_bp 0 004AF8D6 0 ret 0 -004AF8E0 sub_4AF8E0 +004AF8E0 ShotProcess_cpp_4AF8E0 004AF8E0 0 sp 12 # sub esp 0Ch 004AF8E3 12 sp 4 # push ebx 004AF8E4 16 sp 4 # push ebp @@ -55477,7 +55480,7 @@ 004AFE41 8 sp -4 # pop ebx 004AFE42 4 sp -4 # pop ecx 004AFE43 0 ret 0 -004AFE50 sub_4AFE50 +004AFE50 ShotProcess_cpp_4AFE50 004AFE50 0 sp 4 # push 0FFFFFFFFh 004AFE52 4 sp 4 # push offset SEH_4AFE50 004AFE5D 8 sp 4 # push eax @@ -55979,7 +55982,7 @@ 004B0FF6 36 sp 4 # push 29h 004B0FFF 40 sp -4 # call sub_494860 004B1004 36 sp 4 # push eax - 004B1007 40 sp -16 # call sub_4B37D0 + 004B1007 40 sp -16 # call RenderInfo_cpp_4B37D0 004B1012 24 sp 4 # push eax 004B101B 28 sp -4 # call sub_4B49D0 004B1026 24 sp 4 # push ebx @@ -56110,7 +56113,7 @@ 004B138F 72 sp 4 # push edi 004B1392 76 sp -4 # call dword ptr [eax+1D4h] 004B1421 72 sp 4 # push eax - 004B1422 76 sp -4 # call sub_4E8430 + 004B1422 76 sp -4 # call Room_cpp_4E8430 004B147D 72 sp 4 # push eax 004B1482 76 sp 4 # push ebp 004B1483 80 sp 4 # push eax @@ -56488,7 +56491,7 @@ 004B2023 40 sp -4 # pop esi 004B2024 36 sp -36 # add esp 24h 004B2027 0 ret 0 -004B2030 sub_4B2030 +004B2030 CObject_4B2030 004B2030 0 sp 4 # push 0FFFFFFFFh 004B2032 4 sp 4 # push offset SEH_4B2030 004B203D 8 sp 4 # push eax @@ -56942,7 +56945,7 @@ 004B37B2 24 sp -20 # add esp 14h 004B37C6 4 sp -4 # pop ecx 004B37C7 0 ret -4 -004B37D0 sub_4B37D0 +004B37D0 RenderInfo_cpp_4B37D0 004B37D6 0 sp 4 # push 0FFFFFFFFh 004B37D8 4 sp 4 # push offset SEH_4B37D0 004B37DD 8 sp 4 # push eax @@ -57089,7 +57092,7 @@ 004B40F4 80 sp 4 # push ecx 004B40F5 84 sp 4 # push edx 004B40F6 88 sp 4 # push eax - 004B40F9 92 sp -16 # call sub_4B37D0 + 004B40F9 92 sp -16 # call RenderInfo_cpp_4B37D0 004B4102 76 sp -4 # pop edi 004B4103 72 sp -4 # pop esi 004B4104 68 sp -4 pop_bp 0 @@ -57158,7 +57161,7 @@ 004B4424 68 sp -64 mov_sp_bp 0 004B4426 4 sp -4 pop_bp 0 004B4427 0 ret -4 -004B4430 sub_4B4430 +004B4430 RenderInfo_cpp_4B4430 004B4430 0 sp 4 # push esi 004B445C 4 sp -4 # pop esi 004B445D 0 ret 0 @@ -58020,7 +58023,7 @@ 004B6B44 116 sp -4 # call sub_554B30 004B6B6A 112 sp 4 # push ebx 004B6B6B 116 sp 4 # push ecx - 004B6B74 120 sp -8 # call sub_49B1C0 + 004B6B74 120 sp -8 # call Game_Object_cpp_49B1C0 004B6B7C 112 sp 4 # push esi 004B6B85 116 sp -4 # call dword ptr [edx+8] 004B6BAB 112 sp 4 # push eax @@ -58388,7 +58391,7 @@ 004B7ABA 16 sp -4 # call sub_554B30 004B7AD8 12 sp 4 # push ecx 004B7AD9 16 sp 4 # push edx - 004B7AE2 20 sp -8 # call sub_49B1C0 + 004B7AE2 20 sp -8 # call Game_Object_cpp_49B1C0 004B7AF9 12 sp -4 # pop edi 004B7AFA 8 sp -4 # pop esi 004B7AFB 4 sp -4 # pop ebx @@ -59200,7 +59203,7 @@ 004B9711 0 ret -4 004B9720 sub_4B9720 004B9734 0 ret 0 -004B9740 sub_4B9740 +004B9740 Player_cpp_4B9740 004B9740 0 sp 4 # push ebx 004B9749 4 sp 4 # push ebp 004B974A 8 sp 4 # push esi @@ -59399,7 +59402,7 @@ 004BA0BC 24 sp -4 # pop ebx 004BA0BD 20 sp -20 # add esp 14h 004BA0C0 0 ret 0 -004BA0D0 sub_4BA0D0 +004BA0D0 Player_cpp_4BA0D0 004BA0D0 0 sp 36 # sub esp 24h 004BA0D3 36 sp 4 # push ebp 004BA0D4 40 sp 4 # push esi @@ -59417,11 +59420,11 @@ 004BA1C0 64 sp -16 # add esp 10h 004BA1CE 48 sp 4 # push eax 004BA1CF 52 sp 4 # push 0Eh - 004BA1D1 56 sp -8 # call sub_4C6460 + 004BA1D1 56 sp -8 # call PlayerRooms_cpp_4C6460 004BA1DA 48 sp 4 # push 0 004BA1E0 52 sp 4 # push 1 004BA1E2 56 sp 4 # push ecx - 004BA1E7 60 sp -12 # call sub_4E4D90 + 004BA1E7 60 sp -12 # call Room_cpp_4E4D90 004BA20C 48 sp 4 # push eax 004BA212 52 sp 4 # push ecx 004BA213 56 sp 4 # push edx @@ -59434,11 +59437,11 @@ 004BA259 64 sp -16 # add esp 10h 004BA267 48 sp 4 # push edx 004BA268 52 sp 4 # push 0Bh - 004BA26A 56 sp -8 # call sub_4C6460 + 004BA26A 56 sp -8 # call PlayerRooms_cpp_4C6460 004BA277 48 sp 4 # push 0 004BA27D 52 sp 4 # push 1 004BA27F 56 sp 4 # push eax - 004BA280 60 sp -12 # call sub_4E4D90 + 004BA280 60 sp -12 # call Room_cpp_4E4D90 004BA292 48 sp 4 # push ecx 004BA2AC 52 sp 4 # push edx 004BA2AD 56 sp 4 # push eax @@ -59488,7 +59491,7 @@ 004BA509 44 sp 4 # push edi 004BA522 48 sp 4 # push edx 004BA523 52 sp 4 # push eax - 004BA526 56 sp -12 # call sub_4F4090 + 004BA526 56 sp -12 # call Treasure_cpp_4F4090 004BA566 44 sp 4 # push 1 004BA56A 48 sp -4 # call sub_4BAB80 004BA586 44 sp 4 # push 1 @@ -59802,7 +59805,7 @@ 004BB121 4 sp -4 # pop ebx 004BB122 0 ret -4 004BB12E 12 jmp 004BB110 -004BB130 sub_4BB130 +004BB130 Player_cpp_4BB130 004BB135 0 sp 20 # sub esp 14h 004BB13E 20 sp 4 # push ebx 004BB13F 24 sp 4 # push esi @@ -59841,7 +59844,7 @@ 004BB28F 24 sp -4 # pop ebx 004BB290 20 sp -20 # add esp 14h 004BB293 0 ret 0 -004BB2A0 sub_4BB2A0 +004BB2A0 Player_cpp_4BB2A0 004BB2A0 0 sp 4 # push ebp 004BB2A3 4 sp 16 # sub esp 10h 004BB2A6 20 sp 4 # push ebx @@ -59894,7 +59897,7 @@ 004BB6B9 4 sp -4 pop_bp 0 004BB6BA 0 ret 0 004BB6C3 32 jmp 004BB45D -004BB6D0 sub_4BB6D0 +004BB6D0 Player_cpp_4BB6D0 004BB6D0 0 sp 8 # sub esp 8 004BB6D8 8 sp 4 # push ebx 004BB6EB 12 sp 4 # push edi @@ -61272,7 +61275,7 @@ 004BF3D0 sub_4BF3D0 004BF3DF 0 ret -4 004BF3FF 0 ret -4 -004BF410 sub_4BF410 +004BF410 Player_cpp_4BF410 004BF416 0 sp 4 # push 0FFFFFFFFh 004BF418 4 sp 4 # push offset SEH_4BF410 004BF41D 8 sp 4 # push eax @@ -61342,7 +61345,7 @@ 004BF99C 60 sp -60 # add esp 3Ch 004BF99F 0 ret 0 004BF9A4 76 jmp 004BF766 -004BF9E0 sub_4BF9E0 +004BF9E0 Player_cpp_4BF9E0 004BF9E6 0 sp 4 # push 0FFFFFFFFh 004BF9E8 4 sp 4 # push offset SEH_4BF9E0 004BF9ED 8 sp 4 # push eax @@ -61402,7 +61405,7 @@ 004BFC61 24 sp 4 # push 0 004BFC63 28 sp 4 # push ecx 004BFC64 32 sp 4 # push eax - 004BFC70 36 sp -16 # call sub_4B37D0 + 004BFC70 36 sp -16 # call RenderInfo_cpp_4B37D0 004BFCA2 20 sp 4 # push 0 004BFCA4 24 sp 4 # push 0 004BFCA6 28 sp 4 # push 3Ah @@ -61869,7 +61872,7 @@ 004C16F3 72 sp 4 # push 2 004C1706 76 sp -4 # call sub_49BD00 004C170B 72 sp 4 # push eax - 004C1715 76 sp -16 # call sub_4B37D0 + 004C1715 76 sp -16 # call RenderInfo_cpp_4B37D0 004C171A 60 sp 4 # push 0Fh 004C171E 64 sp -4 # call sub_49EF60 004C1727 60 sp -4 # pop edi @@ -62437,7 +62440,7 @@ 004C2FAA 20 sp 4 # push ecx 004C2FAB 24 sp 4 # push edx 004C2FAC 28 sp 4 # push 6 - 004C2FB0 32 sp -12 # call sub_4C6CF0 + 004C2FB0 32 sp -12 # call PlayerRooms_cpp_4C6CF0 004C2FC1 20 sp 4 # push eax 004C2FC2 24 sp -4 # call sub_4E0870 004C2FF1 20 sp -4 # pop edi @@ -62820,7 +62823,7 @@ 004C3C9E 68 sp 4 # push edx 004C3CA2 72 sp 4 # push eax 004C3CA3 76 sp 4 # push edx - 004C3CA4 80 sp -12 # call sub_4C6CF0 + 004C3CA4 80 sp -12 # call PlayerRooms_cpp_4C6CF0 004C3CAD 68 sp -4 # pop edi 004C3CAE 64 sp -4 # pop esi 004C3CAF 60 sp -4 # pop ebx @@ -63729,7 +63732,7 @@ 004C63C3 28 sp -24 mov_sp_bp 0 004C63C5 4 sp -4 pop_bp 0 004C63C6 0 ret -16 -004C63D0 sub_4C63D0 +004C63D0 PlayerRooms_cpp_4C63D0 004C63D0 0 sp 4 # push esi 004C63E3 4 sp 4 # push 25Bh 004C63EE 8 sp 4 # push offset aDDevDk2Project_20 @@ -63742,7 +63745,7 @@ 004C644D 0 ret -4 004C6452 4 sp -4 # pop esi 004C6453 0 ret -4 -004C6460 sub_4C6460 +004C6460 PlayerRooms_cpp_4C6460 004C6460 0 sp 4 # push ebx 004C6461 4 sp 4 # push esi 004C64A4 8 sp 4 # push 284h @@ -63805,7 +63808,7 @@ 004C6851 36 sp -32 mov_sp_bp 0 004C6853 4 sp -4 pop_bp 0 004C6854 0 ret -20 -004C6860 sub_4C6860 +004C6860 PlayerRooms_cpp_4C6860 004C6860 0 sp 4 # push ebx 004C6861 4 sp 4 # push ebp 004C686A 8 sp 4 # push esi @@ -63894,7 +63897,7 @@ 004C6CE8 64 sp -60 mov_sp_bp 0 004C6CEA 4 sp -4 pop_bp 0 004C6CEB 0 ret -20 -004C6CF0 sub_4C6CF0 +004C6CF0 PlayerRooms_cpp_4C6CF0 004C6CF0 0 sp 4 # push ebx 004C6CF1 4 sp 4 # push ebp 004C6CFA 8 sp 4 # push esi @@ -68429,7 +68432,7 @@ 004D6245 0 ret 0 004D6250 sub_4D6250 004D626D 0 ret 0 -004D6270 sub_4D6270 +004D6270 Casino_cpp_4D6270 004D6276 0 sp 4 # push 0FFFFFFFFh 004D6278 4 sp 4 # push offset SEH_4D6270 004D627D 8 sp 4 # push eax @@ -68549,7 +68552,7 @@ 004D694A 36 sp 4 # push ebp 004D694E 40 sp 4 # push eax 004D6956 44 sp 4 # push ecx - 004D6959 48 sp -16 # call sub_4B37D0 + 004D6959 48 sp -16 # call RenderInfo_cpp_4B37D0 004D698E 32 sp 4 # push 30h 004D6992 36 sp -4 # call sub_49EF60 004D69AF 32 sp -4 # pop ebx @@ -68631,7 +68634,7 @@ 004D6CA3 44 sp -4 # pop ebx 004D6CA4 40 sp -40 # add esp 28h 004D6CA7 0 ret -4 -004D6CB0 sub_4D6CB0 +004D6CB0 Casino_cpp_4D6CB0 004D6CB0 0 sp 20 # sub esp 14h 004D6CB5 20 sp 4 # push ebx 004D6CB6 24 sp 4 # push ebp @@ -68893,7 +68896,7 @@ 004D7A54 8 sp -4 # pop esi 004D7A55 4 sp -4 # pop ebx 004D7A56 0 ret 0 -004D7A60 sub_4D7A60 +004D7A60 CombatPit_cpp_4D7A60 004D7A60 0 sp 32 # sub esp 20h 004D7A63 32 sp 4 # push ebx 004D7A64 36 sp 4 # push ebp @@ -68908,7 +68911,7 @@ 004D7ABC 52 sp 4 # push edx 004D7ABD 56 sp 4 # push 1 004D7ABF 60 sp 4 # push 1 - 004D7ACF 64 sp -16 # call sub_4E8210 + 004D7ACF 64 sp -16 # call Room_cpp_4E8210 004D7AE2 48 sp 4 # push edx 004D7AE5 52 sp -4 # call dword ptr [eax+1D4h] 004D7AEF 48 sp 4 # push ecx @@ -68928,7 +68931,7 @@ 004D7B7C 52 sp 4 # push edx 004D7B7D 56 sp 4 # push ebx 004D7B7E 60 sp 4 # push 1 - 004D7B8E 64 sp -16 # call sub_4E8210 + 004D7B8E 64 sp -16 # call Room_cpp_4E8210 004D7BA1 48 sp 4 # push edx 004D7BA4 52 sp -4 # call dword ptr [eax+1D4h] 004D7BAE 48 sp 4 # push ecx @@ -69152,7 +69155,7 @@ 004D88F7 88 sp 4 # push edx 004D88F8 92 sp 4 # push ebx 004D88F9 96 sp 4 # push 1 - 004D890E 100 sp -16 # call sub_4E8210 + 004D890E 100 sp -16 # call Room_cpp_4E8210 004D8923 84 sp 4 # push ebx 004D8924 88 sp 4 # push ebx 004D892B 92 sp 4 # push eax @@ -69189,7 +69192,7 @@ 004D8AA8 88 sp 4 # push edx 004D8AA9 92 sp 4 # push ebx 004D8AAA 96 sp 4 # push 1 - 004D8ABF 100 sp -16 # call sub_4E8210 + 004D8ABF 100 sp -16 # call Room_cpp_4E8210 004D8AD0 84 sp 4 # push ebx 004D8AD1 88 sp 4 # push ebx 004D8AD8 92 sp 4 # push eax @@ -69324,7 +69327,7 @@ 004D926E 0 ret -4 004D93E0 sub_4D93E0 004D9404 0 ret -8 -004D9410 sub_4D9410 +004D9410 Crypt_cpp_4D9410 004D9410 0 sp 20 # sub esp 14h 004D9417 20 sp 4 # push edi 004D9434 24 sp 4 # push esi @@ -69614,7 +69617,7 @@ 004DA553 8 sp -4 # pop edi 004DA554 4 sp -4 # pop ebx 004DA555 0 ret -4 -004DA560 sub_4DA560 +004DA560 DungeonHeart_cpp_4DA560 004DA560 0 sp 4 # push 0FFFFFFFFh 004DA562 4 sp 4 # push offset SEH_4DA560 004DA56D 8 sp 4 # push eax @@ -69655,7 +69658,7 @@ 004DA6DC 64 sp 4 # push 2 004DA6EF 68 sp -4 # call sub_49BD00 004DA6F4 64 sp 4 # push eax - 004DA6FE 68 sp -16 # call sub_4B37D0 + 004DA6FE 68 sp -16 # call RenderInfo_cpp_4B37D0 004DA703 52 sp 4 # push 0Fh 004DA707 56 sp -4 # call sub_49EF60 004DA75A 52 sp 4 # push 1 @@ -69773,7 +69776,7 @@ 004DAE33 56 sp 4 # push eax 004DAE36 60 sp -12 # call sub_4B2CE0 004DAE3B 48 jmp 004DADE4 -004DAE40 sub_4DAE40 +004DAE40 DungeonHeart_cpp_4DAE40 004DAE40 0 sp 48 # sub esp 30h 004DAE43 48 sp 4 # push ebx 004DAE44 52 sp 4 # push ebp @@ -69950,11 +69953,11 @@ 004DB996 92 sp 4 # push ebp 004DB997 96 sp 4 # push ecx 004DB998 100 sp 4 # push edx - 004DB99B 104 sp -12 # call sub_4F4090 + 004DB99B 104 sp -12 # call Treasure_cpp_4F4090 004DB9DB 92 sp 4 # push ebp 004DB9DC 96 sp 4 # push edx 004DB9DD 100 sp 4 # push eax - 004DB9E0 104 sp -12 # call sub_4F4090 + 004DB9E0 104 sp -12 # call Treasure_cpp_4F4090 004DBA16 92 sp 4 # push edx 004DBA21 96 sp 4 # push eax 004DBA22 100 sp 4 # push ecx @@ -70000,9 +70003,9 @@ 004DBC64 20 sp -20 # add esp 14h 004DBC67 0 ret 0 004DBC68 32 sp 4 # push 1 - 004DBC6C 36 sp -4 # call sub_4DBF90 + 004DBC6C 36 sp -4 # call Entrance_cpp_4DBF90 004DBCBF 32 sp 4 # push ebx - 004DBCC2 36 sp -4 # call sub_4DBF90 + 004DBCC2 36 sp -4 # call Entrance_cpp_4DBF90 004DBCEE 32 sp 4 # push edx 004DBCFE 36 sp 4 # push edx 004DBCFF 40 sp -8 # call dword ptr [eax+1D8h] @@ -70047,7 +70050,7 @@ 004DBF87 20 sp -4 # pop ebx 004DBF88 16 sp -16 # add esp 10h 004DBF8B 0 ret 0 -004DBF90 sub_4DBF90 +004DBF90 Entrance_cpp_4DBF90 004DBF90 0 sp 4 # push ebp 004DBF93 4 sp 4 # push 0FFFFFFFFh 004DBF95 8 sp 4 # push offset SEH_4DBF90 @@ -70419,7 +70422,7 @@ 004DD447 40 sp 4 # push 0 004DD44D 44 sp 4 # push 1 004DD44F 48 sp 4 # push eax - 004DD450 52 sp -12 # call sub_4E4D90 + 004DD450 52 sp -12 # call Room_cpp_4E4D90 004DD45B 40 sp 4 # push eax 004DD45C 44 sp 4 # push esi 004DD45D 48 sp 4 # push edi @@ -70453,7 +70456,7 @@ 004DD5EB 24 sp 4 # push ebp 004DD5EC 28 sp 4 # push ebx 004DD5FD 32 sp 4 # push ecx - 004DD60C 36 sp -4 # call sub_4DD9B0 + 004DD60C 36 sp -4 # call Graveyard_cpp_4DD9B0 004DD628 32 sp 4 # push eax 004DD630 36 sp 4 # push eax 004DD631 40 sp -8 # call dword ptr [edx+1D8h] @@ -70494,7 +70497,7 @@ 004DD819 12 sp -4 # pop ebx 004DD81A 8 sp -8 # add esp 8 004DD81D 0 ret 0 -004DD820 sub_4DD820 +004DD820 Graveyard_cpp_4DD820 004DD820 0 sp 36 # sub esp 24h 004DD823 36 sp 4 # push ebx 004DD824 40 sp 4 # push esi @@ -70507,7 +70510,7 @@ 004DD8F4 48 sp 4 # push ebx 004DD8F9 52 sp 4 # push 1 004DD8FB 56 sp 4 # push eax - 004DD8FE 60 sp -12 # call sub_4E4D90 + 004DD8FE 60 sp -12 # call Room_cpp_4E4D90 004DD923 48 sp 4 # push ecx 004DD928 52 sp 4 # push edx 004DD92F 56 sp 4 # push eax @@ -70532,7 +70535,7 @@ 004DD9A5 40 sp -4 # pop ebx 004DD9A6 36 sp -36 # add esp 24h 004DD9A9 0 ret 0 -004DD9B0 sub_4DD9B0 +004DD9B0 Graveyard_cpp_4DD9B0 004DD9B0 0 sp 32 # sub esp 20h 004DD9B3 32 sp 4 # push ebx 004DD9C1 36 sp 4 # push ebp @@ -70673,7 +70676,7 @@ 004DE1BB 0 ret -4 004DE1CD def_4DE112 004DE1CD 0 ret -4 -004DE220 sub_4DE220 +004DE220 Hatchery_cpp_4DE220 004DE220 0 sp 4 # push ebp 004DE223 4 sp 4 # push 0FFFFFFFFh 004DE225 8 sp 4 # push offset SEH_4DE220 @@ -70735,7 +70738,7 @@ 004DE601 0 ret 0 004DE610 sub_4DE610 004DE61A 0 ret -4 -004DE620 sub_4DE620 +004DE620 Hatchery_cpp_4DE620 004DE620 0 sp 4 # push 0FFFFFFFFh 004DE622 4 sp 4 # push offset SEH_4DE620 004DE62D 8 sp 4 # push eax @@ -70788,7 +70791,7 @@ 004DE87C 84 sp 4 # push ebx 004DE87D 88 sp -4 # call unknown_libname_3 004DE886 84 sp 4 # push esi - 004DE896 88 sp -16 # call sub_4B37D0 + 004DE896 88 sp -16 # call RenderInfo_cpp_4B37D0 004DE8A6 72 sp -4 # pop edi 004DE8A7 68 sp -4 # pop esi 004DE8A8 64 sp -4 pop_bp 0 @@ -70932,7 +70935,7 @@ 004DEF26 36 sp -4 # pop ebx 004DEF27 32 sp -32 # add esp 20h 004DEF2A 0 ret -12 -004DEF30 sub_4DEF30 +004DEF30 HeroGateFrontEnd_cpp_4DEF30 004DEF30 0 sp 4 # push 0FFFFFFFFh 004DEF32 4 sp 4 # push offset SEH_4DEF30 004DEF3D 8 sp 4 # push eax @@ -70986,7 +70989,7 @@ 004DF2D9 208 sp 4 # push ebp 004DF2DA 212 sp 4 # push eax 004DF2E6 216 sp 4 # push eax - 004DF2F1 220 sp -16 # call sub_4B37D0 + 004DF2F1 220 sp -16 # call RenderInfo_cpp_4B37D0 004DF34E 204 sp 4 # push eax 004DF34F 208 sp -4 # call dword ptr [edx+0A8h] 004DF3B2 204 sp 4 # push 2Bh @@ -71002,7 +71005,7 @@ 004DF4A4 208 sp 4 # push ebp 004DF4A5 212 sp 4 # push eax 004DF4BE 216 sp 4 # push edx - 004DF4C2 220 sp -16 # call sub_4B37D0 + 004DF4C2 220 sp -16 # call RenderInfo_cpp_4B37D0 004DF509 204 sp 4 # push eax 004DF50A 208 sp -4 # call dword ptr [edx+0A8h] 004DF56B 204 sp 4 # push 2Bh @@ -71026,7 +71029,7 @@ 004DF6D9 16 sp -4 # pop esi 004DF6DA 12 sp -12 # add esp 0Ch 004DF6DD 0 ret 0 -004DF6E0 sub_4DF6E0 +004DF6E0 HeroGateFrontEnd_cpp_4DF6E0 004DF6E0 0 sp 60 # sub esp 3Ch 004DF6E3 60 sp 4 # push ebx 004DF6E6 64 sp 4 # push ebp @@ -71273,7 +71276,7 @@ 004E0232 40 sp 4 # push 0 004E0238 44 sp 4 # push 1 004E023A 48 sp 4 # push eax - 004E023D 52 sp -12 # call sub_4E4D90 + 004E023D 52 sp -12 # call Room_cpp_4E4D90 004E0267 40 sp 4 # push ebx 004E028A 44 sp 4 # push esi 004E028B 48 sp -8 # call sub_4E0370 @@ -71317,7 +71320,7 @@ 004E03F3 12 sp 4 # push esi 004E042F 16 sp 4 # push eax 004E0430 20 sp 4 # push edx - 004E0431 24 sp -8 # call sub_48AD50 + 004E0431 24 sp -8 # call Creature_cpp_48AD50 004E0440 16 sp 4 # push eax 004E0441 20 sp -4 # call sub_4E5FF0 004E044F 16 sp -4 # pop esi @@ -71422,7 +71425,7 @@ 004E0875 36 sp 4 # push esi 004E087A 40 sp 4 # push edi 004E087F 44 sp 4 # push eax - 004E088C 48 sp -4 # call sub_4E1AC0 + 004E088C 48 sp -4 # call Library_cpp_4E1AC0 004E08A7 44 sp 4 # push 3Ch 004E08B0 48 sp -4 # call sub_48AD30 004E08E4 44 sp 4 # push ecx @@ -71436,7 +71439,7 @@ 004E0970 44 sp 4 # push ebx 004E0975 48 sp 4 # push 1 004E0977 52 sp 4 # push eax - 004E097A 56 sp -12 # call sub_4E4D90 + 004E097A 56 sp -12 # call Room_cpp_4E4D90 004E0989 44 sp 4 # push eax 004E0990 48 sp 4 # push eax 004E0995 52 sp 4 # push eax @@ -71481,7 +71484,7 @@ 004E0A97 24 sp -24 # add esp 18h 004E0A9A 0 ret -4 004E0AA3 40 sp 4 # push eax - 004E0AB2 44 sp -4 # call sub_4E1AC0 + 004E0AB2 44 sp -4 # call Library_cpp_4E1AC0 004E0ACD 40 sp 4 # push ecx 004E0AD4 44 sp 4 # push edx 004E0AD5 48 sp 4 # push eax @@ -71526,7 +71529,7 @@ 004E0C27 24 sp -24 # add esp 18h 004E0C2A 0 ret -4 004E0C33 40 sp 4 # push eax - 004E0C42 44 sp -4 # call sub_4E1AC0 + 004E0C42 44 sp -4 # call Library_cpp_4E1AC0 004E0C5D 40 sp 4 # push ecx 004E0C64 44 sp 4 # push edx 004E0C65 48 sp 4 # push eax @@ -71571,7 +71574,7 @@ 004E0DB7 24 sp -24 # add esp 18h 004E0DBA 0 ret -4 004E0DC3 40 sp 4 # push eax - 004E0DD2 44 sp -4 # call sub_4E1AC0 + 004E0DD2 44 sp -4 # call Library_cpp_4E1AC0 004E0DED 40 sp 4 # push ecx 004E0DF4 44 sp 4 # push edx 004E0DF5 48 sp 4 # push eax @@ -71622,7 +71625,7 @@ 004E0F69 24 sp -24 # add esp 18h 004E0F6C 0 ret -4 004E0F75 40 sp 4 # push edx - 004E0F84 44 sp -4 # call sub_4E1AC0 + 004E0F84 44 sp -4 # call Library_cpp_4E1AC0 004E0F9C 40 sp 4 # push eax 004E0FA6 44 sp 4 # push ecx 004E0FA7 48 sp 4 # push edx @@ -71811,7 +71814,7 @@ 004E199D 36 sp 4 # push esi 004E19A0 40 sp -4 # call sub_4E12A0 004E19C2 36 sp 4 # push eax - 004E19C3 40 sp -4 # call sub_4E1AC0 + 004E19C3 40 sp -4 # call Library_cpp_4E1AC0 004E19D0 36 sp 4 # push ecx 004E19D3 40 sp -4 # call sub_4B5560 004E19D8 36 sp 4 # push esi @@ -71841,7 +71844,7 @@ 004E1AB0 8 sp -4 pop_bp 0 004E1AB3 4 sp -4 # pop ebx 004E1AB4 0 ret -4 -004E1AC0 sub_4E1AC0 +004E1AC0 Library_cpp_4E1AC0 004E1AC0 0 sp 20 # sub esp 14h 004E1AC3 20 sp 4 # push ebx 004E1AC4 24 sp 4 # push ebp @@ -71885,7 +71888,7 @@ 004E1EBD 64 sp -60 mov_sp_bp 0 004E1EBF 4 sp -4 pop_bp 0 004E1EC0 0 ret -8 -004E1ED0 sub_4E1ED0 +004E1ED0 Library_cpp_4E1ED0 004E1ED0 0 sp 4 # push ebp 004E1ED3 4 sp 88 # sub esp 58h 004E1EDB 92 sp 4 # push ebx @@ -71957,7 +71960,7 @@ 004E256A 88 sp 4 # push esi 004E2575 92 sp -8 # call sub_471740 004E2588 84 sp 4 # push eax - 004E2595 88 sp -4 # call sub_4E1AC0 + 004E2595 88 sp -4 # call Library_cpp_4E1AC0 004E25B0 84 sp 4 # push edx 004E25B3 88 sp -4 # call sub_4E53B0 004E25E7 84 sp 4 # push edx @@ -71985,7 +71988,7 @@ 004E26EF 100 sp 4 # push 29h 004E26F1 104 jmp 004E2867 004E2721 84 sp 4 # push ecx - 004E272C 88 sp -4 # call sub_4E1AC0 + 004E272C 88 sp -4 # call Library_cpp_4E1AC0 004E2749 84 sp 4 # push eax 004E274A 88 sp -4 # call sub_4E53B0 004E2753 84 sp 4 # push 2 @@ -72100,7 +72103,7 @@ 004E2C5C 4 sp 4 # push 0 004E2C5E 8 sp 4 # push eax 004E2C5F 12 sp 4 # push 0 - 004E2C63 16 sp -12 # call sub_4E2E70 + 004E2C63 16 sp -12 # call Prison_cpp_4E2E70 004E2C68 4 sp -4 # pop esi 004E2C69 0 ret 0 004E2C70 sub_4E2C70 @@ -72152,9 +72155,9 @@ 004E2E60 0 sp 4 # push 1 004E2E62 4 sp 4 # push 0 004E2E64 8 sp 4 # push 1 - 004E2E66 12 sp -12 # call sub_4E2E70 + 004E2E66 12 sp -12 # call Prison_cpp_4E2E70 004E2E6B 0 ret 0 -004E2E70 sub_4E2E70 +004E2E70 Prison_cpp_4E2E70 004E2E70 0 sp 28 # sub esp 1Ch 004E2E73 28 sp 4 # push ebx 004E2E74 32 sp 4 # push ebp @@ -72164,7 +72167,7 @@ 004E2EC0 48 sp 4 # push edx 004E2EC1 52 sp -8 # call dword ptr [eax+1D8h] 004E2F49 44 sp 4 # push eax - 004E2F51 48 sp -4 # call sub_4E8430 + 004E2F51 48 sp -4 # call Room_cpp_4E8430 004E2F5A 44 sp 4 # push 6Ch 004E2F60 48 sp 4 # push 79h 004E2F62 52 sp 4 # push ecx @@ -72673,7 +72676,7 @@ 004E4BFC 20 sp -4 # pop ebx 004E4BFD 16 sp -16 # add esp 10h 004E4C00 0 ret 0 -004E4C10 sub_4E4C10 +004E4C10 Room_cpp_4E4C10 004E4C10 0 sp 12 # sub esp 0Ch 004E4C17 12 sp 4 # push ebx 004E4C18 16 sp 4 # push ebp @@ -72705,7 +72708,7 @@ 004E4D87 16 sp -4 # pop ebx 004E4D88 12 sp -12 # add esp 0Ch 004E4D8B 0 ret -4 -004E4D90 sub_4E4D90 +004E4D90 Room_cpp_4E4D90 004E4D90 0 sp 4 # push ebx 004E4D91 4 sp 4 # push ebp 004E4D94 8 sp 4 # push esi @@ -72720,7 +72723,7 @@ 004E4E98 8 sp -4 pop_bp 0 004E4E99 4 sp -4 # pop ebx 004E4E9D 0 ret -12 -004E4EA0 sub_4E4EA0 +004E4EA0 Room_cpp_4E4EA0 004E4EA0 0 sp 8 # sub esp 8 004E4EA7 8 sp 4 # push ebx 004E4EA8 12 sp 4 # push ebp @@ -72769,7 +72772,7 @@ 004E50E2 8 sp -4 # pop ebx 004E50E3 4 sp -4 # pop ecx 004E50E4 0 ret -4 -004E50F0 sub_4E50F0 +004E50F0 Room_cpp_4E50F0 004E50F0 0 sp 40 # sub esp 28h 004E50F8 40 sp 4 # push ebx 004E50F9 44 sp 4 # push ebp @@ -72837,7 +72840,7 @@ 004E5454 12 sp -12 # add esp 0Ch 004E5457 0 ret -4 004E546A 24 sp 4 # push ecx - 004E546D 28 sp -4 # call sub_4E1AC0 + 004E546D 28 sp -4 # call Library_cpp_4E1AC0 004E5476 24 sp -4 # pop edi 004E5477 20 sp -4 # pop esi 004E5478 16 sp -4 # pop ebx @@ -72850,7 +72853,7 @@ 004E549B 12 sp -12 # add esp 0Ch 004E549E 0 ret -4 004E54B5 16 sp 4 # push eax - 004E54B6 20 sp -4 # call sub_4E1AC0 + 004E54B6 20 sp -4 # call Library_cpp_4E1AC0 004E54BF 16 sp -4 # pop esi 004E54C0 12 sp -12 # add esp 0Ch 004E54C3 0 ret -4 @@ -72941,7 +72944,7 @@ 004E5A62 12 sp -4 # pop ebx 004E5A63 8 sp -8 # add esp 8 004E5A66 0 ret 0 -004E5A70 sub_4E5A70 +004E5A70 Room_cpp_4E5A70 004E5A70 0 sp 4 # push ecx 004E5A71 4 sp 4 # push ebx 004E5A76 8 sp 4 # push ebp @@ -73137,7 +73140,7 @@ 004E6A17 8 sp -4 # pop esi 004E6A1A 4 sp -4 # pop ebx 004E6A1B 0 ret -4 -004E6A20 sub_4E6A20 +004E6A20 Room_cpp_4E6A20 004E6A20 0 sp 20 # sub esp 14h 004E6A29 20 sp 4 # push ebx 004E6A30 24 sp 4 # push ebp @@ -73215,7 +73218,7 @@ 004E6D62 56 sp 4 # push 0 004E6D6F 60 sp 4 # push 1 004E6D71 64 sp 4 # push eax - 004E6D7E 68 sp -12 # call sub_4E4D90 + 004E6D7E 68 sp -12 # call Room_cpp_4E4D90 004E6DA9 56 sp 4 # push edx 004E6DB6 60 sp 4 # push edx 004E6DB7 64 sp -8 # call dword ptr [eax+1D8h] @@ -73874,9 +73877,9 @@ 004E81C7 8 sp -8 # add esp 8 004E81CA 0 ret -4 004E81D3 20 sp 4 # push edi - 004E81D4 24 sp -4 # call sub_4F48E0 + 004E81D4 24 sp -4 # call Treasure_cpp_4F48E0 004E81DC 20 jmp 004E8199 -004E8210 sub_4E8210 +004E8210 Room_cpp_4E8210 004E8210 0 sp 20 # sub esp 14h 004E821B 20 sp 4 # push ebx 004E8223 24 sp 4 # push ebp @@ -73912,7 +73915,7 @@ 004E8423 24 sp -4 # pop ebx 004E8424 20 sp -20 # add esp 14h 004E8427 0 ret -16 -004E8430 sub_4E8430 +004E8430 Room_cpp_4E8430 004E8430 0 sp 16 # sub esp 10h 004E843B 16 sp 4 # push ebx 004E8443 20 sp 4 # push ebp @@ -75348,7 +75351,7 @@ 004ECAA5 76 sp 4 # push ebx 004ECAA8 80 sp -4 # call sub_4EF1F0 004ECAAD 76 sp 4 # push ebx - 004ECAB0 80 sp -4 # call sub_4EDFC0 + 004ECAB0 80 sp -4 # call RoomManager_cpp_4EDFC0 004ECAF0 76 sp 4 # push esi 004ECAF1 80 sp 4 # push edi 004ECAF2 84 sp -8 # call dword ptr [edx+1D8h] @@ -75416,7 +75419,7 @@ 004ECE62 16 sp 4 # push esi 004ECE69 20 sp -4 # call sub_4EF1F0 004ECE71 16 sp 4 # push esi - 004ECE78 20 sp -4 # call sub_4EDFC0 + 004ECE78 20 sp -4 # call RoomManager_cpp_4EDFC0 004ECE8A 16 sp 4 # push esi 004ECE8D 20 sp -4 # call sub_4F0E30 004ECEA8 16 sp -4 # pop edi @@ -75490,7 +75493,7 @@ 004ED2C0 64 sp 4 # push ecx 004ED2C3 68 sp -4 # call sub_4EF5E0 004ED2CE 64 sp 4 # push edx - 004ED2CF 68 sp -4 # call sub_4EDFC0 + 004ED2CF 68 sp -4 # call RoomManager_cpp_4EDFC0 004ED2F3 64 sp 4 # push ebp 004ED2F4 68 sp 4 # push ebx 004ED2FC 72 sp -8 # call sub_4BA720 @@ -75582,7 +75585,7 @@ 004ED6E2 208 sp 4 # push eax 004ED6E3 212 sp -4 # call sub_4EF5E0 004ED6EA 208 sp 4 # push ecx - 004ED6ED 212 sp -4 # call sub_4EDFC0 + 004ED6ED 212 sp -4 # call RoomManager_cpp_4EDFC0 004ED741 208 sp 4 # push esi 004ED742 212 sp 4 # push edi 004ED743 216 sp -8 # call dword ptr [edx+1D8h] @@ -75789,7 +75792,7 @@ 004EDFAD 16 sp -4 pop_bp 0 004EDFAE 12 sp -12 # add esp 0Ch 004EDFB1 0 ret -4 -004EDFC0 sub_4EDFC0 +004EDFC0 RoomManager_cpp_4EDFC0 004EDFC0 0 sp 4 # push 0FFFFFFFFh 004EDFC2 4 sp 4 # push offset SEH_4EDFC0 004EDFCD 8 sp 4 # push eax @@ -75936,7 +75939,7 @@ 004EE751 240 sp 4 # push ebp 004EE752 244 sp 4 # push eax 004EE76D 248 sp 4 # push ecx - 004EE771 252 sp -16 # call sub_4B37D0 + 004EE771 252 sp -16 # call RenderInfo_cpp_4B37D0 004EE822 236 sp 4 # push edi 004EE823 240 sp 4 # push ebx 004EE826 244 sp -8 # call dword ptr [edx+1D8h] @@ -76608,7 +76611,7 @@ 004F1139 40 sp 4 # push eax 004F113A 44 sp 4 # push ebx 004F113B 48 sp 4 # push 1 - 004F114B 52 sp -16 # call sub_4E8210 + 004F114B 52 sp -16 # call Room_cpp_4E8210 004F115A 36 sp 4 # push eax 004F115F 40 sp 4 # push eax 004F1164 44 sp 4 # push eax @@ -76711,7 +76714,7 @@ 004F1789 44 sp 4 # push ebx 004F178E 48 sp 4 # push ebx 004F1791 52 sp 4 # push eax - 004F1792 56 sp -12 # call sub_4E4D90 + 004F1792 56 sp -12 # call Room_cpp_4E4D90 004F17C6 44 sp 4 # push eax 004F17C9 48 sp -4 # call dword ptr [edx+1D4h] 004F17D3 44 sp 4 # push ecx @@ -76846,7 +76849,7 @@ 004F1D0A 52 sp -52 # add esp 34h 004F1D0D 0 ret -12 004F1D5B 68 jmp 004F1B53 -004F1D60 sub_4F1D60 +004F1D60 Tourture_cpp_4F1D60 004F1D60 0 sp 20 # sub esp 14h 004F1D63 20 sp 4 # push ebx 004F1D64 24 sp 4 # push esi @@ -76859,7 +76862,7 @@ 004F1DBA 32 sp 4 # push edx 004F1DBB 36 sp 4 # push 1 004F1DBD 40 sp 4 # push 1 - 004F1DD2 44 sp -16 # call sub_4E8210 + 004F1DD2 44 sp -16 # call Room_cpp_4E8210 004F1DE5 28 sp 4 # push edx 004F1DE8 32 sp -4 # call dword ptr [eax+1D4h] 004F1DF2 28 sp 4 # push ecx @@ -76883,7 +76886,7 @@ 004F1E85 32 sp 4 # push edx 004F1E86 36 sp 4 # push ebx 004F1E87 40 sp 4 # push 1 - 004F1E9C 44 sp -16 # call sub_4E8210 + 004F1E9C 44 sp -16 # call Room_cpp_4E8210 004F1EAF 28 sp 4 # push edx 004F1EB2 32 sp -4 # call dword ptr [eax+1D4h] 004F1EBC 28 sp 4 # push ecx @@ -76975,7 +76978,7 @@ 004F2358 0 ret -4 004F235B 4 sp -4 # pop esi 004F235E 0 ret -4 -004F2370 sub_4F2370 +004F2370 Tourture_cpp_4F2370 004F2370 0 sp 4 # push 0FFFFFFFFh 004F2372 4 sp 4 # push offset SEH_4F2370 004F237D 8 sp 4 # push eax @@ -77237,7 +77240,7 @@ 004F2FE6 8 sp -4 # pop ebx 004F2FE7 4 sp -4 # pop ecx 004F2FE8 0 ret -4 -004F2FF0 sub_4F2FF0 +004F2FF0 Training_cpp_4F2FF0 004F2FF0 0 sp 4 # push ebp 004F2FF3 4 sp 40 # sub esp 28h 004F2FF6 44 sp 4 # push ebx @@ -77266,7 +77269,7 @@ 004F32FE 44 sp -40 mov_sp_bp 0 004F3300 4 sp -4 pop_bp 0 004F3301 0 ret -12 -004F3310 sub_4F3310 +004F3310 Training_cpp_4F3310 004F3310 0 sp 4 # push ebp 004F3313 4 sp 88 # sub esp 58h 004F3319 92 sp 4 # push ebx @@ -77393,7 +77396,7 @@ 004F39A0 0 sp 4 # push esi 004F39F1 4 sp -4 # pop esi 004F39F2 0 ret 0 -004F3A00 sub_4F3A00 +004F3A00 Treasure_cpp_4F3A00 004F3A05 0 sp 32 # sub esp 20h 004F3A0D 32 sp 4 # push ebx 004F3A0E 36 sp 4 # push ebp @@ -77438,7 +77441,7 @@ 004F3BF1 32 sp 4 # push eax 004F3BF2 36 sp 4 # push ebp 004F3BF3 40 sp 4 # push ebx - 004F3BF4 44 sp -12 # call sub_4F3C60 + 004F3BF4 44 sp -12 # call Treasure_cpp_4F3C60 004F3C19 32 sp 4 # push edi 004F3C1D 36 sp -4 # call sub_4B7B10 004F3C36 32 sp -4 # pop edi @@ -77451,7 +77454,7 @@ 004F3C40 0 sp 4 # push esi 004F3C56 4 sp -4 # pop esi 004F3C57 0 ret 0 -004F3C60 sub_4F3C60 +004F3C60 Treasure_cpp_4F3C60 004F3C60 0 sp 40 # sub esp 28h 004F3C63 40 sp 4 # push ebx 004F3C68 44 sp 4 # push ebp @@ -77520,7 +77523,7 @@ 004F4088 44 sp -4 # pop ebx 004F4089 40 sp -40 # add esp 28h 004F408C 0 ret -12 -004F4090 sub_4F4090 +004F4090 Treasure_cpp_4F4090 004F4090 0 sp 40 # sub esp 28h 004F4097 40 sp 4 # push ebp 004F409C 44 sp 4 # push esi @@ -77595,7 +77598,7 @@ 004F44D0 36 sp 4 # push 0 004F44D2 40 sp -4 # call unknown_libname_3 004F44D7 36 sp 4 # push esi - 004F44E9 40 sp -16 # call sub_4B37D0 + 004F44E9 40 sp -16 # call RenderInfo_cpp_4B37D0 004F44F2 24 sp -4 # pop edi 004F44F3 20 sp -4 # pop esi 004F44FB 16 sp -4 pop_bp 0 @@ -77668,7 +77671,7 @@ 004F488E 32 sp 4 # push ecx 004F4893 36 sp 4 # push ebp 004F4894 40 sp 4 # push ebx - 004F4895 44 sp -12 # call sub_4F3C60 + 004F4895 44 sp -12 # call Treasure_cpp_4F3C60 004F48B9 32 sp 4 # push edi 004F48BD 36 sp -4 # call sub_4B7B10 004F48D6 32 sp -4 # pop edi @@ -77677,7 +77680,7 @@ 004F48D9 20 sp -4 # pop ebx 004F48DA 16 sp -16 # add esp 10h 004F48DD 0 ret 0 -004F48E0 sub_4F48E0 +004F48E0 Treasure_cpp_4F48E0 004F48E0 0 sp 36 # sub esp 24h 004F48E3 36 sp 4 # push ebx 004F48EA 40 sp 4 # push ebp @@ -77706,7 +77709,7 @@ 004F4A59 40 sp -4 # pop ebx 004F4A5A 36 sp -36 # add esp 24h 004F4A5D 0 ret -4 -004F4A60 sub_4F4A60 +004F4A60 Workshop_cpp_4F4A60 004F4A65 0 sp 4 # push esi 004F4A68 4 sp 4 # push 22h 004F4A75 8 sp 4 # push offset aDDevDk2Project_66 @@ -77730,7 +77733,7 @@ 004F4B09 20 sp -16 # add esp 10h 004F4B19 4 sp -4 # pop esi 004F4B1A 0 ret 0 -004F4B20 sub_4F4B20 +004F4B20 Workshop_cpp_4F4B20 004F4B20 0 sp 24 # sub esp 18h 004F4B23 24 sp 4 # push ebx 004F4B24 28 sp 4 # push ebp @@ -77745,7 +77748,7 @@ 004F4B89 44 sp 4 # push eax 004F4B8A 48 sp 4 # push ebx 004F4B8B 52 sp 4 # push 1 - 004F4BA0 56 sp -16 # call sub_4E8210 + 004F4BA0 56 sp -16 # call Room_cpp_4E8210 004F4BB7 40 sp 4 # push eax 004F4BBA 44 sp -4 # call dword ptr [edx+1D4h] 004F4BCA 40 sp 4 # push eax @@ -77801,7 +77804,7 @@ 004F4E31 44 sp 4 # push edx 004F4E32 48 sp 4 # push 1 004F4E34 52 sp 4 # push ebx - 004F4E48 56 sp -16 # call sub_4E8210 + 004F4E48 56 sp -16 # call Room_cpp_4E8210 004F4E9E 40 sp 4 # push edx 004F4EA3 44 sp 4 # push edx 004F4EA8 48 sp 4 # push edx @@ -77925,7 +77928,7 @@ 004F5494 44 sp 4 # push 0 004F549A 48 sp 4 # push 1 004F549C 52 sp 4 # push eax - 004F549F 56 sp -12 # call sub_4E4D90 + 004F549F 56 sp -12 # call Room_cpp_4E4D90 004F54AE 44 sp 4 # push eax 004F54B5 48 sp 4 # push eax 004F54BA 52 sp 4 # push eax @@ -78950,12 +78953,12 @@ 004F93F9 28 sp -4 # call sub_4BAB20 004F940A 24 sp 4 # push edx 004F940B 28 sp 4 # push edi - 004F940C 32 sp -8 # call sub_4C6460 + 004F940C 32 sp -8 # call PlayerRooms_cpp_4C6460 004F9492 24 sp 4 # push edi 004F9493 28 sp -4 # call sub_4BAB20 004F94A4 24 sp 4 # push edx 004F94A5 28 sp 4 # push edi - 004F94A6 32 sp -8 # call sub_4C6460 + 004F94A6 32 sp -8 # call PlayerRooms_cpp_4C6460 004F9509 24 sp -4 # pop edi 004F950A 20 sp -4 # pop esi 004F950B 16 sp -4 # pop ebx @@ -78973,12 +78976,12 @@ 004F9532 32 sp 4 # push edi 004F9559 36 sp 4 # push edx 004F955A 40 sp 4 # push 0Dh - 004F955C 44 sp -8 # call sub_4C6460 + 004F955C 44 sp -8 # call PlayerRooms_cpp_4C6460 004F9571 36 sp 4 # push eax 004F9572 40 sp 4 # push ecx 004F9577 44 sp 4 # push ebx 004F9578 48 sp 4 # push 1 - 004F9586 52 sp -16 # call sub_4E8210 + 004F9586 52 sp -16 # call Room_cpp_4E8210 004F9598 36 sp 4 # push eax 004F9599 40 sp -4 # call sub_48E6A0 004F95A5 36 sp 4 # push edi @@ -78997,13 +79000,13 @@ 004F9604 0 ret -4 004F960E 36 sp 4 # push edx 004F960F 40 sp 4 # push 0Dh - 004F9611 44 sp -8 # call sub_4C6460 + 004F9611 44 sp -8 # call PlayerRooms_cpp_4C6460 004F9621 36 sp 4 # push eax 004F9622 40 sp 4 # push 3 - 004F9624 44 sp -8 # call sub_4C6460 + 004F9624 44 sp -8 # call PlayerRooms_cpp_4C6460 004F9631 36 sp 4 # push ecx 004F9635 40 sp 4 # push 19h - 004F9637 44 sp -8 # call sub_4C6460 + 004F9637 44 sp -8 # call PlayerRooms_cpp_4C6460 004F968C 36 sp 4 # push edx 004F968F 40 sp -4 # call sub_48E6A0 004F969B 36 sp 4 # push edi @@ -79051,7 +79054,7 @@ 004F976F 0 ret -4 004F9794 68 sp 4 # push eax 004F9795 72 sp 4 # push 4 - 004F9797 76 sp -8 # call sub_4C6460 + 004F9797 76 sp -8 # call PlayerRooms_cpp_4C6460 004F97C0 68 sp 4 # push eax 004F97C8 72 sp -4 # call sub_4BC500 004F97D1 68 sp 4 # push ebp @@ -79062,7 +79065,7 @@ 004F9801 72 jmp 004F9B58 004F980D 68 sp 4 # push eax 004F980E 72 sp 4 # push 2 - 004F9810 76 sp -8 # call sub_4C6460 + 004F9810 76 sp -8 # call PlayerRooms_cpp_4C6460 004F9867 68 sp 4 # push ecx 004F986A 72 sp -4 # call sub_48E6A0 004F987A 68 sp 4 # push esi @@ -79084,7 +79087,7 @@ 004F9909 72 sp -4 # call sub_4944D0 004F9946 68 sp 4 # push edx 004F9947 72 sp 4 # push eax - 004F9948 76 sp -8 # call sub_4C6460 + 004F9948 76 sp -8 # call PlayerRooms_cpp_4C6460 004F9974 68 sp 4 # push edx 004F9975 72 sp -4 # call sub_48E6A0 004F9981 68 sp 4 # push esi @@ -79110,7 +79113,7 @@ 004F9A3F 0 ret -4 004F9A49 68 sp 4 # push edx 004F9A4A 72 sp 4 # push 1 - 004F9A4C 76 sp -8 # call sub_4C6460 + 004F9A4C 76 sp -8 # call PlayerRooms_cpp_4C6460 004F9AB1 68 sp 4 # push ebx 004F9AB2 72 sp 4 # push ebx 004F9AB3 76 sp 4 # push ebx @@ -79136,7 +79139,7 @@ 004F9B6C 56 sp -4 # pop ebx 004F9B6D 52 sp -52 # add esp 34h 004F9B70 0 ret -4 -004F9B90 sub_4F9B90 +004F9B90 ComputerPlayer_cpp_4F9B90 004F9B90 0 sp 52 # sub esp 34h 004F9B93 52 sp 4 # push esi 004F9BA6 56 sp -4 # pop esi @@ -79147,7 +79150,7 @@ 004F9BB3 64 sp 4 # push ebx 004F9BB4 68 sp 4 # push ecx 004F9BB8 72 sp 4 # push 0Bh - 004F9BC2 76 sp -8 # call sub_4C6460 + 004F9BC2 76 sp -8 # call PlayerRooms_cpp_4C6460 004F9BF3 68 sp 4 # push edx 004F9BF4 72 sp -4 # call sub_4BF390 004F9C19 68 sp 4 # push 542h @@ -79181,7 +79184,7 @@ 004F9FEF 56 sp -4 # pop esi 004F9FF0 52 sp -52 # add esp 34h 004F9FF3 0 ret -4 -004FA000 sub_4FA000 +004FA000 ComputerPlayer_cpp_4FA000 004FA000 0 sp 48 # sub esp 30h 004FA003 48 sp 4 # push esi 004FA016 52 sp -4 # pop esi @@ -79235,9 +79238,9 @@ 004FA4B2 20 sp 4 # push ebx 004FA4B3 24 sp -4 # call sub_4BAB20 004FA4FD 20 sp 4 # push edi - 004FA500 24 sp -4 # call sub_4FA000 + 004FA500 24 sp -4 # call ComputerPlayer_cpp_4FA000 004FA510 20 sp 4 # push edi - 004FA513 24 sp -4 # call sub_4F9B90 + 004FA513 24 sp -4 # call ComputerPlayer_cpp_4F9B90 004FA571 20 sp 4 # push eax 004FA572 24 sp -4 # call sub_4F9520 004FA59F 20 sp 4 # push edi @@ -79294,10 +79297,10 @@ 004FA92F 56 sp -4 # call sub_4944D0 004FA9B0 52 sp 4 # push eax 004FA9B1 56 sp 4 # push 3 - 004FA9B7 60 sp -8 # call sub_4C6460 + 004FA9B7 60 sp -8 # call PlayerRooms_cpp_4C6460 004FA9C6 52 sp 4 # push ecx 004FA9CA 56 sp 4 # push 19h - 004FA9CC 60 sp -8 # call sub_4C6460 + 004FA9CC 60 sp -8 # call PlayerRooms_cpp_4C6460 004FAA1A 52 sp 4 # push edx 004FAA1B 56 sp -4 # call sub_4BCAE0 004FAA73 52 sp 4 # push ecx @@ -79389,9 +79392,9 @@ 004FB33A 0 ret 0 004FB3C1 84 sp 4 # push eax 004FB3C2 88 sp 4 # push 5 - 004FB3C4 92 sp -8 # call sub_4C6460 + 004FB3C4 92 sp -8 # call PlayerRooms_cpp_4C6460 004FB3D1 84 sp 4 # push ecx - 004FB3D4 88 sp -4 # call sub_4C63D0 + 004FB3D4 88 sp -4 # call PlayerRooms_cpp_4C63D0 004FB418 84 sp 4 # push ecx 004FB419 88 sp 4 # push eax 004FB41D 92 sp -8 # call sub_4FBD80 @@ -79412,14 +79415,14 @@ 004FB52D 88 jmp 004FB58B 004FB535 84 sp 4 # push edx 004FB536 88 sp 4 # push 5 - 004FB538 92 sp -8 # call sub_4C6460 + 004FB538 92 sp -8 # call PlayerRooms_cpp_4C6460 004FB55D 84 sp 4 # push eax 004FB564 88 sp 4 # push ecx 004FB572 92 sp -8 # call sub_4C6010 004FB57F 84 sp 4 # push edx - 004FB580 88 sp -4 # call sub_4C63D0 + 004FB580 88 sp -4 # call PlayerRooms_cpp_4C63D0 004FB58A 84 sp 4 # push eax - 004FB58B 88 sp -4 # call sub_4C63D0 + 004FB58B 88 sp -4 # call PlayerRooms_cpp_4C63D0 004FB6F4 84 sp 4 # push 0 004FB6F6 88 sp 4 # push edi 004FB6FE 92 sp 4 # push ebx @@ -79470,7 +79473,7 @@ 004FBD2E 0 ret 0 004FBD35 84 sp 4 # push eax 004FBD36 88 sp 4 # push 6 - 004FBD38 92 sp -8 # call sub_4C6460 + 004FBD38 92 sp -8 # call PlayerRooms_cpp_4C6460 004FBD4C 84 jmp 004FAFC6 004FBD80 sub_4FBD80 004FBDA5 0 ret -8 @@ -79557,7 +79560,7 @@ 004FC67D 36 sp -4 # pop ebx 004FC67E 32 sp -32 # add esp 20h 004FC681 0 ret -12 -004FC690 sub_4FC690 +004FC690 ComputerPlayer_cpp_4FC690 004FC690 0 sp 4 # push ebp 004FC693 4 sp 64 # sub esp 40h 004FC696 68 sp 4 # push ebx @@ -79588,7 +79591,7 @@ 004FC9EF 0 ret 0 004FCA03 80 sp 4 # push edx 004FCA04 84 sp 4 # push eax - 004FCA05 88 sp -8 # call sub_4C6460 + 004FCA05 88 sp -8 # call PlayerRooms_cpp_4C6460 004FCA13 80 sp 4 # push eax 004FCA14 84 sp -4 # call sub_4FBE00 004FCA4E 80 sp 4 # push 0CBEh @@ -79598,7 +79601,7 @@ 004FCA68 96 sp -16 # add esp 10h 004FCABA 80 sp 4 # push eax 004FCABB 84 sp 4 # push ecx - 004FCABF 88 sp -8 # call sub_4C6460 + 004FCABF 88 sp -8 # call PlayerRooms_cpp_4C6460 004FCAD1 80 sp -4 # pop edi 004FCAD2 76 sp -4 # pop esi 004FCAD3 72 sp -4 # pop ebx @@ -79606,9 +79609,9 @@ 004FCAD6 4 sp -4 pop_bp 0 004FCAD7 0 ret 0 004FCADB 80 sp 4 # push ecx - 004FCADF 84 sp -4 # call sub_4C63D0 + 004FCADF 84 sp -4 # call PlayerRooms_cpp_4C63D0 004FCB01 80 sp 4 # push edx - 004FCB02 84 sp -4 # call sub_4C63D0 + 004FCB02 84 sp -4 # call PlayerRooms_cpp_4C63D0 004FCB40 80 sp -4 # pop edi 004FCB41 76 sp -4 # pop esi 004FCB42 72 sp -4 # pop ebx @@ -79628,7 +79631,7 @@ 004FCB84 4 sp -4 pop_bp 0 004FCB85 0 ret 0 004FCB8C 80 sp 4 # push eax - 004FCB8D 84 sp -4 # call sub_4C63D0 + 004FCB8D 84 sp -4 # call PlayerRooms_cpp_4C63D0 004FCB9F 80 sp -4 # pop edi 004FCBA0 76 sp -4 # pop esi 004FCBA1 72 sp -4 # pop ebx @@ -79679,7 +79682,7 @@ 004FCE60 68 sp -64 mov_sp_bp 0 004FCE62 4 sp -4 pop_bp 0 004FCE63 0 ret 0 -004FCE70 sub_4FCE70 +004FCE70 ComputerPlayer_cpp_4FCE70 004FCE70 0 sp 4 # push ecx 004FCE75 4 sp 4 # push ebx 004FCE78 8 sp 4 # push esi @@ -79716,7 +79719,7 @@ 004FCFAF 28 sp 4 # push 64h 004FCFB6 32 sp -16 # add esp 10h 004FCFE6 16 sp 4 # push edx - 004FCFEC 20 sp -4 # call sub_4C63D0 + 004FCFEC 20 sp -4 # call PlayerRooms_cpp_4C63D0 004FD003 16 sp -4 # pop edi 004FD004 12 sp -4 # pop esi 004FD005 8 sp -4 # pop ebx @@ -80009,7 +80012,7 @@ 004FE9AF 76 sp -72 mov_sp_bp 0 004FE9B1 4 sp -4 pop_bp 0 004FE9B2 0 ret -4 -004FE9C0 sub_4FE9C0 +004FE9C0 ComputerPlayer_cpp_4FE9C0 004FE9C0 0 sp 4 # push ebp 004FE9C3 4 sp 2120 # sub esp 848h 004FE9C9 2124 sp 4 # push ebx @@ -80017,7 +80020,7 @@ 004FE9CB 2132 sp 4 # push edi 004FEA29 2136 sp 4 # push edx 004FEA2A 2140 sp 4 # push 5 - 004FEA2C 2144 sp -8 # call sub_4C6460 + 004FEA2C 2144 sp -8 # call PlayerRooms_cpp_4C6460 004FEA3D 2136 sp 4 # push 10FEh 004FEA47 2140 sp 4 # push offset aDDevDk2Project_31 004FEA4C 2144 sp 4 # push eax @@ -80107,7 +80110,7 @@ 004FF062 104 sp -4 # call sub_4BF390 004FF0E7 100 sp 4 # push ecx 004FF0EB 104 sp 4 # push 5 - 004FF0ED 108 sp -8 # call sub_4C6460 + 004FF0ED 108 sp -8 # call PlayerRooms_cpp_4C6460 004FF228 100 sp 4 # push ecx 004FF22C 104 sp -4 # call sub_50E5C0 004FF245 100 sp -4 # pop edi @@ -80126,7 +80129,7 @@ 004FF443 64 sp -4 # call sub_4BCAE0 004FF49B 60 sp 4 # push edx 004FF49C 64 sp 4 # push 5 - 004FF49E 68 sp -8 # call sub_4C6460 + 004FF49E 68 sp -8 # call PlayerRooms_cpp_4C6460 004FF4B2 60 sp 4 # push ecx 004FF4B5 64 sp -4 # call sub_48E6A0 004FF4C5 60 sp 4 # push esi @@ -80137,7 +80140,7 @@ 004FF4E0 64 sp -4 # call sub_4BCAE0 004FF4F5 60 sp 4 # push ecx 004FF4F9 64 sp 4 # push 2 - 004FF503 68 sp -8 # call sub_4C6460 + 004FF503 68 sp -8 # call PlayerRooms_cpp_4C6460 004FF57B 60 sp 4 # push eax 004FF57C 64 sp 4 # push ecx 004FF589 68 sp -8 # call sub_4BC710 @@ -80155,10 +80158,10 @@ 004FF5CC 60 sp 4 # push edi 004FF5D2 64 sp 4 # push eax 004FF5D3 68 sp 4 # push 7 - 004FF5E1 72 sp -8 # call sub_4C6460 + 004FF5E1 72 sp -8 # call PlayerRooms_cpp_4C6460 004FF5EA 64 sp 4 # push ecx 004FF5EE 68 sp 4 # push 10h - 004FF5F0 72 sp -8 # call sub_4C6460 + 004FF5F0 72 sp -8 # call PlayerRooms_cpp_4C6460 004FF7A5 64 sp 4 # push eax 004FF7A6 68 sp -4 # call sub_4BCAE0 004FF7E4 64 sp 4 # push edx @@ -80167,7 +80170,7 @@ 004FF7FB 68 sp 4 # push ecx 004FF800 72 sp 4 # push ebp 004FF801 76 sp 4 # push 1 - 004FF803 80 sp -16 # call sub_4E8210 + 004FF803 80 sp -16 # call Room_cpp_4E8210 004FF813 64 sp 4 # push esi 004FF814 68 sp -4 # call sub_4BFBD0 004FF820 64 sp 4 # push edx @@ -80183,7 +80186,7 @@ 004FF998 68 sp 4 # push eax 004FF999 72 sp 4 # push ebx 004FF99A 76 sp 4 # push 1 - 004FF9A8 80 sp -16 # call sub_4E8210 + 004FF9A8 80 sp -16 # call Room_cpp_4E8210 004FF9BE 64 sp 4 # push edx 004FF9BF 68 sp -4 # call sub_48E6A0 004FF9CB 64 sp 4 # push esi @@ -80286,7 +80289,7 @@ 004FFD74 24 sp -20 mov_sp_bp 0 004FFD76 4 sp -4 pop_bp 0 004FFD77 0 ret -12 -004FFD80 sub_4FFD80 +004FFD80 ComputerPlayer_cpp_4FFD80 004FFD80 0 sp 24 # sub esp 18h 004FFD83 24 sp 4 # push ebx 004FFD84 28 sp 4 # push ebp @@ -80353,7 +80356,7 @@ 0050008D 28 sp -4 # pop ebx 0050008E 24 sp -24 # add esp 18h 00500091 0 ret -12 -005000A0 sub_5000A0 +005000A0 ComputerPlayer_cpp_5000A0 005000A0 0 sp 24 # sub esp 18h 005000A7 24 sp 4 # push ebx 005000A8 28 sp 4 # push ebp @@ -80361,7 +80364,7 @@ 005000AC 36 sp 4 # push edi 005000AD 40 sp 4 # push eax 005000B1 44 sp 4 # push 0Ah - 005000B3 48 sp -8 # call sub_4C6460 + 005000B3 48 sp -8 # call PlayerRooms_cpp_4C6460 005000C3 40 sp 4 # push 147Bh 005000CE 44 sp 4 # push offset aDDevDk2Project_31 005000D3 48 sp 4 # push ecx @@ -80382,7 +80385,7 @@ 0050024B 40 sp 4 # push ebp 0050024C 44 sp 4 # push edi 0050024D 48 sp 4 # push edx - 00500250 52 sp -12 # call sub_4FFD80 + 00500250 52 sp -12 # call ComputerPlayer_cpp_4FFD80 00500288 40 sp 4 # push ebp 00500289 44 sp 4 # push ecx 0050028C 48 sp -8 # call sub_4FFA50 @@ -80393,7 +80396,7 @@ 005002B0 40 sp 4 # push ebp 005002B1 44 sp 4 # push eax 005002B2 48 sp 4 # push ecx - 005002B5 52 sp -12 # call sub_4FFD80 + 005002B5 52 sp -12 # call ComputerPlayer_cpp_4FFD80 005002EB 40 sp 4 # push edx 005002EC 44 sp 4 # push ebp 005002ED 48 sp -8 # call sub_4FFA50 @@ -80404,7 +80407,7 @@ 00500311 40 sp 4 # push ecx 00500312 44 sp 4 # push ebp 00500313 48 sp 4 # push edx - 00500316 52 sp -12 # call sub_4FFD80 + 00500316 52 sp -12 # call ComputerPlayer_cpp_4FFD80 00500346 40 sp 4 # push ebp 00500347 44 sp 4 # push edi 00500348 48 sp -8 # call sub_4FFA50 @@ -80415,7 +80418,7 @@ 00500364 40 sp 4 # push ebp 00500365 44 sp 4 # push edi 00500366 48 sp 4 # push eax - 00500369 52 sp -12 # call sub_4FFD80 + 00500369 52 sp -12 # call ComputerPlayer_cpp_4FFD80 0050037F 40 sp -4 # pop edi 00500380 36 sp -4 # pop esi 00500381 32 sp -4 pop_bp 0 @@ -80428,7 +80431,7 @@ 00500390 28 sp -4 # pop ebx 00500391 24 sp -24 # add esp 18h 00500394 0 ret -4 -005003A0 sub_5003A0 +005003A0 ComputerPlayer_cpp_5003A0 005003A0 0 sp 12 # sub esp 0Ch 005003A3 12 sp 4 # push esi 005003C1 16 sp 4 # push 14AEh @@ -80492,7 +80495,7 @@ 00500630 40 sp -4 # pop ebx 00500631 36 sp -36 # add esp 24h 00500634 0 ret 0 -005006D0 sub_5006D0 +005006D0 ComputerPlayer_cpp_5006D0 005006D0 0 sp 32 # sub esp 20h 005006D7 32 sp 4 # push ebx 005006D8 36 sp 4 # push ebp @@ -80500,7 +80503,7 @@ 005006DC 44 sp 4 # push edi 005006DD 48 sp 4 # push eax 005006E1 52 sp 4 # push 0Bh - 005006E3 56 sp -8 # call sub_4C6460 + 005006E3 56 sp -8 # call PlayerRooms_cpp_4C6460 0050071C 48 sp 4 # push edx 0050071D 52 sp -4 # call sub_4BF390 00500729 48 sp 4 # push 1531h @@ -80512,7 +80515,7 @@ 0050077A 52 sp -4 # call sub_4BF390 005007B2 48 sp 4 # push eax 005007B3 52 sp 4 # push 0Dh - 005007B5 56 sp -8 # call sub_4C6460 + 005007B5 56 sp -8 # call PlayerRooms_cpp_4C6460 005007E4 48 sp 4 # push ecx 005007E8 52 sp -4 # call sub_4BCAE0 0050081A 48 sp 4 # push eax @@ -80528,7 +80531,7 @@ 005008B0 56 jmp 00500BFC 005008BC 48 sp 4 # push eax 005008BD 52 sp 4 # push 10h - 005008BF 56 sp -8 # call sub_4C6460 + 005008BF 56 sp -8 # call PlayerRooms_cpp_4C6460 005008EE 48 sp 4 # push ecx 005008F2 52 sp -4 # call sub_4BCAE0 00500924 48 sp 4 # push eax @@ -80544,7 +80547,7 @@ 005009BA 56 jmp 00500BFC 005009C6 48 sp 4 # push eax 005009C7 52 sp 4 # push 0Ch - 005009C9 56 sp -8 # call sub_4C6460 + 005009C9 56 sp -8 # call PlayerRooms_cpp_4C6460 005009F8 48 sp 4 # push ecx 005009FC 52 sp -4 # call sub_4BCAE0 00500A2E 48 sp 4 # push eax @@ -80553,7 +80556,7 @@ 00500A49 52 sp 4 # push edx 00500A4A 56 sp 4 # push 1 00500A4C 60 sp 4 # push 1 - 00500A5A 64 sp -16 # call sub_4E8210 + 00500A5A 64 sp -16 # call Room_cpp_4E8210 00500A6E 48 sp 4 # push edx 00500A71 52 sp -4 # call dword ptr [eax+1D4h] 00500ABE 48 sp 4 # push ebx @@ -80566,7 +80569,7 @@ 00500AF6 52 jmp 00500BFB 00500AFF 48 sp 4 # push ecx 00500B03 52 sp 4 # push 2 - 00500B05 56 sp -8 # call sub_4C6460 + 00500B05 56 sp -8 # call PlayerRooms_cpp_4C6460 00500B37 48 sp 4 # push edx 00500B38 52 sp -4 # call sub_4BCAE0 00500B68 48 sp 4 # push ecx @@ -80586,7 +80589,7 @@ 00500C0B 36 sp -4 # pop ebx 00500C0C 32 sp -32 # add esp 20h 00500C0F 0 ret -4 -00500C20 sub_500C20 +00500C20 ComputerPlayer_cpp_500C20 00500C26 0 sp 4 # push 0FFFFFFFFh 00500C28 4 sp 4 # push offset SEH_500C20 00500C2D 8 sp 4 # push eax @@ -80622,9 +80625,9 @@ 00500E58 120 sp 4 # push 64h 00500E5F 124 sp -16 # add esp 10h 00500E6D 108 sp 4 # push edx - 00500E6E 112 sp -4 # call sub_5000A0 + 00500E6E 112 sp -4 # call ComputerPlayer_cpp_5000A0 00500EA1 108 sp 4 # push ecx - 00500EA4 112 sp -4 # call sub_503060 + 00500EA4 112 sp -4 # call ComputerPlayer_cpp_503060 00500EB3 108 sp 4 # push 1 00500EB5 112 sp -4 # call sub_4BA7D0 00500EEB 108 sp 4 # push 1693h @@ -80652,17 +80655,17 @@ 0050100F 112 sp -4 # call sub_4BAFA0 00501024 108 sp 4 # push ecx 00501028 112 sp 4 # push 6 - 0050102A 116 sp -8 # call sub_4C6460 + 0050102A 116 sp -8 # call PlayerRooms_cpp_4C6460 00501069 108 sp 4 # push edx - 0050106A 112 sp -4 # call sub_503690 + 0050106A 112 sp -4 # call ComputerPlayer_cpp_503690 00501095 108 sp 4 # push eax - 00501096 112 sp -4 # call sub_502F00 + 00501096 112 sp -4 # call ComputerPlayer_cpp_502F00 005010AD 108 sp 4 # push ecx - 005010B0 112 sp -4 # call sub_5006D0 + 005010B0 112 sp -4 # call ComputerPlayer_cpp_5006D0 005010D5 108 sp 4 # push edx - 005010D6 112 sp -4 # call sub_5003A0 + 005010D6 112 sp -4 # call ComputerPlayer_cpp_5003A0 00501177 108 sp 4 # push eax - 00501178 112 sp -4 # call sub_4FCE70 + 00501178 112 sp -4 # call ComputerPlayer_cpp_4FCE70 00501188 108 sp 4 # push ecx 0050118B 112 sp -4 # call sub_4FD030 0050119D 108 sp 4 # push edx @@ -80921,7 +80924,7 @@ 00502EC5 0 ret 0 00502ECA 16 sp 4 # push ecx 00502ECE 20 sp 4 # push 6 - 00502ED0 24 sp -8 # call sub_4C6460 + 00502ED0 24 sp -8 # call PlayerRooms_cpp_4C6460 00502EE0 16 sp -4 # pop edi 00502EE1 12 sp -4 # pop esi 00502EE7 8 sp -4 # pop ebx @@ -80929,7 +80932,7 @@ 00502EE9 0 ret 0 00502EF0 sub_502EF0 00502EFA 0 ret 0 -00502F00 sub_502F00 +00502F00 ComputerPlayer_cpp_502F00 00502F06 0 sp 4 # push 0FFFFFFFFh 00502F08 4 sp 4 # push offset SEH_502F00 00502F0D 8 sp 4 # push eax @@ -80951,7 +80954,7 @@ 0050304B 40 sp -4 # pop ebx 0050304C 36 sp -36 # add esp 24h 0050304F 0 ret -4 -00503060 sub_503060 +00503060 ComputerPlayer_cpp_503060 00503060 0 sp 4 # push ebp 00503063 4 sp 44 # sub esp 2Ch 00503066 48 sp 4 # push ebx @@ -81058,7 +81061,7 @@ 00503684 48 sp -44 mov_sp_bp 0 00503686 4 sp -4 pop_bp 0 00503687 0 ret -4 -00503690 sub_503690 +00503690 ComputerPlayer_cpp_503690 00503690 0 sp 52 # sub esp 34h 00503693 52 sp 4 # push ebx 00503696 56 sp 4 # push ebp @@ -81071,7 +81074,7 @@ 00503721 72 sp -4 # call sub_4944D0 0050375E 68 sp 4 # push edx 0050375F 72 sp 4 # push eax - 00503760 76 sp -8 # call sub_4C6460 + 00503760 76 sp -8 # call PlayerRooms_cpp_4C6460 005037A6 68 sp 4 # push edx 005037CA 72 sp 4 # push eax 005037D4 76 sp -8 # call sub_4BC710 @@ -81084,7 +81087,7 @@ 005038F2 72 sp -4 # call sub_4944D0 00503934 68 sp 4 # push edx 00503935 72 sp 4 # push eax - 00503936 76 sp -8 # call sub_4C6460 + 00503936 76 sp -8 # call PlayerRooms_cpp_4C6460 00503973 68 sp 4 # push ecx 00503976 72 sp -4 # call sub_48E6A0 005039CA 68 sp -4 # pop edi @@ -81839,7 +81842,7 @@ 00505A6C 16 sp 4 # push ebp 00505A6D 20 sp 4 # push ecx 00505A6E 24 sp 4 # push edx - 00505A71 28 sp -12 # call sub_4F4090 + 00505A71 28 sp -12 # call Treasure_cpp_4F4090 00505A89 16 sp -4 # pop edi 00505A8A 12 sp -4 # pop esi 00505A8D 8 sp -4 pop_bp 0 @@ -82665,7 +82668,7 @@ 0050769A 48 sp 4 # push ebx 0050769B 52 sp 4 # push ecx 0050769C 56 sp 4 # push eax - 005076A3 60 sp -16 # call sub_4B37D0 + 005076A3 60 sp -16 # call RenderInfo_cpp_4B37D0 005076C3 44 sp -4 pop_bp 0 005076FC 40 sp -4 # pop esi 005076FD 36 sp -4 # pop edi @@ -84445,7 +84448,7 @@ 0050B5A5 8 sp -4 pop_bp 0 0050B5A8 4 sp -4 # pop ebx 0050B5A9 0 ret -4 -0050B5B0 sub_50B5B0 +0050B5B0 World_cpp_50B5B0 0050B5B0 0 sp 4 # push 0FFFFFFFFh 0050B5B2 4 sp 4 # push offset SEH_50B5B0 0050B5BD 8 sp 4 # push eax @@ -84501,7 +84504,7 @@ 0050BC92 76 sp 4 # push edi 0050BC95 80 sp -4 # call sub_4EF1F0 0050BC9A 76 sp 4 # push edi - 0050BC9D 80 sp -4 # call sub_4EDFC0 + 0050BC9D 80 sp -4 # call RoomManager_cpp_4EDFC0 0050BCA2 76 sp 4 # push 1 0050BCA4 80 sp 4 # push edi 0050BCA7 84 sp -8 # call sub_4F1040 @@ -86021,7 +86024,7 @@ 0050F880 0 sp 4 # push ecx 0050F8BC 4 sp -4 # pop ecx 0050F8BD 0 ret -4 -0050F8C0 sub_50F8C0 +0050F8C0 World_cpp_50F8C0 0050F8C5 0 sp 20 # sub esp 14h 0050F8CA 20 sp 4 # push ebx 0050F8CB 24 sp 4 # push ebp @@ -86347,7 +86350,7 @@ 00510361 16 sp -4 # pop ebx 00510362 12 sp -12 # add esp 0Ch 00510365 0 ret -16 -00510370 sub_510370 +00510370 World_cpp_510370 00510374 0 sp 4 # push ebx 00510375 4 sp 4 # push ebp 00510376 8 sp 4 # push esi @@ -86370,7 +86373,7 @@ 00510433 8 sp -4 pop_bp 0 00510434 4 sp -4 # pop ebx 00510435 0 ret -20 -00510440 sub_510440 +00510440 World_cpp_510440 00510440 0 sp 80 # sub esp 50h 00510443 80 sp 4 # push ebx 00510444 84 sp 4 # push ebp @@ -86391,7 +86394,7 @@ 00510524 104 sp 4 # push ecx 00510525 108 sp 4 # push edx 00510529 112 sp 4 # push eax - 0051052C 116 sp -20 # call sub_510370 + 0051052C 116 sp -20 # call World_cpp_510370 00510577 96 sp 4 # push ecx 00510580 100 sp 4 # push edx 00510581 104 sp 4 # push ecx @@ -86412,7 +86415,7 @@ 00510618 104 sp -8 # call dword ptr [edx+208h] 00510643 96 sp 4 # push ecx 00510644 100 sp 4 # push edx - 0051064B 104 sp -8 # call sub_4764A0 + 0051064B 104 sp -8 # call RunAway_cpp_4764A0 00510682 96 sp 4 # push 11E8h 00510693 100 sp 4 # push offset aDDevDk2Project_67 00510698 104 sp 4 # push edx @@ -88803,7 +88806,7 @@ 00518BAC 76 sp 4 # push eax 00518BAD 80 sp 4 # push ecx 00518BAE 84 sp 4 # push edx - 00518BB1 88 sp -16 # call sub_519B20 + 00518BB1 88 sp -16 # call WorldTrigger_cpp_519B20 00518BE4 72 sp 4 # push esi 00518BE5 76 sp -4 # call sub_48DF10 00518BF6 72 sp 4 # push eax @@ -88885,7 +88888,7 @@ 00519192 72 sp 4 # push edx 00519195 76 sp 4 # push ecx 00519196 80 sp 4 # push edx - 00519199 84 sp -12 # call sub_519F90 + 00519199 84 sp -12 # call WorldTrigger_cpp_519F90 005191C0 72 sp 4 # push ecx 005191C1 76 sp 4 # push edx 005191C2 80 sp 4 # push eax @@ -89066,7 +89069,7 @@ 00519B01 4 sp -4 # pop ebx 00519B02 0 ret -8 00519B11 12 jmp 00519A6A -00519B20 sub_519B20 +00519B20 WorldTrigger_cpp_519B20 00519B20 0 sp 56 # sub esp 38h 00519B27 56 sp 4 # push ebx 00519B28 60 sp 4 # push ebp @@ -89149,7 +89152,7 @@ 00519F7D 60 sp -4 # pop ebx 00519F7E 56 sp -56 # add esp 38h 00519F81 0 ret -16 -00519F90 sub_519F90 +00519F90 WorldTrigger_cpp_519F90 00519F90 0 sp 112 # sub esp 70h 00519F93 112 sp 4 # push ebx 00519F94 116 sp 4 # push ebp @@ -89187,7 +89190,7 @@ 0051A266 132 sp 4 # push ecx 0051A26B 136 sp 4 # push edx 0051A26C 140 sp 4 # push ecx - 0051A26F 144 sp -16 # call sub_519B20 + 0051A26F 144 sp -16 # call WorldTrigger_cpp_519B20 0051A2A2 128 sp 4 # push 1 0051A2AA 132 sp 4 # push eax 0051A2AB 136 sp 4 # push 1 @@ -90774,7 +90777,7 @@ 005212BF 8 sp -4 # pop edi 005212C5 4 sp -4 # pop esi 005212C6 0 ret 0 -005212D0 sub_5212D0 +005212D0 WorldWDL_cpp_5212D0 005212D0 0 sp 16 # sub esp 10h 005212D3 16 sp 4 # push ebx 005212D4 20 sp 4 # push esi @@ -92542,98 +92545,97 @@ 005256CC 484 sp 4 # push offset ?instance@CDefaultPlayerInterface@dk2@@0V12@A 005256D4 488 sp -8 # call MyProfiler_attachPlayerI 005256F7 480 sp 4 # push eax - 005256FC 484 sp -4 # call dword ptr [edx+0C0h] - 0052570A 480 sp 4 # push eax - 0052570D 484 sp -4 # call dword ptr [edx+0C8h] - 0052574A 480 sp 4 # push ecx - 0052574D 484 sp -4 # call CWorld_sub_517480 - 005257B2 480 sp 4 # push ebx - 005257B8 484 sp -4 # add esp 4 - 005257C0 480 sp 4 # push ebx - 005257C1 484 sp 4 # push edi - 005257C2 488 sp -8 # call CFrontEndComponent_sub_536E20 - 005257DB 480 sp 8 # sub esp 8 - 00525805 488 sp -8 # call sub_5B4D00 - 00525831 480 sp -8 # call sub_5B4D00 - 00525856 480 sp 4 # push edx - 0052585C 484 sp -4 # add esp 4 - 00525871 480 sp 4 # push eax - 00525877 484 sp -4 # add esp 4 - 005258B8 480 sp 4 # push ebx - 005258B9 484 sp 4 # push offset ?instance@CFrontEndComponent@dk2@@0V12@A - 005258C0 488 sp 4 # push ebx - 005258C1 492 jmp 005258C4 - 005258C3 488 sp 4 # push edi - 005258C4 492 sp 4 # push offset CFrontEndComponent_f30f1C_static_listeners - 005258CE 496 sp -16 # add esp 10h - 005258D6 480 sp 4 # push offset ?instance@CFrontEndComponent@dk2@@0V12@A - 005258DB 484 sp -4 # call CGuiManager_sub_52BC50 - 005258F5 480 sp 4 # push offset ?instance@CFrontEndComponent@dk2@@0V12@A - 005258FA 484 sp 4 # push ebx - 005258FB 488 sp 4 # push eax - 005258FE 492 sp -12 # add esp 0Ch - 00525901 480 sp 4 # push offset ?instance@CFrontEndComponent@dk2@@0V12@A - 00525910 484 sp -4 # add esp 4 - 00525922 480 sp 4 # push esi - 00525926 484 sp -4 # call MyProfiler_draw3dScene - 005259ED 480 sp 4 # push edx - 005259EE 484 sp 4 # push eax - 005259FB 488 sp -8 # call sub_441990 - 00525A46 480 sp 4 # push eax - 00525A55 484 sp -4 # call ProbablyGlobalRenderObj_sub_449AC0 - 00525A5A 480 sp 4 # push ebx - 00525A5B 484 sp 4 # push 3 - 00525A5F 488 sp -8 # call ProbablyGlobalRenderObj_sub_44A5D0 - 00525A6C 480 sp 4 # push offset ?instance@CDefaultPlayerInterface@dk2@@0V12@A - 00525A74 484 sp -4 # call clear_pobj_C - 00525A88 480 sp 4 # push ecx - 00525A8B 484 sp -4 # call MyProfiler_clearCommunicationInterface - 00525A90 480 sp 4 # push offset CWorld_instance_start - 00525A97 484 sp -4 # call MyProfiler_clearCWorld - 00525A9C 480 sp 4 # push offset CBridge_instance - 00525AA3 484 sp -4 # call MyProfiler_clearCBridge - 00525ABF 480 sp 4 # push ebp - 00525ACA 484 sp -4 # add esp 4 - 00525B03 480 sp 4 # push edx - 00525B0D 484 sp -4 # add esp 4 - 00525B1C 480 sp 4 # push ebx - 00525B26 484 sp 8 # sub esp 8 - 00525B30 492 sp 4 # push ebx - 00525B3F 496 sp 4 # push eax - 00525B40 500 sp 4 # push ecx - 00525B46 504 sp -24 # add esp 18h - 00525B4E 480 sp 4 # push ebx - 00525B4F 484 sp 8 # sub esp 8 - 00525B54 492 sp 4 # push ebx - 00525B5F 496 sp 4 # push eax - 00525B64 500 sp 4 # push eax - 00525B70 504 sp -24 # add esp 18h - 00525B73 480 sp 4 # push 32h - 00525B75 484 sp -4 # call edi - 00525BC2 480 sp 4 # push 2 - 00525BC4 484 sp 4 # push ecx - 00525BD7 488 sp -8 # call MyObj67B948_selectMyCR - 00525BE0 480 sp 4 # push 2 - 00525BE2 484 sp 4 # push edx - 00525BEA 488 sp -8 # call MyObj67B948_selectMyTR - 00525BEF 480 sp 4 # push esi - 00525BF5 484 sp -4 # add esp 4 - 00525C02 480 sp 4 # push eax - 00525C03 484 sp 4 # push ecx - 00525C21 488 sp -8 # call FontObj_setFontMask - 00525C26 480 sp 4 # push ebx - 00525C27 484 sp 4 # push offset g_FontObj5_instance - 00525C30 488 sp 4 # push esi - 00525C35 492 sp 4 # push edx - 00525C36 496 sp 4 # push eax - 00525C3E 500 sp -20 # call MyObj67B948_sub_62CAE0 - 00525C6E 480 sp 4 # push 5000 - 00525C73 484 sp -4 # call edi - 00525CB6 480 sp 4 # push 40h - 00525CB8 484 sp 4 # push offset Source - 00525CBD 488 sp 4 # push (offset ?instance@MyResources@dk2@@0V12@A.gap2A0F+8) - 00525CE1 492 sp -12 # add esp 0Ch - 00525D1F 480 jmp 005255F5 + 0052570A 484 sp 4 # push eax + 0052574A 488 sp 4 # push ecx + 0052574D 492 sp -4 # call CWorld_sub_517480 + 005257B2 488 sp 4 # push ebx + 005257B8 492 sp -4 # add esp 4 + 005257C0 488 sp 4 # push ebx + 005257C1 492 sp 4 # push edi + 005257C2 496 sp -8 # call CFrontEndComponent_sub_536E20 + 005257DB 488 sp 8 # sub esp 8 + 00525805 496 sp -8 # call sub_5B4D00 + 00525831 488 sp -8 # call sub_5B4D00 + 00525839 480 sp -8 # add esp 8 + 00525856 472 sp 4 # push edx + 0052585C 476 sp -4 # add esp 4 + 00525871 472 sp 4 # push eax + 00525877 476 sp -4 # add esp 4 + 005258B8 472 sp 4 # push ebx + 005258B9 476 sp 4 # push offset ?instance@CFrontEndComponent@dk2@@0V12@A + 005258C0 480 sp 4 # push ebx + 005258C1 484 jmp 005258C4 + 005258C3 480 sp 4 # push edi + 005258C4 484 sp 4 # push offset CFrontEndComponent_f30f1C_static_listeners + 005258CE 488 sp -16 # add esp 10h + 005258D6 472 sp 4 # push offset ?instance@CFrontEndComponent@dk2@@0V12@A + 005258DB 476 sp -4 # call CGuiManager_sub_52BC50 + 005258F5 472 sp 4 # push offset ?instance@CFrontEndComponent@dk2@@0V12@A + 005258FA 476 sp 4 # push ebx + 005258FB 480 sp 4 # push eax + 005258FE 484 sp -12 # add esp 0Ch + 00525901 472 sp 4 # push offset ?instance@CFrontEndComponent@dk2@@0V12@A + 00525910 476 sp -4 # add esp 4 + 00525922 472 sp 4 # push esi + 00525926 476 sp -4 # call MyProfiler_draw3dScene + 005259ED 472 sp 4 # push edx + 005259EE 476 sp 4 # push eax + 005259FB 480 sp -8 # call sub_441990 + 00525A46 472 sp 4 # push eax + 00525A55 476 sp -4 # call ProbablyGlobalRenderObj_sub_449AC0 + 00525A5A 472 sp 4 # push ebx + 00525A5B 476 sp 4 # push 3 + 00525A5F 480 sp -8 # call ProbablyGlobalRenderObj_sub_44A5D0 + 00525A6C 472 sp 4 # push offset ?instance@CDefaultPlayerInterface@dk2@@0V12@A + 00525A74 476 sp -4 # call clear_pobj_C + 00525A88 472 sp 4 # push ecx + 00525A8B 476 sp -4 # call MyProfiler_clearCommunicationInterface + 00525A90 472 sp 4 # push offset CWorld_instance_start + 00525A97 476 sp -4 # call MyProfiler_clearCWorld + 00525A9C 472 sp 4 # push offset CBridge_instance + 00525AA3 476 sp -4 # call MyProfiler_clearCBridge + 00525ABF 472 sp 4 # push ebp + 00525ACA 476 sp -4 # add esp 4 + 00525B03 472 sp 4 # push edx + 00525B0D 476 sp -4 # add esp 4 + 00525B1C 472 sp 4 # push ebx + 00525B26 476 sp 8 # sub esp 8 + 00525B30 484 sp 4 # push ebx + 00525B3F 488 sp 4 # push eax + 00525B40 492 sp 4 # push ecx + 00525B46 496 sp -24 # add esp 18h + 00525B4E 472 sp 4 # push ebx + 00525B4F 476 sp 8 # sub esp 8 + 00525B54 484 sp 4 # push ebx + 00525B5F 488 sp 4 # push eax + 00525B64 492 sp 4 # push eax + 00525B70 496 sp -24 # add esp 18h + 00525B73 472 sp 4 # push 32h + 00525B75 476 sp -4 # call edi + 00525BC2 472 sp 4 # push 2 + 00525BC4 476 sp 4 # push ecx + 00525BD7 480 sp -8 # call MyObj67B948_selectMyCR + 00525BE0 472 sp 4 # push 2 + 00525BE2 476 sp 4 # push edx + 00525BEA 480 sp -8 # call MyObj67B948_selectMyTR + 00525BEF 472 sp 4 # push esi + 00525BF5 476 sp -4 # add esp 4 + 00525C02 472 sp 4 # push eax + 00525C03 476 sp 4 # push ecx + 00525C21 480 sp -8 # call FontObj_setFontMask + 00525C26 472 sp 4 # push ebx + 00525C27 476 sp 4 # push offset g_FontObj5_instance + 00525C30 480 sp 4 # push esi + 00525C35 484 sp 4 # push edx + 00525C36 488 sp 4 # push eax + 00525C3E 492 sp -20 # call MyObj67B948_sub_62CAE0 + 00525C6E 472 sp 4 # push 5000 + 00525C73 476 sp -4 # call edi + 00525CB6 472 sp 4 # push 40h + 00525CB8 476 sp 4 # push offset Source + 00525CBD 480 sp 4 # push (offset ?instance@MyResources@dk2@@0V12@A.gap2A0F+8) + 00525CE1 484 sp -12 # add esp 0Ch + 00525D1F 472 jmp 005255F5 00525D30 sub_525D30 00525D30 0 sp 8 # sub esp 8 00525D3E 8 sp 4 # push ebx @@ -97836,7 +97838,7 @@ 005358C3 80 sp 4 # push ebp 005358C4 84 sp 4 # push ecx 005358C5 88 sp 4 # push edi - 005358CD 92 sp -16 # call sub_4B37D0 + 005358CD 92 sp -16 # call RenderInfo_cpp_4B37D0 00535931 76 sp -4 # pop edi 00535932 72 sp -4 # pop esi 00535933 68 sp -4 pop_bp 0 @@ -110586,7 +110588,7 @@ 005558C6 0 ret 0 005558C9 4 sp -4 # pop esi 005558CA 0 ret 0 -005558D0 Random +005558D0 badRandomCall 005558D0 0 sp 4 # push ebp 005558D3 4 sp 4 # push ebx 005558E1 8 sp 4 # push eax @@ -122433,7 +122435,7 @@ 005742F0 0 sp 4 # push esi 00574301 4 sp -4 # pop esi 00574302 0 ret 0 -00574310 sub_574310 +00574310 LoadCachedTextures 00574310 0 sp 4 # push ebp 00574313 4 sp 1540 # sub esp 604h 0057431E 1544 sp 4 # push ebx @@ -122528,7 +122530,7 @@ 005747A4 0 ret 0 005747B0 sub_5747B0 005747B9 0 ret 0 -005747C0 sub_5747C0 +005747C0 setPmeshReductionLevel 005747C9 0 ret 0 005747D0 sub_5747D0 005747D9 0 ret 0 @@ -123798,7 +123800,7 @@ 0057A1D8 8 sp -4 # pop esi 0057A1D9 4 sp -4 # pop ecx 0057A1DA 0 ret 0 -0057A1E0 sub_57A1E0 +0057A1E0 CDirectIFFFile_57A1E0 0057A1E0 0 sp 4 # push ecx 0057A1E1 4 sp 4 # push ebx 0057A1E2 8 sp 4 # push ebp @@ -123850,7 +123852,7 @@ 0057A306 8 sp -4 # pop ebx 0057A307 4 sp -4 # pop ecx 0057A308 0 ret -4 -0057A310 sub_57A310 +0057A310 CDirectIFFFile_57A310 0057A310 0 sp 4 # push ecx 0057A311 4 sp 4 # push esi 0057A31B 8 sp -4 # pop esi @@ -123870,19 +123872,19 @@ 0057A39B 8 sp -4 # pop esi 0057A39C 4 sp -4 # pop ecx 0057A39D 0 ret 0 -0057A3A0 sub_57A3A0 +0057A3A0 CDirectIFFFile_writeIf2 0057A3A8 0 ret -8 0057A3B1 0 sp 4 # push edx 0057A3B6 4 sp 4 # push edx 0057A3B7 8 sp -8 # call dword ptr [eax+4] 0057A3BA 0 ret -8 -0057A3C0 readFileee +0057A3C0 CDirectIFFFile_readInt 0057A3C8 0 ret -8 0057A3D1 0 sp 4 # push edx 0057A3D6 4 sp 4 # push edx 0057A3D7 8 sp -8 # call dword ptr [eax] 0057A3D9 0 ret -8 -0057A3E0 sub_57A3E0 +0057A3E0 CDirectIFFFile_readString 0057A3E0 0 sp 4 # push ebx 0057A3E1 4 sp 4 # push esi 0057A3F0 8 sp -4 # pop esi @@ -123896,13 +123898,13 @@ 0057A41D 8 sp -4 # pop esi 0057A41E 4 sp -4 # pop ebx 0057A41F 0 ret -4 -0057A430 sub_57A430 +0057A430 CDirectIFFFile_seekTo 0057A43D 0 sp 4 # push eax 0057A441 4 sp -4 # call dword ptr [edx+8] 0057A444 0 ret -4 0057A450 ??0CDirectIFFFile@@QAE@XZ 0057A46C 0 ret 0 -0057A470 CDirectIFFFile::fun_57A470 +0057A470 CDirectIFFFile_seek 0057A47A 0 sp 4 # push 0 0057A47C 4 sp 4 # push eax 0057A47D 8 sp 4 # push ecx @@ -123929,7 +123931,7 @@ 0057A553 8 sp -4 # pop esi 0057A554 4 sp -4 # pop ecx 0057A555 0 ret 0 -0057A560 sub_57A560 +0057A560 CDirectIFFFile_open 0057A560 0 sp 4 # push ecx 0057A561 4 sp 4 # push ebx 0057A562 8 sp 4 # push esi @@ -123949,16 +123951,16 @@ 0057A602 20 sp 4 # push eax 0057A60E 24 sp -8 # add esp 8 0057A637 16 sp 4 # push ecx - 0057A650 20 sp -4 # call sub_57A1E0 + 0057A650 20 sp -4 # call CDirectIFFFile_57A1E0 0057A674 16 sp 4 # push eax - 0057A675 20 sp -4 # call sub_57A430 + 0057A675 20 sp -4 # call CDirectIFFFile_seekTo 0057A67F 16 sp 4 # push 4 0057A68D 20 sp 4 # push eax - 0057A692 24 sp -8 # call sub_57A3A0 + 0057A692 24 sp -8 # call CDirectIFFFile_writeIf2 0057A697 16 sp 4 # push edi 0057A698 20 jmp 0057A6A5 0057A6A4 16 sp 4 # push edx - 0057A6A7 20 sp -4 # call sub_57A430 + 0057A6A7 20 sp -4 # call CDirectIFFFile_seekTo 0057A6BC 16 sp 4 # push edx 0057A6C2 20 sp -4 # add esp 4 0057A6CD 16 sp -4 # pop edi @@ -123974,7 +123976,7 @@ 0057A6E9 8 sp -4 # pop ebx 0057A6EA 4 sp -4 # pop ecx 0057A6EB 0 ret -12 -0057A6F0 sub_57A6F0 +0057A6F0 CDirectIFFFile_57A6F0 0057A6F0 0 sp 4 # push ecx 0057A6F1 4 sp 4 # push esi 0057A6F4 8 sp 4 # push edi @@ -123993,7 +123995,7 @@ 0057A795 8 sp -4 # pop esi 0057A796 4 sp -4 # pop ecx 0057A797 0 ret 0 -0057A7A0 CDirectIFFFile::fun_57A7A0 +0057A7A0 CDirectIFFFile_readFile_57A7A0 0057A7AA 0 ret -8 0057A7B1 0 sp 4 # push esi 0057A7B5 4 sp 4 # push eax @@ -124003,7 +124005,7 @@ 0057A7C8 20 sp -16 # add esp 10h 0057A7CB 4 sp -4 # pop esi 0057A7CC 0 ret -8 -0057A7D0 CDirectIFFFile::fun_57A7D0 +0057A7D0 CDirectIFFFile_writeFile_57A7D0 0057A7DA 0 ret -8 0057A7E1 0 sp 4 # push esi 0057A7E5 4 sp 4 # push eax @@ -124021,18 +124023,18 @@ 0057A836 16 sp -4 # call dword ptr [edx+8] 0057A83E 12 sp 4 # push 4 0057A84E 16 sp 4 # push edx - 0057A851 20 sp -8 # call sub_57A3A0 + 0057A851 20 sp -8 # call CDirectIFFFile_writeIf2 0057A85D 12 sp 4 # push edi 0057A863 16 sp -4 # call dword ptr [eax+8] 0057A874 12 sp 4 # push edx - 0057A875 16 sp -4 # call sub_57A430 + 0057A875 16 sp -4 # call CDirectIFFFile_seekTo 0057A88D 12 sp 4 # push eax - 0057A8A6 16 sp -4 # call sub_57A1E0 + 0057A8A6 16 sp -4 # call CDirectIFFFile_57A1E0 0057A8D2 12 sp 4 # push eax 0057A8D8 16 sp -4 # call dword ptr [edx+8] 0057A8E0 12 sp 4 # push 4 0057A8F0 16 sp 4 # push edx - 0057A8F3 20 sp -8 # call sub_57A3A0 + 0057A8F3 20 sp -8 # call CDirectIFFFile_writeIf2 0057A8FF 12 sp 4 # push edi 0057A905 16 sp -4 # call dword ptr [eax+8] 0057A914 12 sp -4 # pop edi @@ -124040,7 +124042,7 @@ 0057A916 4 sp -4 # pop ebx 0057A917 0 ret -12 0057A926 12 sp 4 # push edx - 0057A927 16 sp -4 # call sub_57A430 + 0057A927 16 sp -4 # call CDirectIFFFile_seekTo 0057A938 12 sp -4 # pop edi 0057A939 8 sp -4 # pop esi 0057A93A 4 sp -4 # pop ebx @@ -124729,7 +124731,7 @@ 0057D2EC 1044 sp 4 # push eax 0057D2F2 1048 sp -12 # call sub_57A800 0057D2F7 1036 sp 4 # push offset aHead - 0057D301 1040 sp -4 # call sub_57A1E0 + 0057D301 1040 sp -4 # call CDirectIFFFile_57A1E0 0057D341 1036 sp 4 # push eax 0057D347 1040 sp -4 # add esp 4 0057D358 1036 sp 4 # push ecx @@ -124743,13 +124745,13 @@ 0057D390 sub_57D390 0057D390 0 sp 3264 # sub esp 0CC0h 0057D39B 3264 sp 4 # push offset aMatl - 0057D3A0 3268 sp -4 # call sub_57A1E0 + 0057D3A0 3268 sp -4 # call CDirectIFFFile_57A1E0 0057D3C4 3264 sp 4 # push edi 0057D3C5 3268 sp 4 # push esi 0057D3C6 3272 sp 4 # push ebp 0057D3C7 3276 sp 4 # push ebx 0057D3D4 3280 sp 4 # push offset aMat2 - 0057D3DE 3284 sp -4 # call sub_57A1E0 + 0057D3DE 3284 sp -4 # call CDirectIFFFile_57A1E0 0057D44A 3280 sp 4 # push ecx 0057D45B 3284 sp -4 # add esp 4 0057D51A 3280 sp 4 # push ecx @@ -124782,15 +124784,15 @@ 0057D5D1 17592 sp 4 # push esi 0057D5D2 17596 sp 4 # push edi 0057D5D3 17600 sp 4 # push offset aMesh - 0057D5DD 17604 sp -4 # call sub_57A1E0 + 0057D5DD 17604 sp -4 # call CDirectIFFFile_57A1E0 0057D5E2 17600 sp 4 # push offset aHead - 0057D5EC 17604 sp -4 # call sub_57A1E0 + 0057D5EC 17604 sp -4 # call CDirectIFFFile_57A1E0 0057D689 17600 sp 4 # push offset aCtrl - 0057D697 17604 sp -4 # call sub_57A1E0 + 0057D697 17604 sp -4 # call CDirectIFFFile_57A1E0 0057D6F3 17600 sp 4 # push offset aSprs - 0057D6FD 17604 sp -4 # call sub_57A1E0 + 0057D6FD 17604 sp -4 # call CDirectIFFFile_57A1E0 0057D717 17600 sp 4 # push offset aSphd - 0057D721 17604 sp -4 # call sub_57A1E0 + 0057D721 17604 sp -4 # call CDirectIFFFile_57A1E0 0057D79C 17600 sp 4 # push 3Ah 0057D7A5 17604 sp -4 # add esp 4 0057D7BF 17600 sp 4 # push ebp @@ -124806,9 +124808,9 @@ 0057D7F2 17640 sp 4 # push edi 0057D7F5 17644 sp -44 # call ??0CPolyMeshResource@@QAE@HHHPAH0HHHHHH@Z 0057D863 17600 sp 4 # push offset aSprs - 0057D86D 17604 sp -4 # call sub_57A1E0 + 0057D86D 17604 sp -4 # call CDirectIFFFile_57A1E0 0057D9FD 17600 sp 4 # push offset aGeom - 0057DA07 17604 sp -4 # call sub_57A1E0 + 0057DA07 17604 sp -4 # call CDirectIFFFile_57A1E0 0057DA9A 17600 sp -4 # pop edi 0057DA9B 17596 sp -4 # pop esi 0057DA9E 17592 sp -4 pop_bp 0 @@ -124830,15 +124832,15 @@ 0057DAF1 13508 sp 4 # push esi 0057DAF2 13512 sp 4 # push edi 0057DAF3 13516 sp 4 # push offset aAnim - 0057DAFD 13520 sp -4 # call sub_57A1E0 + 0057DAFD 13520 sp -4 # call CDirectIFFFile_57A1E0 0057DB02 13516 sp 4 # push offset aHead - 0057DB0C 13520 sp -4 # call sub_57A1E0 + 0057DB0C 13520 sp -4 # call CDirectIFFFile_57A1E0 0057DBE3 13516 sp 4 # push offset aCtrl - 0057DBEF 13520 sp -4 # call sub_57A1E0 + 0057DBEF 13520 sp -4 # call CDirectIFFFile_57A1E0 0057DC66 13516 sp 4 # push offset aSprs - 0057DC70 13520 sp -4 # call sub_57A1E0 + 0057DC70 13520 sp -4 # call CDirectIFFFile_57A1E0 0057DC8A 13516 sp 4 # push offset aSphd - 0057DC94 13520 sp -4 # call sub_57A1E0 + 0057DC94 13520 sp -4 # call CDirectIFFFile_57A1E0 0057DD0F 13516 sp 4 # push 58h 0057DD18 13520 sp -4 # add esp 4 0057DD3A 13516 sp 4 # push ebp @@ -124858,17 +124860,17 @@ 0057DD79 13572 sp 4 # push edi 0057DD7C 13576 sp -60 # call ??0CAnimMeshResource@@QAE@HHHHHHHHHHHHMHH@Z 0057DDFE 13516 sp 4 # push offset aSprs - 0057DE08 13520 sp -4 # call sub_57A1E0 + 0057DE08 13520 sp -4 # call CDirectIFFFile_57A1E0 0057DE49 13516 sp 4 # push offset aPoly - 0057DE53 13520 sp -4 # call sub_57A1E0 + 0057DE53 13520 sp -4 # call CDirectIFFFile_57A1E0 0057DE98 13516 sp 4 # push offset aVert - 0057DEA2 13520 sp -4 # call sub_57A1E0 + 0057DEA2 13520 sp -4 # call CDirectIFFFile_57A1E0 0057DFBB 13516 sp 4 # push offset aItab - 0057DFC5 13520 sp -4 # call sub_57A1E0 + 0057DFC5 13520 sp -4 # call CDirectIFFFile_57A1E0 0057E018 13516 sp 4 # push offset aGeom - 0057E022 13520 sp -4 # call sub_57A1E0 + 0057E022 13520 sp -4 # call CDirectIFFFile_57A1E0 0057E07C 13516 sp 4 # push offset aVgeo - 0057E086 13520 sp -4 # call sub_57A1E0 + 0057E086 13520 sp -4 # call CDirectIFFFile_57A1E0 0057E0E4 13516 sp -4 # pop edi 0057E0E5 13512 sp -4 # pop esi 0057E0E8 13508 sp -4 pop_bp 0 @@ -124886,15 +124888,15 @@ 0057E12D 1048 sp 4 # push esi 0057E12E 1052 sp 4 # push edi 0057E12F 1056 sp 4 # push offset aGrop - 0057E139 1060 sp -4 # call sub_57A1E0 + 0057E139 1060 sp -4 # call CDirectIFFFile_57A1E0 0057E13E 1056 sp 4 # push offset aHead - 0057E148 1060 sp -4 # call sub_57A1E0 + 0057E148 1060 sp -4 # call CDirectIFFFile_57A1E0 0057E16D 1056 sp 4 # push 10h 0057E174 1060 sp -4 # add esp 4 0057E188 1056 sp 4 # push edi 0057E18B 1060 sp -4 # call sub_57EAF0 0057E1AD 1056 sp 4 # push offset aElem - 0057E1B7 1060 sp -4 # call sub_57A1E0 + 0057E1B7 1060 sp -4 # call CDirectIFFFile_57A1E0 0057E1E3 1056 sp 4 # push 1 0057E1E5 1060 sp 4 # push 1 0057E1ED 1064 sp 4 # push 0 @@ -128343,11 +128345,11 @@ 0058DD34 0 ret 0 0058DD40 sub_58DD40 0058DD55 0 ret 0 -0058DD60 sub_58DD60 +0058DD60 MyNameObjMap_of_MyCESurfHandle_constructor 0058DD64 0 sp 4 # push edi 0058DD8B 4 sp -4 # pop edi 0058DD8C 0 ret 0 -0058DD90 sub_58DD90 +0058DD90 MyNameObjMap_cleanup 0058DD90 0 sp 4 # push ebx 0058DD91 4 sp 4 # push esi 0058DD92 8 sp 4 # push edi @@ -128692,11 +128694,11 @@ 0058F99A 0 ret 0 0058F9A0 __cfltcvt_init_5 0058F9DC 0 ret 0 -0058F9E0 sub_58F9E0 - 0058F9EA 0 sp 4 # push offset sub_58FA00 +0058F9E0 MyNameObjMap_of_MyCESurfHandle_static_constructor + 0058F9EA 0 sp 4 # push offset MyNameObjMap_of_MyCESurfHandle_static_destructor 0058F9F4 4 sp -4 # add esp 4 0058F9F7 0 ret 0 -0058FA00 sub_58FA00 +0058FA00 MyNameObjMap_of_MyCESurfHandle_static_destructor 0058FA1E 0 ret 0 0058FA20 MyTextures_static_constructor 0058FA2A 0 sp 4 # push offset MyTextures_static_destructor @@ -129176,7 +129178,7 @@ 00590EB5 24 sp -4 # pop ebx 00590EB6 20 sp -20 # add esp 14h 00590EB9 0 ret 0 -00590EC0 MyCESurfHandle_sub_590EC0 +00590EC0 MyCESurfHandle_resolveSurface 00590EC0 0 sp 264 # sub esp 108h 00590EC6 264 sp 4 # push ebx 00590EC7 268 sp 4 # push esi @@ -129208,7 +129210,7 @@ 00590F91 288 sp 4 # push edx 00590F9B 292 sp -16 # add esp 10h 00590FF8 276 sp 4 # push eax - 00590FF9 280 sp -4 # call MyTextures_loadAll + 00590FF9 280 sp -4 # call MyTextures_loadCompressed 00591000 276 sp -4 # pop edi 00591001 272 sp -4 # pop esi 00591002 268 sp -4 # pop ebx @@ -129220,7 +129222,7 @@ 00591014 264 sp -264 # add esp 108h 0059101A 0 ret 0 00591035 276 sp 4 # push edx - 00591036 280 sp -4 # call MyTextures_loadAll + 00591036 280 sp -4 # call MyTextures_loadCompressed 00591041 276 sp 4 # push edi 00591047 280 sp -4 # call MyNameObjMap_getSlotIdx 0059105E 276 sp -4 # pop edi @@ -129228,7 +129230,7 @@ 00591060 268 sp -4 # pop ebx 00591061 264 sp -264 # add esp 108h 00591067 0 ret 0 -00591070 MyTextures_loadAll +00591070 MyTextures_loadCompressed 00591076 0 sp 4 # push 0FFFFFFFFh 00591078 4 sp 4 # push offset SEH_591070 0059107D 8 sp 4 # push eax @@ -129691,7 +129693,7 @@ 00592715 2072 sp -4 # pop ebx 00592716 2068 sp -2068 # add esp 814h 0059271C 0 ret 0 -00592720 __fillTextures_path +00592720 MyTextures_resetCacheDir 00592725 0 sp 260 # sub esp 104h 0059272B 260 sp 4 # push ebx 0059272E 264 sp 4 # push esi @@ -129893,15 +129895,15 @@ 00592FF7 300 sp 4 # push edx 00592FFD 304 sp 4 # push offset aTchc 00593002 308 sp 4 # push eax - 00593012 312 sp -12 # call sub_57A560 + 00593012 312 sp -12 # call CDirectIFFFile_open 00593026 300 sp 4 # push 4 00593028 304 sp 4 # push ecx - 00593032 308 sp -8 # call readFileee + 00593032 308 sp -8 # call CDirectIFFFile_readInt 0059304A 300 sp 4 # push edx - 0059304F 304 sp -4 # call sub_57A3E0 + 0059304F 304 sp -4 # call CDirectIFFFile_readString 00593058 300 sp 4 # push 4 0059305A 304 sp 4 # push eax - 00593060 308 sp -8 # call readFileee + 00593060 308 sp -8 # call CDirectIFFFile_readInt 0059306D 300 sp 4 # push ecx 0059306E 304 sp 4 # push edx 00593074 308 sp -8 # call ?put@MyNameObjMap@dk2@@QAEHPBDPAX@Z @@ -129943,7 +129945,7 @@ 0059324E 308 sp 4 # push offset MyCEngineSurfDesc_argb32_instance 00593259 312 sp -12 # call SurfHashList2_init 00593277 300 jmp 00593127 -00593280 sub_593280 +00593280 surfaces_cleanup 00593285 0 sp 4 # push ebx 00593295 4 sp 4 # push edi 00593298 8 sp 4 # push esi @@ -130458,7 +130460,7 @@ 00594F30 0 sp 36 # sub esp 24h 00594F91 36 sp -36 # add esp 24h 00594F94 0 ret -4 -00594FA0 CBridge_594FA0 +00594FA0 sub_594FA0 00594FA6 0 sp 4 # push 0FFFFFFFFh 00594FA8 4 sp 4 # push offset SEH_594FA0 00594FAD 8 sp 4 # push eax @@ -130539,7 +130541,7 @@ 00595508 32 sp 4 # push edi 00595509 36 sp -4 # call unknown_libname_3 00595518 32 sp 4 # push eax - 0059551B 36 sp -16 # call sub_4B37D0 + 0059551B 36 sp -16 # call RenderInfo_cpp_4B37D0 00595524 20 sp 4 # push ebp 00595529 24 sp 4 # push eax 00595534 28 sp 4 # push ecx @@ -130550,7 +130552,7 @@ 00595561 32 sp 4 # push edi 00595562 36 sp -4 # call unknown_libname_3 00595571 32 sp 4 # push eax - 00595574 36 sp -16 # call sub_4B37D0 + 00595574 36 sp -16 # call RenderInfo_cpp_4B37D0 0059557D 20 sp 4 # push ebp 00595582 24 sp 4 # push edx 0059558D 28 sp 4 # push eax @@ -130608,7 +130610,7 @@ 00595948 32 sp 4 # push edi 00595949 36 sp -4 # call unknown_libname_3 00595957 32 sp 4 # push eax - 0059595A 36 sp -16 # call sub_4B37D0 + 0059595A 36 sp -16 # call RenderInfo_cpp_4B37D0 00595963 20 sp 4 # push ebp 00595968 24 sp 4 # push eax 0059596C 28 sp 4 # push ecx @@ -130675,7 +130677,7 @@ 0059620C 36 sp 4 # push 0 0059620E 40 sp 4 # push ecx 0059620F 44 sp 4 # push eax - 0059621A 48 sp -16 # call sub_4B37D0 + 0059621A 48 sp -16 # call RenderInfo_cpp_4B37D0 00596231 32 sp 4 # push esi 00596236 36 sp 4 # push eax 0059623A 40 sp 4 # push ecx @@ -130694,7 +130696,7 @@ 005962CC 44 sp 4 # push edi 005962CD 48 sp -4 # call unknown_libname_3 005962D5 44 sp 4 # push ebx - 005962D8 48 sp -16 # call sub_4B37D0 + 005962D8 48 sp -16 # call RenderInfo_cpp_4B37D0 005962E5 32 sp 4 # push edx 005962EA 36 sp 4 # push eax 005962EE 40 sp 4 # push ecx @@ -130718,7 +130720,7 @@ 005963A1 44 sp 4 # push 0 005963A4 48 sp -4 # call unknown_libname_3 005963AC 44 sp 4 # push ebx - 005963AF 48 sp -16 # call sub_4B37D0 + 005963AF 48 sp -16 # call RenderInfo_cpp_4B37D0 005963BC 32 sp 4 # push ecx 005963BD 36 sp 4 # push edx 005963BE 40 sp 4 # push 0 @@ -130776,7 +130778,7 @@ 0059667C 24 sp 4 # push 0 0059667E 28 sp -4 # call unknown_libname_3 00596689 24 sp 4 # push ecx - 0059668D 28 sp -16 # call sub_4B37D0 + 0059668D 28 sp -16 # call RenderInfo_cpp_4B37D0 00596692 12 sp -4 # pop edi 00596693 8 sp -4 # pop esi 00596694 4 sp -4 # pop ebx @@ -130829,7 +130831,7 @@ 005967FE 36 sp 4 # push edi 005967FF 40 sp -4 # call unknown_libname_3 00596807 36 sp 4 # push ebp - 0059680A 40 sp -16 # call sub_4B37D0 + 0059680A 40 sp -16 # call RenderInfo_cpp_4B37D0 00596817 24 sp 4 # push ecx 0059681C 28 sp 4 # push edx 00596820 32 sp 4 # push eax @@ -131449,7 +131451,7 @@ 00598659 28 sp -4 # add esp 4 00598674 24 sp 4 # push esi 00598675 28 sp 4 # push ecx - 0059867C 32 sp -8 # call CBridge_594FA0 + 0059867C 32 sp -8 # call sub_594FA0 00598681 24 sp -4 # pop edi 00598687 20 sp -4 # pop esi 00598688 16 sp -16 # add esp 10h @@ -131896,7 +131898,7 @@ 0059A5C0 sub_59A5C0 0059A5C8 0 sp 4 # push eax 0059A5C9 4 sp 4 # push ecx - 0059A5CF 8 sp -8 # call sub_5A3310 + 0059A5CF 8 sp -8 # call ProceduralMesh_cpp_5A3310 0059A5D4 0 ret 0 0059A5E0 sub_59A5E0 0059A5E8 0 sp 4 # push eax @@ -133385,7 +133387,7 @@ 0059E700 sub_59E700 0059E736 0 ret 0 0059E74F 0 ret 0 -0059E750 sub_59E750 +0059E750 ProceduralMesh_cpp_59E750 0059E750 0 sp 56 # sub esp 38h 0059E75F 56 sp 4 # push ebx 0059E760 60 sp 4 # push ebp @@ -133515,7 +133517,7 @@ 0059ED6F 16 sp -4 # pop ebx 0059ED70 12 sp -12 # add esp 0Ch 0059ED73 0 ret 0 -0059ED80 sub_59ED80 +0059ED80 ProceduralMesh_cpp_59ED80 0059ED80 0 sp 220 # sub esp 0DCh 0059ED94 220 sp 4 # push ebx 0059ED9A 224 sp 4 # push ebp @@ -134128,7 +134130,7 @@ 005A133B 24 sp -4 # pop ebx 005A133C 20 sp -20 # add esp 14h 005A133F 0 ret 0 -005A1340 sub_5A1340 +005A1340 ProceduralMesh_cpp_5A1340 005A1346 0 sp 52 # sub esp 34h 005A1368 52 sp 4 # push edi 005A1371 56 sp 4 # push esi @@ -134428,7 +134430,7 @@ 005A32FB 12 sp -4 # pop ebx 005A32FE 8 sp -8 # add esp 8 005A3301 0 ret 0 -005A3310 sub_5A3310 +005A3310 ProceduralMesh_cpp_5A3310 005A3313 0 sp 320 # sub esp 140h 005A331F 320 sp 4 # push edx 005A3327 324 sp 4 # push edx @@ -134609,7 +134611,7 @@ 005A3B9C 56300 sp 4 # push esi 005A3BA4 56304 sp 4 # push ecx 005A3BA9 56308 sp 4 # push edx - 005A3BAA 56312 sp -12 # call sub_5A1340 + 005A3BAA 56312 sp -12 # call ProceduralMesh_cpp_5A1340 005A3CEE 56300 sp 4 # push edi 005A3CEF 56304 sp 4 # push eax 005A3CF2 56308 sp -8 # call dword ptr [edx+10h] @@ -134651,15 +134653,15 @@ 005A411A 56300 sp 4 # push esi 005A4122 56304 sp 4 # push edx 005A4123 56308 sp 4 # push eax - 005A4126 56312 sp -12 # call sub_5A1340 + 005A4126 56312 sp -12 # call ProceduralMesh_cpp_5A1340 005A4132 56300 sp 4 # push esi 005A413A 56304 sp 4 # push ecx 005A413B 56308 sp 4 # push edx - 005A413E 56312 sp -12 # call sub_5A1340 + 005A413E 56312 sp -12 # call ProceduralMesh_cpp_5A1340 005A414A 56300 sp 4 # push esi 005A4152 56304 sp 4 # push eax 005A4153 56308 sp 4 # push ecx - 005A4156 56312 sp -12 # call sub_5A1340 + 005A4156 56312 sp -12 # call ProceduralMesh_cpp_5A1340 005A41B5 56300 sp 4 # push edi 005A41B6 56304 sp 4 # push eax 005A41B9 56308 sp -8 # call dword ptr [edx+10h] @@ -172427,7 +172429,7 @@ 006381B9 8 sp -4 # pop ebx 006381BA 4 sp -4 # pop ecx 006381BB 0 ret 0 -006381C0 sub_6381C0 +006381C0 writeFile 006381C0 0 sp 4 # push esi 006381C5 4 sp 4 # push edi 006381C6 8 sp 4 # push esi @@ -179471,32 +179473,32 @@ 0064A3CD 0 jmp 006349A0 0064A3E3 sub_433B40 0064A3ED 0 jmp 006349A0 -0064A403 sub_4347E0 +0064A403 Effect_cpp_4347E0 0064A445 0 jmp 006349A0 0064A456 sub_4358C0 0064A456 0 sp 4 # push eax 0064A45C 4 sp -4 # pop ecx 0064A45D 0 ret 0 0064A463 0 jmp 006349A0 -0064A473 sub_435F20 +0064A473 EffectElement_cpp_435F20 0064A4B5 0 jmp 006349A0 -0064A4C3 sub_436E60 +0064A4C3 EffectGeneration_cpp_436E60 0064A4CD 0 jmp 006349A0 -0064A4E3 sub_4372A0 +0064A4E3 EffectGeneration_cpp_4372A0 0064A4ED 0 jmp 006349A0 -0064A503 sub_437480 +0064A503 EffectGeneration_cpp_437480 0064A50D 0 jmp 006349A0 -0064A523 sub_4375C0 +0064A523 EffectGeneration_cpp_4375C0 0064A52D 0 jmp 006349A0 -0064A546 sub_4376E0 +0064A546 BridgeThing_h__4376E0 0064A550 308 jmp 006349A0 -0064A563 sub_4386F0 +0064A563 EffectGeneration_cpp_4386F0 0064A575 0 jmp 006349A0 -0064A583 sub_439210 +0064A583 EffectGeneration_cpp_439210 0064A58D 0 jmp 006349A0 0064A5A3 sub_439480 0064A5BD 52 jmp 006349A0 -0064A5D3 sub_4395F0 +0064A5D3 EffectGeneration_cpp_4395F0 0064A5DD 0 jmp 006349A0 0064A5F3 CBridge::fun_439B90 0064A5FD 0 jmp 006349A0 @@ -179596,7 +179598,7 @@ 0064A980 0 jmp 006349A0 0064A993 sub_441510 0064A9A5 0 jmp 006349A0 -0064A9B3 sub_441870 +0064A9B3 Bridge_cpp_441870 0064A9C5 0 jmp 006349A0 0064A9D3 sub_4419D0 0064A9E5 0 jmp 006349A0 @@ -179679,7 +179681,7 @@ 0064AECD 0 jmp 006349A0 0064AEE3 sub_467790 0064AEED 0 jmp 006349A0 -0064AF03 sub_46EAB0 +0064AF03 KeeperState_cpp_46EAB0 0064AF1D 0 jmp 006349A0 0064AF33 sub_46FA60 0064AF45 0 jmp 006349A0 @@ -179687,7 +179689,7 @@ 0064AF6D 0 jmp 006349A0 0064AF83 sub_470E30 0064AF8D 0 jmp 006349A0 -0064AFA3 sub_473350 +0064AFA3 PrisonState_cpp_473350 0064AFAD 0 jmp 006349A0 0064AFC3 sub_473F80 0064AFCD 0 jmp 006349A0 @@ -179705,11 +179707,11 @@ 0064B09D 0 jmp 006349A0 0064B0B3 sub_481850 0064B0BD 0 jmp 006349A0 -0064B0D3 sub_481D50 +0064B0D3 StateUtils_cpp_481D50 0064B0E5 0 jmp 006349A0 0064B0F3 sub_4831D0 0064B0FD 0 jmp 006349A0 -0064B113 sub_4833C0 +0064B113 ThrowingState_cpp_4833C0 0064B12D 0 jmp 006349A0 0064B143 sub_484110 0064B14D 0 jmp 006349A0 @@ -179733,7 +179735,7 @@ 0064B345 0 jmp 006349A0 0064B356 CCreature::fun_48D880 0064B376 0 jmp 006349A0 -0064B383 sub_48E160 +0064B383 Creature_cpp_48E160 0064B38D 0 jmp 006349A0 0064B3A3 sub_48EA40 0064B3B5 0 jmp 006349A0 @@ -179855,7 +179857,7 @@ 0064B93D 0 jmp 006349A0 0064B953 sub_49AC80 0064B96D 0 jmp 006349A0 -0064B983 sub_49B1C0 +0064B983 Game_Object_cpp_49B1C0 0064B98D 0 jmp 006349A0 0064B9A3 sub_49B5E0 0064B9C5 0 jmp 006349A0 @@ -179873,21 +179875,21 @@ 0064BA8D 0 jmp 006349A0 0064BAA3 sub_49FDC0 0064BAAD 0 jmp 006349A0 -0064BAC3 sub_4A0210 +0064BAC3 ObjectState_cpp_4A0210 0064BACD 0 jmp 006349A0 -0064BAE3 sub_4A03E0 +0064BAE3 ObjectState_cpp_4A03E0 0064BAED 0 jmp 006349A0 -0064BB03 sub_4A05B0 +0064BB03 ObjectState_cpp_4A05B0 0064BB0D 0 jmp 006349A0 -0064BB23 sub_4A0770 +0064BB23 ObjectState_cpp_4A0770 0064BB2D 0 jmp 006349A0 0064BB43 sub_4A0E30 0064BB4D 0 jmp 006349A0 0064BB63 sub_4A17E0 0064BB6D 0 jmp 006349A0 -0064BB83 sub_4A21C0 +0064BB83 ObjectState_cpp_4A21C0 0064BB8D 0 jmp 006349A0 -0064BBA3 sub_4A2CE0 +0064BBA3 ObjectState_cpp_4A2CE0 0064BBB5 0 jmp 006349A0 0064BBC3 sub_4A3640 0064BBCD 0 jmp 006349A0 @@ -179927,7 +179929,7 @@ 0064BEAD 0 jmp 006349A0 0064BEC3 sub_4ABD60 0064BED5 0 jmp 006349A0 -0064BEE3 sub_4AD7A0 +0064BEE3 ShotProcess_cpp_4AD7A0 0064BEFD 0 jmp 006349A0 0064BF13 sub_4AE880 0064BF1D 0 jmp 006349A0 @@ -179943,7 +179945,7 @@ 0064BFBD 0 jmp 006349A0 0064BFD3 sub_4AFAF0 0064BFDD 0 jmp 006349A0 -0064BFF3 sub_4AFE50 +0064BFF3 ShotProcess_cpp_4AFE50 0064BFFD 0 jmp 006349A0 0064C013 sub_4B0F20 0064C01D 0 jmp 006349A0 @@ -179951,9 +179953,9 @@ 0064C04D 0 jmp 006349A0 0064C063 sub_4B1FA0 0064C06D 0 jmp 006349A0 -0064C083 sub_4B2030 +0064C083 CObject_4B2030 0064C0A5 0 jmp 006349A0 -0064C0B3 sub_4B37D0 +0064C0B3 RenderInfo_cpp_4B37D0 0064C0BD 0 jmp 006349A0 0064C0D3 sub_4B3C10 0064C17D 0 jmp 006349A0 @@ -180012,9 +180014,9 @@ 0064C585 0 jmp 006349A0 0064C593 sub_4BE630 0064C5A5 0 jmp 006349A0 -0064C5B3 sub_4BF410 +0064C5B3 Player_cpp_4BF410 0064C5D5 0 jmp 006349A0 -0064C5E3 sub_4BF9E0 +0064C5E3 Player_cpp_4BF9E0 0064C5F5 0 jmp 006349A0 0064C603 sub_4BFBD0 0064C60D 0 jmp 006349A0 @@ -180096,7 +180098,7 @@ 0064CBCD 0 jmp 006349A0 0064CBE3 sub_4D5FA0 0064CBED 0 jmp 006349A0 -0064CC03 sub_4D6270 +0064CC03 Casino_cpp_4D6270 0064CC0D 0 jmp 006349A0 0064CC23 sub_4D6890 0064CC35 0 jmp 006349A0 @@ -180104,9 +180106,9 @@ 0064CC4D 0 jmp 006349A0 0064CC63 sub_4DA200 0064CCAD 0 jmp 006349A0 -0064CCC3 sub_4DA560 +0064CCC3 DungeonHeart_cpp_4DA560 0064CCCD 0 jmp 006349A0 -0064CCE3 sub_4DBF90 +0064CCE3 Entrance_cpp_4DBF90 0064CCF3 0 jmp 0040D440 0064CD0E 80 ret 0 0064CD12 80 jmp 0040D440 @@ -180114,13 +180116,13 @@ 0064CD35 80 ret 0 0064CD39 80 jmp 0040D440 0064CD7B 0 jmp 006349A0 -0064CD83 sub_4DE220 +0064CD83 Hatchery_cpp_4DE220 0064CD8D 0 jmp 006349A0 -0064CDA3 sub_4DE620 +0064CDA3 Hatchery_cpp_4DE620 0064CDAD 0 jmp 006349A0 0064CDC3 sub_4DEA50 0064CDCD 0 jmp 006349A0 -0064CDE3 sub_4DEF30 +0064CDE3 HeroGateFrontEnd_cpp_4DEF30 0064CDF5 0 jmp 006349A0 0064CE03 sub_4DFD10 0064CE0D 0 jmp 006349A0 @@ -180137,7 +180139,7 @@ 0064CEC1 0 jmp 006349A0 0064CED3 sub_4EDC10 0064CEDD 0 jmp 006349A0 -0064CEF6 sub_4EDFC0 +0064CEF6 RoomManager_cpp_4EDFC0 0064CF00 0 jmp 006349A0 0064CF13 sub_4F04F0 0064CF25 0 jmp 006349A0 @@ -180147,7 +180149,7 @@ 0064CF5D 0 jmp 006349A0 0064CF73 sub_4F0E30 0064CF7D 0 jmp 006349A0 -0064CF93 sub_4F2370 +0064CF93 Tourture_cpp_4F2370 0064CF9D 0 jmp 006349A0 0064CFB3 sub_4F4440 0064CFBD 0 jmp 006349A0 @@ -180167,9 +180169,9 @@ 0064D10D 0 jmp 006349A0 0064D123 sub_500520 0064D12D 0 jmp 006349A0 -0064D143 sub_500C20 +0064D143 ComputerPlayer_cpp_500C20 0064D14D 0 jmp 006349A0 -0064D163 sub_502F00 +0064D163 ComputerPlayer_cpp_502F00 0064D16D 0 jmp 006349A0 0064D183 GameActionHandler_N42 0064D1CD 0 jmp 006349A0 @@ -180189,7 +180191,7 @@ 0064D370 0 jmp 006349A0 0064D383 sub_50B3C0 0064D38D 0 jmp 006349A0 -0064D3A3 sub_50B5B0 +0064D3A3 World_cpp_50B5B0 0064D3BD 0 jmp 006349A0 0064D3D3 sub_5100B0 0064D3DD 0 jmp 006349A0 @@ -180877,7 +180879,7 @@ 0064FDC9 4 sp -4 # pop ecx 0064FDCA 0 ret 0 0064FDD0 0 jmp 006349A0 -0064FDE3 MyTextures_loadAll +0064FDE3 MyTextures_loadCompressed 0064FDE3 32 sp 4 # push eax 0064FDE9 36 sp -4 # pop ecx 0064FDEA 32 ret 0 @@ -180932,7 +180934,7 @@ 0064FF2A 4 sp -4 # pop ecx 0064FF2B 0 ret 0 0064FF31 0 jmp 006349A0 -0064FF43 CBridge_594FA0 +0064FF43 sub_594FA0 0064FF43 0 sp 4 # push eax 0064FF49 4 sp -4 # pop ecx 0064FF4A 0 ret 0 diff --git a/patches/screen_resolution/dpi_aware.cpp b/patches/screen_resolution/dpi_aware.cpp index 8212958..c1ab73c 100644 --- a/patches/screen_resolution/dpi_aware.cpp +++ b/patches/screen_resolution/dpi_aware.cpp @@ -5,43 +5,12 @@ #include #include #include -#include - -bool initDPI() { - HMODULE userDLL = LoadLibrary("User32.dll"); - if (userDLL) { - typedef BOOL (WINAPI *SetProcessDpiAwarenessContext_fun)(DPI_AWARENESS_CONTEXT value); - auto SetProcessDpiAwarenessContext = (SetProcessDpiAwarenessContext_fun) GetProcAddress(userDLL, "SetProcessDpiAwarenessContext"); - if(SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2)) return true; - } - - HMODULE shcoreDLL = LoadLibrary("SHCORE.DLL"); - if (shcoreDLL) { - typedef HRESULT(WINAPI *SetProcessDpiAwareness_fun)(PROCESS_DPI_AWARENESS); - auto SetProcessDpiAwareness = (SetProcessDpiAwareness_fun) GetProcAddress(shcoreDLL, "SetProcessDpiAwareness"); - - if (SetProcessDpiAwareness) { - /* Try Windows 8.1+ version */ - if(SUCCEEDED(SetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE))) return true; - } - } - if (userDLL) { - typedef BOOL(WINAPI *SetProcessDPIAware_fun)(void); - auto SetProcessDPIAware = (SetProcessDPIAware_fun) GetProcAddress(userDLL, "SetProcessDPIAware"); - if (SetProcessDPIAware) { - /* Try Vista - Windows 8 version. - This has a constant scale factor for all monitors. - */ - if(SetProcessDPIAware()) return true; - } - } - return false; -} +#include bool patch::dpi_aware() { if(!api::hasFlag("dpi_aware")) return true; api::BEFORE_MAIN.push_back([](int &argc, char **&argv) { - if(initDPI()) { + if(gui::initDPI()) { printf("DPI aware initialized\n"); } else { printf("[ERROR] DPI aware failed\n"); diff --git a/reimpl/draw3dScene.cpp b/reimpl/draw3dScene.cpp index 2cd91ba..1984b23 100644 --- a/reimpl/draw3dScene.cpp +++ b/reimpl/draw3dScene.cpp @@ -31,7 +31,7 @@ dk2::SceneObject30 *SceneObject30_findFromO2E( ) { dk2::SceneObject30 *obj30 = holders[0]->f0_SceneObject30; for(; obj30; obj30 = obj30->f28_prev) { - if(obj30->f1D_countOf_f1E != obj2E.f1E_propsCount) continue; + if(obj30->f1D_texStageCountArrSize != obj2E.f1E_propsCount) continue; if(obj30->f20_sceneObj2E_f21 != obj2E.field_21) continue; uint32_t *propsArr30 = &obj30->f10_props_flags; uint32_t *propsArr2E = &obj2E.f10_props_flags; @@ -63,7 +63,7 @@ void SceneObject30_initFromO2E( obj30->f0_holders[j] = holders[j]; } uint32_t *propsArr30 = &obj30->f10_props_flags; - uint8_t *props2Arr30 = (uint8_t *) &obj30->f1E_sceneObj2E_f1F; + uint8_t *props2Arr30 = (uint8_t *) &obj30->f1E_d3dtexStageCount; uint32_t *propsArr2E = (uint32_t *) &obj2E.f10_props_flags; uint8_t *props2Arr2E = (uint8_t *) &obj2E.f1F_trgObj; for (int j = 0; j < obj2E.f1E_propsCount; ++j) { @@ -72,7 +72,7 @@ void SceneObject30_initFromO2E( } obj30->f1C_surfhCount = obj2E.f1D_surfhCount; obj30->f20_sceneObj2E_f21 = obj2E.field_21; - obj30->f1D_countOf_f1E = obj2E.f1E_propsCount; + obj30->f1D_texStageCountArrSize = obj2E.f1E_propsCount; obj30->f18_props_surfWidth8 = 0; obj30->f1A_props_surfHeight8 = 0; obj30->f24_pobj2E = 0; diff --git a/tools/unpack_texture_cache.cpp b/tools/unpack_texture_cache.cpp new file mode 100644 index 0000000..8f28b1f --- /dev/null +++ b/tools/unpack_texture_cache.cpp @@ -0,0 +1,187 @@ +// +// Created by DiaLight on 27.12.2022. +// +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +struct Rgba32 { + + alignas(dk2::MyCEngineSurfDesc) uint8_t desc_buf[sizeof(dk2::MyCEngineSurfDesc)]; + Rgba32() { + dk2::MyCEngineSurfDesc &rgba32 = desc(); + ZeroMemory(&rgba32, sizeof(rgba32)); + rgba32.field_0 = 1; + rgba32.f4__bitsiz = 0x20; + rgba32.f8_bytesize = 4; + rgba32.fC_rbitcount = 8; + rgba32.f10_gbitcount = 8; + rgba32.f14_bbitcount = 8; + rgba32.f18_abitcount = 8; + rgba32.f1C__rmask = 0xFF; + rgba32.f20__gmask = 0xFF00; + rgba32.f24__bmask = 0xFF0000; + rgba32.f28__amask = 0xFF000000; + rgba32.field_2C = 0; + rgba32.f2D_desc = { + 0xFF, 0xFF00, 0xFF0000, 0xFF000000, 0x20, 0 + }; + rgba32.f45_ddPixFmt = { + 0, 0, 0, 0x20, 0xFF, 0xFF00, 0xFF0000, 0xFF000000 + }; + } + + inline dk2::MyCEngineSurfDesc &desc() { + return *(dk2::MyCEngineSurfDesc *) desc_buf; + } + +}; + + +void save32_(int width, int height, int pitch, std::vector &buffer, const char *name) { + std::vector png; + unsigned error = lodepng::encode(png, (const unsigned char *) &buffer[0], width, height); + if(error) { + printf("ERR: %d\n", error); + MessageBoxA(NULL, "ERROR", "ERROR", MB_OK); + } else { + std::stringstream ss; + ss << dk2::globals::getDk2HomeDir() << "/resources/default/" << name << ".png"; + std::string file = ss.str(); + std::filesystem::path path(file); + std::filesystem::create_directories(path.parent_path()); + lodepng::save_file(png, file); +// MessageBoxA(NULL, name, "OK", MB_OK); + } +} + +typedef int (__cdecl *initSurfHashLists_mydd_cpy3_t)(dk2::MyDirectDraw *a1); +typedef dk2::CEngineCompressedSurface *(__fastcall *MyTextures_loadCompressed_t)(dk2::MyTextures *_this, void *edx, char *texName); +initSurfHashLists_mydd_cpy3_t initSurfHashLists_mydd_cpy3 = nullptr; +MyTextures_loadCompressed_t MyTextures_loadCompressed = nullptr; +dk2::MyTextures *tex = nullptr; + +void unpackAndExit() { +// InitCommonControls(); + + RECT rcClient; // Client area of parent window. + GetClientRect(dk2::dd::getHWindow(), &rcClient); + + int cyVScroll = GetSystemMetrics(SM_CYVSCROLL); + + HWND hwnd = dk2::dd::getHWindow(); + HWND hwndST = CreateWindowEx(0, WC_EDIT, _T("Extracting resources"), + WS_CHILD | WS_VISIBLE | WS_TABSTOP | SS_LEFT, rcClient.left + cyVScroll, + (rcClient.bottom - cyVScroll) / 2 - cyVScroll, + rcClient.right - cyVScroll * 2, cyVScroll * 2, + hwnd, (HMENU) 11, dk2::globals::getHInstance(), NULL); +// RedrawWindow(hwndST, NULL, NULL, RDW_UPDATENOW); + + HWND hwndPB = CreateWindowEx(0, PROGRESS_CLASS, (LPTSTR) NULL, + WS_CHILD | WS_VISIBLE, rcClient.left + cyVScroll, + (rcClient.bottom - cyVScroll) / 2, + rcClient.right - cyVScroll * 2, cyVScroll, + hwnd, (HMENU) 10, dk2::globals::getHInstance(), NULL); + RedrawWindow(hwnd, NULL, NULL, RDW_UPDATENOW); + + FILE *f = fopen(tex->f0_textureCacheFile_dir, "rb"); + uint32_t signature; + fread(&signature, sizeof(signature), 1, f); + uint32_t file_size; + fread(&file_size, sizeof(file_size), 1, f); + uint32_t version; + fread(&version, sizeof(version), 1, f); + int32_t num_entries; + fread(&num_entries, sizeof(num_entries), 1, f); + + // Set the range and increment of the progress bar. + +#define Progress_MAX_VALUE 4096 + SendMessage(hwndPB, PBM_SETRANGE, 0, MAKELPARAM(0, Progress_MAX_VALUE)); + + SendMessage(hwndPB, PBM_SETSTEP, (WPARAM) 1, 0); + + DWORD time = GetTickCount(); + for (int i = 0; i < num_entries; ++i) { + std::string name; + while(true) { + char c; + fread(&c, sizeof(c), 1, f); + if(c == '\0') break; + name.push_back(c); + } + uint32_t offset; + fread(&offset, sizeof(offset), 1, f); + + DWORD cur = GetTickCount(); + if((cur - time) > 50) { + time = cur; + std::stringstream ss; + ss << "Extracting resources (" << std::setw(6) << i << "/" << num_entries << "): " << name; + std::string title = ss.str(); + SetWindowTextA(hwndST, title.c_str()); + MSG msg = { }; + while (PeekMessage(&msg, hwnd, 0, 0, PM_REMOVE)) { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + SendMessage(hwndPB, PBM_SETPOS, i * Progress_MAX_VALUE / num_entries, 0); +// SendMessage(hwndPB, PBM_SETPOS, i * Progress_MAX_VALUE / num_entries, 0); + } + dk2::CEngineCompressedSurface *ret = MyTextures_loadCompressed(tex, nullptr, (char *) name.c_str()); + if(ret) { + alignas(dk2::CEngineSurface) uint8_t decompressed_buf[sizeof(dk2::CEngineSurface)]; + dk2::CEngineSurface &dec = *(dk2::CEngineSurface *) decompressed_buf; + ZeroMemory(&dec, sizeof(dec)); + Rgba32 rgba32; +// decompressed.vtbl() = dk2::CEngineSurface::class_vtbl(); + dec.vtbl() = (dk2::CEngineSurface::vtbl_t *) (dk2_base + (0x0067034C - dk2_virtual_base)); + dec.f4_width = ret->f4_width; + dec.f8_height = ret->f8_height; + dec.fC_desc = &rgba32.desc(); + dec.fC_lineWidth = dec.f4_width * dec.fC_desc->f8_bytesize; + std::vector buffer; + buffer.resize(dec.f4_width * dec.f8_height * dec.fC_desc->f8_bytesize); + dec.f14_pixels = (int) &buffer[0]; + if(!ret->vtbl()->copySurf(ret, &dec, 0, 0)) { + printf("failed to decompress %s\n", name.c_str()); + } else { + try { + save32_(dec.f4_width, dec.f8_height, dec.fC_lineWidth, buffer, name.c_str()); + } catch(...) { + printf("failed to save %s\n", name.c_str()); + } + } + ret->vtbl()->scalar_destructor(ret, 1u); + } + } + fclose(f); + DestroyWindow(hwndST); + DestroyWindow(hwndPB); + exit(0); +} + +int __cdecl proxy_initSurfHashLists_mydd_cpy3(dk2::MyDirectDraw *a1) { + int ret = initSurfHashLists_mydd_cpy3(a1); + unpackAndExit(); + return ret; +} + +bool tools::unpack_texture_cache() { + if(!api::hasFlag("unpack_texture_cache")) return true; + + tex = (dk2::MyTextures *) (dk2_base + (0x007920D8 - dk2_virtual_base)); + initSurfHashLists_mydd_cpy3 = (initSurfHashLists_mydd_cpy3_t) (dk2_base + (0x00592EA0 - dk2_virtual_base)); + MyTextures_loadCompressed = (MyTextures_loadCompressed_t) (dk2_base + (0x00591070 - dk2_virtual_base)); + + if(!replaceXrefs((uint8_t *) initSurfHashLists_mydd_cpy3, proxy_initSurfHashLists_mydd_cpy3)) return false; + return true; +} diff --git a/vendor/CMakeLists.txt b/vendor/CMakeLists.txt new file mode 100644 index 0000000..355fc8e --- /dev/null +++ b/vendor/CMakeLists.txt @@ -0,0 +1,4 @@ + + +add_library(lodepng STATIC lodepng/lodepng.cpp) +target_include_directories(lodepng PUBLIC lodepng) diff --git a/vendor/lodepng b/vendor/lodepng new file mode 160000 index 0000000..997936f --- /dev/null +++ b/vendor/lodepng @@ -0,0 +1 @@ +Subproject commit 997936fd2b45842031e4180d73d7880e381cf33f diff --git a/win32_gui_layout.cpp b/win32_gui_layout.cpp new file mode 100644 index 0000000..a99c37d --- /dev/null +++ b/win32_gui_layout.cpp @@ -0,0 +1,91 @@ +// +// Created by DiaLight on 27.12.2022. +// +#include + + +bool gui::initDPI() { + HMODULE userDLL = LoadLibrary("User32.dll"); + if (userDLL) { + typedef BOOL (WINAPI *SetProcessDpiAwarenessContext_fun)(DPI_AWARENESS_CONTEXT value); + auto SetProcessDpiAwarenessContext = (SetProcessDpiAwarenessContext_fun) GetProcAddress(userDLL, "SetProcessDpiAwarenessContext"); + if(SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2)) return true; + } + + + HMODULE shcoreDLL = LoadLibrary("SHCORE.DLL"); + if (shcoreDLL) { + typedef HRESULT(WINAPI *SetProcessDpiAwareness_fun)(PROCESS_DPI_AWARENESS); + auto SetProcessDpiAwareness = (SetProcessDpiAwareness_fun) GetProcAddress(shcoreDLL, "SetProcessDpiAwareness"); + + if (SetProcessDpiAwareness) { + /* Try Windows 8.1+ version */ + if(SUCCEEDED(SetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE))) return true; + } + } + if (userDLL) { + typedef BOOL(WINAPI *SetProcessDPIAware_fun)(void); + auto SetProcessDPIAware = (SetProcessDPIAware_fun) GetProcAddress(userDLL, "SetProcessDPIAware"); + if (SetProcessDPIAware) { + /* Try Vista - Windows 8 version. + This has a constant scale factor for all monitors. + */ + if(SetProcessDPIAware()) return true; + } + } + return false; +} + +HINSTANCE gui::g_hInst = nullptr; +int gui::g_dpi = USER_DEFAULT_SCREEN_DPI; +int gui::getDpi() { + UINT dpiX = 0, dpiY; + POINT pt = { 1, 1 }; + auto hMonitor = MonitorFromPoint(pt, MONITOR_DEFAULTTONEAREST); + if (SUCCEEDED(GetDpiForMonitor(hMonitor, MDT_EFFECTIVE_DPI, &dpiX, &dpiY))) { + return dpiX; + } + return 96; // default +} + +int gui::applyDpi(int size) { + return MulDiv(size, g_dpi, USER_DEFAULT_SCREEN_DPI); +} + +int gui::revertDpi(int size) { + return MulDiv(size, USER_DEFAULT_SCREEN_DPI, g_dpi); +} + +void gui::applyDpi(gui::size2i_t &size) { + size.w = applyDpi(size.w); + size.h = applyDpi(size.h); +} + +void gui::applyDpi(gui::pos2i_t &pos) { + pos.x = applyDpi(pos.x); + pos.y = applyDpi(pos.y); +} + +HMENU gui::gui_elem_t::nextId = (HMENU) 1; + + +void gui::resizeWin(HWND hwnd, int width, int height) { + RECT rect = {0, 0, applyDpi(width), applyDpi(height)}; + AdjustWindowRectEx(&rect, GetWindowStyle(hwnd), GetMenu(hwnd) != NULL, GetWindowExStyle(hwnd)); + size2i_t winSize = { rect.right - rect.left, rect.bottom - rect.top }; + pos2i_t winPos = { + (GetSystemMetrics(SM_CXSCREEN) - winSize.w) / 2, + (GetSystemMetrics(SM_CYSCREEN) - winSize.h) / 2 + }; + SetWindowPos( + hwnd, HWND_TOP, + winPos.x, winPos.y, winSize.w, winSize.h, + SWP_NOCOPYBITS | SWP_NOACTIVATE | SWP_NOZORDER + ); +} + +void gui::initLayout(HINSTANCE hInstance) { + initDPI(); + g_dpi = getDpi(); + g_hInst = hInstance; +} diff --git a/win32_gui_layout.h b/win32_gui_layout.h index 1a0f524..a407003 100644 --- a/win32_gui_layout.h +++ b/win32_gui_layout.h @@ -6,10 +6,13 @@ #define EMBER_WIN32_GUI_LAYOUT_H #include +#include +#include +#include namespace gui { - HINSTANCE g_hInst = nullptr; + extern HINSTANCE g_hInst; struct pos2i_t { int x = 0; @@ -20,31 +23,14 @@ namespace gui { int h = 0; }; - int g_dpi = USER_DEFAULT_SCREEN_DPI; + extern int g_dpi; - int getDpi() { - UINT dpiX = 0, dpiY; - POINT pt = { 1, 1 }; - auto hMonitor = MonitorFromPoint(pt, MONITOR_DEFAULTTONEAREST); - if (SUCCEEDED(GetDpiForMonitor(hMonitor, MDT_EFFECTIVE_DPI, &dpiX, &dpiY))) { - return dpiX; - } - return 96; // default - } - int applyDpi(int size) { - return MulDiv(size, g_dpi, USER_DEFAULT_SCREEN_DPI); - } - int revertDpi(int size) { - return MulDiv(size, USER_DEFAULT_SCREEN_DPI, g_dpi); - } - void applyDpi(size2i_t &size) { - size.w = applyDpi(size.w); - size.h = applyDpi(size.h); - } - void applyDpi(pos2i_t &pos) { - pos.x = applyDpi(pos.x); - pos.y = applyDpi(pos.y); - } + bool initDPI(); + int getDpi(); + int applyDpi(int size); + int revertDpi(int size); + void applyDpi(size2i_t &size); + void applyDpi(pos2i_t &pos); struct gui_elem_t { static HMENU nextId; @@ -108,8 +94,6 @@ namespace gui { }; - HMENU gui_elem_t::nextId = (HMENU) 1; - struct edit_elem_t : public gui_elem_t { @@ -406,58 +390,9 @@ namespace gui { #define GetWindowStyle(hwnd) ((DWORD)GetWindowLong(hwnd, GWL_STYLE)) #define GetWindowExStyle(hwnd) ((DWORD)GetWindowLong(hwnd, GWL_EXSTYLE)) - void resizeWin(HWND hwnd, int width, int height) { - RECT rect = {0, 0, applyDpi(width), applyDpi(height)}; - AdjustWindowRectEx(&rect, GetWindowStyle(hwnd), GetMenu(hwnd) != NULL, GetWindowExStyle(hwnd)); - size2i_t winSize = { rect.right - rect.left, rect.bottom - rect.top }; - pos2i_t winPos = { - (GetSystemMetrics(SM_CXSCREEN) - winSize.w) / 2, - (GetSystemMetrics(SM_CYSCREEN) - winSize.h) / 2 - }; - SetWindowPos( - hwnd, HWND_TOP, - winPos.x, winPos.y, winSize.w, winSize.h, - SWP_NOCOPYBITS | SWP_NOACTIVATE | SWP_NOZORDER - ); - } - - bool initDPI() { - HMODULE userDLL = LoadLibrary("User32.dll"); - if (userDLL) { - typedef BOOL (WINAPI *SetProcessDpiAwarenessContext_fun)(DPI_AWARENESS_CONTEXT value); - auto SetProcessDpiAwarenessContext = (SetProcessDpiAwarenessContext_fun) GetProcAddress(userDLL, "SetProcessDpiAwarenessContext"); - if(SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2)) return true; - } - - - HMODULE shcoreDLL = LoadLibrary("SHCORE.DLL"); - if (shcoreDLL) { - typedef HRESULT(WINAPI *SetProcessDpiAwareness_fun)(PROCESS_DPI_AWARENESS); - auto SetProcessDpiAwareness = (SetProcessDpiAwareness_fun) GetProcAddress(shcoreDLL, "SetProcessDpiAwareness"); - - if (SetProcessDpiAwareness) { - /* Try Windows 8.1+ version */ - if(SUCCEEDED(SetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE))) return true; - } - } - if (userDLL) { - typedef BOOL(WINAPI *SetProcessDPIAware_fun)(void); - auto SetProcessDPIAware = (SetProcessDPIAware_fun) GetProcAddress(userDLL, "SetProcessDPIAware"); - if (SetProcessDPIAware) { - /* Try Vista - Windows 8 version. - This has a constant scale factor for all monitors. - */ - if(SetProcessDPIAware()) return true; - } - } - return false; - } + void resizeWin(HWND hwnd, int width, int height); - void initLayout(HINSTANCE hInstance) { - initDPI(); - g_dpi = getDpi(); - g_hInst = hInstance; - } + void initLayout(HINSTANCE hInstance); }