diff --git a/r5dev/core/resource.h b/r5dev/core/resource.h index 9efea4f3..f0ea9b40 100644 --- a/r5dev/core/resource.h +++ b/r5dev/core/resource.h @@ -2,14 +2,31 @@ // Microsoft Visual C++ generated include file. // Used by r5dev.rc // -#define PNG 256 #define IDB_PNG1 101 +#define IDB_PNG2 102 +#define IDB_PNG3 103 +#define IDB_PNG4 104 +#define IDB_PNG5 105 +#define IDB_PNG6 106 +#define IDB_PNG7 107 +#define IDB_PNG8 108 +#define IDB_PNG9 109 +#define IDB_PNG10 110 +#define IDB_PNG11 111 +#define IDB_PNG12 112 +#define IDB_PNG13 113 +#define IDB_PNG14 114 +#define IDB_PNG15 115 +#define IDB_PNG16 116 +#define IDB_PNG17 117 +#define DEV 256 +#define PNG 256 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_RESOURCE_VALUE 118 #define _APS_NEXT_COMMAND_VALUE 40001 #define _APS_NEXT_CONTROL_VALUE 1001 #define _APS_NEXT_SYMED_VALUE 101 diff --git a/r5dev/gameui/IBrowser.cpp b/r5dev/gameui/IBrowser.cpp index 62c0bb5d..bb33cb4c 100644 --- a/r5dev/gameui/IBrowser.cpp +++ b/r5dev/gameui/IBrowser.cpp @@ -19,6 +19,7 @@ History: #include "tier1/cvar.h" #include "windows/id3dx.h" #include "windows/console.h" +#include "windows/resource.h" #include "engine/net.h" #include "engine/sys_utils.h" #include "engine/host_state.h" @@ -72,18 +73,7 @@ IBrowser::IBrowser(void) hostingServerRequestThread.detach(); #endif // !CLIENT_DLL - - /* Obtain handle to module */ - static HGLOBAL rcData = NULL; - HMODULE handle; - GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, (LPCSTR)"unnamed", &handle); - HRSRC rc = FindResource(handle, MAKEINTRESOURCE(IDB_PNG1), MAKEINTRESOURCE(PNG)); - /* Obtain assets from 'rsrc' */ - if (rc != NULL) - { rcData = LoadResource(handle, rc); } - else { assert(rc == NULL); } - if (rcData != NULL) { m_vucLockedIconBlob = (std::vector<unsigned char>*)LockResource(rcData); } - else { assert(rcData == NULL); } + m_rLockedIconBlob = GetModuleResource(IDB_PNG2); } //----------------------------------------------------------------------------- @@ -368,14 +358,15 @@ void IBrowser::HiddenServersModal(void) if (!m_idLockedIcon) { - bool ret = LoadTextureBuffer((unsigned char*)m_vucLockedIconBlob, 0x1000 /*TODO [ AMOS ]: Calculate size dynamically*/, &m_idLockedIcon, &m_nLockedIconWidth, &m_nLockedIconHeight); + bool ret = LoadTextureBuffer(reinterpret_cast<unsigned char*>(m_rLockedIconBlob.m_pData), static_cast<int>(m_rLockedIconBlob.m_nSize), + &m_idLockedIcon, &m_rLockedIconBlob.m_nWidth, &m_rLockedIconBlob.m_nHeight); IM_ASSERT(ret); } ImGui::PushStyleColor(ImGuiCol_ChildBg, ImVec4(0.00f, 0.00f, 0.00f, 0.00f)); // Override the style color for child bg. - ImGui::BeginChild("##HiddenServersConnectModal_IconParent", ImVec2(m_nLockedIconWidth, m_nLockedIconHeight)); - ImGui::Image(m_idLockedIcon, ImVec2(m_nLockedIconWidth, m_nLockedIconHeight)); // Display texture. + ImGui::BeginChild("##HiddenServersConnectModal_IconParent", ImVec2(m_rLockedIconBlob.m_nWidth, m_rLockedIconBlob.m_nHeight)); + ImGui::Image(m_idLockedIcon, ImVec2(m_rLockedIconBlob.m_nWidth, m_rLockedIconBlob.m_nHeight)); // Display texture. ImGui::EndChild(); ImGui::PopStyleColor(); // Pop the override for the child bg. diff --git a/r5dev/gameui/IBrowser.h b/r5dev/gameui/IBrowser.h index 2d3f269b..0e28ba2e 100644 --- a/r5dev/gameui/IBrowser.h +++ b/r5dev/gameui/IBrowser.h @@ -1,5 +1,7 @@ #pragma once #ifndef DEDICATED +#include "common/sdkdefs.h" +#include "windows/resource.h" #include "networksystem/serverlisting.h" #include "networksystem/r5net.h" @@ -115,9 +117,7 @@ public: /* Texture */ ID3D11ShaderResourceView* m_idLockedIcon = nullptr; - std::vector<unsigned char>* m_vucLockedIconBlob; - int m_nLockedIconWidth = 0; - int m_nLockedIconHeight = 0; + MODULERESOURCE m_rLockedIconBlob; void SetSection(eSection section) { diff --git a/r5dev/gameui/IConsole.cpp b/r5dev/gameui/IConsole.cpp index 50a03d5d..42dc5edf 100644 --- a/r5dev/gameui/IConsole.cpp +++ b/r5dev/gameui/IConsole.cpp @@ -14,10 +14,12 @@ History: #include "core/stdafx.h" #include "core/init.h" +#include "core/resource.h" #include "tier0/commandline.h" #include "tier1/cvar.h" #include "windows/id3dx.h" #include "windows/console.h" +#include "windows/resource.h" #include "gameui/IConsole.h" #include "client/vengineclient_impl.h" @@ -50,6 +52,32 @@ CConsole::~CConsole(void) m_vsvHistory.clear(); } +//----------------------------------------------------------------------------- +// Purpose: game console setup +// Output : true on success, false otherwise +//----------------------------------------------------------------------------- +bool CConsole::Setup(void) +{ + SetStyleVar(); + + int k = 0; // Get all image resources for displaying flags. + for (int i = IDB_PNG3; i <= IDB_PNG17; i++) + { + m_vFlagIcons.push_back(MODULERESOURCE()); + m_vFlagIcons[k] = GetModuleResource(i); + + bool ret = LoadTextureBuffer(reinterpret_cast<unsigned char*>(m_vFlagIcons[k].m_pData), static_cast<int>(m_vFlagIcons[k].m_nSize), + &m_vFlagIcons[k].m_idIcon, &m_vFlagIcons[k].m_nWidth, &m_vFlagIcons[k].m_nHeight); + if (!ret) + { + IM_ASSERT(ret); + return false; + } + k++; + } + return true; +} + //----------------------------------------------------------------------------- // Purpose: game console main render loop // Input : *pszTitle - @@ -59,9 +87,9 @@ void CConsole::Draw(const char* pszTitle, bool* bDraw) { if (!m_bInitialized) { - SetStyleVar(); - m_bInitialized = true; + Setup(); m_pszConsoleTitle = pszTitle; + m_bInitialized = true; } { @@ -217,7 +245,7 @@ void CConsole::BasePanel(bool* bDraw) if (m_nSuggestPos != -1) { // Remove the default value from ConVar before assigning it to the input buffer. - std::string svConVar = m_vsvSuggest[m_nSuggestPos].substr(0, m_vsvSuggest[m_nSuggestPos].find(' ')) + " "; + string svConVar = m_vsvSuggest[m_nSuggestPos].m_svName.substr(0, m_vsvSuggest[m_nSuggestPos].m_svName.find(' ')) + " "; memmove(m_szInputBuf, svConVar.c_str(), svConVar.size() + 1); ResetAutoComplete(); @@ -252,7 +280,7 @@ void CConsole::BasePanel(bool* bDraw) } m_vecSuggestWindowPos = ImGui::GetItemRectMin(); m_vecSuggestWindowPos.y += ImGui::GetItemRectSize().y; - m_vecSuggestWindowSize = ImVec2(600, nPad + std::clamp(static_cast<int>(m_vsvSuggest.size()) * 18, 37, 122)); + m_vecSuggestWindowSize = ImVec2(600, nPad + std::clamp(static_cast<float>(m_vsvSuggest.size()) * 13.0f, 37.0f, 127.5f)); ImGui::SameLine(); if (ImGui::Button("Submit")) @@ -317,31 +345,43 @@ void CConsole::SuggestPanel(void) for (int i = 0; i < m_vsvSuggest.size(); i++) { bool bIsIndexActive = m_nSuggestPos == i; - ImGui::PushID(i); - if (ImGui::Selectable(m_vsvSuggest[i].c_str(), bIsIndexActive)) + + if (con_suggestion_showflags->GetBool()) + { + int k = ColorCodeFlags(m_vsvSuggest[i].m_nFlags); + ImGui::Image(m_vFlagIcons[k].m_idIcon, ImVec2(m_vFlagIcons[k].m_nWidth, m_vFlagIcons[k].m_nHeight)); + ImGui::SameLine(); + } + + if (ImGui::Selectable(m_vsvSuggest[i].m_svName.c_str(), bIsIndexActive)) { ImGui::Separator(); // Remove the default value from ConVar before assigning it to the input buffer. - std::string svConVar = m_vsvSuggest[i].substr(0, m_vsvSuggest[i].find(' ')) + " "; + string svConVar = m_vsvSuggest[i].m_svName.substr(0, m_vsvSuggest[i].m_svName.find(' ')) + " "; memmove(m_szInputBuf, svConVar.c_str(), svConVar.size() + 1); ResetAutoComplete(); } ImGui::PopID(); - if (bIsIndexActive) + // Make sure we bring the currently 'active' item into view. + if (m_bSuggestMoved && bIsIndexActive) { - // Make sure we bring the currently 'active' item into view. - if (m_bSuggestMoved) - { - ImGuiWindow* pWindow = ImGui::GetCurrentWindow(); - ImRect imRect = ImGui::GetCurrentContext()->LastItemData.Rect; + ImGuiWindow* pWindow = ImGui::GetCurrentWindow(); + ImRect imRect = ImGui::GetCurrentContext()->LastItemData.Rect; - ImGui::ScrollToBringRectIntoView(pWindow, imRect); - m_bSuggestMoved = false; - } + // Reset to keep flag in display. + imRect.Min.x = pWindow->InnerRect.Min.x; + imRect.Max.x = pWindow->InnerRect.Min.x; // Set to Min.x on purpose! + + // Eliminate jiggle when going up/down in the menu. + imRect.Min.y += 1; + imRect.Max.y -= 1; + + ImGui::ScrollToRect(pWindow, imRect); + m_bSuggestMoved = false; } if (m_bSuggestUpdate) @@ -411,18 +451,20 @@ void CConsole::FindFromPartial(void) m_bSuggestUpdate = true; m_vsvSuggest.clear(); - for (int i = 0; i < g_vsvCommandBases.size(); i++) + for (int i = 0; i < m_vsvCommandBases.size(); i++) { if (m_vsvSuggest.size() < con_suggestion_limit->GetInt()) { - if (g_vsvCommandBases[i].find(m_szInputBuf) != std::string::npos) + if (m_vsvCommandBases[i].m_svName.find(m_szInputBuf) != string::npos) { - if (std::find(m_vsvSuggest.begin(), m_vsvSuggest.end(), g_vsvCommandBases[i]) == m_vsvSuggest.end()) + if (std::find(m_vsvSuggest.begin(), m_vsvSuggest.end(), + m_vsvCommandBases[i].m_svName) == m_vsvSuggest.end()) { - std::string svValue; - ConCommandBase* pCommandBase = g_pCVar->FindCommandBase(g_vsvCommandBases[i].c_str()); + int nFlags{}; + string svValue; + ConCommandBase* pCommandBase = g_pCVar->FindCommandBase(m_vsvCommandBases[i].m_svName.c_str()); - if (pCommandBase != nullptr) + if (pCommandBase) { if (!pCommandBase->IsCommand()) { @@ -432,11 +474,11 @@ void CConsole::FindFromPartial(void) svValue.append(pConVar->GetString()); svValue.append("]"); } - if (con_suggestion_helptext->GetBool()) + if (con_suggestion_showhelptext->GetBool()) { if (pCommandBase->GetHelpText()) { - std::string svHelpText = pCommandBase->GetHelpText(); + string svHelpText = pCommandBase->GetHelpText(); if (!svHelpText.empty()) { svValue.append(" - \"" + svHelpText + "\""); @@ -444,21 +486,32 @@ void CConsole::FindFromPartial(void) } if (pCommandBase->GetUsageText()) { - std::string svUsageText = pCommandBase->GetUsageText(); + string svUsageText = pCommandBase->GetUsageText(); if (!svUsageText.empty()) { svValue.append(" - \"" + svUsageText + "\""); } } } + if (con_suggestion_showflags->GetBool()) + { + if (con_suggestion_flags_realtime->GetBool()) + { + nFlags = pCommandBase->GetFlags(); + } + else // Display compile-time flags instead. + { + nFlags = m_vsvCommandBases[i].m_nFlags; + } + } } - m_vsvSuggest.push_back(g_vsvCommandBases[i] + svValue); + m_vsvSuggest.push_back(CSuggest(m_vsvCommandBases[i].m_svName + svValue, nFlags)); } } } else { break; } } - std::sort(m_vsvSuggest.begin(), m_vsvSuggest.end(), CompareStringLexicographically); + std::sort(m_vsvSuggest.begin(), m_vsvSuggest.end()); } //----------------------------------------------------------------------------- @@ -524,6 +577,47 @@ void CConsole::ProcessCommand(const char* pszCommand) m_bScrollToBottom = true; } +//----------------------------------------------------------------------------- +// Purpose: returns flag image index for CommandBase (must be aligned with resource.h!) +// Input : nFlags - +//----------------------------------------------------------------------------- +int CConsole::ColorCodeFlags(int nFlags) const +{ + switch (nFlags) + { + case FCVAR_NONE: + return 1; + case FCVAR_DEVELOPMENTONLY: + return 2; + case FCVAR_GAMEDLL: + return 3; + case FCVAR_CLIENTDLL: + return 4; + case FCVAR_CHEAT: + return 5; + case FCVAR_RELEASE: + return 6; + case FCVAR_DEVELOPMENTONLY | FCVAR_GAMEDLL: + return 7; + case FCVAR_DEVELOPMENTONLY | FCVAR_CLIENTDLL: + return 8; + case FCVAR_DEVELOPMENTONLY | FCVAR_REPLICATED: + return 9; + case FCVAR_DEVELOPMENTONLY | FCVAR_CHEAT: + return 10; + case FCVAR_REPLICATED | FCVAR_CHEAT: + return 11; + case FCVAR_REPLICATED | FCVAR_RELEASE: + return 12; + case FCVAR_GAMEDLL | FCVAR_CHEAT: + return 13; + case FCVAR_CLIENTDLL | FCVAR_CHEAT: + return 14; + default: + return 0; + } +} + //----------------------------------------------------------------------------- // Purpose: console input box callback // Input : *iData - @@ -593,7 +687,7 @@ int CConsole::TextEditCallback(ImGuiInputTextCallbackData* iData) } if (nPrevHistoryPos != m_nHistoryPos) { - std::string svHistory = (m_nHistoryPos >= 0) ? m_vsvHistory[m_nHistoryPos] : ""; + string svHistory = (m_nHistoryPos >= 0) ? m_vsvHistory[m_nHistoryPos] : ""; if (!svHistory.empty()) { diff --git a/r5dev/gameui/IConsole.h b/r5dev/gameui/IConsole.h index fd4932c4..c8add218 100644 --- a/r5dev/gameui/IConsole.h +++ b/r5dev/gameui/IConsole.h @@ -1,5 +1,27 @@ #pragma once +#include "common/sdkdefs.h" +#include "windows/resource.h" + #ifndef DEDICATED +struct CSuggest +{ + CSuggest(const string& svName, int nFlags) + { + m_svName = svName; + m_nFlags = nFlags; + } + bool operator==(const string& a) const + { + return m_svName.compare(a) == 0; + } + bool operator<(const CSuggest& a) const + { + return m_svName < a.m_svName; + } + string m_svName; + int m_nFlags; +}; + class CConsole { private: @@ -8,8 +30,8 @@ private: char m_szSummary[256] = { 0 }; const char* m_pszConsoleTitle = { 0 }; - std::vector<std::string> m_vsvCommands; - std::vector<std::string> m_vsvHistory; + vector<string> m_vsvCommands; + vector<string> m_vsvHistory; int m_nHistoryPos = -1; int m_nScrollBack = 0; ImGuiTextFilter m_itFilter; @@ -20,11 +42,12 @@ private: bool m_bScrollToBottom = false; bool m_bCopyToClipBoard = false; - std::vector<std::string> m_vsvSuggest; bool m_bSuggestActive = false; bool m_bSuggestMoved = false; bool m_bSuggestUpdate = false; int m_nSuggestPos = -1; + vector<CSuggest> m_vsvSuggest; + vector<MODULERESOURCE> m_vFlagIcons; ImVec2 m_vecSuggestWindowPos; ImVec2 m_vecSuggestWindowSize; @@ -37,7 +60,7 @@ private: ImGuiInputTextFlags_CallbackEdit | ImGuiInputTextFlags_EnterReturnsTrue; - ImGuiWindowFlags popup_window_flags = + ImGuiWindowFlags popup_window_flags = ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoSavedSettings | @@ -47,13 +70,15 @@ private: ImGuiWindowFlags_AlwaysHorizontalScrollbar; public: - bool m_bActivate = false; - ImVector<char*> m_ivConLog; + bool m_bActivate = false; + ImVector<char*> m_ivConLog; + vector<CSuggest> m_vsvCommandBases; /////////////////////////////////////////////////////////////////////////// CConsole(void); ~CConsole(void); + bool Setup(void); void Draw(const char* pszTitle, bool* bDraw); void Think(void); @@ -66,9 +91,10 @@ public: void FindFromPartial(void); void ProcessCommand(const char* pszCommand); + int ColorCodeFlags(int nFlags) const; - int TextEditCallback(ImGuiInputTextCallbackData* data); - static int TextEditCallbackStub(ImGuiInputTextCallbackData* data); + int TextEditCallback(ImGuiInputTextCallbackData* pData); + static int TextEditCallbackStub(ImGuiInputTextCallbackData* pData); /////////////////////////////////////////////////////////////////////////// void AddLog(const char* fmt, ...) IM_FMTARGS(2); diff --git a/r5dev/launcher/IApplication.cpp b/r5dev/launcher/IApplication.cpp index 29dd410b..70e64ca7 100644 --- a/r5dev/launcher/IApplication.cpp +++ b/r5dev/launcher/IApplication.cpp @@ -15,6 +15,9 @@ #include "engine/host_cmd.h" #include "server/vengineserver_impl.h" #include "client/cdll_engine_int.h" +#ifndef DEDICATED +#include "gameui/IConsole.h" +#endif // !DEDICATED //----------------------------------------------------------------------------- // Purpose: @@ -54,10 +57,13 @@ bool CModAppSystemGroup::Create(CModAppSystemGroup* pModAppSystemGroup) g_pConCommand->Init(); g_pFactory->GetFactoriesFromRegister(); +#ifndef DEDICATED for (auto& map : g_pCVar->DumpToMap()) { - g_vsvCommandBases.push_back(map.first.c_str()); + g_pIConsole->m_vsvCommandBases.push_back( + CSuggest(map.first.c_str(), map.second->GetFlags())); } +#endif // !DEDICATED if (pModAppSystemGroup->IsServerOnly()) { memset(gHLClient, '\0', sizeof(void*)); diff --git a/r5dev/public/utility.cpp b/r5dev/public/utility.cpp index 9573adbd..1e650032 100644 --- a/r5dev/public/utility.cpp +++ b/r5dev/public/utility.cpp @@ -50,20 +50,6 @@ MODULEINFO GetModuleInfo(const char* szModule) return modinfo; } -/////////////////////////////////////////////////////////////////////////////// -// For finding a byte pattern in memory of the process. -BOOL Compare(const unsigned char* pData, const unsigned char* szPattern, const char* szMask) -{ - for (; *szMask; ++szMask, ++pData, ++szPattern) - { - if (*szMask == 'x' && *pData != *szPattern) - { - return false; - } - } - return (*szMask) == NULL; -} - /////////////////////////////////////////////////////////////////////////////// // For finding a pattern in memory of the process with SIMD. DWORD64 FindPatternSIMD(const char* szModule, const unsigned char* szPattern, const char* szMask) diff --git a/r5dev/resource/png/debugempty.png b/r5dev/resource/png/debugempty.png new file mode 100644 index 00000000..79fec553 Binary files /dev/null and b/r5dev/resource/png/debugempty.png differ diff --git a/r5dev/resource/png/vf_cheat.png b/r5dev/resource/png/vf_cheat.png new file mode 100644 index 00000000..d866bd44 Binary files /dev/null and b/r5dev/resource/png/vf_cheat.png differ diff --git a/r5dev/resource/png/vf_clientdll.png b/r5dev/resource/png/vf_clientdll.png new file mode 100644 index 00000000..422d333a Binary files /dev/null and b/r5dev/resource/png/vf_clientdll.png differ diff --git a/r5dev/resource/png/vf_clientdll_cheat.png b/r5dev/resource/png/vf_clientdll_cheat.png new file mode 100644 index 00000000..b5417421 Binary files /dev/null and b/r5dev/resource/png/vf_clientdll_cheat.png differ diff --git a/r5dev/resource/png/vf_default.png b/r5dev/resource/png/vf_default.png new file mode 100644 index 00000000..0c0f96b1 Binary files /dev/null and b/r5dev/resource/png/vf_default.png differ diff --git a/r5dev/resource/png/vf_developmentonly.png b/r5dev/resource/png/vf_developmentonly.png new file mode 100644 index 00000000..5f48e8d3 Binary files /dev/null and b/r5dev/resource/png/vf_developmentonly.png differ diff --git a/r5dev/resource/png/vf_developmentonly_cheat.png b/r5dev/resource/png/vf_developmentonly_cheat.png new file mode 100644 index 00000000..082bc2e4 Binary files /dev/null and b/r5dev/resource/png/vf_developmentonly_cheat.png differ diff --git a/r5dev/resource/png/vf_developmentonly_clientdll.png b/r5dev/resource/png/vf_developmentonly_clientdll.png new file mode 100644 index 00000000..fa0f2097 Binary files /dev/null and b/r5dev/resource/png/vf_developmentonly_clientdll.png differ diff --git a/r5dev/resource/png/vf_developmentonly_gamedll.png b/r5dev/resource/png/vf_developmentonly_gamedll.png new file mode 100644 index 00000000..207ec4bf Binary files /dev/null and b/r5dev/resource/png/vf_developmentonly_gamedll.png differ diff --git a/r5dev/resource/png/vf_developmentonly_replicated.png b/r5dev/resource/png/vf_developmentonly_replicated.png new file mode 100644 index 00000000..f0798b51 Binary files /dev/null and b/r5dev/resource/png/vf_developmentonly_replicated.png differ diff --git a/r5dev/resource/png/vf_gamedll.png b/r5dev/resource/png/vf_gamedll.png new file mode 100644 index 00000000..597f1996 Binary files /dev/null and b/r5dev/resource/png/vf_gamedll.png differ diff --git a/r5dev/resource/png/vf_gamedll_cheat.png b/r5dev/resource/png/vf_gamedll_cheat.png new file mode 100644 index 00000000..5c3c9155 Binary files /dev/null and b/r5dev/resource/png/vf_gamedll_cheat.png differ diff --git a/r5dev/resource/png/vf_none.png b/r5dev/resource/png/vf_none.png new file mode 100644 index 00000000..14f18567 Binary files /dev/null and b/r5dev/resource/png/vf_none.png differ diff --git a/r5dev/resource/png/vf_release.png b/r5dev/resource/png/vf_release.png new file mode 100644 index 00000000..d74c2187 Binary files /dev/null and b/r5dev/resource/png/vf_release.png differ diff --git a/r5dev/resource/png/vf_replicated_cheat.png b/r5dev/resource/png/vf_replicated_cheat.png new file mode 100644 index 00000000..fce98a90 Binary files /dev/null and b/r5dev/resource/png/vf_replicated_cheat.png differ diff --git a/r5dev/resource/png/vf_replicated_release.png b/r5dev/resource/png/vf_replicated_release.png new file mode 100644 index 00000000..cfddac86 Binary files /dev/null and b/r5dev/resource/png/vf_replicated_release.png differ diff --git a/r5dev/resource/r5dev.rc b/r5dev/resource/r5dev.rc index bd627999..914b7cff 100644 --- a/r5dev/resource/r5dev.rc +++ b/r5dev/resource/r5dev.rc @@ -1,6 +1,6 @@ // Microsoft Visual C++ generated resource script. // -#include "core/resource.h" +#include "../core/resource.h" #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// @@ -27,7 +27,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US 1 TEXTINCLUDE BEGIN - "core/resource.h\0" + "../core/resource.h\0" END 2 TEXTINCLUDE @@ -44,13 +44,32 @@ END #endif // APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// DEV +// +IDB_PNG1 DEV "png\\debugempty.png" +IDB_PNG2 DEV "png\\lockedserver.png" ///////////////////////////////////////////////////////////////////////////// // // PNG // - -IDB_PNG1 PNG "resource\\png\\lockedserver.png" +IDB_PNG3 PNG "png\\vf_default.png" +IDB_PNG4 PNG "png\\vf_none.png" +IDB_PNG5 PNG "png\\vf_developmentonly.png" +IDB_PNG6 PNG "png\\vf_gamedll.png" +IDB_PNG7 PNG "png\\vf_clientdll.png" +IDB_PNG8 PNG "png\\vf_cheat.png" +IDB_PNG9 PNG "png\\vf_release.png" +IDB_PNG10 PNG "png\\vf_developmentonly_gamedll.png" +IDB_PNG11 PNG "png\\vf_developmentonly_clientdll.png" +IDB_PNG12 PNG "png\\vf_developmentonly_cheat.png" +IDB_PNG13 PNG "png\\vf_developmentonly_replicated.png" +IDB_PNG14 PNG "png\\vf_replicated_cheat.png" +IDB_PNG15 PNG "png\\vf_replicated_release.png" +IDB_PNG16 PNG "png\\vf_gamedll_cheat.png" +IDB_PNG17 PNG "png\\vf_clientdll_cheat.png" #endif // English (United States) resources ///////////////////////////////////////////////////////////////////////////// diff --git a/r5dev/server/vengineserver_impl.cpp b/r5dev/server/vengineserver_impl.cpp index 0ede721c..0fa1546e 100644 --- a/r5dev/server/vengineserver_impl.cpp +++ b/r5dev/server/vengineserver_impl.cpp @@ -28,7 +28,7 @@ bool HIVEngineServer__PersistenceAvailable(void* entidx, int clientidx) int64_t nOriginID = pClient->GetOriginID(); DevMsg(eDLL_T::SERVER, "______________________________________________________________\n"); - DevMsg(eDLL_T::SERVER, "+- NetChannel details\n"); + DevMsg(eDLL_T::SERVER, "+- NetChannel:\n"); DevMsg(eDLL_T::SERVER, " |- IDX : | '#%d'\n", clientidx); DevMsg(eDLL_T::SERVER, " |- UID : | '%s'\n", svClientName.c_str()); DevMsg(eDLL_T::SERVER, " |- OID : | '%lld'\n", nOriginID); diff --git a/r5dev/tier1/IConVar.cpp b/r5dev/tier1/IConVar.cpp index 2add98c5..6d21eb82 100644 --- a/r5dev/tier1/IConVar.cpp +++ b/r5dev/tier1/IConVar.cpp @@ -47,10 +47,11 @@ void ConVar::Init(void) const { //------------------------------------------------------------------------- // ENGINE | - cm_debug_cmdquery = new ConVar("cm_debug_cmdquery" , "0", FCVAR_DEVELOPMENTONLY, "Prints the flags of each ConVar/ConCommand query to the console ( !slower! ).", false, 0.f, false, 0.f, nullptr, nullptr); - cm_return_false_cmdquery_all = new ConVar("cm_return_false_cmdquery_all" , "0", FCVAR_DEVELOPMENTONLY | FCVAR_REPLICATED, "Returns false on every ConVar/ConCommand query ( !warning! ).", false, 0.f, false, 0.f, nullptr, nullptr); - cm_return_false_cmdquery_cheats = new ConVar("cm_return_false_cmdquery_cheats", "0", FCVAR_DEVELOPMENTONLY | FCVAR_REPLICATED, "Returns false on all FCVAR_DEVELOPMENTONLY and FCVAR_CHEAT ConVar/ConCommand queries ( !warning! ).", false, 0.f, false, 0.f, nullptr, nullptr); - r_debug_overlay_nodecay = new ConVar("r_debug_overlay_nodecay" , "0", FCVAR_DEVELOPMENTONLY | FCVAR_CHEAT , "Keeps all debug overlays alive regardless of their lifetime. Use command 'clear_debug_overlays' to clear everything.", false, 0.f, false, 0.f, nullptr, nullptr); + cm_debug_cmdquery = new ConVar("cm_debug_cmdquery" , "0", FCVAR_DEVELOPMENTONLY, "Prints the flags of each ConVar/ConCommand query to the console ( !slower! ).", false, 0.f, false, 0.f, nullptr, nullptr); + cm_unset_all_cmdquery = new ConVar("cm_unset_all_cmdquery" , "0", FCVAR_DEVELOPMENTONLY | FCVAR_REPLICATED, "Returns false on every ConVar/ConCommand query ( !warning! ).", false, 0.f, false, 0.f, nullptr, nullptr); + cm_unset_dev_cmdquery = new ConVar("cm_unset_dev_cmdquery" , "1", FCVAR_DEVELOPMENTONLY | FCVAR_REPLICATED, "Returns false on all FCVAR_DEVELOPMENTONLY ConVar/ConCommand queries ( !warning! ).", false, 0.f, false, 0.f, nullptr, nullptr); + cm_unset_cheat_cmdquery = new ConVar("cm_unset_cheat_cmdquery", "0", FCVAR_DEVELOPMENTONLY | FCVAR_REPLICATED, "Returns false on all FCVAR_DEVELOPMENTONLY and FCVAR_CHEAT ConVar/ConCommand queries ( !warning! ).", false, 0.f, false, 0.f, nullptr, nullptr); + r_debug_overlay_nodecay = new ConVar("r_debug_overlay_nodecay", "0", FCVAR_DEVELOPMENTONLY | FCVAR_CHEAT , "Keeps all debug overlays alive regardless of their lifetime. Use command 'clear_debug_overlays' to clear everything.", false, 0.f, false, 0.f, nullptr, nullptr); // TODO: RconPasswordChanged_f rcon_address = new ConVar("rcon_address", "::", FCVAR_SERVER_CANNOT_QUERY | FCVAR_DONTRECORD | FCVAR_RELEASE, "Remote server access address.", false, 0.f, false, 0.f, nullptr, nullptr); @@ -118,9 +119,11 @@ void ConVar::Init(void) const cl_gpustats_offset_x = new ConVar("cl_gpustats_offset_x" , "650", FCVAR_DEVELOPMENTONLY, "X offset for texture streaming debug overlay.", false, 0.f, false, 0.f, nullptr, nullptr); cl_gpustats_offset_y = new ConVar("cl_gpustats_offset_y" , "105", FCVAR_DEVELOPMENTONLY, "Y offset for texture streaming debug overlay.", false, 0.f, false, 0.f, nullptr, nullptr); - con_max_size_logvector = new ConVar("con_max_size_logvector", "1000", FCVAR_DEVELOPMENTONLY, "Maximum number of logs in the console until cleanup starts.", false, 0.f, false, 0.f, nullptr, nullptr); - con_suggestion_limit = new ConVar("con_suggestion_limit" , "120" , FCVAR_DEVELOPMENTONLY, "Maximum number of suggestions the autocomplete window will show for the console.", false, 0.f, false, 0.f, nullptr, nullptr); - con_suggestion_helptext = new ConVar("con_suggestion_helptext", "1" , FCVAR_DEVELOPMENTONLY, "Show ConVar help text in autocomplete window.", false, 0.f, false, 0.f, nullptr, nullptr); + con_max_size_logvector = new ConVar("con_max_size_logvector" , "1000", FCVAR_DEVELOPMENTONLY, "Maximum number of logs in the console until cleanup starts.", false, 0.f, false, 0.f, nullptr, nullptr); + con_suggestion_limit = new ConVar("con_suggestion_limit" , "120" , FCVAR_DEVELOPMENTONLY, "Maximum number of suggestions the autocomplete window will show for the console.", false, 0.f, false, 0.f, nullptr, nullptr); + con_suggestion_showhelptext = new ConVar("con_suggestion_showhelptext" , "1" , FCVAR_DEVELOPMENTONLY, "Show CommandBase help text in autocomplete window.", false, 0.f, false, 0.f, nullptr, nullptr); + con_suggestion_showflags = new ConVar("con_suggestion_showflags" , "1" , FCVAR_DEVELOPMENTONLY, "Show CommandBase flags in autocomplete window.", false, 0.f, false, 0.f, nullptr, nullptr); + con_suggestion_flags_realtime = new ConVar("con_suggestion_flags_realtime" , "0" , FCVAR_DEVELOPMENTONLY, "Whether to show compile-time or run-time CommandBase flags.", false, 0.f, false, 0.f, nullptr, nullptr); #endif // !DEDICATED //------------------------------------------------------------------------- // FILESYSTEM | @@ -140,7 +143,8 @@ void ConVar::Init(void) const sq_showvmwarning = new ConVar("sq_showvmwarning" , "0", FCVAR_DEVELOPMENTONLY, "Prints the VM warning output to the console. 1 = Log to file. 2 = 1 + log to console.", false, 0.f, false, 0.f, nullptr, nullptr); //------------------------------------------------------------------------- // NETCHANNEL | - net_userandomkey = new ConVar("net_userandomkey" , "1" , FCVAR_RELEASE , "If set to 1, the netchannel generates and sets a random base64 netkey.", false, 0.f, false, 0.f, nullptr, nullptr); + net_encryptpacket = new ConVar("net_encryptpacket" , "1" , FCVAR_DEVELOPMENTONLY, "Use encrpytion for in/out packets if set.", false, 0.f, false, 0.f, nullptr, nullptr); + net_userandomkey = new ConVar("net_userandomkey" , "1" , FCVAR_RELEASE , "Generates and sets a random base64 netkey for netchannel if set.", false, 0.f, false, 0.f, nullptr, nullptr); r5net_matchmaking_hostname = new ConVar("r5net_matchmaking_hostname", "r5a-comp-sv.herokuapp.com", FCVAR_RELEASE , "Holds the R5Net matchmaking hostname.", false, 0.f, false, 0.f, nullptr, nullptr); r5net_show_debug = new ConVar("r5net_show_debug" , "1" , FCVAR_DEVELOPMENTONLY, "Shows debug output for R5Net.", false, 0.f, false, 0.f, nullptr, nullptr); //------------------------------------------------------------------------- @@ -747,12 +751,12 @@ bool ConVar::IsFlagSet(ConVar* pConVar, int nFlags) printf("--------------------------------------------------\n"); printf(" Flaged: %08X\n", pConVar->m_nFlags); } - if (cm_return_false_cmdquery_cheats->GetBool()) + if (cm_unset_cheat_cmdquery->GetBool()) { // Mask off FCVAR_CHEATS and FCVAR_DEVELOPMENTONLY. pConVar->RemoveFlags(FCVAR_DEVELOPMENTONLY | FCVAR_CHEAT); } - else // Mask off FCVAR_DEVELOPMENTONLY. + else if(cm_unset_dev_cmdquery->GetBool())// Mask off FCVAR_DEVELOPMENTONLY. { pConVar->RemoveFlags(FCVAR_DEVELOPMENTONLY); } @@ -762,17 +766,17 @@ bool ConVar::IsFlagSet(ConVar* pConVar, int nFlags) printf(" Verify: %08X\n", nFlags); printf("--------------------------------------------------\n"); } - if (nFlags & FCVAR_RELEASE && !cm_return_false_cmdquery_all->GetBool()) + if (nFlags & FCVAR_RELEASE && !cm_unset_all_cmdquery->GetBool()) { // Default retail behaviour. return IConVar_IsFlagSet(pConVar, nFlags); } - if (cm_return_false_cmdquery_all->GetBool()) + if (cm_unset_all_cmdquery->GetBool()) { // Returning false on all queries may cause problems. return false; } - // Return false on every FCVAR_DEVELOPMENTONLY query. + // Default behavior. return pConVar->HasFlags(nFlags) != 0; } diff --git a/r5dev/tier1/cmd.cpp b/r5dev/tier1/cmd.cpp index feb5e432..c842fb3e 100644 --- a/r5dev/tier1/cmd.cpp +++ b/r5dev/tier1/cmd.cpp @@ -274,11 +274,11 @@ bool ConCommandBase::IsFlagSet(ConCommandBase* pCommandBase, int nFlags) printf(" Flaged: %08X\n", pCommandBase->m_nFlags); } // Mask off FCVAR_CHEATS and FCVAR_DEVELOPMENTONLY. - if (cm_return_false_cmdquery_cheats->GetBool()) + if (cm_unset_cheat_cmdquery->GetBool()) { pCommandBase->RemoveFlags(FCVAR_DEVELOPMENTONLY | FCVAR_CHEAT); } - else // Mask off FCVAR_DEVELOPMENTONLY. + else if (cm_unset_dev_cmdquery->GetBool())// Mask off FCVAR_DEVELOPMENTONLY. { pCommandBase->RemoveFlags(FCVAR_DEVELOPMENTONLY); } @@ -288,17 +288,17 @@ bool ConCommandBase::IsFlagSet(ConCommandBase* pCommandBase, int nFlags) printf(" Verify: %08X\n", nFlags); printf("--------------------------------------------------\n"); } - if (nFlags & FCVAR_RELEASE && !cm_return_false_cmdquery_all->GetBool()) + if (nFlags & FCVAR_RELEASE && !cm_unset_all_cmdquery->GetBool()) { // Default retail behaviour. return ConCommandBase_IsFlagSet(pCommandBase, nFlags); } - if (cm_return_false_cmdquery_all->GetBool()) + if (cm_unset_all_cmdquery->GetBool()) { // Returning false on all queries may cause problems. return false; } - // Return false on every FCVAR_DEVELOPMENTONLY || FCVAR_CHEAT query. + // Default behavior. return pCommandBase->HasFlags(nFlags) != 0; } diff --git a/r5dev/tier1/cvar.cpp b/r5dev/tier1/cvar.cpp index 69d34dd6..968eee46 100644 --- a/r5dev/tier1/cvar.cpp +++ b/r5dev/tier1/cvar.cpp @@ -13,8 +13,9 @@ ConVar* host_hasIrreversibleShutdown = nullptr; ConVar* mp_gamemode = nullptr; ConVar* cm_debug_cmdquery = nullptr; -ConVar* cm_return_false_cmdquery_all = nullptr; -ConVar* cm_return_false_cmdquery_cheats = nullptr; +ConVar* cm_unset_all_cmdquery = nullptr; +ConVar* cm_unset_dev_cmdquery = nullptr; +ConVar* cm_unset_cheat_cmdquery = nullptr; ConVar* r_debug_overlay_nodecay = nullptr; ConVar* rcon_address = nullptr; @@ -83,7 +84,9 @@ ConVar* cl_gpustats_offset_y = nullptr; ConVar* con_max_size_logvector = nullptr; ConVar* con_suggestion_limit = nullptr; -ConVar* con_suggestion_helptext = nullptr; +ConVar* con_suggestion_showhelptext = nullptr; +ConVar* con_suggestion_showflags = nullptr; +ConVar* con_suggestion_flags_realtime = nullptr; #endif // !DEDICATED //----------------------------------------------------------------------------- // FILESYSTEM | @@ -103,6 +106,7 @@ ConVar* sq_showvmoutput = nullptr; ConVar* sq_showvmwarning = nullptr; //----------------------------------------------------------------------------- // NETCHANNEL | +ConVar* net_encryptpacket = nullptr; ConVar* net_userandomkey = nullptr; ConVar* net_usesocketsforloopback = nullptr; ConVar* r5net_matchmaking_hostname = nullptr; @@ -195,5 +199,4 @@ unordered_map<string, ConCommandBase*> CCVar::DumpToMap(void) } /////////////////////////////////////////////////////////////////////////////// -vector<string> g_vsvCommandBases; CCVar* g_pCVar = nullptr; diff --git a/r5dev/tier1/cvar.h b/r5dev/tier1/cvar.h index 03de6cb6..d28ebce4 100644 --- a/r5dev/tier1/cvar.h +++ b/r5dev/tier1/cvar.h @@ -12,8 +12,9 @@ extern ConVar* host_hasIrreversibleShutdown; extern ConVar* mp_gamemode; extern ConVar* cm_debug_cmdquery; -extern ConVar* cm_return_false_cmdquery_all; -extern ConVar* cm_return_false_cmdquery_cheats; +extern ConVar* cm_unset_all_cmdquery; +extern ConVar* cm_unset_dev_cmdquery; +extern ConVar* cm_unset_cheat_cmdquery; extern ConVar* r_debug_overlay_nodecay; extern ConVar* rcon_address; @@ -80,7 +81,9 @@ extern ConVar* cl_gpustats_offset_y; extern ConVar* con_max_size_logvector; extern ConVar* con_suggestion_limit; -extern ConVar* con_suggestion_helptext; +extern ConVar* con_suggestion_showhelptext; +extern ConVar* con_suggestion_showflags; +extern ConVar* con_suggestion_flags_realtime; #endif // !DEDICATED //------------------------------------------------------------------------- // FILESYSTEM | @@ -100,6 +103,7 @@ extern ConVar* sq_showvmoutput; extern ConVar* sq_showvmwarning; //------------------------------------------------------------------------- // NETCHANNEL | +extern ConVar* net_encryptpacket; extern ConVar* net_userandomkey; extern ConVar* net_usesocketsforloopback; extern ConVar* r5net_matchmaking_hostname; @@ -134,7 +138,6 @@ public: }; /////////////////////////////////////////////////////////////////////////////// -extern vector<string> g_vsvCommandBases; extern CCVar* g_pCVar; /* ==== CCVAR =========================================================================================================================================================== */ diff --git a/r5dev/vproj/clientsdk.vcxproj b/r5dev/vproj/clientsdk.vcxproj index 90899cdb..40bf68a3 100644 --- a/r5dev/vproj/clientsdk.vcxproj +++ b/r5dev/vproj/clientsdk.vcxproj @@ -103,6 +103,7 @@ <ClCompile Include="..\windows\console.cpp" /> <ClCompile Include="..\windows\id3dx.cpp" /> <ClCompile Include="..\windows\input.cpp" /> + <ClCompile Include="..\windows\resource.cpp" /> <ClCompile Include="..\windows\system.cpp" /> </ItemGroup> <ItemGroup> @@ -364,6 +365,7 @@ <ClInclude Include="..\windows\console.h" /> <ClInclude Include="..\windows\id3dx.h" /> <ClInclude Include="..\windows\input.h" /> + <ClInclude Include="..\windows\resource.h" /> <ClInclude Include="..\windows\system.h" /> </ItemGroup> <ItemGroup> diff --git a/r5dev/vproj/clientsdk.vcxproj.filters b/r5dev/vproj/clientsdk.vcxproj.filters index 0a1c15db..2e7a8e01 100644 --- a/r5dev/vproj/clientsdk.vcxproj.filters +++ b/r5dev/vproj/clientsdk.vcxproj.filters @@ -423,6 +423,9 @@ <ClCompile Include="..\tier0\jobthread.cpp"> <Filter>sdk\tier0</Filter> </ClCompile> + <ClCompile Include="..\windows\resource.cpp"> + <Filter>windows</Filter> + </ClCompile> </ItemGroup> <ItemGroup> <ClInclude Include="..\client\cdll_engine_int.h"> @@ -1202,6 +1205,9 @@ <ClInclude Include="..\tier0\jobthread.h"> <Filter>sdk\tier0</Filter> </ClInclude> + <ClInclude Include="..\windows\resource.h"> + <Filter>windows</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <Image Include="..\shared\resource\lockedserver.png"> diff --git a/r5dev/vproj/gamesdk.vcxproj b/r5dev/vproj/gamesdk.vcxproj index 4d514bd2..bebe8ac9 100644 --- a/r5dev/vproj/gamesdk.vcxproj +++ b/r5dev/vproj/gamesdk.vcxproj @@ -111,6 +111,7 @@ <ClCompile Include="..\windows\console.cpp" /> <ClCompile Include="..\windows\id3dx.cpp" /> <ClCompile Include="..\windows\input.cpp" /> + <ClCompile Include="..\windows\resource.cpp" /> <ClCompile Include="..\windows\system.cpp" /> </ItemGroup> <ItemGroup> @@ -382,6 +383,7 @@ <ClInclude Include="..\windows\console.h" /> <ClInclude Include="..\windows\id3dx.h" /> <ClInclude Include="..\windows\input.h" /> + <ClInclude Include="..\windows\resource.h" /> <ClInclude Include="..\windows\system.h" /> </ItemGroup> <ItemGroup> diff --git a/r5dev/vproj/gamesdk.vcxproj.filters b/r5dev/vproj/gamesdk.vcxproj.filters index bf0001e4..def9a965 100644 --- a/r5dev/vproj/gamesdk.vcxproj.filters +++ b/r5dev/vproj/gamesdk.vcxproj.filters @@ -453,6 +453,9 @@ <ClCompile Include="..\tier0\jobthread.cpp"> <Filter>sdk\tier0</Filter> </ClCompile> + <ClCompile Include="..\windows\resource.cpp"> + <Filter>windows</Filter> + </ClCompile> </ItemGroup> <ItemGroup> <ClInclude Include="..\client\cdll_engine_int.h"> @@ -1262,6 +1265,9 @@ <ClInclude Include="..\tier0\jobthread.h"> <Filter>sdk\tier0</Filter> </ClInclude> + <ClInclude Include="..\windows\resource.h"> + <Filter>windows</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <Image Include="..\shared\resource\lockedserver.png"> diff --git a/r5dev/windows/id3dx.cpp b/r5dev/windows/id3dx.cpp index 511c7356..9ffc3157 100644 --- a/r5dev/windows/id3dx.cpp +++ b/r5dev/windows/id3dx.cpp @@ -440,7 +440,7 @@ bool LoadTextureBuffer(unsigned char* buffer, int len, ID3D11ShaderResourceView* desc.Height = image_height; desc.MipLevels = 1; desc.ArraySize = 1; - desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; + desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM_SRGB; desc.SampleDesc.Count = 1; desc.Usage = D3D11_USAGE_DEFAULT; desc.BindFlags = D3D11_BIND_SHADER_RESOURCE; @@ -454,7 +454,7 @@ bool LoadTextureBuffer(unsigned char* buffer, int len, ID3D11ShaderResourceView* // Create texture view ZeroMemory(&srvDesc, sizeof(srvDesc)); - srvDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; + srvDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM_SRGB; srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D; srvDesc.Texture2D.MipLevels = desc.MipLevels; srvDesc.Texture2D.MostDetailedMip = 0; diff --git a/r5dev/windows/resource.cpp b/r5dev/windows/resource.cpp new file mode 100644 index 00000000..87a86239 --- /dev/null +++ b/r5dev/windows/resource.cpp @@ -0,0 +1,35 @@ +#include "core/stdafx.h" +#include "core/resource.h" +#include "windows/resource.h" + +/*----------------------------------------------------------------------------- + * _resource.cpp + *-----------------------------------------------------------------------------*/ + +//############################################################################# +// +//############################################################################# +MODULERESOURCE GetModuleResource(int iResource) +{ + static HGLOBAL rcData = NULL; + HMODULE handle; + + GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | + GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, (LPCSTR)"unnamed", &handle); + + HRSRC rc = FindResource(handle, MAKEINTRESOURCE(iResource), MAKEINTRESOURCE(PNG)); + if (!rc) + { + assert(rc == NULL); + return MODULERESOURCE(); + } + + rcData = LoadResource(handle, rc); + if (!rcData) + { + assert(rcData == NULL); + return MODULERESOURCE(); + } + return (MODULERESOURCE(LockResource(rcData), SizeofResource(handle, rc))); +} +/////////////////////////////////////////////////////////////////////////////// \ No newline at end of file diff --git a/r5dev/windows/resource.h b/r5dev/windows/resource.h new file mode 100644 index 00000000..713288c4 --- /dev/null +++ b/r5dev/windows/resource.h @@ -0,0 +1,28 @@ +#pragma once + +struct MODULERESOURCE +{ + MODULERESOURCE(void) + { + m_pData = nullptr; + m_nSize = NULL; + m_idIcon = nullptr; + m_nWidth = NULL; + m_nHeight = NULL; + } + MODULERESOURCE(LPVOID pData, DWORD nSize, ID3D11ShaderResourceView* pIcon = nullptr) + { + m_pData = pData; + m_nSize = nSize; + m_idIcon = pIcon; + m_nWidth = NULL; + m_nHeight = NULL; + } + LPVOID m_pData; + DWORD m_nSize; + ID3D11ShaderResourceView* m_idIcon; + int m_nWidth; + int m_nHeight; +}; + +MODULERESOURCE GetModuleResource(int iResource);