// AUTO-GENERATED FILE, MOVE TO 'gh_fix' FOLDER PREVENT OVERWRITING!!!!! #include #include extern "C" { undefined FUN_00496ac0(void); // 00496ac0 // FUN_00496ac0 // cdecl undefined FUN_00470b00(void); // 00470b00 // FUN_00470b00 // cdecl undefined FUN_00484ea0(undefined4 param_1); // 00484ea0 // FUN_00484ea0 // cdecl // // 0046f870 undefined4 gfx_init(HWND hwnd, int param_2, UINT param_3, UINT param_4, int param_5) { undefined4 *puVar1; HRESULT HVar2; int iVar3; D3DFORMAT AdapterFormat; D3DPRESENT_PARAMETERS *pDVar4; D3DDISPLAYMODE DStack_54; D3DDISPLAYMODE displayMode; D3DPRESENT_PARAMETERS DStack_34; puVar1 = &DAT_007eaf60; for (iVar3 = 0x13; iVar3 != 0; iVar3 = iVar3 + -1) { *puVar1 = 0; puVar1 = puVar1 + 1; } puVar1 = &g_gfx_lastColorOp; for (iVar3 = 0x58; iVar3 != 0; iVar3 = iVar3 + -1) { *puVar1 = 0; puVar1 = puVar1 + 1; } puVar1 = &DAT_007eb044; do { *puVar1 = 0xbf800000; puVar1 = puVar1 + 0xb; } while ((int)puVar1 < 0x7eb1a4); DAT_005bf684 = param_2; if (param_2 == 0) { DWORD_005e6c20 = g_GLI_width0; DWORD_005e6c24 = g_GLI_height0; DAT_005e6c28 = g_GLI_bitdepth0; if (param_3 == 0) { param_3 = g_GLI_width0; } if (param_4 == 0) { param_4 = g_GLI_height0; } if (param_5 == 0) { param_5 = g_GLI_bitdepth0; } } else { DWORD_005e6c20 = param_3; DWORD_005e6c24 = param_4; DAT_005e6c28 = param_5; } static FnD3Create8 fn_Direct3DCreate8 = getDirect3DCreate8(); gfx_d3d = fn_Direct3DCreate8(0xdc); if (gfx_d3d == (IDirect3D8 *)0x0) { return 1; } HVar2 = (*gfx_d3d->lpVtbl->GetAdapterDisplayMode)(gfx_d3d, 0, &displayMode); if (HVar2 < 0) { return 1; } pDVar4 = &DStack_34; for (iVar3 = 0xd; iVar3 != 0; iVar3 = iVar3 + -1) { pDVar4->BackBufferWidth = 0; pDVar4 = (D3DPRESENT_PARAMETERS *)&pDVar4->BackBufferHeight; } DStack_34.Windowed = (BOOL)(DAT_005bf684 == 0); if (DAT_005bf684 == 0) { DStack_34.SwapEffect = D3DSWAPEFFECT_COPY_VSYNC; DStack_34.BackBufferFormat = displayMode.Format; param_5 = FUN_00484ea0(displayMode.Format); AdapterFormat = displayMode.Format; DAT_005e6c28 = param_5; } else { DStack_34.SwapEffect = D3DSWAPEFFECT_FLIP; if (param_5 == 0x10) { DStack_34.BackBufferFormat = D3DFMT_R5G6B5; AdapterFormat = D3DFMT_R5G6B5; } else { DStack_34.BackBufferFormat = D3DFMT_A8R8G8B8; AdapterFormat = D3DFMT_X8R8G8B8; } } DStack_34.FullScreen_PresentationInterval = (UINT)(DAT_005bf684 != 0); DStack_34.BackBufferHeight = param_4; DStack_34.BackBufferCount = 1; DStack_34.EnableAutoDepthStencil = 1; DStack_34.FullScreen_RefreshRateInHz = 0; DStack_34.BackBufferWidth = param_3; if (0x10 < param_5) { HVar2 = (*gfx_d3d->lpVtbl->CheckDeviceFormat)( gfx_d3d, g_GLI_adapter, D3DDEVTYPE_HAL, AdapterFormat, 2, D3DRTYPE_SURFACE, D3DFMT_D24S8); if (HVar2 == 0) { DStack_34.AutoDepthStencilFormat = D3DFMT_D24S8; DAT_0063be50 = 1; goto LAB_0046fa6f; } HVar2 = (*gfx_d3d->lpVtbl->CheckDeviceFormat)( gfx_d3d, g_GLI_adapter, D3DDEVTYPE_HAL, AdapterFormat, 2, D3DRTYPE_SURFACE, D3DFMT_D32); DAT_0063be50 = 0; if (HVar2 == 0) { DStack_34.AutoDepthStencilFormat = D3DFMT_D32; goto LAB_0046fa6f; } } DAT_0063be50 = 0; DStack_34.AutoDepthStencilFormat = D3DFMT_D16; (*gfx_d3d->lpVtbl->CheckDeviceFormat)(gfx_d3d, g_GLI_adapter, D3DDEVTYPE_HAL, AdapterFormat, 2, D3DRTYPE_SURFACE, D3DFMT_D16); LAB_0046fa6f: DStack_34.Flags = 1; if (g_GLI_tnl == '\0') { HVar2 = (*gfx_d3d->lpVtbl->CreateDevice)(gfx_d3d, g_GLI_adapter, D3DDEVTYPE_HAL, hwnd, 0x24, &DStack_34, &gfx_device); if (HVar2 < 0) { return 1; } } else { HVar2 = (*gfx_d3d->lpVtbl->CreateDevice)(gfx_d3d, g_GLI_adapter, D3DDEVTYPE_HAL, hwnd, 0x44, &DStack_34, &gfx_device); if ((HVar2 < 0) && (HVar2 = (*gfx_d3d->lpVtbl->CreateDevice)( gfx_d3d, g_GLI_adapter, D3DDEVTYPE_HAL, hwnd, 0x24, &DStack_34, &gfx_device), HVar2 < 0)) { return 1; } } (*gfx_device->lpVtbl->SetRenderState)(gfx_device, D3DRS_NORMALIZENORMALS, 0); DAT_007eafa4 = 0; (*gfx_device->lpVtbl->SetRenderState)(gfx_device, D3DRS_ZENABLE, 1); DAT_007eafa0 = 1; (*gfx_device->lpVtbl->SetRenderState)(gfx_device, D3DRS_ZFUNC, 4); DAT_007eaf7c = 4; (*gfx_device->lpVtbl->SetRenderState)(gfx_device, D3DRS_DITHERENABLE, 1); (*gfx_device->lpVtbl->SetRenderState)(gfx_device, D3DRS_SPECULARENABLE, 0); (*gfx_device->lpVtbl->SetRenderState)(gfx_device, D3DRS_CULLMODE, 1); (*gfx_device->lpVtbl->SetTextureStageState)(gfx_device, 0, D3DTSS_COLORARG1, 2); (*gfx_device->lpVtbl->SetTextureStageState)(gfx_device, 0, D3DTSS_COLORARG2, 0); (*gfx_device->lpVtbl->SetTextureStageState)(gfx_device, 0, D3DTSS_COLOROP, 4); (*gfx_device->lpVtbl->SetTextureStageState)(gfx_device, 0, D3DTSS_MINFILTER, 2); (*gfx_device->lpVtbl->SetTextureStageState)(gfx_device, 0, D3DTSS_MAGFILTER, 2); (*gfx_device->lpVtbl->SetTextureStageState)(gfx_device, 1, D3DTSS_MINFILTER, 2); (*gfx_device->lpVtbl->SetTextureStageState)(gfx_device, 1, D3DTSS_MAGFILTER, 2); FUN_00470b00(); (*gfx_device->lpVtbl->SetRenderState)(gfx_device, D3DRS_ALPHATESTENABLE, 0); (*gfx_device->lpVtbl->SetRenderState)(gfx_device, D3DRS_ALPHAFUNC, 7); (*gfx_device->lpVtbl->SetRenderState)(gfx_device, D3DRS_ALPHAREF, 0xc0); (*gfx_device->lpVtbl->SetRenderState)(gfx_device, D3DRS_CLIPPING, 1); (*gfx_device->lpVtbl->SetRenderState)(gfx_device, D3DRS_LIGHTING, 0); DAT_007eafcc = 0x3f800000; DAT_007eafc8 = 0x3f800000; DAT_007eafc4 = 0x3f800000; DAT_007eafc0 = 0x3f800000; DAT_007eafdc = 0x3f800000; DAT_007eafd8 = 0x3f800000; DAT_007eafd4 = 0x3f800000; DAT_007eafd0 = 0x3f800000; DAT_007eaff8 = 0; DAT_007eaff4 = 0; DAT_007eaff0 = 0; DAT_007eaffc = 0x3f800000; DAT_007eb000 = 0; (*gfx_device->lpVtbl->SetMaterial)(gfx_device, (D3DMATERIAL8 *)&DAT_007eafc0); (*gfx_device->lpVtbl->SetRenderState)(gfx_device, D3DRS_FOGVERTEXMODE, 3); if ((g_startOfGfxStruct.d3dSurface != (IDirect3DSurface8 *)0x0) || (HVar2 = (*gfx_device->lpVtbl->GetBackBuffer)( gfx_device, 0, D3DBACKBUFFER_TYPE_MONO, &g_startOfGfxStruct.d3dSurface), HVar2 == 0)) { (*gfx_device->lpVtbl->GetDisplayMode)(gfx_device, &DStack_54); DStack_54.Height = 0; DStack_54.Width = DStack_54.RefreshRate; g_perfCounterRate = (float)DStack_54.RefreshRate; FUN_00496ac0(); } return 0; } }