Skip to content

Instantly share code, notes, and snippets.

@kin4stat
Last active June 18, 2022 20:19
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kin4stat/93f17a40e5e11308aa733f3750b84aab to your computer and use it in GitHub Desktop.
Save kin4stat/93f17a40e5e11308aa733f3750b84aab to your computer and use it in GitHub Desktop.
SAMP Alpha Chat

Credits:
CLiteRegedit by SR_Team
imgui

#include <windows.h>
#include <MinHook.h>
#include <d3d9.h>
#include <d3dx9.h>
#include <string>
#include "CLiteRegedit.h"
#include "imgui.h"
#include "imgui_impl_win32.h"
#include "imgui_impl_dx9.h"
#include "imgui_internal.h"
#include "imgui_impl_dx9.h"
#pragma comment(lib, "d3d9.lib")
#pragma comment(lib, "d3dx9.lib")
#pragma execution_character_set("utf-8")
extern IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
typedef int(__fastcall* AddEntry)(void*, void*, int, const char*, const char*, DWORD, DWORD);
typedef HRESULT(__stdcall* ProtPresent)(IDirect3DDevice9*, CONST RECT*, CONST RECT*, HWND, CONST RGNDATA*);
typedef HRESULT(__stdcall* ProtReset)(IDirect3DDevice9*, D3DPRESENT_PARAMETERS*);
typedef void(__cdecl* CMDPROC) (char*);
HRESULT __stdcall Hooked_Present(IDirect3DDevice9* pDevice, CONST RECT* pSrcRect, CONST RECT* pDestRect, HWND hDestWindow, CONST RGNDATA* pDirtyRegion);
HRESULT __stdcall Hooked_Reset(LPDIRECT3DDEVICE9 pDevice, D3DPRESENT_PARAMETERS* pPresentParams);
void Theme();
enum ChatStates {
CHATSTATE_WAITINGFORFADEOUT,
CHATSTATE_FADEMAX,
CHATSTATE_FADEMIN,
CHATSTATE_FADEIN,
CHATSTATE_FADEIN_TOFADEOUT,
CHATSTATE_FADEINFAST,
CHATSTATE_FADEOUT,
};
struct {
bool bMenuOpen = 0;
bool bCursorShown = 0;
float MinAlpha = 127.0f;
float MaxAlpha = 255.0f;
float FadeInFast = 0.7f;
float FadeOut = 1.5f;
float FadeInToFadeOut = 4.0f;
float WaitingForFade = 4.0f;
} Settings;
ProtReset Reset;
ProtPresent Present;
AddEntry fpAddEntry = NULL;
WNDPROC m_pWindowProc;
DWORD dwSAMP = 0;
DWORD64 Ticks = GetTickCount64();
DWORD64 LastFadeTickUpdate = GetTickCount64();
DWORD gChatState = ChatStates::CHATSTATE_WAITINGFORFADEOUT;
float gChatAlpha = 255.0f;
CLiteRegeditEasy* pReg = nullptr;
DWORD SAMP_INPUT_PTR = 0;
DWORD SAMP_GAME_PTR = 0;
DWORD SAMP_FUNC_ADDCLIENTCMD = 0;
DWORD SAMP_FUNC_TOGGLECURSOR = 0;
DWORD SAMP_FUNC_CURSORUNLOCKACTORCAM = 0;
DWORD HOOK_DisableInputBoxJmp = 0;
DWORD HOOK_EnableInputBoxJmp = 0;
DWORD HOOK_DrawChatSpriteJmp = 0;
DWORD FindDevice(DWORD Len)
{
DWORD dwObjBase = 0;
char infoBuf[MAX_PATH];
GetSystemDirectoryA(infoBuf, MAX_PATH);
strcat_s(infoBuf, MAX_PATH, "\\d3d9.dll");
dwObjBase = (DWORD)LoadLibraryA(infoBuf);
while (dwObjBase++ < dwObjBase + Len)
{
if ((*(WORD*)(dwObjBase + 0x00)) == 0x06C7 &&
(*(WORD*)(dwObjBase + 0x06)) == 0x8689 &&
(*(WORD*)(dwObjBase + 0x0C)) == 0x8689)
{
dwObjBase += 2;
break;
}
}
return(dwObjBase);
};
void* GetDeviceAddress(int VTableIndex)
{
PDWORD VTable;
*(DWORD*)&VTable = *(DWORD*)FindDevice(0x128000);
return reinterpret_cast<void*>(VTable[VTableIndex]);
};
void MH_CreateAndEnableHook(unsigned __int32 TargetAddress, LPVOID pDetour, LPVOID* ppOriginal) {
MH_CreateHook(reinterpret_cast<LPVOID>(TargetAddress), pDetour, ppOriginal);
MH_EnableHook(reinterpret_cast<LPVOID>(TargetAddress));
}
void InstallD3DHook() {
DWORD pDevice = *reinterpret_cast<DWORD*>(0xC97C28);
void** vTable = *reinterpret_cast<void***>(pDevice);
// Создаем хуки и включаем их
MH_CreateHook(GetDeviceAddress(17), Hooked_Present, reinterpret_cast<LPVOID*>(&Present));
MH_EnableHook(GetDeviceAddress(17));
MH_CreateHook(GetDeviceAddress(16), Hooked_Reset, reinterpret_cast<LPVOID*>(&Reset));
MH_EnableHook(GetDeviceAddress(16));
}
void* getInput() {
return *reinterpret_cast<void**>(dwSAMP + SAMP_INPUT_PTR);
}
void addClientCommand(const char* command, CMDPROC pFunc) {
if (getInput() == nullptr)
return;
void(__thiscall * AddClientCommand) (const void* _this, const char* szCommand, CMDPROC pFunc) = (void(__thiscall*) (const void*, const char*, CMDPROC)) (dwSAMP + SAMP_FUNC_ADDCLIENTCMD);
if (command == NULL)
return;
return AddClientCommand(getInput(), command, pFunc);
}
bool ToggleCursor(bool state) {
void* obj = *(void**)(dwSAMP + SAMP_GAME_PTR);
((void(__thiscall*) (void*, int, bool)) (dwSAMP + SAMP_FUNC_TOGGLECURSOR))(obj, state ? 3 : 0, !state);
if (!state)
((void(__thiscall*) (void*)) (dwSAMP + SAMP_FUNC_CURSORUNLOCKACTORCAM))(obj);
return state;
}
void HandleInputBoxOpen() {
gChatState = (gChatState == ChatStates::CHATSTATE_FADEMAX || gChatState == ChatStates::CHATSTATE_WAITINGFORFADEOUT) ? ChatStates::CHATSTATE_FADEMAX : ChatStates::CHATSTATE_FADEINFAST;
LastFadeTickUpdate = GetTickCount64();
}
void HandleInputBoxClose() {
gChatState = ChatStates::CHATSTATE_WAITINGFORFADEOUT;
Ticks = GetTickCount64();
LastFadeTickUpdate = GetTickCount64();
}
void __declspec(naked) HOOK_EnableInputBox(void) {
__asm pushad
HandleInputBoxOpen();
__asm popad
__asm mov dword ptr[esi + 0x14E0], 1
__asm jmp HOOK_EnableInputBoxJmp
}
void __declspec(naked) HOOK_DisableInputBox(void) {
__asm pushad
HandleInputBoxClose();
__asm popad
__asm mov dword ptr[esi + 0x14E0], 0
__asm jmp HOOK_DisableInputBoxJmp
}
void __declspec(naked) HOOK_DrawChatSprite(void) {
__asm pushad
static DWORD color = 0xFFFFFF;
switch (gChatState) {
case CHATSTATE_FADEIN:
gChatAlpha = min(Settings.MaxAlpha, gChatAlpha + (GetTickCount64() - LastFadeTickUpdate) / 1000.0f * (Settings.MaxAlpha / 1.5f));
LastFadeTickUpdate = GetTickCount64();
if (gChatAlpha == Settings.MaxAlpha) {
gChatState = CHATSTATE_FADEMAX;
}
break;
case CHATSTATE_FADEINFAST:
gChatAlpha = min(Settings.MaxAlpha, gChatAlpha + (GetTickCount64() - LastFadeTickUpdate) / 1000.0f * (Settings.MaxAlpha / Settings.FadeInFast));
LastFadeTickUpdate = GetTickCount64();
if (gChatAlpha == Settings.MaxAlpha) {
gChatState = CHATSTATE_FADEMAX;
}
break;
case CHATSTATE_FADEOUT:
gChatAlpha = max(Settings.MinAlpha, gChatAlpha - (GetTickCount64() - LastFadeTickUpdate) / 1000.0f * (Settings.MaxAlpha / Settings.FadeOut));
LastFadeTickUpdate = GetTickCount64();
if (gChatAlpha == Settings.MinAlpha) {
gChatState = CHATSTATE_FADEMIN;
}
break;
case CHATSTATE_FADEIN_TOFADEOUT:
gChatAlpha = min(Settings.MaxAlpha, gChatAlpha + (GetTickCount64() - LastFadeTickUpdate) / 1000.0f * (Settings.MaxAlpha / Settings.FadeInToFadeOut));
LastFadeTickUpdate = GetTickCount64();
if (gChatAlpha == Settings.MaxAlpha) {
gChatState = CHATSTATE_WAITINGFORFADEOUT;
Ticks = GetTickCount64();
}
break;
case CHATSTATE_WAITINGFORFADEOUT:
{
if (GetTickCount64() - Ticks > Settings.WaitingForFade * 1000) {
gChatState = CHATSTATE_FADEOUT;
LastFadeTickUpdate = GetTickCount64();
}
}
break;
case CHATSTATE_FADEMAX:
gChatAlpha = Settings.MaxAlpha;
break;
case CHATSTATE_FADEMIN:
gChatAlpha = Settings.MinAlpha;
break;
}
color = (static_cast<int>(gChatAlpha) << 24) | 0xFFFFFF;
__asm {
popad
push color
push 0
push 0
jmp HOOK_DrawChatSpriteJmp
}
}
int __fastcall HOOK_AddEntry(void* dis, void* EDX, int nType, const char* szText, const char* szPrefix, DWORD textColor, DWORD prefixColor) {
gChatState = CHATSTATE_FADEIN_TOFADEOUT;
LastFadeTickUpdate = GetTickCount64();
static bool once = false;
if (once == false) {
InstallD3DHook();
once = true;
}
return fpAddEntry(dis, EDX, nType, szText, szPrefix, textColor, prefixColor);
}
auto __stdcall WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)->LRESULT {
if (Settings.bMenuOpen) {
ImGui_ImplWin32_WndProcHandler(hWnd, msg, wParam, lParam);
return TRUE;
}
return CallWindowProcA(m_pWindowProc, hWnd, msg, wParam, lParam);
}
void __cdecl MenuOpen(char*) {
Settings.bMenuOpen ^= 1;
ToggleCursor(Settings.bMenuOpen);
}
void LoadSettings() {
Settings.MinAlpha = pReg->ReadFloat("MinAlpha");
Settings.MaxAlpha = pReg->ReadFloat("MaxAlpha");
Settings.FadeInFast = pReg->ReadFloat("FadeInFast");
Settings.FadeOut = pReg->ReadFloat("FadeOut");
Settings.FadeInToFadeOut = pReg->ReadFloat("FadeInToFadeOut");
Settings.WaitingForFade = pReg->ReadFloat("WaitingForFade");
}
void SaveSettings() {
pReg->WriteFloat("MinAlpha", Settings.MinAlpha);
pReg->WriteFloat("MaxAlpha", Settings.MaxAlpha);
pReg->WriteFloat("FadeInFast", Settings.FadeInFast);
pReg->WriteFloat("FadeOut", Settings.FadeOut);
pReg->WriteFloat("FadeInToFadeOut", Settings.FadeInToFadeOut);
pReg->WriteFloat("WaitingForFade", Settings.WaitingForFade);
}
void DefaultSettings() {
Settings.MinAlpha = 127.0f;
Settings.MaxAlpha = 255.0f;
Settings.FadeInFast = 0.7f;
Settings.FadeOut = 1.5f;
Settings.FadeInToFadeOut = 4.0f;
Settings.WaitingForFade = 4.0f;
}
HRESULT __stdcall Hooked_Present(IDirect3DDevice9* pDevice, CONST RECT* pSrcRect, CONST RECT* pDestRect, HWND hDestWindow, CONST RGNDATA* pDirtyRegion) {
static bool once = false;
if (once == false) {
m_pWindowProc = reinterpret_cast<WNDPROC>(SetWindowLongA(**reinterpret_cast<HWND**>(0xC17054), GWL_WNDPROC, reinterpret_cast<LONG>(WndProcHandler)));
ImGui::CreateContext();
ImGui_ImplWin32_Init(**reinterpret_cast<HWND**>(0xC17054));
#pragma warning(push)
#pragma warning(disable: 4996)
std::string font{ getenv("WINDIR") }; font += "\\Fonts\\Tahoma.TTF";
#pragma warning(pop)
ImGui::GetIO().Fonts->AddFontFromFileTTF(font.c_str(), 14.0f, NULL, ImGui::GetIO().Fonts->GetGlyphRangesCyrillic());
Theme();
ImGui_ImplDX9_Init(pDevice);
once = true;
}
static bool sampOnce = false;
if (getInput() != nullptr && sampOnce == false) {
addClientCommand("alphachat", &MenuOpen);
sampOnce = true;
}
ImGui_ImplDX9_NewFrame();
ImGui_ImplWin32_NewFrame();
ImGui::NewFrame();
if (Settings.bMenuOpen) {
if (Settings.bCursorShown == 0) {
Settings.bCursorShown = ToggleCursor(1);
}
int sx = *reinterpret_cast<int*>(0x00C17044), sy = *reinterpret_cast<int*>(0x00C17048);
ImGui::SetNextWindowPos(ImVec2(sx / 2, sy / 2), ImGuiCond_FirstUseEver);
ImGui::Begin("Настройки", &Settings.bMenuOpen, ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse);
ImGui::SliderFloat("Минимальная прозрачность", &Settings.MinAlpha, 0.0f, 255.0f);
ImGui::SliderFloat("Максимальная прозрачность", &Settings.MaxAlpha, 0.0f, 255.0f);
ImGui::SliderFloat("Скорость появления при открытии чата", &Settings.FadeInFast, 0.0f, 10.0f);
ImGui::SliderFloat("Скорость появления при новом сообщении", &Settings.FadeInToFadeOut, 0.0f, 10.0f);
ImGui::SliderFloat("Скорость исчезания", &Settings.FadeOut, 0.0f, 10.0f);
ImGui::SliderFloat("Время максимальной прозрачности", &Settings.WaitingForFade, 0.0f, 60.0f);
if (ImGui::Button("Сохранить настройки")) {
SaveSettings();
}
ImGui::SameLine();
if (ImGui::Button("Загрузить настройки")) {
LoadSettings();
}
ImGui::SameLine();
if (ImGui::Button("Сбросить настройки")) {
DefaultSettings();
}
ImGui::End();
}
else if (Settings.bCursorShown == 1) {
Settings.bCursorShown = ToggleCursor(0);
}
ImGui::EndFrame();
ImGui::Render();
ImGui_ImplDX9_RenderDrawData(ImGui::GetDrawData());
return Present(pDevice, pSrcRect, pDestRect, hDestWindow, pDirtyRegion);
}
HRESULT __stdcall Hooked_Reset(LPDIRECT3DDEVICE9 pDevice, D3DPRESENT_PARAMETERS* pPresentParams) {
ImGui_ImplDX9_InvalidateDeviceObjects();
return Reset(pDevice, pPresentParams);
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call,LPVOID lpReserved)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
{
dwSAMP = reinterpret_cast<DWORD>(GetModuleHandle(L"samp.dll"));
if (dwSAMP == NULL) return FALSE;
pReg = new CLiteRegeditEasy(HKEY_CURRENT_USER, "Software\\AlphaChat");
pReg->ReadFloat("MinAlpha");
if (!pReg->IsError()) {
LoadSettings();
}
else {
DefaultSettings();
}
MH_Initialize();
auto ntheader = reinterpret_cast<IMAGE_NT_HEADERS*>(dwSAMP + reinterpret_cast<IMAGE_DOS_HEADER*>(dwSAMP)->e_lfanew);
auto ep = ntheader->OptionalHeader.AddressOfEntryPoint;
switch (ep) {
case 0x31DF13: {
SAMP_INPUT_PTR = 0x21A0E8;
SAMP_GAME_PTR = 0x21A10C;
SAMP_FUNC_ADDCLIENTCMD = 0x65AD0;
SAMP_FUNC_TOGGLECURSOR = 0x9BD30;
SAMP_FUNC_CURSORUNLOCKACTORCAM = 0x9BC10;
HOOK_DisableInputBoxJmp = dwSAMP + 0x65926;
HOOK_EnableInputBoxJmp = dwSAMP + 0x658D1;
HOOK_DrawChatSpriteJmp = dwSAMP + 0x642BC + 6;
MH_CreateAndEnableHook(dwSAMP + 0x658C7, &HOOK_EnableInputBox, NULL);
MH_CreateAndEnableHook(dwSAMP + 0x6591C, &HOOK_DisableInputBox, NULL);
MH_CreateAndEnableHook(dwSAMP + 0x642BC, &HOOK_DrawChatSprite, NULL);
MH_CreateAndEnableHook(dwSAMP + 0x64010, &HOOK_AddEntry, reinterpret_cast<LPVOID*>(&fpAddEntry));
}
break;
case 0xCC4D0: {
SAMP_INPUT_PTR = 0x26E8CC;
SAMP_GAME_PTR = 0x26E8F4;
SAMP_FUNC_ADDCLIENTCMD = 0x69000;
SAMP_FUNC_TOGGLECURSOR = 0x9FFE0;
SAMP_FUNC_CURSORUNLOCKACTORCAM = 0x9FEC0;
HOOK_DisableInputBoxJmp = dwSAMP + 0x68E56;
HOOK_EnableInputBoxJmp = dwSAMP + 0x68E01;
HOOK_DrawChatSpriteJmp = dwSAMP + 0x6770C + 6;
MH_CreateAndEnableHook(dwSAMP + 0x68DF7, &HOOK_EnableInputBox, NULL);
MH_CreateAndEnableHook(dwSAMP + 0x68E4C, &HOOK_DisableInputBox, NULL);
MH_CreateAndEnableHook(dwSAMP + 0x6770C, &HOOK_DrawChatSprite, NULL);
MH_CreateAndEnableHook(dwSAMP + 0x67460, &HOOK_AddEntry, reinterpret_cast<LPVOID*>(&fpAddEntry));
}
break;
}
}
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
void Theme() {
//ImGui::GetIO().Fonts->AddFontFromFileTTF("../data/Fonts/Ruda-Bold.ttf", 15.0f, &config);
ImGui::GetStyle().FrameRounding = 4.0f;
ImGui::GetStyle().GrabRounding = 4.0f;
ImVec4* colors = ImGui::GetStyle().Colors;
colors[ImGuiCol_Text] = ImVec4(0.95f, 0.96f, 0.98f, 1.00f);
colors[ImGuiCol_TextDisabled] = ImVec4(0.36f, 0.42f, 0.47f, 1.00f);
colors[ImGuiCol_WindowBg] = ImVec4(0.11f, 0.15f, 0.17f, 1.00f);
colors[ImGuiCol_ChildBg] = ImVec4(0.15f, 0.18f, 0.22f, 1.00f);
colors[ImGuiCol_PopupBg] = ImVec4(0.08f, 0.08f, 0.08f, 0.94f);
colors[ImGuiCol_Border] = ImVec4(0.08f, 0.10f, 0.12f, 1.00f);
colors[ImGuiCol_BorderShadow] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
colors[ImGuiCol_FrameBg] = ImVec4(0.20f, 0.25f, 0.29f, 1.00f);
colors[ImGuiCol_FrameBgHovered] = ImVec4(0.12f, 0.20f, 0.28f, 1.00f);
colors[ImGuiCol_FrameBgActive] = ImVec4(0.09f, 0.12f, 0.14f, 1.00f);
colors[ImGuiCol_TitleBg] = ImVec4(0.09f, 0.12f, 0.14f, 0.65f);
colors[ImGuiCol_TitleBgActive] = ImVec4(0.08f, 0.10f, 0.12f, 1.00f);
colors[ImGuiCol_TitleBgCollapsed] = ImVec4(0.00f, 0.00f, 0.00f, 0.51f);
colors[ImGuiCol_MenuBarBg] = ImVec4(0.15f, 0.18f, 0.22f, 1.00f);
colors[ImGuiCol_ScrollbarBg] = ImVec4(0.02f, 0.02f, 0.02f, 0.39f);
colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.20f, 0.25f, 0.29f, 1.00f);
colors[ImGuiCol_ScrollbarGrabHovered] = ImVec4(0.18f, 0.22f, 0.25f, 1.00f);
colors[ImGuiCol_ScrollbarGrabActive] = ImVec4(0.09f, 0.21f, 0.31f, 1.00f);
colors[ImGuiCol_CheckMark] = ImVec4(0.28f, 0.56f, 1.00f, 1.00f);
colors[ImGuiCol_SliderGrab] = ImVec4(0.28f, 0.56f, 1.00f, 1.00f);
colors[ImGuiCol_SliderGrabActive] = ImVec4(0.37f, 0.61f, 1.00f, 1.00f);
colors[ImGuiCol_Button] = ImVec4(0.20f, 0.25f, 0.29f, 1.00f);
colors[ImGuiCol_ButtonHovered] = ImVec4(0.28f, 0.56f, 1.00f, 1.00f);
colors[ImGuiCol_ButtonActive] = ImVec4(0.06f, 0.53f, 0.98f, 1.00f);
colors[ImGuiCol_Header] = ImVec4(0.20f, 0.25f, 0.29f, 0.55f);
colors[ImGuiCol_HeaderHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.80f);
colors[ImGuiCol_HeaderActive] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
colors[ImGuiCol_Separator] = ImVec4(0.20f, 0.25f, 0.29f, 1.00f);
colors[ImGuiCol_SeparatorHovered] = ImVec4(0.10f, 0.40f, 0.75f, 0.78f);
colors[ImGuiCol_SeparatorActive] = ImVec4(0.10f, 0.40f, 0.75f, 1.00f);
colors[ImGuiCol_ResizeGrip] = ImVec4(0.26f, 0.59f, 0.98f, 0.25f);
colors[ImGuiCol_ResizeGripHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.67f);
colors[ImGuiCol_ResizeGripActive] = ImVec4(0.26f, 0.59f, 0.98f, 0.95f);
colors[ImGuiCol_Tab] = ImVec4(0.11f, 0.15f, 0.17f, 1.00f);
colors[ImGuiCol_TabHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.80f);
colors[ImGuiCol_TabActive] = ImVec4(0.20f, 0.25f, 0.29f, 1.00f);
colors[ImGuiCol_TabUnfocused] = ImVec4(0.11f, 0.15f, 0.17f, 1.00f);
colors[ImGuiCol_TabUnfocusedActive] = ImVec4(0.11f, 0.15f, 0.17f, 1.00f);
colors[ImGuiCol_PlotLines] = ImVec4(0.61f, 0.61f, 0.61f, 1.00f);
colors[ImGuiCol_PlotLinesHovered] = ImVec4(1.00f, 0.43f, 0.35f, 1.00f);
colors[ImGuiCol_PlotHistogram] = ImVec4(0.90f, 0.70f, 0.00f, 1.00f);
colors[ImGuiCol_PlotHistogramHovered] = ImVec4(1.00f, 0.60f, 0.00f, 1.00f);
colors[ImGuiCol_TextSelectedBg] = ImVec4(0.26f, 0.59f, 0.98f, 0.35f);
colors[ImGuiCol_DragDropTarget] = ImVec4(1.00f, 1.00f, 0.00f, 0.90f);
colors[ImGuiCol_NavHighlight] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
colors[ImGuiCol_NavWindowingHighlight] = ImVec4(1.00f, 1.00f, 1.00f, 0.70f);
colors[ImGuiCol_NavWindowingDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.20f);
colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.35f);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment