mirror of
https://github.com/EricPlayZ/EGameTools.git
synced 2025-07-18 17:37:53 +08:00
- Revamped menu
- Added EGameTools logo to the menu
This commit is contained in:
@ -95,6 +95,7 @@
|
||||
<ClCompile Include="source\utils\hook.cpp" />
|
||||
<ClCompile Include="source\utils\memory.cpp" />
|
||||
<ClCompile Include="source\utils\sigscan.cpp" />
|
||||
<ClCompile Include="source\utils\texture.cpp" />
|
||||
<ClCompile Include="source\utils\time.cpp" />
|
||||
<ClCompile Include="source\utils\values.cpp" />
|
||||
<ClCompile Include="source\utils\windows.cpp">
|
||||
@ -154,6 +155,7 @@
|
||||
<ClInclude Include="source\ImGui\imgui_internal.h" />
|
||||
<ClInclude Include="source\ImGui\impl\d3d11_impl.h" />
|
||||
<ClInclude Include="source\ImGui\impl\d3d12_impl.h" />
|
||||
<ClInclude Include="source\ImGui\impl\d3dx12.h" />
|
||||
<ClInclude Include="source\ImGui\impl\win32_impl.h" />
|
||||
<ClInclude Include="source\ImGui\imstb_rectpack.h" />
|
||||
<ClInclude Include="source\ImGui\imstb_textedit.h" />
|
||||
@ -172,6 +174,7 @@
|
||||
<ClInclude Include="source\utils\memory.h" />
|
||||
<ClInclude Include="source\utils\print.h" />
|
||||
<ClInclude Include="source\utils\sigscan.h" />
|
||||
<ClInclude Include="source\utils\texture.h" />
|
||||
<ClInclude Include="source\utils\time.h" />
|
||||
<ClInclude Include="source\utils\values.h" />
|
||||
<ClInclude Include="source\utils\windows.h" />
|
||||
@ -214,12 +217,13 @@
|
||||
<TargetName>EGameTools</TargetName>
|
||||
<GenerateManifest>false</GenerateManifest>
|
||||
<LibraryPath>$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64)</LibraryPath>
|
||||
<IncludePath>$(VC_IncludePath);$(WindowsSDK_IncludePath)</IncludePath>
|
||||
<IncludePath>$(VC_IncludePath);$(WindowsSDK_IncludePath);</IncludePath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<TargetName>EGameTools</TargetName>
|
||||
<TargetExt>.asi</TargetExt>
|
||||
<LibraryPath>$(LibraryPath)</LibraryPath>
|
||||
<IncludePath>$(VC_IncludePath);$(WindowsSDK_IncludePath);</IncludePath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<VcpkgUseStatic>true</VcpkgUseStatic>
|
||||
|
@ -182,6 +182,9 @@
|
||||
<ClCompile Include="source\menu\debug.cpp">
|
||||
<Filter>menu</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="source\utils\texture.cpp">
|
||||
<Filter>utils</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="source\kiero.h" />
|
||||
@ -390,6 +393,12 @@
|
||||
<ClInclude Include="source\menu\debug.h">
|
||||
<Filter>menu</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="source\utils\texture.h">
|
||||
<Filter>utils</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="source\ImGui\impl\d3dx12.h">
|
||||
<Filter>ImGui\impl</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Filter Include="MinHook">
|
||||
|
@ -52,6 +52,7 @@
|
||||
#include <ImGuiFileDialog\dirent\dirent.h>
|
||||
#include <ImGuiFileDialog\ImGuiFileDialog.h>
|
||||
#include <ImGuiFileDialog\ImGuiFileDialogConfig.h>
|
||||
#include <misc\fonts\Ruda-Bold.embed>
|
||||
#include <imconfig.h>
|
||||
#include <imgui_hotkey.h>
|
||||
#include <imgui_internal.h>
|
||||
@ -70,7 +71,10 @@
|
||||
#include "..\source\utils\memory.h"
|
||||
#include "..\source\utils\print.h"
|
||||
#include "..\source\utils\sigscan.h"
|
||||
#include "..\source\utils\texture.h"
|
||||
#include "..\source\utils\time.h"
|
||||
#include "..\source\utils\values.h"
|
||||
#include "..\source\utils\windows.h"
|
||||
#include "..\source\kiero.h"
|
||||
#include "..\source\kiero.h"
|
||||
|
||||
#include "..\textures\EGTWhiteLogo.embed"
|
@ -27,8 +27,8 @@
|
||||
//#define IMGUI_API __declspec( dllimport )
|
||||
|
||||
//---- Don't define obsolete functions/enums/behaviors. Consider enabling from time to time after updating to clean your code of obsolete function/names.
|
||||
#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS
|
||||
#define IMGUI_DISABLE_OBSOLETE_KEYIO // 1.87: disable legacy io.KeyMap[]+io.KeysDown[] in favor io.AddKeyEvent(). This will be folded into IMGUI_DISABLE_OBSOLETE_FUNCTIONS in a few versions.
|
||||
//#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS
|
||||
//#define IMGUI_DISABLE_OBSOLETE_KEYIO // 1.87: disable legacy io.KeyMap[]+io.KeysDown[] in favor io.AddKeyEvent(). This will be folded into IMGUI_DISABLE_OBSOLETE_FUNCTIONS in a few versions.
|
||||
|
||||
//---- Disable all of Dear ImGui or don't implement standard windows/tools.
|
||||
// It is very strongly recommended to NOT disable the demo windows and debug tool during development. They are extremely useful in day to day work. Please read comments in imgui_demo.cpp.
|
||||
|
@ -3,32 +3,35 @@
|
||||
#include "..\core.h"
|
||||
|
||||
namespace ImGui {
|
||||
static ImGuiStyle defStyle{};
|
||||
void StyleScaleAllSizes(ImGuiStyle* style, const float scale_factor) {
|
||||
style->WindowPadding = ImFloor(defStyle.WindowPadding * scale_factor);
|
||||
style->WindowRounding = ImFloor(defStyle.WindowRounding * scale_factor);
|
||||
style->WindowMinSize = ImFloor(defStyle.WindowMinSize * scale_factor);
|
||||
style->ChildRounding = ImFloor(defStyle.ChildRounding * scale_factor);
|
||||
style->PopupRounding = ImFloor(defStyle.PopupRounding * scale_factor);
|
||||
style->FramePadding = ImFloor(defStyle.FramePadding * scale_factor);
|
||||
style->FrameRounding = ImFloor(defStyle.FrameRounding * scale_factor);
|
||||
style->ItemSpacing = ImFloor(defStyle.ItemSpacing * scale_factor);
|
||||
style->ItemInnerSpacing = ImFloor(defStyle.ItemInnerSpacing * scale_factor);
|
||||
style->CellPadding = ImFloor(defStyle.CellPadding * scale_factor);
|
||||
style->TouchExtraPadding = ImFloor(defStyle.TouchExtraPadding * scale_factor);
|
||||
style->IndentSpacing = ImFloor(defStyle.IndentSpacing * scale_factor);
|
||||
style->ColumnsMinSpacing = ImFloor(defStyle.ColumnsMinSpacing * scale_factor);
|
||||
style->ScrollbarSize = ImFloor(defStyle.ScrollbarSize * scale_factor);
|
||||
style->ScrollbarRounding = ImFloor(defStyle.ScrollbarRounding * scale_factor);
|
||||
style->GrabMinSize = ImFloor(defStyle.GrabMinSize * scale_factor);
|
||||
style->GrabRounding = ImFloor(defStyle.GrabRounding * scale_factor);
|
||||
style->LogSliderDeadzone = ImFloor(defStyle.LogSliderDeadzone * scale_factor);
|
||||
style->TabRounding = ImFloor(defStyle.TabRounding * scale_factor);
|
||||
style->TabMinWidthForCloseButton = (defStyle.TabMinWidthForCloseButton != FLT_MAX) ? ImFloor(defStyle.TabMinWidthForCloseButton * scale_factor) : FLT_MAX;
|
||||
style->SeparatorTextPadding = ImFloor(defStyle.SeparatorTextPadding * scale_factor);
|
||||
style->DisplayWindowPadding = ImFloor(defStyle.DisplayWindowPadding * scale_factor);
|
||||
style->DisplaySafeAreaPadding = ImFloor(defStyle.DisplaySafeAreaPadding * scale_factor);
|
||||
style->MouseCursorScale = ImFloor(defStyle.MouseCursorScale * scale_factor);
|
||||
static ImGuiStyle defImGuiStyle{};
|
||||
void StyleScaleAllSizes(ImGuiStyle* style, const float scale_factor, ImGuiStyle* defStyle) {
|
||||
if (!defStyle)
|
||||
defStyle = &defImGuiStyle;
|
||||
|
||||
style->WindowPadding = ImFloor(defStyle->WindowPadding * scale_factor);
|
||||
style->WindowRounding = ImFloor(defStyle->WindowRounding * scale_factor);
|
||||
style->WindowMinSize = ImFloor(defStyle->WindowMinSize * scale_factor);
|
||||
style->ChildRounding = ImFloor(defStyle->ChildRounding * scale_factor);
|
||||
style->PopupRounding = ImFloor(defStyle->PopupRounding * scale_factor);
|
||||
style->FramePadding = ImFloor(defStyle->FramePadding * scale_factor);
|
||||
style->FrameRounding = ImFloor(defStyle->FrameRounding * scale_factor);
|
||||
style->ItemSpacing = ImFloor(defStyle->ItemSpacing * scale_factor);
|
||||
style->ItemInnerSpacing = ImFloor(defStyle->ItemInnerSpacing * scale_factor);
|
||||
style->CellPadding = ImFloor(defStyle->CellPadding * scale_factor);
|
||||
style->TouchExtraPadding = ImFloor(defStyle->TouchExtraPadding * scale_factor);
|
||||
style->IndentSpacing = ImFloor(defStyle->IndentSpacing * scale_factor);
|
||||
style->ColumnsMinSpacing = ImFloor(defStyle->ColumnsMinSpacing * scale_factor);
|
||||
style->ScrollbarSize = ImFloor(defStyle->ScrollbarSize * scale_factor);
|
||||
style->ScrollbarRounding = ImFloor(defStyle->ScrollbarRounding * scale_factor);
|
||||
style->GrabMinSize = ImFloor(defStyle->GrabMinSize * scale_factor);
|
||||
style->GrabRounding = ImFloor(defStyle->GrabRounding * scale_factor);
|
||||
style->LogSliderDeadzone = ImFloor(defStyle->LogSliderDeadzone * scale_factor);
|
||||
style->TabRounding = ImFloor(defStyle->TabRounding * scale_factor);
|
||||
style->TabMinWidthForCloseButton = (defStyle->TabMinWidthForCloseButton != FLT_MAX) ? ImFloor(defStyle->TabMinWidthForCloseButton * scale_factor) : FLT_MAX;
|
||||
style->SeparatorTextPadding = ImFloor(defStyle->SeparatorTextPadding * scale_factor);
|
||||
style->DisplayWindowPadding = ImFloor(defStyle->DisplayWindowPadding * scale_factor);
|
||||
style->DisplaySafeAreaPadding = ImFloor(defStyle->DisplaySafeAreaPadding * scale_factor);
|
||||
style->MouseCursorScale = ImFloor(defStyle->MouseCursorScale * scale_factor);
|
||||
}
|
||||
bool Checkbox(const char* label, Option* v) {
|
||||
ImGuiWindow* window = GetCurrentWindow();
|
||||
|
@ -2,7 +2,7 @@
|
||||
#include "..\core.h"
|
||||
|
||||
namespace ImGui {
|
||||
extern void StyleScaleAllSizes(ImGuiStyle* style, const float scale_factor);
|
||||
extern void StyleScaleAllSizes(ImGuiStyle* style, const float scale_factor, ImGuiStyle* defStyle = nullptr);
|
||||
extern bool Checkbox(const char* label, Option* v);
|
||||
extern bool CheckboxHotkey(const char* label, KeyBindOption* v);
|
||||
extern void TextCentered(const char* text, const bool calculateWithScrollbar = true);
|
||||
|
@ -3,6 +3,9 @@
|
||||
|
||||
namespace impl {
|
||||
namespace d3d11 {
|
||||
ID3D11Device* d3d11Device = nullptr;
|
||||
static ID3D11DeviceContext* d3d11DeviceContext = nullptr;
|
||||
|
||||
HRESULT(__stdcall* oPresent)(IDXGISwapChain*, UINT, UINT);
|
||||
HRESULT __stdcall hkPresent11(IDXGISwapChain* pSwapChain, UINT SyncInterval, UINT Flags) {
|
||||
static bool init = false;
|
||||
@ -11,11 +14,8 @@ namespace impl {
|
||||
DXGI_SWAP_CHAIN_DESC desc{};
|
||||
pSwapChain->GetDesc(&desc);
|
||||
|
||||
ID3D11Device* device = nullptr;
|
||||
pSwapChain->GetDevice(__uuidof(ID3D11Device), (void**)&device);
|
||||
|
||||
ID3D11DeviceContext* context = nullptr;
|
||||
device->GetImmediateContext(&context);
|
||||
pSwapChain->GetDevice(__uuidof(ID3D11Device), (void**)&d3d11Device);
|
||||
d3d11Device->GetImmediateContext(&d3d11DeviceContext);
|
||||
|
||||
#ifndef LLMH_IMPL_DISABLE_DEBUG
|
||||
std::thread([&desc]() { impl::win32::init(desc.OutputWindow); }).detach();
|
||||
@ -27,7 +27,9 @@ namespace impl {
|
||||
ImGui::GetIO().IniFilename = nullptr;
|
||||
|
||||
ImGui_ImplWin32_Init(desc.OutputWindow);
|
||||
ImGui_ImplDX11_Init(device, context);
|
||||
ImGui_ImplDX11_Init(d3d11Device, d3d11DeviceContext);
|
||||
|
||||
Menu::InitImGuiStyle();
|
||||
|
||||
init = true;
|
||||
}
|
||||
|
@ -12,7 +12,8 @@ namespace impl {
|
||||
static UINT buffersCounts = -1;
|
||||
static FrameContext* frameContext = nullptr;
|
||||
|
||||
static ID3D12Device* device = nullptr;
|
||||
ID3D12Device* d3d12Device = nullptr;
|
||||
ID3D12DescriptorHeap* d3d12DescriptorHeapTextures = nullptr;
|
||||
static ID3D12DescriptorHeap* d3d12DescriptorHeapBackBuffers = nullptr;
|
||||
static ID3D12DescriptorHeap* d3d12DescriptorHeapImGuiRender = nullptr;
|
||||
static ID3D12GraphicsCommandList* d3d12CommandList = nullptr;
|
||||
@ -27,7 +28,7 @@ namespace impl {
|
||||
descTarget.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
|
||||
descTarget.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2D;
|
||||
|
||||
device->CreateRenderTargetView(pBackBuffer, &descTarget, frameContext[i].main_render_target_descriptor);
|
||||
d3d12Device->CreateRenderTargetView(pBackBuffer, &descTarget, frameContext[i].main_render_target_descriptor);
|
||||
frameContext[i].main_render_target_resource = pBackBuffer;
|
||||
}
|
||||
}
|
||||
@ -39,7 +40,7 @@ namespace impl {
|
||||
if (!init) {
|
||||
DXGI_SWAP_CHAIN_DESC desc{};
|
||||
pSwapChain->GetDesc(&desc);
|
||||
pSwapChain->GetDevice(__uuidof(ID3D12Device), (void**)&device);
|
||||
pSwapChain->GetDevice(__uuidof(ID3D12Device), (void**)&d3d12Device);
|
||||
|
||||
buffersCounts = desc.BufferCount;
|
||||
frameContext = new FrameContext[buffersCounts];
|
||||
@ -49,10 +50,10 @@ namespace impl {
|
||||
descriptorBackBuffers.NumDescriptors = buffersCounts;
|
||||
descriptorBackBuffers.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_NONE;
|
||||
descriptorBackBuffers.NodeMask = 1;
|
||||
if (device->CreateDescriptorHeap(&descriptorBackBuffers, IID_PPV_ARGS(&d3d12DescriptorHeapBackBuffers)) != S_OK)
|
||||
if (d3d12Device->CreateDescriptorHeap(&descriptorBackBuffers, IID_PPV_ARGS(&d3d12DescriptorHeapBackBuffers)) != S_OK)
|
||||
return;
|
||||
|
||||
SIZE_T rtvDescriptorSize = device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_RTV);
|
||||
SIZE_T rtvDescriptorSize = d3d12Device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_RTV);
|
||||
D3D12_CPU_DESCRIPTOR_HANDLE rtvHandle = d3d12DescriptorHeapBackBuffers->GetCPUDescriptorHandleForHeapStart();
|
||||
for (UINT i = 0; i < buffersCounts; ++i) {
|
||||
frameContext[i].main_render_target_descriptor = rtvHandle;
|
||||
@ -63,18 +64,25 @@ namespace impl {
|
||||
descriptorImGuiRender.Type = D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV;
|
||||
descriptorImGuiRender.NumDescriptors = 1;
|
||||
descriptorImGuiRender.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE;
|
||||
if (device->CreateDescriptorHeap(&descriptorImGuiRender, IID_PPV_ARGS(&d3d12DescriptorHeapImGuiRender)) != S_OK)
|
||||
if (d3d12Device->CreateDescriptorHeap(&descriptorImGuiRender, IID_PPV_ARGS(&d3d12DescriptorHeapImGuiRender)) != S_OK)
|
||||
return;
|
||||
|
||||
D3D12_DESCRIPTOR_HEAP_DESC descriptorTextures{};
|
||||
descriptorTextures.Type = D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV;
|
||||
descriptorTextures.NumDescriptors = 100;
|
||||
descriptorTextures.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE;
|
||||
if (impl::d3d12::d3d12Device->CreateDescriptorHeap(&descriptorTextures, IID_PPV_ARGS(&d3d12DescriptorHeapTextures)) != S_OK)
|
||||
return;
|
||||
|
||||
for (size_t i = 0; i < buffersCounts; i++) {
|
||||
ID3D12CommandAllocator* allocator = nullptr;
|
||||
if (device->CreateCommandAllocator(D3D12_COMMAND_LIST_TYPE_DIRECT, IID_PPV_ARGS(&allocator)) != S_OK)
|
||||
if (d3d12Device->CreateCommandAllocator(D3D12_COMMAND_LIST_TYPE_DIRECT, IID_PPV_ARGS(&allocator)) != S_OK)
|
||||
return;
|
||||
|
||||
frameContext[i].commandAllocator = allocator;
|
||||
}
|
||||
|
||||
if (device->CreateCommandList(0, D3D12_COMMAND_LIST_TYPE_DIRECT, frameContext[0].commandAllocator, NULL, IID_PPV_ARGS(&d3d12CommandList)) != S_OK || d3d12CommandList->Close() != S_OK)
|
||||
if (d3d12Device->CreateCommandList(0, D3D12_COMMAND_LIST_TYPE_DIRECT, frameContext[0].commandAllocator, NULL, IID_PPV_ARGS(&d3d12CommandList)) != S_OK || d3d12CommandList->Close() != S_OK)
|
||||
return;
|
||||
|
||||
#ifndef LLMH_IMPL_DISABLE_DEBUG
|
||||
@ -87,9 +95,12 @@ namespace impl {
|
||||
ImGui::GetIO().IniFilename = nullptr;
|
||||
|
||||
ImGui_ImplWin32_Init(desc.OutputWindow);
|
||||
ImGui_ImplDX12_Init(device, buffersCounts, DXGI_FORMAT_R8G8B8A8_UNORM, d3d12DescriptorHeapImGuiRender, d3d12DescriptorHeapImGuiRender->GetCPUDescriptorHandleForHeapStart(), d3d12DescriptorHeapImGuiRender->GetGPUDescriptorHandleForHeapStart());
|
||||
ImGui_ImplDX12_Init(d3d12Device, buffersCounts, DXGI_FORMAT_R8G8B8A8_UNORM, d3d12DescriptorHeapImGuiRender, d3d12DescriptorHeapImGuiRender->GetCPUDescriptorHandleForHeapStart(), d3d12DescriptorHeapImGuiRender->GetGPUDescriptorHandleForHeapStart());
|
||||
ImGui_ImplDX12_CreateDeviceObjects();
|
||||
|
||||
Menu::InitImGuiStyle();
|
||||
ImGui_ImplDX12_InvalidateDeviceObjects();
|
||||
|
||||
init = true;
|
||||
}
|
||||
|
||||
|
3241
DL2GameOverhaulScript/source/ImGui/misc/fonts/Ruda-Bold.embed
Normal file
3241
DL2GameOverhaulScript/source/ImGui/misc/fonts/Ruda-Bold.embed
Normal file
File diff suppressed because it is too large
Load Diff
BIN
DL2GameOverhaulScript/source/ImGui/misc/fonts/Ruda-Bold.ttf
Normal file
BIN
DL2GameOverhaulScript/source/ImGui/misc/fonts/Ruda-Bold.ttf
Normal file
Binary file not shown.
7985
DL2GameOverhaulScript/source/ImGui/misc/stb/stb_image.h
Normal file
7985
DL2GameOverhaulScript/source/ImGui/misc/stb/stb_image.h
Normal file
File diff suppressed because it is too large
Load Diff
@ -7,6 +7,7 @@ namespace Changelog {
|
||||
{ "v1.1.0",
|
||||
R"(- You can now load custom mod files from "EGameTools\UserModFiles"! Please read the new "Welcome" screen which explains how to use this feature and how to use the rest of the mod menu
|
||||
- By using the directory mentioned earlier for mod files, you can reload most of them by just reloading the savegame!
|
||||
- Mod menu UI revamp
|
||||
|
||||
- Added "Reload Jump Params", using the directory mentioned earlier (Player)
|
||||
- Added "One-handed Mode" (Player)
|
||||
|
@ -6,16 +6,20 @@
|
||||
namespace Menu {
|
||||
static const std::string title = "EGameTools (" + std::string(MOD_VERSION_STR) + ")";
|
||||
|
||||
static ImGuiStyle defStyle{};
|
||||
static constexpr ImGuiWindowFlags windowFlags = ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_HorizontalScrollbar;
|
||||
|
||||
static constexpr ImVec2 minWndSize = ImVec2(0.0f, 0.0f);
|
||||
static constexpr ImVec2 defMaxWndSize = ImVec2(900.0f, 675.0f);
|
||||
static ImVec2 maxWndSize = defMaxWndSize;
|
||||
|
||||
static constexpr ImGuiWindowFlags welcomeWindowFlags = (windowFlags | ImGuiWindowFlags_NoMove) & ~ImGuiWindowFlags_HorizontalScrollbar;
|
||||
static constexpr ImVec2 minChangelogWndSize = ImVec2(400.0f, 0.0f);
|
||||
static constexpr ImVec2 defMaxChangelogWndSize = ImVec2(400.0f, 700.0f);
|
||||
static constexpr ImVec2 minWelcomeWndSize = ImVec2(700.0f, 0.0f);
|
||||
static constexpr ImVec2 defMaxWelcomeWndSize = ImVec2(700.0f, 700.0f);
|
||||
|
||||
static constexpr ImVec2 minWndSize = ImVec2(0.0f, 0.0f);
|
||||
static constexpr ImVec2 defMaxWndSize = ImVec2(900.0f, 675.0f);
|
||||
static ImVec2 maxWndSize = defMaxWndSize;
|
||||
ImTextureID EGTLogoTexture{};
|
||||
|
||||
KeyBindOption menuToggle = KeyBindOption(VK_F5);
|
||||
float opacity = 99.0f;
|
||||
@ -25,6 +29,72 @@ namespace Menu {
|
||||
Option firstTimeRunning{};
|
||||
Option hasSeenChangelog{};
|
||||
|
||||
void InitImGuiStyle() {
|
||||
ImGuiStyle* style = &ImGui::GetStyle();
|
||||
|
||||
style->WindowPadding = ImVec2(15, 15);
|
||||
style->WindowRounding = 5.0f;
|
||||
style->FramePadding = ImVec2(5, 5);
|
||||
style->FrameRounding = 4.0f;
|
||||
style->ItemSpacing = ImVec2(12, 8);
|
||||
style->ItemInnerSpacing = ImVec2(8, 6);
|
||||
style->IndentSpacing = 25.0f;
|
||||
style->ScrollbarSize = 15.0f;
|
||||
style->ScrollbarRounding = 9.0f;
|
||||
style->GrabMinSize = 5.0f;
|
||||
style->GrabRounding = 3.0f;
|
||||
|
||||
style->Colors[ImGuiCol_Text] = ImVec4(0.80f, 0.80f, 0.83f, 1.00f);
|
||||
style->Colors[ImGuiCol_TextDisabled] = ImVec4(0.24f, 0.23f, 0.29f, 1.00f);
|
||||
style->Colors[ImGuiCol_WindowBg] = ImVec4(0.06f, 0.05f, 0.07f, 1.00f);
|
||||
style->Colors[ImGuiCol_ChildBg] = ImVec4(0.07f, 0.07f, 0.09f, 1.00f);
|
||||
style->Colors[ImGuiCol_PopupBg] = ImVec4(0.07f, 0.07f, 0.09f, 1.00f);
|
||||
style->Colors[ImGuiCol_Border] = ImVec4(0.80f, 0.80f, 0.83f, 0.88f);
|
||||
style->Colors[ImGuiCol_BorderShadow] = ImVec4(0.92f, 0.91f, 0.88f, 0.00f);
|
||||
style->Colors[ImGuiCol_FrameBg] = ImVec4(0.10f, 0.09f, 0.12f, 1.00f);
|
||||
style->Colors[ImGuiCol_FrameBgHovered] = ImVec4(0.24f, 0.23f, 0.29f, 1.00f);
|
||||
style->Colors[ImGuiCol_FrameBgActive] = ImVec4(0.4705f, 0.0784f, 0.1176f, 1.00f);
|
||||
style->Colors[ImGuiCol_TitleBg] = ImVec4(0.10f, 0.09f, 0.12f, 1.00f);
|
||||
style->Colors[ImGuiCol_TitleBgCollapsed] = ImVec4(1.00f, 0.98f, 0.95f, 0.75f);
|
||||
style->Colors[ImGuiCol_TitleBgActive] = ImVec4(0.07f, 0.07f, 0.09f, 1.00f);
|
||||
style->Colors[ImGuiCol_MenuBarBg] = ImVec4(0.13f, 0.12f, 0.15f, 1.00f);
|
||||
style->Colors[ImGuiCol_ScrollbarBg] = ImVec4(0.10f, 0.09f, 0.12f, 1.00f);
|
||||
style->Colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.5882f, 0.0784f, 0.1176f, 1.00f);
|
||||
style->Colors[ImGuiCol_ScrollbarGrabHovered] = ImVec4(1.0f, 0.0784f, 0.1176f, 1.00f);
|
||||
style->Colors[ImGuiCol_ScrollbarGrabActive] = ImVec4(0.4705f, 0.0784f, 0.1176f, 1.00f);
|
||||
style->Colors[ImGuiCol_CheckMark] = ImVec4(1.0f, 0.0784f, 0.1176f, 1.00f);
|
||||
style->Colors[ImGuiCol_SliderGrab] = ImVec4(1.0f, 0.0784f, 0.1176f, 1.00f);
|
||||
style->Colors[ImGuiCol_SliderGrabActive] = ImVec4(1.0f, 0.0784f, 0.1176f, 1.00f);
|
||||
style->Colors[ImGuiCol_Button] = ImVec4(0.10f, 0.09f, 0.12f, 1.00f);
|
||||
style->Colors[ImGuiCol_ButtonHovered] = ImVec4(1.0f, 0.0784f, 0.1176f, 1.00f);
|
||||
style->Colors[ImGuiCol_ButtonActive] = ImVec4(0.4705f, 0.0784f, 0.1176f, 1.00f);
|
||||
style->Colors[ImGuiCol_Header] = ImVec4(0.5882f, 0.0784f, 0.1176f, 1.00f);
|
||||
style->Colors[ImGuiCol_HeaderHovered] = ImVec4(1.0f, 0.0784f, 0.1176f, 1.00f);
|
||||
style->Colors[ImGuiCol_HeaderActive] = ImVec4(0.4705f, 0.0784f, 0.1176f, 1.00f);
|
||||
style->Colors[ImGuiCol_Tab] = ImVec4(0.5882f, 0.0784f, 0.1176f, 1.00f);
|
||||
style->Colors[ImGuiCol_TabHovered] = ImVec4(0.4705f, 0.0784f, 0.1176f, 1.00f);
|
||||
style->Colors[ImGuiCol_TabActive] = ImVec4(1.0f, 0.0784f, 0.1176f, 1.00f);
|
||||
style->Colors[ImGuiCol_ResizeGrip] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
|
||||
style->Colors[ImGuiCol_ResizeGripHovered] = ImVec4(0.56f, 0.56f, 0.58f, 1.00f);
|
||||
style->Colors[ImGuiCol_ResizeGripActive] = ImVec4(0.06f, 0.05f, 0.07f, 1.00f);
|
||||
style->Colors[ImGuiCol_PlotLines] = ImVec4(0.40f, 0.39f, 0.38f, 0.63f);
|
||||
style->Colors[ImGuiCol_PlotLinesHovered] = ImVec4(0.25f, 1.00f, 0.00f, 1.00f);
|
||||
style->Colors[ImGuiCol_PlotHistogram] = ImVec4(0.40f, 0.39f, 0.38f, 0.63f);
|
||||
style->Colors[ImGuiCol_PlotHistogramHovered] = ImVec4(0.25f, 1.00f, 0.00f, 1.00f);
|
||||
style->Colors[ImGuiCol_TextSelectedBg] = ImVec4(0.5882f, 0.0784f, 0.1176f, 1.00f);
|
||||
style->Colors[ImGuiCol_ModalWindowDimBg] = ImVec4(1.00f, 0.98f, 0.95f, 0.73f);
|
||||
|
||||
defStyle = *style;
|
||||
|
||||
ImGuiIO& io = ImGui::GetIO();
|
||||
ImFontConfig fontConfig{};
|
||||
fontConfig.FontDataOwnedByAtlas = false;
|
||||
io.FontDefault = io.Fonts->AddFontFromMemoryTTF((void*)g_FontRudaBold, sizeof(g_FontRudaBold), 12.0f + 6.0f, &fontConfig);
|
||||
io.Fonts->Build();
|
||||
|
||||
EGTLogoTexture = Utils::Texture::LoadImGuiTexture(g_EGTWhiteLogo, sizeof(g_EGTWhiteLogo));
|
||||
}
|
||||
|
||||
static void CreateChangelogFile() {
|
||||
const std::string localAppDataDir = Utils::Files::GetLocalAppDataDir();
|
||||
if (localAppDataDir.empty())
|
||||
@ -203,6 +273,9 @@ namespace Menu {
|
||||
ImGui::SetNextWindowBgAlpha(static_cast<float>(opacity) / 100.0f);
|
||||
ImGui::SetNextWindowSizeConstraints(minWndSize, maxWndSize);
|
||||
ImGui::Begin(title.c_str(), &menuToggle.value, windowFlags); {
|
||||
ImGui::SetCursorPosX((ImGui::GetWindowWidth() / 2.0f) - 278.0f / 2.0f);
|
||||
ImGui::Image(EGTLogoTexture, ImVec2(278.0f, 100.0f));
|
||||
|
||||
if (ImGui::BeginTabBar("##MainTabBar")) {
|
||||
for (auto& tab : *MenuTab::GetInstances()) {
|
||||
if (ImGui::BeginTabItem(tab.second->tabName.data())) {
|
||||
@ -218,7 +291,7 @@ namespace Menu {
|
||||
ImGui::Hotkey("Menu Toggle Key", &menuToggle);
|
||||
ImGui::SliderFloat("Menu Opacity", &opacity, 0.0f, 100.0f, "%.1f%%", ImGuiSliderFlags_AlwaysClamp);
|
||||
if (ImGui::SliderFloat("Menu Scale", &scale, 1.0f, 2.5f, "%.1f%%", ImGuiSliderFlags_AlwaysClamp)) {
|
||||
ImGui::StyleScaleAllSizes(&ImGui::GetStyle(), scale);
|
||||
ImGui::StyleScaleAllSizes(&ImGui::GetStyle(), scale, &defStyle);
|
||||
ImGui::GetIO().FontGlobalScale = scale;
|
||||
}
|
||||
ImGui::End();
|
||||
|
@ -23,6 +23,8 @@ namespace Menu {
|
||||
extern Option firstTimeRunning;
|
||||
extern Option hasSeenChangelog;
|
||||
|
||||
extern void InitImGuiStyle();
|
||||
|
||||
extern void FirstTimeRunning();
|
||||
extern void Render();
|
||||
}
|
216
DL2GameOverhaulScript/source/utils/texture.cpp
Normal file
216
DL2GameOverhaulScript/source/utils/texture.cpp
Normal file
@ -0,0 +1,216 @@
|
||||
#include <pch.h>
|
||||
#define STB_IMAGE_IMPLEMENTATION
|
||||
#include <misc\stb\stb_image.h>
|
||||
|
||||
namespace impl {
|
||||
namespace d3d11 {
|
||||
extern ID3D11Device* d3d11Device;
|
||||
}
|
||||
namespace d3d12 {
|
||||
extern ID3D12Device* d3d12Device;
|
||||
extern ID3D12DescriptorHeap* d3d12DescriptorHeapTextures;
|
||||
}
|
||||
}
|
||||
namespace Core {
|
||||
extern int rendererAPI;
|
||||
}
|
||||
|
||||
namespace Utils {
|
||||
namespace Texture {
|
||||
static int descriptor_index = 1;
|
||||
|
||||
ImTextureID LoadImGuiTextureD3D11(const unsigned char* rawData, const int rawSize) {
|
||||
int image_width = 0;
|
||||
int image_height = 0;
|
||||
unsigned char* image_data = stbi_load_from_memory(rawData, rawSize, &image_width, &image_height, nullptr, 4);
|
||||
if (!image_data)
|
||||
return nullptr;
|
||||
|
||||
D3D11_TEXTURE2D_DESC desc{};
|
||||
ZeroMemory(&desc, sizeof(desc));
|
||||
desc.Width = image_width;
|
||||
desc.Height = image_height;
|
||||
desc.MipLevels = 1;
|
||||
desc.ArraySize = 1;
|
||||
desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
|
||||
desc.SampleDesc.Count = 1;
|
||||
desc.Usage = D3D11_USAGE_DEFAULT;
|
||||
desc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
|
||||
desc.CPUAccessFlags = 0;
|
||||
|
||||
ID3D11Texture2D* pTexture = nullptr;
|
||||
D3D11_SUBRESOURCE_DATA subResource{};
|
||||
subResource.pSysMem = image_data;
|
||||
subResource.SysMemPitch = desc.Width * 4;
|
||||
subResource.SysMemSlicePitch = 0;
|
||||
impl::d3d11::d3d11Device->CreateTexture2D(&desc, &subResource, &pTexture);
|
||||
if (!pTexture)
|
||||
return nullptr;
|
||||
|
||||
D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc{};
|
||||
ZeroMemory(&srvDesc, sizeof(srvDesc));
|
||||
srvDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
|
||||
srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D;
|
||||
srvDesc.Texture2D.MipLevels = desc.MipLevels;
|
||||
srvDesc.Texture2D.MostDetailedMip = 0;
|
||||
|
||||
ID3D11ShaderResourceView* my_texture = nullptr;
|
||||
impl::d3d11::d3d11Device->CreateShaderResourceView(pTexture, &srvDesc, &my_texture);
|
||||
|
||||
pTexture->Release();
|
||||
stbi_image_free(image_data);
|
||||
|
||||
return static_cast<ImTextureID>(my_texture);
|
||||
}
|
||||
ImTextureID LoadImGuiTextureD3D12(const unsigned char* rawData, const int rawSize) {
|
||||
int image_width = 0;
|
||||
int image_height = 0;
|
||||
unsigned char* image_data = stbi_load_from_memory(rawData, rawSize, &image_width, &image_height, nullptr, 4);
|
||||
if (!image_data)
|
||||
return nullptr;
|
||||
|
||||
D3D12_HEAP_PROPERTIES props{};
|
||||
memset(&props, 0, sizeof(D3D12_HEAP_PROPERTIES));
|
||||
props.Type = D3D12_HEAP_TYPE_DEFAULT;
|
||||
props.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN;
|
||||
props.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN;
|
||||
|
||||
D3D12_RESOURCE_DESC desc{};
|
||||
ZeroMemory(&desc, sizeof(desc));
|
||||
desc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D;
|
||||
desc.Alignment = 0;
|
||||
desc.Width = image_width;
|
||||
desc.Height = image_height;
|
||||
desc.DepthOrArraySize = 1;
|
||||
desc.MipLevels = 1;
|
||||
desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
|
||||
desc.SampleDesc.Count = 1;
|
||||
desc.SampleDesc.Quality = 0;
|
||||
desc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN;
|
||||
desc.Flags = D3D12_RESOURCE_FLAG_NONE;
|
||||
|
||||
ID3D12Resource* pTexture = nullptr;
|
||||
impl::d3d12::d3d12Device->CreateCommittedResource(&props, D3D12_HEAP_FLAG_NONE, &desc, D3D12_RESOURCE_STATE_COPY_DEST, nullptr, IID_PPV_ARGS(&pTexture));
|
||||
|
||||
const UINT uploadPitch = (image_width * 4 + D3D12_TEXTURE_DATA_PITCH_ALIGNMENT - 1u) & ~(D3D12_TEXTURE_DATA_PITCH_ALIGNMENT - 1u);
|
||||
const UINT uploadSize = image_height * uploadPitch;
|
||||
desc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER;
|
||||
desc.Alignment = 0;
|
||||
desc.Width = uploadSize;
|
||||
desc.Height = 1;
|
||||
desc.DepthOrArraySize = 1;
|
||||
desc.MipLevels = 1;
|
||||
desc.Format = DXGI_FORMAT_UNKNOWN;
|
||||
desc.SampleDesc.Count = 1;
|
||||
desc.SampleDesc.Quality = 0;
|
||||
desc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR;
|
||||
desc.Flags = D3D12_RESOURCE_FLAG_NONE;
|
||||
|
||||
props.Type = D3D12_HEAP_TYPE_UPLOAD;
|
||||
props.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN;
|
||||
props.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN;
|
||||
|
||||
ID3D12Resource* uploadBuffer = nullptr;
|
||||
HRESULT hr = impl::d3d12::d3d12Device->CreateCommittedResource(&props, D3D12_HEAP_FLAG_NONE, &desc, D3D12_RESOURCE_STATE_GENERIC_READ, nullptr, IID_PPV_ARGS(&uploadBuffer));
|
||||
IM_ASSERT(SUCCEEDED(hr));
|
||||
|
||||
LPVOID mapped = nullptr;
|
||||
D3D12_RANGE range = { 0, uploadSize };
|
||||
hr = uploadBuffer->Map(0, &range, &mapped);
|
||||
IM_ASSERT(SUCCEEDED(hr));
|
||||
for (int y = 0; y < image_height; y++)
|
||||
memcpy(reinterpret_cast<LPVOID>((reinterpret_cast<ULONG64>(mapped) + y * static_cast<ULONG64>(uploadPitch))), image_data + y * image_width * 4, static_cast<size_t>(image_width) * 4);
|
||||
uploadBuffer->Unmap(0, &range);
|
||||
|
||||
D3D12_TEXTURE_COPY_LOCATION srcLocation{};
|
||||
srcLocation.pResource = uploadBuffer;
|
||||
srcLocation.Type = D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT;
|
||||
srcLocation.PlacedFootprint.Footprint.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
|
||||
srcLocation.PlacedFootprint.Footprint.Width = image_width;
|
||||
srcLocation.PlacedFootprint.Footprint.Height = image_height;
|
||||
srcLocation.PlacedFootprint.Footprint.Depth = 1;
|
||||
srcLocation.PlacedFootprint.Footprint.RowPitch = uploadPitch;
|
||||
|
||||
D3D12_TEXTURE_COPY_LOCATION dstLocation{};
|
||||
dstLocation.pResource = pTexture;
|
||||
dstLocation.Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX;
|
||||
dstLocation.SubresourceIndex = 0;
|
||||
|
||||
D3D12_RESOURCE_BARRIER barrier{};
|
||||
barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;
|
||||
barrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE;
|
||||
barrier.Transition.pResource = pTexture;
|
||||
barrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;
|
||||
barrier.Transition.StateBefore = D3D12_RESOURCE_STATE_COPY_DEST;
|
||||
barrier.Transition.StateAfter = D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE;
|
||||
|
||||
ID3D12Fence* fence = nullptr;
|
||||
hr = impl::d3d12::d3d12Device->CreateFence(0, D3D12_FENCE_FLAG_NONE, IID_PPV_ARGS(&fence));
|
||||
IM_ASSERT(SUCCEEDED(hr));
|
||||
|
||||
HANDLE event = CreateEvent(0, 0, 0, 0);
|
||||
IM_ASSERT(event);
|
||||
|
||||
D3D12_COMMAND_QUEUE_DESC queueDesc{};
|
||||
queueDesc.Type = D3D12_COMMAND_LIST_TYPE_DIRECT;
|
||||
queueDesc.Flags = D3D12_COMMAND_QUEUE_FLAG_NONE;
|
||||
queueDesc.NodeMask = 1;
|
||||
|
||||
ID3D12CommandQueue* cmdQueue = nullptr;
|
||||
hr = impl::d3d12::d3d12Device->CreateCommandQueue(&queueDesc, IID_PPV_ARGS(&cmdQueue));
|
||||
IM_ASSERT(SUCCEEDED(hr));
|
||||
|
||||
ID3D12CommandAllocator* cmdAlloc = nullptr;
|
||||
hr = impl::d3d12::d3d12Device->CreateCommandAllocator(D3D12_COMMAND_LIST_TYPE_DIRECT, IID_PPV_ARGS(&cmdAlloc));
|
||||
IM_ASSERT(SUCCEEDED(hr));
|
||||
|
||||
ID3D12GraphicsCommandList* cmdList = nullptr;
|
||||
hr = impl::d3d12::d3d12Device->CreateCommandList(0, D3D12_COMMAND_LIST_TYPE_DIRECT, cmdAlloc, nullptr, IID_PPV_ARGS(&cmdList));
|
||||
IM_ASSERT(SUCCEEDED(hr));
|
||||
|
||||
cmdList->CopyTextureRegion(&dstLocation, 0, 0, 0, &srcLocation, nullptr);
|
||||
cmdList->ResourceBarrier(1, &barrier);
|
||||
|
||||
hr = cmdList->Close();
|
||||
IM_ASSERT(SUCCEEDED(hr));
|
||||
|
||||
cmdQueue->ExecuteCommandLists(1, reinterpret_cast<ID3D12CommandList* const*>(&cmdList));
|
||||
hr = cmdQueue->Signal(fence, 1);
|
||||
IM_ASSERT(SUCCEEDED(hr));
|
||||
|
||||
fence->SetEventOnCompletion(1, event);
|
||||
WaitForSingleObject(event, INFINITE);
|
||||
|
||||
cmdList->Release();
|
||||
cmdAlloc->Release();
|
||||
cmdQueue->Release();
|
||||
CloseHandle(event);
|
||||
fence->Release();
|
||||
uploadBuffer->Release();
|
||||
|
||||
D3D12_SHADER_RESOURCE_VIEW_DESC srvDesc{};
|
||||
ZeroMemory(&srvDesc, sizeof(srvDesc));
|
||||
srvDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
|
||||
srvDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D;
|
||||
srvDesc.Texture2D.MipLevels = desc.MipLevels;
|
||||
srvDesc.Texture2D.MostDetailedMip = 0;
|
||||
srvDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING;
|
||||
|
||||
const UINT handle_increment = impl::d3d12::d3d12Device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV);
|
||||
D3D12_CPU_DESCRIPTOR_HANDLE my_texture_srv_cpu_handle = impl::d3d12::d3d12DescriptorHeapTextures->GetCPUDescriptorHandleForHeapStart();
|
||||
my_texture_srv_cpu_handle.ptr += (static_cast<ULONG64>(handle_increment) * descriptor_index);
|
||||
D3D12_GPU_DESCRIPTOR_HANDLE my_texture_srv_gpu_handle = impl::d3d12::d3d12DescriptorHeapTextures->GetGPUDescriptorHandleForHeapStart();
|
||||
my_texture_srv_gpu_handle.ptr += (static_cast<ULONG64>(handle_increment) * descriptor_index);
|
||||
impl::d3d12::d3d12Device->CreateShaderResourceView(pTexture, &srvDesc, my_texture_srv_cpu_handle);
|
||||
|
||||
descriptor_index += 1;
|
||||
stbi_image_free(image_data);
|
||||
|
||||
return reinterpret_cast<ImTextureID>(my_texture_srv_gpu_handle.ptr);
|
||||
}
|
||||
|
||||
ImTextureID LoadImGuiTexture(const unsigned char* rawData, const int rawSize) {
|
||||
return Core::rendererAPI == 11 ? LoadImGuiTextureD3D11(rawData, rawSize) : LoadImGuiTextureD3D12(rawData, rawSize);
|
||||
}
|
||||
}
|
||||
}
|
8
DL2GameOverhaulScript/source/utils/texture.h
Normal file
8
DL2GameOverhaulScript/source/utils/texture.h
Normal file
@ -0,0 +1,8 @@
|
||||
#pragma once
|
||||
#include <imgui.h>
|
||||
|
||||
namespace Utils {
|
||||
namespace Texture {
|
||||
extern ImTextureID LoadImGuiTexture(const unsigned char* rawData, const int rawSize);
|
||||
}
|
||||
}
|
12961
DL2GameOverhaulScript/textures/EGTWhiteLogo.embed
Normal file
12961
DL2GameOverhaulScript/textures/EGTWhiteLogo.embed
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user