From 960835db6be8b3b802fd6eafa29513b6475c734b Mon Sep 17 00:00:00 2001 From: MarcelineVQ Date: Tue, 3 Mar 2026 10:34:16 -0800 Subject: [PATCH 01/34] Add README --- README.md | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..8f47f11 --- /dev/null +++ b/README.md @@ -0,0 +1,48 @@ +# WeirdUtils + +This package provides many pre-built DLLs for enhancing the vanilla WoW gameplay experience, aimed in particular at ease of use and accessibility but also bug fixes. + +You may get all features by installing `weirdutils.dll`, or choose any selection of features via individual DLLs. +On Turtle WoW, place your chosen DLLs next to your `WoW.exe` and add them to your `dlls.txt`. For other versions you will need some sort of DLL loader. + +--- + +## Features + +### Transmog Fix + +Eliminates FPS drops caused by rapid equipment visual updates when transmogged items lose durability. No configuration needed, install and forget. + +**DLL:** `transmogfix.dll` + +--- + +### Custom Data/ Assets + +Enables loading loose game asset files (models, textures, etc.) from the `Data/` directory without repacking MPQ archives. Place files in `Data/` mirroring the game's internal paths (e.g. `Data/Character/Troll/Female/TrollFemale.m2`) and they will be used instead of the MPQ version. + +Also allows multi-character patch archive names (e.g. `patch-12.mpq`, `patch-jimbo.mpq`). + +Patch archives are sorted case-insensitively by filename — last in the sort gets highest priority, and all patches override the base archives. + +No configuration needed, install and forget. + +**DLL:** `customassets.dll` + +--- + +### SuperWoW Heal Text Fix + +Fixes duplicate floating heal numbers caused by SuperWoW 1.5. Only relevant if you use SuperWoW. No configuration needed, install and forget. + +**DLL:** `healtextfix.dll` + +--- + +## Why No Source Code? + +This project is distributed as pre-built DLLs only. The source code is not and will not be made publicly available. + +These DLLs work by hooking deeply into the game client's internals: memory layout, function addresses, rendering pipeline, input handling, and more. +While every feature here is built for legitimate quality-of-life use, the underlying techniques touch on too many core mechanisms that are trivially abusable. +Publishing the source would be handing a candy store to bad actors: the same hooks and patterns used to render a raid marker or fix a crash can be repurposed for cheats, exploits, and in particular automation with minimal effort. From 1200512d6c41b41403b4cf1389013a13de2a3fbd Mon Sep 17 00:00:00 2001 From: MarcelineVQ Date: Thu, 5 Mar 2026 11:11:41 -0800 Subject: [PATCH 02/34] Update README for v0.2.0 --- README.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/README.md b/README.md index 8f47f11..a7c134e 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,30 @@ No configuration needed, install and forget. --- +### Log Sessions + +Organizes the combat, raw combat, and chat logs into per-character directories with timestamped filenames: + +``` +Logs\\\WoWChatLog_YYYYMMDD_HHMMSS.txt +Logs\\\WoWCombatLog_YYYYMMDD_HHMMSS.txt +Logs\\\WoWRawCombatLog_YYYYMMDD_HHMMSS.txt (superwow only) +``` + +Every character login begins with a marker line (`COMBATLOG_SESSION` or `CHAT_SESSION`) identifying the character and realm. +If a log file for the same character was written to within the last 60 minutes, the same logfile will be used instead of creating a new one. + +Lua API for addon developers: + +- `GetCombatLogPath()` -- returns the current combat log file path +- `GetChatLogPath()` -- returns the current chat log file path + +No other configuration needed, install and forget. + +**DLL:** `logsessions.dll` + +--- + ### SuperWoW Heal Text Fix Fixes duplicate floating heal numbers caused by SuperWoW 1.5. Only relevant if you use SuperWoW. No configuration needed, install and forget. From 7a7b564c515e35d61b981cb8259fb808c9e8a3c2 Mon Sep 17 00:00:00 2001 From: MarcelineVQ Date: Fri, 6 Mar 2026 13:42:37 -0800 Subject: [PATCH 03/34] Update README for v0.3.0 --- README.md | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 77 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a7c134e..2fdb536 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # WeirdUtils -This package provides many pre-built DLLs for enhancing the vanilla WoW gameplay experience, aimed in particular at ease of use and accessibility but also bug fixes. +This package provides many pre-built DLLs for enhancing the vanilla 1.12 client WoW gameplay experience, aimed in particular at ease of use and accessibility but also bug fixes. You may get all features by installing `weirdutils.dll`, or choose any selection of features via individual DLLs. On Turtle WoW, place your chosen DLLs next to your `WoW.exe` and add them to your `dlls.txt`. For other versions you will need some sort of DLL loader. @@ -23,7 +23,7 @@ Enables loading loose game asset files (models, textures, etc.) from the `Data/` Also allows multi-character patch archive names (e.g. `patch-12.mpq`, `patch-jimbo.mpq`). -Patch archives are sorted case-insensitively by filename — last in the sort gets highest priority, and all patches override the base archives. +Patch archives are sorted case-insensitively by filename - last in the sort gets highest priority, and all patches override the base archives. No configuration needed, install and forget. @@ -63,6 +63,24 @@ Fixes duplicate floating heal numbers caused by SuperWoW 1.5. Only relevant if y --- +### Big Cursor + +Upscales the hardware cursor for improved visibility without losing sharpness. Supports fractional scales from 1.0 (off) to 4.0. + +- `/script SetCursorScale(1.2)` -- set cursor scale (default 1.2x) +- `/script SetCursorScale(1)` -- disable (use original 32x32 cursor) + +This value is saved to the `cursorScale` CVar in tenths: `/script SetCVar("cursorScale", "15")` for 1.5x. + +Lua API for addon developers: + +- `SetCursorScale(n)` -- set scale factor (1.0–4.0), takes effect on next cursor change +- `GetCursorScale()` -- returns current scale factor + +**DLL:** `bigcursor.dll` + +--- + ## Why No Source Code? This project is distributed as pre-built DLLs only. The source code is not and will not be made publicly available. @@ -70,3 +88,60 @@ This project is distributed as pre-built DLLs only. The source code is not and w These DLLs work by hooking deeply into the game client's internals: memory layout, function addresses, rendering pipeline, input handling, and more. While every feature here is built for legitimate quality-of-life use, the underlying techniques touch on too many core mechanisms that are trivially abusable. Publishing the source would be handing a candy store to bad actors: the same hooks and patterns used to render a raid marker or fix a crash can be repurposed for cheats, exploits, and in particular automation with minimal effort. + +--- + +## Developer Notes +### Runtime Module Control API + +WeirdUtils exports three functions for querying and disabling modules at runtime in case other devs find their dll's in conflict. + +#### Exported Functions + +| Function | Signature | Description | +|---|---|---| +| `WeirdUtils_IsModuleActive` | `int __cdecl (const char *name)` | Returns 1 if the module is compiled in and currently hooked, 0 otherwise | +| `WeirdUtils_DisableModule` | `int __cdecl (const char *name)` | Unhooks the named module. Returns 1 if found, 0 otherwise | +| `WeirdUtils_DisableAll` | `int __cdecl (void)` | Unhooks all modules and core hooks. Returns count of modules disabled | + +Module names are case-insensitive and match the build option names: + +`customassets`, `logsessions`, `transmogfix`, `healtextfix`, `bigcursor` + +There is no re-enable API - re-hooking after unhook is unsafe. + +#### C/C++ Header + +A header-only `include/weirdutils_api.h` is provided that handles DLL discovery and runtime resolution automatically. No .lib file needed: + +```c +#include "weirdutils_api.h" + +// Returns 0 if WeirdUtils isn't loaded - safe to call unconditionally +if (WeirdUtils_IsModuleActive("transmogfix")) + WeirdUtils_DisableModule("transmogfix"); +``` + +The header tries all known DLL names (`weirdutils.dll`, `transmogfix.dll`, etc.) via `GetModuleHandleA`, so it works regardless of which DLL variant is loaded. + +#### Raw GetProcAddress + +If you prefer not to use the header: + +```c +HMODULE hMod = GetModuleHandleA("weirdutils.dll"); +if (hMod) { + typedef int (__cdecl *IsActiveFn)(const char *); + IsActiveFn isActive = (IsActiveFn)GetProcAddress(hMod, "WeirdUtils_IsModuleActive"); + if (isActive && isActive("transmogfix")) { + typedef int (__cdecl *DisableFn)(const char *); + DisableFn disable = (DisableFn)GetProcAddress(hMod, "WeirdUtils_DisableModule"); + if (disable) disable("transmogfix"); + } +} + +### Module Mutexes + +Each module also holds a named mutex while active: `Local\WeirdUtils__` (e.g. `Local\WeirdUtils_bigcursor_12345`). The exception is transmogfix, which uses `Local\TransmogCoalesceHook_` for legacy reasons. + +If you see the mutex, the module is loaded - and can use the Runtime Module Control API to disable it. If you don't see it, the module isn't active and you're free to hook those functions yourself. From 2d4bb10c6ed71c3f02ff71c97feedd4946dad9e5 Mon Sep 17 00:00:00 2001 From: MarcelineVQ Date: Sun, 8 Mar 2026 15:53:34 -0700 Subject: [PATCH 04/34] Update README for v0.4.0 --- README.md | 47 ++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 40 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 2fdb536..7036904 100644 --- a/README.md +++ b/README.md @@ -2,13 +2,26 @@ This package provides many pre-built DLLs for enhancing the vanilla 1.12 client WoW gameplay experience, aimed in particular at ease of use and accessibility but also bug fixes. -You may get all features by installing `weirdutils.dll`, or choose any selection of features via individual DLLs. -On Turtle WoW, place your chosen DLLs next to your `WoW.exe` and add them to your `dlls.txt`. For other versions you will need some sort of DLL loader. +You may get all features by installing `weirdutils.dll`, or choose any selection of features via individual DLLs. +On Turtle WoW, place your chosen DLLs next to your `WoW.exe` and add them to your `dlls.txt`. For other versions you will need some sort of DLL loader. --- ## Features +### PNG Screenshots + +Saves screenshots as compressed PNG files instead of the default uncompressed TGA format. Runs on a background thread with no frame drops. + +Controlled via the `screenshotQuality` CVar (saved to config.wtf): + +- `/script SetCVar("screenshotQuality", "6")` -- set compression level (1 = fast, 9 = smallest, default 6) +- `/script SetCVar("screenshotQuality", "0")` -- disable PNG, use original TGA format + +**DLL:** `pngscreenshot.dll` + +--- + ### Transmog Fix Eliminates FPS drops caused by rapid equipment visual updates when transmogged items lose durability. No configuration needed, install and forget. @@ -31,6 +44,23 @@ No configuration needed, install and forget. --- +### Utility Minimap Trackings + +Adds custom minimap icons for NPC types (vendors, trainers, innkeepers, etc.) and game objects (mailboxes). +Replaces the native tracking dropdown with a combined menu showing both spell tracking and NPC category tracking. +Can be disabled easily from normal AddOn menu. + +- Click the minimap tracking icon to open the dropdown +- Check/uncheck NPC categories to toggle their minimap icons +- Spell tracking (Hunter tracking, Find Herbs, etc.) remains available alongside NPC tracking + +Supports many NPC types such as Auctioneer, Banker, Flightmaster, Repair, Reagents, Poisons, and more +Supported game objects: Mailbox, Brainwasher + +**DLL:** `minimapicons.dll` + +--- + ### Log Sessions Organizes the combat, raw combat, and chat logs into per-character directories with timestamped filenames: @@ -74,7 +104,7 @@ This value is saved to the `cursorScale` CVar in tenths: `/script SetCVar("curso Lua API for addon developers: -- `SetCursorScale(n)` -- set scale factor (1.0–4.0), takes effect on next cursor change +- `SetCursorScale(n)` -- set scale factor (1.0-4.0), takes effect on next cursor change - `GetCursorScale()` -- returns current scale factor **DLL:** `bigcursor.dll` @@ -106,7 +136,9 @@ WeirdUtils exports three functions for querying and disabling modules at runtime Module names are case-insensitive and match the build option names: -`customassets`, `logsessions`, `transmogfix`, `healtextfix`, `bigcursor` +`customassets`, `logsessions`, `transmogfix`, `minimapicons`, `healtextfix`, `bigcursor`, `pngscreenshot` + +The `weirdutils_api.h` header is included with each release. There is no re-enable API - re-hooking after unhook is unsafe. @@ -122,7 +154,7 @@ if (WeirdUtils_IsModuleActive("transmogfix")) WeirdUtils_DisableModule("transmogfix"); ``` -The header tries all known DLL names (`weirdutils.dll`, `transmogfix.dll`, etc.) via `GetModuleHandleA`, so it works regardless of which DLL variant is loaded. +The header tries all known DLL names (`weirdutils.dll`, `pngscreenshot.dll`, etc.) via `GetModuleHandleA`, so it works regardless of which DLL variant is loaded. #### Raw GetProcAddress @@ -139,9 +171,10 @@ if (hMod) { if (disable) disable("transmogfix"); } } +``` ### Module Mutexes -Each module also holds a named mutex while active: `Local\WeirdUtils__` (e.g. `Local\WeirdUtils_bigcursor_12345`). The exception is transmogfix, which uses `Local\TransmogCoalesceHook_` for legacy reasons. +Each module also holds a named mutex while active: `Local\WeirdUtils__` (e.g. `Local\WeirdUtils_transmogfix_12345`). The exception is transmogfix, which uses `Local\TransmogCoalesceHook_` for legacy reasons. -If you see the mutex, the module is loaded - and can use the Runtime Module Control API to disable it. If you don't see it, the module isn't active and you're free to hook those functions yourself. +If you see the mutex, the module is loaded - and can use the Runtime Module Control API to disable it. If you don't see it, the module isn't active and you're free to hook those functions yourself. \ No newline at end of file From 4af5180c4d5845434fbe3495f55d649688c9d1e1 Mon Sep 17 00:00:00 2001 From: MarcelineVQ Date: Sun, 8 Mar 2026 17:53:18 -0700 Subject: [PATCH 05/34] Add weirdutils_api.h to repo --- weirdutils_api.h | 77 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 weirdutils_api.h diff --git a/weirdutils_api.h b/weirdutils_api.h new file mode 100644 index 0000000..762875f --- /dev/null +++ b/weirdutils_api.h @@ -0,0 +1,77 @@ +/* + * weirdutils_api.h - Runtime Module Control API for WeirdUtils + * + * Header-only, no .lib needed. Include this file and call the inline + * wrappers; they resolve the DLL exports at runtime via GetModuleHandleA + * and GetProcAddress. Returns 0 / no-ops if WeirdUtils is not loaded. + * + * Usage: + * #include "weirdutils_api.h" + * + * if (WeirdUtils_IsModuleActive("transmogfix")) + * WeirdUtils_DisableModule("transmogfix"); + */ + +#ifndef WEIRDUTILS_API_H +#define WEIRDUTILS_API_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* ---- Function pointer typedefs ---- */ + +typedef int (__cdecl *WeirdUtils_IsModuleActiveFn)(const char *name); +typedef int (__cdecl *WeirdUtils_DisableModuleFn)(const char *name); +typedef int (__cdecl *WeirdUtils_DisableAllFn)(void); + +/* ---- DLL auto-discovery ---- */ + +static const char *const WeirdUtils__DllNames[] = { + "weirdutils.dll", + "pngscreenshot.dll", + "transmogfix.dll", + "customassets.dll", + "logsessions.dll", + "healtextfix.dll", + "bigcursor.dll", + "minimapicons.dll", + NULL +}; + +static FARPROC WeirdUtils__Resolve(const char *func_name) { + int i; + for (i = 0; WeirdUtils__DllNames[i] != NULL; ++i) { + HMODULE hMod = GetModuleHandleA(WeirdUtils__DllNames[i]); + if (hMod) { + FARPROC proc = GetProcAddress(hMod, func_name); + if (proc) return proc; + } + } + return NULL; +} + +/* ---- Inline wrappers (no-op if DLL not loaded) ---- */ + +static int WeirdUtils_IsModuleActive(const char *name) { + WeirdUtils_IsModuleActiveFn fn = (WeirdUtils_IsModuleActiveFn)WeirdUtils__Resolve("WeirdUtils_IsModuleActive"); + return fn ? fn(name) : 0; +} + +static int WeirdUtils_DisableModule(const char *name) { + WeirdUtils_DisableModuleFn fn = (WeirdUtils_DisableModuleFn)WeirdUtils__Resolve("WeirdUtils_DisableModule"); + return fn ? fn(name) : 0; +} + +static int WeirdUtils_DisableAll(void) { + WeirdUtils_DisableAllFn fn = (WeirdUtils_DisableAllFn)WeirdUtils__Resolve("WeirdUtils_DisableAll"); + return fn ? fn() : 0; +} + +#ifdef __cplusplus +} +#endif + +#endif /* WEIRDUTILS_API_H */ From a283ffe2b69a651a3539609b8064f610899a9f19 Mon Sep 17 00:00:00 2001 From: MarcelineVQ Date: Sun, 8 Mar 2026 19:36:44 -0700 Subject: [PATCH 06/34] Rename pngscreenshot to pngscreenshots --- README.md | 6 +++--- weirdutils_api.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 7036904..f663aeb 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ Controlled via the `screenshotQuality` CVar (saved to config.wtf): - `/script SetCVar("screenshotQuality", "6")` -- set compression level (1 = fast, 9 = smallest, default 6) - `/script SetCVar("screenshotQuality", "0")` -- disable PNG, use original TGA format -**DLL:** `pngscreenshot.dll` +**DLL:** `pngscreenshots.dll` --- @@ -136,7 +136,7 @@ WeirdUtils exports three functions for querying and disabling modules at runtime Module names are case-insensitive and match the build option names: -`customassets`, `logsessions`, `transmogfix`, `minimapicons`, `healtextfix`, `bigcursor`, `pngscreenshot` +`customassets`, `logsessions`, `transmogfix`, `minimapicons`, `healtextfix`, `bigcursor`, `pngscreenshots` The `weirdutils_api.h` header is included with each release. @@ -154,7 +154,7 @@ if (WeirdUtils_IsModuleActive("transmogfix")) WeirdUtils_DisableModule("transmogfix"); ``` -The header tries all known DLL names (`weirdutils.dll`, `pngscreenshot.dll`, etc.) via `GetModuleHandleA`, so it works regardless of which DLL variant is loaded. +The header tries all known DLL names (`weirdutils.dll`, `pngscreenshots.dll`, etc.) via `GetModuleHandleA`, so it works regardless of which DLL variant is loaded. #### Raw GetProcAddress diff --git a/weirdutils_api.h b/weirdutils_api.h index 762875f..72e0ed8 100644 --- a/weirdutils_api.h +++ b/weirdutils_api.h @@ -31,7 +31,7 @@ typedef int (__cdecl *WeirdUtils_DisableAllFn)(void); static const char *const WeirdUtils__DllNames[] = { "weirdutils.dll", - "pngscreenshot.dll", + "pngscreenshots.dll", "transmogfix.dll", "customassets.dll", "logsessions.dll", From c62eb2c560e4f641b09eeba16e2b298c131c7bc6 Mon Sep 17 00:00:00 2001 From: MarcelineVQ Date: Mon, 9 Mar 2026 22:40:00 -0700 Subject: [PATCH 07/34] Update README for v0.5.0 --- README.md | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index f663aeb..35d6929 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,8 @@ This package provides many pre-built DLLs for enhancing the vanilla 1.12 client WoW gameplay experience, aimed in particular at ease of use and accessibility but also bug fixes. -You may get all features by installing `weirdutils.dll`, or choose any selection of features via individual DLLs. -On Turtle WoW, place your chosen DLLs next to your `WoW.exe` and add them to your `dlls.txt`. For other versions you will need some sort of DLL loader. +You may get all features by installing `weirdutils.dll`, or choose any selection of features via individual DLLs. +On Turtle WoW, place your chosen DLLs next to your `WoW.exe` and add them to your `dlls.txt`. For other versions you will need some sort of DLL loader. --- @@ -46,7 +46,7 @@ No configuration needed, install and forget. ### Utility Minimap Trackings -Adds custom minimap icons for NPC types (vendors, trainers, innkeepers, etc.) and game objects (mailboxes). +Adds TBC-style minimap tracking icons for NPC types (vendors, trainers, innkeepers, etc.) and game objects (mailboxes). Replaces the native tracking dropdown with a combined menu showing both spell tracking and NPC category tracking. Can be disabled easily from normal AddOn menu. @@ -61,6 +61,20 @@ Supported game objects: Mailbox, Brainwasher --- +### Clickthrough + +Makes interactable Objects and NPCs clickable through players and units. + +- Players blocking interactable NPCs (vendors, trainers, flight masters, bankers, etc.) or Objects (mailboxes, summoning portals, soulwells) become transparent to clicks +- Units (pets, NPCs) blocking interactable Objects become transparent to clicks +- Non-interactable objects (other players' pets, random mobs) are not affected, this solely helps with player dogpiles + +No configuration needed, install and forget. + +**DLL:** `clickthrough.dll` + +--- + ### Log Sessions Organizes the combat, raw combat, and chat logs into per-character directories with timestamped filenames: @@ -104,7 +118,7 @@ This value is saved to the `cursorScale` CVar in tenths: `/script SetCVar("curso Lua API for addon developers: -- `SetCursorScale(n)` -- set scale factor (1.0-4.0), takes effect on next cursor change +- `SetCursorScale(n)` -- set scale factor (1.0–4.0), takes effect on next cursor change - `GetCursorScale()` -- returns current scale factor **DLL:** `bigcursor.dll` @@ -134,13 +148,11 @@ WeirdUtils exports three functions for querying and disabling modules at runtime | `WeirdUtils_DisableModule` | `int __cdecl (const char *name)` | Unhooks the named module. Returns 1 if found, 0 otherwise | | `WeirdUtils_DisableAll` | `int __cdecl (void)` | Unhooks all modules and core hooks. Returns count of modules disabled | -Module names are case-insensitive and match the build option names: +Module names are case-insensitive and match the released dll names: -`customassets`, `logsessions`, `transmogfix`, `minimapicons`, `healtextfix`, `bigcursor`, `pngscreenshots` +`customassets`, `logsessions`, `transmogfix`, `minimapicons`, `healtextfix`, `bigcursor`, `pngscreenshots`, `clickthrough` -The `weirdutils_api.h` header is included with each release. - -There is no re-enable API - re-hooking after unhook is unsafe. +There is no re-enable API. #### C/C++ Header @@ -154,7 +166,7 @@ if (WeirdUtils_IsModuleActive("transmogfix")) WeirdUtils_DisableModule("transmogfix"); ``` -The header tries all known DLL names (`weirdutils.dll`, `pngscreenshots.dll`, etc.) via `GetModuleHandleA`, so it works regardless of which DLL variant is loaded. +The header tries all known DLL names (`weirdutils.dll`, `worldmarkers.dll`, etc.) via `GetModuleHandleA`, so it works regardless of which DLL variant is loaded. #### Raw GetProcAddress @@ -175,6 +187,6 @@ if (hMod) { ### Module Mutexes -Each module also holds a named mutex while active: `Local\WeirdUtils__` (e.g. `Local\WeirdUtils_transmogfix_12345`). The exception is transmogfix, which uses `Local\TransmogCoalesceHook_` for legacy reasons. +Each module also holds a named mutex while active: `Local\WeirdUtils__` (e.g. `Local\WeirdUtils_framecrash_12345`). The exception is transmogfix, which uses `Local\TransmogCoalesceHook_` for legacy reasons. -If you see the mutex, the module is loaded - and can use the Runtime Module Control API to disable it. If you don't see it, the module isn't active and you're free to hook those functions yourself. \ No newline at end of file +If you see the mutex, the module is loaded - and can use the Runtime Module Control API to disable it. If you don't see it, the module isn't active and you're free to hook those functions yourself. From 83d97ab1db54687f596769288a93015ceb8ac17e Mon Sep 17 00:00:00 2001 From: MarcelineVQ Date: Mon, 9 Mar 2026 23:21:49 -0700 Subject: [PATCH 08/34] Update clickthrough description for PvP filtering --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 35d6929..91f3d9a 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ Makes interactable Objects and NPCs clickable through players and units. - Players blocking interactable NPCs (vendors, trainers, flight masters, bankers, etc.) or Objects (mailboxes, summoning portals, soulwells) become transparent to clicks - Units (pets, NPCs) blocking interactable Objects become transparent to clicks -- Non-interactable objects (other players' pets, random mobs) are not affected, this solely helps with player dogpiles +- PvP objects and Non-interactable objects (other players' pets, random mobs) are not affected, this solely helps with player dogpiles No configuration needed, install and forget. From 1b19fde999c6153f3b66de0527880553bea2d4c4 Mon Sep 17 00:00:00 2001 From: MarcelineVQ Date: Tue, 24 Mar 2026 19:06:39 -0700 Subject: [PATCH 09/34] Update README for v0.6.0 --- README.md | 73 +++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 60 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 91f3d9a..a06c452 100644 --- a/README.md +++ b/README.md @@ -46,16 +46,16 @@ No configuration needed, install and forget. ### Utility Minimap Trackings -Adds TBC-style minimap tracking icons for NPC types (vendors, trainers, innkeepers, etc.) and game objects (mailboxes). -Replaces the native tracking dropdown with a combined menu showing both spell tracking and NPC category tracking. -Can be disabled easily from normal AddOn menu. +Adds TBC/WotLK-style minimap tracking icons for NPC types, game objects, and quest givers. +Replaces the native tracking dropdown with a combined menu showing both spell tracking and NPC category tracking. +Can be disabled from the normal AddOn menu. Preferences saved per-character. - Click the minimap tracking icon to open the dropdown - Check/uncheck NPC categories to toggle their minimap icons - Spell tracking (Hunter tracking, Find Herbs, etc.) remains available alongside NPC tracking +- "Hide in Cities" toggle suppresses NPC icons in capital cities -Supports many NPC types such as Auctioneer, Banker, Flightmaster, Repair, Reagents, Poisons, and more -Supported game objects: Mailbox, Brainwasher +Tracks various npc types and useful objects like Oranges and Brainwasher and Mailbox. **DLL:** `minimapicons.dll` @@ -63,11 +63,12 @@ Supported game objects: Mailbox, Brainwasher ### Clickthrough -Makes interactable Objects and NPCs clickable through players and units. +Makes interactable objects and NPCs clickable through players and units that are blocking them. When you click a player or unit that's standing on top of a vendor, mailbox, or other interactable target, the click passes through to the target behind them. -- Players blocking interactable NPCs (vendors, trainers, flight masters, bankers, etc.) or Objects (mailboxes, summoning portals, soulwells) become transparent to clicks -- Units (pets, NPCs) blocking interactable Objects become transparent to clicks -- PvP objects and Non-interactable objects (other players' pets, random mobs) are not affected, this solely helps with player dogpiles +- Players blocking interactable NPCs (vendors, trainers, flight masters, bankers, quest givers, etc.) or game objects become transparent to clicks +- Players blocking lootable corpses become transparent to clicks +- Units (pets, NPCs) blocking interactable game objects become transparent to clicks +- Disabled inside battlegrounds to prevent targeting objectives through enemy players No configuration needed, install and forget. @@ -125,6 +126,21 @@ Lua API for addon developers: --- +### Performance + +Engine-level optimizations that reduce CPU time on math, rendering helpers, file lookups, and data decompression. No visual difference, no configuration needed. Included in `weirdutils.dll`. + +- **SIMD Math** - replaces 20+ internal math functions with SSE/AVX equivalents covering skeletal animation, particle rendering, frustum culling, collision detection, text glyph caching, and float-to-integer conversion +- **Data Decompression** - swaps the game's 2004-era zlib with a modern library (2.2x faster). Loading screen times reduced by at least 13% +- **MPQ File Cache** - caches archive file lookups so repeat file opens skip the archive chain walk. Saving 50-160ms every 15 seconds during heavy gameplay +- **Timer Calibration** - recalibrates the OS performance counter for accurate animation timing. Ported from [VanillaFixes](https://github.com/hannesmann/vanillafixes) + +Most noticeable in cities, raids, and during zone transitions. + +**DLL:** `weirdperformance.dll` + +--- + ## Why No Source Code? This project is distributed as pre-built DLLs only. The source code is not and will not be made publicly available. @@ -146,11 +162,11 @@ WeirdUtils exports three functions for querying and disabling modules at runtime |---|---|---| | `WeirdUtils_IsModuleActive` | `int __cdecl (const char *name)` | Returns 1 if the module is compiled in and currently hooked, 0 otherwise | | `WeirdUtils_DisableModule` | `int __cdecl (const char *name)` | Unhooks the named module. Returns 1 if found, 0 otherwise | -| `WeirdUtils_DisableAll` | `int __cdecl (void)` | Unhooks all modules and core hooks. Returns count of modules disabled | +| `WeirdUtils_DisableAll` | `int __cdecl (void)` | Unhooks all modules. Returns count of modules disabled | Module names are case-insensitive and match the released dll names: -`customassets`, `logsessions`, `transmogfix`, `minimapicons`, `healtextfix`, `bigcursor`, `pngscreenshots`, `clickthrough` +`customassets`, `logsessions`, `transmogfix`, `minimapicons`, `healtextfix`, `bigcursor`, `pngscreenshots`, `clickthrough`, `weirdperformance` There is no re-enable API. @@ -166,7 +182,7 @@ if (WeirdUtils_IsModuleActive("transmogfix")) WeirdUtils_DisableModule("transmogfix"); ``` -The header tries all known DLL names (`weirdutils.dll`, `worldmarkers.dll`, etc.) via `GetModuleHandleA`, so it works regardless of which DLL variant is loaded. +The header tries all known DLL names (`weirdutils.dll`, `minimapicons.dll`, etc.) via `GetModuleHandleA`, so it works regardless of which DLL variant is loaded. #### Raw GetProcAddress @@ -185,8 +201,39 @@ if (hMod) { } ``` +### Version Query API + +WeirdUtils registers a Lua global table and query function for addon developers to detect which modules are loaded and their versions. Available from the login screen onward. + +#### `GetWeirdUtilsVersion()` + +Returns the `WeirdUtils` table containing all enabled modules and their version strings: + +```lua +local modules = GetWeirdUtilsVersion() +for name, version in pairs(modules) do + print(name .. " v" .. version) +end +``` + +#### `GetWeirdUtilsVersion("modulename")` + +Returns the version string for a specific module, or `nil` if not loaded: + +```lua +if GetWeirdUtilsVersion("minimapicons") then + -- Minimap Icons is available +end + +local ver = GetWeirdUtilsVersion("weirdperformance") -- "1.0" or nil +``` + +The `WeirdUtils` table is additive - if multiple independent DLLs are loaded (e.g. `minimapicons.dll` and `clickthrough.dll` separately), each adds its own modules to the shared table. + +--- + ### Module Mutexes -Each module also holds a named mutex while active: `Local\WeirdUtils__` (e.g. `Local\WeirdUtils_framecrash_12345`). The exception is transmogfix, which uses `Local\TransmogCoalesceHook_` for legacy reasons. +Each module also holds a named mutex while active: `Local\WeirdUtils__` (e.g. `Local\WeirdUtils_transmogfix_12345`). The exception is transmogfix, which uses `Local\TransmogCoalesceHook_` for legacy reasons. If you see the mutex, the module is loaded - and can use the Runtime Module Control API to disable it. If you don't see it, the module isn't active and you're free to hook those functions yourself. From b8facd60e920a5d49c80651bffd614296c79e794 Mon Sep 17 00:00:00 2001 From: MarcelineVQ Date: Wed, 25 Mar 2026 01:53:04 -0700 Subject: [PATCH 10/34] Update clickthrough description for cascade raycast --- README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index a06c452..9a1ea52 100644 --- a/README.md +++ b/README.md @@ -63,13 +63,14 @@ Tracks various npc types and useful objects like Oranges and Brainwasher and Mai ### Clickthrough -Makes interactable objects and NPCs clickable through players and units that are blocking them. When you click a player or unit that's standing on top of a vendor, mailbox, or other interactable target, the click passes through to the target behind them. +Smart cursor targeting that prioritizes useful interactions. Instead of always selecting the nearest object under the cursor, the module finds the most useful target along the ray in priority order. -- Players blocking interactable NPCs (vendors, trainers, flight masters, bankers, quest givers, etc.) or game objects become transparent to clicks -- Players blocking lootable corpses become transparent to clicks -- Units (pets, NPCs) blocking interactable game objects become transparent to clicks +- Lootable corpses first, then interactable game objects/portals, then interactable NPCs, then normal selection +- Dead non-lootable corpses can still be selected when nothing more useful is behind them - Disabled inside battlegrounds to prevent targeting objectives through enemy players +Can replaces SuperWoW's `Clickthrough()` toggle with always-on smart targeting that doesn't require a manual toggle and preserves the ability to select dead bodies when needed. Disable corpse-clickthrough in SuperAPI if you want this. + No configuration needed, install and forget. **DLL:** `clickthrough.dll` From ae5caa009875499bf043cda35d4b16a6dbe625ec Mon Sep 17 00:00:00 2001 From: MarcelineVQ Date: Fri, 27 Mar 2026 22:19:53 +0100 Subject: [PATCH 11/34] Add bug report issue template --- .gitea/issue_template/bug_report.yaml | 64 +++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 .gitea/issue_template/bug_report.yaml diff --git a/.gitea/issue_template/bug_report.yaml b/.gitea/issue_template/bug_report.yaml new file mode 100644 index 0000000..f5cf989 --- /dev/null +++ b/.gitea/issue_template/bug_report.yaml @@ -0,0 +1,64 @@ +name: Bug Report +about: Report a crash, error, or unexpected behavior +labels: + - bug +body: + - type: dropdown + id: launcher + attributes: + label: Launcher + options: + - VanillaFixes.exe + - WoW.exe (direct) + - Other + validations: + required: true + - type: dropdown + id: platform + attributes: + label: Platform + options: + - Windows + - Linux (Wine) + - macOS (Wine/CrossOver) + validations: + required: true + - type: input + id: dlls + attributes: + label: DLLs in use + description: Which WeirdUtils DLL(s) are you using? + placeholder: "e.g. weirdutils.dll, or minimapicons.dll + clickthrough.dll" + validations: + required: true + - type: textarea + id: other-dlls + attributes: + label: Other DLLs loaded + description: List any other DLLs in your dlls.txt (nampower, SuperWoW, UnitXP, etc.) + placeholder: | + nampower.dll + SuperWoWhook.dll + UnitXP_SP3.dll + - type: textarea + id: description + attributes: + label: What happened? + description: Describe the issue. Include any error messages or crash details. + placeholder: "Game crashes on logout with ERROR #132..." + validations: + required: true + - type: textarea + id: steps + attributes: + label: Steps to reproduce + placeholder: | + 1. Log in to character + 2. Open mailbox + 3. Game crashes + - type: textarea + id: crash-log + attributes: + label: Crash log + description: If you have a crash log from the Errors/ folder, paste it here. + render: text From b49a633456370dcd3914d2acc2ca8cfc0d609538 Mon Sep 17 00:00:00 2001 From: MarcelineVQ Date: Fri, 27 Mar 2026 22:22:52 +0100 Subject: [PATCH 12/34] Update bug report template: defaults, file attachments --- .gitea/issue_template/bug_report.yaml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.gitea/issue_template/bug_report.yaml b/.gitea/issue_template/bug_report.yaml index f5cf989..cde9cf0 100644 --- a/.gitea/issue_template/bug_report.yaml +++ b/.gitea/issue_template/bug_report.yaml @@ -8,9 +8,10 @@ body: attributes: label: Launcher options: - - VanillaFixes.exe - WoW.exe (direct) + - VanillaFixes.exe - Other + default: 0 validations: required: true - type: dropdown @@ -21,6 +22,7 @@ body: - Windows - Linux (Wine) - macOS (Wine/CrossOver) + default: 0 validations: required: true - type: input @@ -60,5 +62,5 @@ body: id: crash-log attributes: label: Crash log - description: If you have a crash log from the Errors/ folder, paste it here. + description: Paste crash text here or attach the file from the Errors/ folder. render: text From 30c827647c252f11ae3503369df8660d6593698e Mon Sep 17 00:00:00 2001 From: MarcelineVQ Date: Fri, 27 Mar 2026 22:26:04 +0100 Subject: [PATCH 13/34] Update bug report: file attachments section --- .gitea/issue_template/bug_report.yaml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.gitea/issue_template/bug_report.yaml b/.gitea/issue_template/bug_report.yaml index cde9cf0..9c548ca 100644 --- a/.gitea/issue_template/bug_report.yaml +++ b/.gitea/issue_template/bug_report.yaml @@ -28,7 +28,7 @@ body: - type: input id: dlls attributes: - label: DLLs in use + label: WeirdUtils DLLs in use description: Which WeirdUtils DLL(s) are you using? placeholder: "e.g. weirdutils.dll, or minimapicons.dll + clickthrough.dll" validations: @@ -59,8 +59,9 @@ body: 2. Open mailbox 3. Game crashes - type: textarea - id: crash-log + id: attachments attributes: - label: Crash log - description: Paste crash text here or attach the file from the Errors/ folder. - render: text + label: Crash log and DLLs + description: | + Attach your crash log (.txt file from the Errors/ folder) and the DLL(s) causing the issue. + Drag and drop files here or click to browse. From d1dc5ec31d34d5f5d7add40b6d3b8daed011b668 Mon Sep 17 00:00:00 2001 From: MarcelineVQ Date: Fri, 27 Mar 2026 22:26:05 +0100 Subject: [PATCH 14/34] Add feature request / question template --- .gitea/issue_template/other.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 .gitea/issue_template/other.yaml diff --git a/.gitea/issue_template/other.yaml b/.gitea/issue_template/other.yaml new file mode 100644 index 0000000..4866319 --- /dev/null +++ b/.gitea/issue_template/other.yaml @@ -0,0 +1,10 @@ +name: Feature Request / Question +about: Suggest a feature or ask a question +body: + - type: textarea + id: description + attributes: + label: Description + description: What would you like to see, or what question do you have? + validations: + required: true From e674a1634d2b432d53d9c091a682c563fbf8432a Mon Sep 17 00:00:00 2001 From: MarcelineVQ Date: Fri, 27 Mar 2026 22:30:05 +0100 Subject: [PATCH 15/34] Disable blank issue template --- .gitea/issue_template/config.yaml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .gitea/issue_template/config.yaml diff --git a/.gitea/issue_template/config.yaml b/.gitea/issue_template/config.yaml new file mode 100644 index 0000000..8005e32 --- /dev/null +++ b/.gitea/issue_template/config.yaml @@ -0,0 +1,2 @@ +blank_issues_enabled: false +contact_links: [] From 9b1f7c2600ee3ed6c6351dbb36e7b1ae21f8e124 Mon Sep 17 00:00:00 2001 From: MarcelineVQ Date: Fri, 27 Mar 2026 22:32:05 +0100 Subject: [PATCH 16/34] Bug report: separate file upload fields for crash log and DLLs --- .gitea/issue_template/bug_report.yaml | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/.gitea/issue_template/bug_report.yaml b/.gitea/issue_template/bug_report.yaml index 9c548ca..7392baf 100644 --- a/.gitea/issue_template/bug_report.yaml +++ b/.gitea/issue_template/bug_report.yaml @@ -59,9 +59,14 @@ body: 2. Open mailbox 3. Game crashes - type: textarea - id: attachments + id: crash-log attributes: - label: Crash log and DLLs - description: | - Attach your crash log (.txt file from the Errors/ folder) and the DLL(s) causing the issue. - Drag and drop files here or click to browse. + label: Crash log + description: Drag and drop the crash .txt file from your Errors/ folder here. + placeholder: "Drag and drop crash file here" + - type: textarea + id: dll-upload + attributes: + label: DLL files + description: Drag and drop the DLL(s) causing the issue here. + placeholder: "Drag and drop DLL file(s) here" From baf0a7997d1f1c926587209f373f030217c564c6 Mon Sep 17 00:00:00 2001 From: MarcelineVQ Date: Fri, 27 Mar 2026 22:33:48 +0100 Subject: [PATCH 17/34] Bug report: clean textarea fields for file attachments --- .gitea/issue_template/bug_report.yaml | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/.gitea/issue_template/bug_report.yaml b/.gitea/issue_template/bug_report.yaml index 7392baf..61f65d3 100644 --- a/.gitea/issue_template/bug_report.yaml +++ b/.gitea/issue_template/bug_report.yaml @@ -47,26 +47,19 @@ body: attributes: label: What happened? description: Describe the issue. Include any error messages or crash details. - placeholder: "Game crashes on logout with ERROR #132..." validations: required: true - type: textarea id: steps attributes: label: Steps to reproduce - placeholder: | - 1. Log in to character - 2. Open mailbox - 3. Game crashes - type: textarea id: crash-log attributes: label: Crash log - description: Drag and drop the crash .txt file from your Errors/ folder here. - placeholder: "Drag and drop crash file here" + description: Attach the crash .txt file from your Errors/ folder. Drag and drop or use the attachment button below the text box. - type: textarea id: dll-upload attributes: label: DLL files - description: Drag and drop the DLL(s) causing the issue here. - placeholder: "Drag and drop DLL file(s) here" + description: Attach the DLL(s) you are using. Drag and drop or use the attachment button below the text box. From caac25cb733d48338b218474a4589d31c156ec68 Mon Sep 17 00:00:00 2001 From: MarcelineVQ Date: Fri, 27 Mar 2026 22:41:46 +0100 Subject: [PATCH 18/34] Rename bug_report.yaml to .yml --- .gitea/issue_template/bug_report.yaml | 65 --------------------------- 1 file changed, 65 deletions(-) delete mode 100644 .gitea/issue_template/bug_report.yaml diff --git a/.gitea/issue_template/bug_report.yaml b/.gitea/issue_template/bug_report.yaml deleted file mode 100644 index 61f65d3..0000000 --- a/.gitea/issue_template/bug_report.yaml +++ /dev/null @@ -1,65 +0,0 @@ -name: Bug Report -about: Report a crash, error, or unexpected behavior -labels: - - bug -body: - - type: dropdown - id: launcher - attributes: - label: Launcher - options: - - WoW.exe (direct) - - VanillaFixes.exe - - Other - default: 0 - validations: - required: true - - type: dropdown - id: platform - attributes: - label: Platform - options: - - Windows - - Linux (Wine) - - macOS (Wine/CrossOver) - default: 0 - validations: - required: true - - type: input - id: dlls - attributes: - label: WeirdUtils DLLs in use - description: Which WeirdUtils DLL(s) are you using? - placeholder: "e.g. weirdutils.dll, or minimapicons.dll + clickthrough.dll" - validations: - required: true - - type: textarea - id: other-dlls - attributes: - label: Other DLLs loaded - description: List any other DLLs in your dlls.txt (nampower, SuperWoW, UnitXP, etc.) - placeholder: | - nampower.dll - SuperWoWhook.dll - UnitXP_SP3.dll - - type: textarea - id: description - attributes: - label: What happened? - description: Describe the issue. Include any error messages or crash details. - validations: - required: true - - type: textarea - id: steps - attributes: - label: Steps to reproduce - - type: textarea - id: crash-log - attributes: - label: Crash log - description: Attach the crash .txt file from your Errors/ folder. Drag and drop or use the attachment button below the text box. - - type: textarea - id: dll-upload - attributes: - label: DLL files - description: Attach the DLL(s) you are using. Drag and drop or use the attachment button below the text box. From f266852fa5385b26ba3f349d898c0a102b81d340 Mon Sep 17 00:00:00 2001 From: MarcelineVQ Date: Fri, 27 Mar 2026 22:41:49 +0100 Subject: [PATCH 19/34] Remove other.yaml --- .gitea/issue_template/other.yaml | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 .gitea/issue_template/other.yaml diff --git a/.gitea/issue_template/other.yaml b/.gitea/issue_template/other.yaml deleted file mode 100644 index 4866319..0000000 --- a/.gitea/issue_template/other.yaml +++ /dev/null @@ -1,10 +0,0 @@ -name: Feature Request / Question -about: Suggest a feature or ask a question -body: - - type: textarea - id: description - attributes: - label: Description - description: What would you like to see, or what question do you have? - validations: - required: true From ad2dd20ca11bcee0a4a85783c68bda6623a5a5cd Mon Sep 17 00:00:00 2001 From: MarcelineVQ Date: Fri, 27 Mar 2026 22:41:50 +0100 Subject: [PATCH 20/34] Add other.yml --- .gitea/issue_template/other.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 .gitea/issue_template/other.yml diff --git a/.gitea/issue_template/other.yml b/.gitea/issue_template/other.yml new file mode 100644 index 0000000..4866319 --- /dev/null +++ b/.gitea/issue_template/other.yml @@ -0,0 +1,10 @@ +name: Feature Request / Question +about: Suggest a feature or ask a question +body: + - type: textarea + id: description + attributes: + label: Description + description: What would you like to see, or what question do you have? + validations: + required: true From 44d56ebe1b61a9ce83462399fd904f7175f14cad Mon Sep 17 00:00:00 2001 From: MarcelineVQ Date: Fri, 27 Mar 2026 22:41:53 +0100 Subject: [PATCH 21/34] Remove config.yaml --- .gitea/issue_template/config.yaml | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 .gitea/issue_template/config.yaml diff --git a/.gitea/issue_template/config.yaml b/.gitea/issue_template/config.yaml deleted file mode 100644 index 8005e32..0000000 --- a/.gitea/issue_template/config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -blank_issues_enabled: false -contact_links: [] From 6d216e82011d48d7da32f5e2f303d74d142bf3a6 Mon Sep 17 00:00:00 2001 From: MarcelineVQ Date: Fri, 27 Mar 2026 22:41:54 +0100 Subject: [PATCH 22/34] Add config.yml --- .gitea/issue_template/config.yml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .gitea/issue_template/config.yml diff --git a/.gitea/issue_template/config.yml b/.gitea/issue_template/config.yml new file mode 100644 index 0000000..8005e32 --- /dev/null +++ b/.gitea/issue_template/config.yml @@ -0,0 +1,2 @@ +blank_issues_enabled: false +contact_links: [] From 12465cfd5893206c1040ff010edbbbd2ec73df02 Mon Sep 17 00:00:00 2001 From: MarcelineVQ Date: Fri, 27 Mar 2026 22:41:56 +0100 Subject: [PATCH 23/34] Add bug_report.yml --- .gitea/issue_template/bug_report.yml | 65 ++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 .gitea/issue_template/bug_report.yml diff --git a/.gitea/issue_template/bug_report.yml b/.gitea/issue_template/bug_report.yml new file mode 100644 index 0000000..61f65d3 --- /dev/null +++ b/.gitea/issue_template/bug_report.yml @@ -0,0 +1,65 @@ +name: Bug Report +about: Report a crash, error, or unexpected behavior +labels: + - bug +body: + - type: dropdown + id: launcher + attributes: + label: Launcher + options: + - WoW.exe (direct) + - VanillaFixes.exe + - Other + default: 0 + validations: + required: true + - type: dropdown + id: platform + attributes: + label: Platform + options: + - Windows + - Linux (Wine) + - macOS (Wine/CrossOver) + default: 0 + validations: + required: true + - type: input + id: dlls + attributes: + label: WeirdUtils DLLs in use + description: Which WeirdUtils DLL(s) are you using? + placeholder: "e.g. weirdutils.dll, or minimapicons.dll + clickthrough.dll" + validations: + required: true + - type: textarea + id: other-dlls + attributes: + label: Other DLLs loaded + description: List any other DLLs in your dlls.txt (nampower, SuperWoW, UnitXP, etc.) + placeholder: | + nampower.dll + SuperWoWhook.dll + UnitXP_SP3.dll + - type: textarea + id: description + attributes: + label: What happened? + description: Describe the issue. Include any error messages or crash details. + validations: + required: true + - type: textarea + id: steps + attributes: + label: Steps to reproduce + - type: textarea + id: crash-log + attributes: + label: Crash log + description: Attach the crash .txt file from your Errors/ folder. Drag and drop or use the attachment button below the text box. + - type: textarea + id: dll-upload + attributes: + label: DLL files + description: Attach the DLL(s) you are using. Drag and drop or use the attachment button below the text box. From 6c216ddf28f7a1b5f271c76fdf43dc899f4a3de2 Mon Sep 17 00:00:00 2001 From: MarcelineVQ Date: Fri, 27 Mar 2026 22:51:57 +0100 Subject: [PATCH 24/34] Bug report: remove placeholder text from upload fields --- .gitea/issue_template/bug_report.yml | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/.gitea/issue_template/bug_report.yml b/.gitea/issue_template/bug_report.yml index 61f65d3..e68baf4 100644 --- a/.gitea/issue_template/bug_report.yml +++ b/.gitea/issue_template/bug_report.yml @@ -38,10 +38,6 @@ body: attributes: label: Other DLLs loaded description: List any other DLLs in your dlls.txt (nampower, SuperWoW, UnitXP, etc.) - placeholder: | - nampower.dll - SuperWoWhook.dll - UnitXP_SP3.dll - type: textarea id: description attributes: @@ -57,9 +53,9 @@ body: id: crash-log attributes: label: Crash log - description: Attach the crash .txt file from your Errors/ folder. Drag and drop or use the attachment button below the text box. + description: Attach the crash .txt file from your Errors/ folder. - type: textarea id: dll-upload attributes: label: DLL files - description: Attach the DLL(s) you are using. Drag and drop or use the attachment button below the text box. + description: Attach the DLL(s) you are using. From ad4e44dc55c3d34b72ebe2c5624aa2931d10bb3d Mon Sep 17 00:00:00 2001 From: MarcelineVQ Date: Fri, 27 Mar 2026 22:59:22 +0100 Subject: [PATCH 25/34] fix: bug report template - add upload prompts, resize fields --- .gitea/issue_template/bug_report.yml | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/.gitea/issue_template/bug_report.yml b/.gitea/issue_template/bug_report.yml index e68baf4..b1f394b 100644 --- a/.gitea/issue_template/bug_report.yml +++ b/.gitea/issue_template/bug_report.yml @@ -25,19 +25,20 @@ body: default: 0 validations: required: true - - type: input + - type: textarea id: dlls attributes: label: WeirdUtils DLLs in use - description: Which WeirdUtils DLL(s) are you using? - placeholder: "e.g. weirdutils.dll, or minimapicons.dll + clickthrough.dll" + description: Drag and drop your WeirdUtils DLL file(s) into this box. + placeholder: "Drag and drop .dll files here" validations: required: true - - type: textarea + - type: input id: other-dlls attributes: label: Other DLLs loaded description: List any other DLLs in your dlls.txt (nampower, SuperWoW, UnitXP, etc.) + placeholder: "e.g. nampower.dll, UnitXP.dll" - type: textarea id: description attributes: @@ -53,9 +54,11 @@ body: id: crash-log attributes: label: Crash log - description: Attach the crash .txt file from your Errors/ folder. + description: Drag and drop the crash .txt file from your Data/ folder into this box. + placeholder: "Drag and drop crash .txt file here" - type: textarea id: dll-upload attributes: label: DLL files - description: Attach the DLL(s) you are using. + description: Drag and drop the WeirdUtils DLL(s) you are using into this box. + placeholder: "Drag and drop .dll files here" From 4a4ae22a2da47dc478dc9849d4618819c7fae73d Mon Sep 17 00:00:00 2001 From: MarcelineVQ Date: Fri, 27 Mar 2026 23:06:12 +0100 Subject: [PATCH 26/34] fix: remove duplicate DLL upload section from bug report template --- .gitea/issue_template/bug_report.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.gitea/issue_template/bug_report.yml b/.gitea/issue_template/bug_report.yml index b1f394b..0dce70f 100644 --- a/.gitea/issue_template/bug_report.yml +++ b/.gitea/issue_template/bug_report.yml @@ -56,9 +56,3 @@ body: label: Crash log description: Drag and drop the crash .txt file from your Data/ folder into this box. placeholder: "Drag and drop crash .txt file here" - - type: textarea - id: dll-upload - attributes: - label: DLL files - description: Drag and drop the WeirdUtils DLL(s) you are using into this box. - placeholder: "Drag and drop .dll files here" From 49d9a4323531a20300772e89c8a8056e7a31ec09 Mon Sep 17 00:00:00 2001 From: MarcelineVQ Date: Fri, 27 Mar 2026 23:09:30 +0100 Subject: [PATCH 27/34] fix: merge description and steps into single field with prefilled sections --- .gitea/issue_template/bug_report.yml | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/.gitea/issue_template/bug_report.yml b/.gitea/issue_template/bug_report.yml index 0dce70f..95d19b1 100644 --- a/.gitea/issue_template/bug_report.yml +++ b/.gitea/issue_template/bug_report.yml @@ -43,13 +43,17 @@ body: id: description attributes: label: What happened? - description: Describe the issue. Include any error messages or crash details. + value: | + ## Description + What went wrong? Include any error messages you saw. + + + ## Steps to reproduce + 1. + 2. + 3. validations: required: true - - type: textarea - id: steps - attributes: - label: Steps to reproduce - type: textarea id: crash-log attributes: From 11e954857b07cee413e7d55e62d3b08dce3d9cc6 Mon Sep 17 00:00:00 2001 From: MarcelineVQ Date: Fri, 27 Mar 2026 23:11:19 +0100 Subject: [PATCH 28/34] fix: disable upload on description field via render attribute --- .gitea/issue_template/bug_report.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitea/issue_template/bug_report.yml b/.gitea/issue_template/bug_report.yml index 95d19b1..b862e1c 100644 --- a/.gitea/issue_template/bug_report.yml +++ b/.gitea/issue_template/bug_report.yml @@ -43,12 +43,13 @@ body: id: description attributes: label: What happened? + render: text value: | - ## Description + Description: What went wrong? Include any error messages you saw. - ## Steps to reproduce + Steps to reproduce: 1. 2. 3. From 434a4f112949a92b9136747b45b907a831385be3 Mon Sep 17 00:00:00 2001 From: MarcelineVQ Date: Fri, 27 Mar 2026 23:51:35 +0100 Subject: [PATCH 29/34] fix: remove render attribute, let textarea auto-size --- .gitea/issue_template/bug_report.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitea/issue_template/bug_report.yml b/.gitea/issue_template/bug_report.yml index b862e1c..e970b7b 100644 --- a/.gitea/issue_template/bug_report.yml +++ b/.gitea/issue_template/bug_report.yml @@ -43,7 +43,6 @@ body: id: description attributes: label: What happened? - render: text value: | Description: What went wrong? Include any error messages you saw. From 58f2f788b12e07d2fc58b3cc152a4096027e319f Mon Sep 17 00:00:00 2001 From: MarcelineVQ Date: Fri, 27 Mar 2026 23:54:30 +0100 Subject: [PATCH 30/34] fix: consolidate bug report into single textarea with upload --- .gitea/issue_template/bug_report.yml | 28 +++++----------------------- 1 file changed, 5 insertions(+), 23 deletions(-) diff --git a/.gitea/issue_template/bug_report.yml b/.gitea/issue_template/bug_report.yml index e970b7b..8eb1ba1 100644 --- a/.gitea/issue_template/bug_report.yml +++ b/.gitea/issue_template/bug_report.yml @@ -25,38 +25,20 @@ body: default: 0 validations: required: true - - type: textarea - id: dlls - attributes: - label: WeirdUtils DLLs in use - description: Drag and drop your WeirdUtils DLL file(s) into this box. - placeholder: "Drag and drop .dll files here" - validations: - required: true - - type: input - id: other-dlls - attributes: - label: Other DLLs loaded - description: List any other DLLs in your dlls.txt (nampower, SuperWoW, UnitXP, etc.) - placeholder: "e.g. nampower.dll, UnitXP.dll" - type: textarea id: description attributes: - label: What happened? + label: Bug Report + description: Attach your WeirdUtils DLL(s) and crash log (.txt from Data/ folder) by dragging them into this box. value: | - Description: - What went wrong? Include any error messages you saw. + What happened? Steps to reproduce: 1. 2. 3. + + Other DLLs loaded (nampower, SuperWoW, UnitXP, etc.): validations: required: true - - type: textarea - id: crash-log - attributes: - label: Crash log - description: Drag and drop the crash .txt file from your Data/ folder into this box. - placeholder: "Drag and drop crash .txt file here" From a3d5b47910c28197a430ceef5146164c31fd74f2 Mon Sep 17 00:00:00 2001 From: MarcelineVQ Date: Fri, 27 Mar 2026 23:56:44 +0100 Subject: [PATCH 31/34] fix: simplify bug report template with markdown headers --- .gitea/issue_template/bug_report.yml | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/.gitea/issue_template/bug_report.yml b/.gitea/issue_template/bug_report.yml index 8eb1ba1..5e4e2ae 100644 --- a/.gitea/issue_template/bug_report.yml +++ b/.gitea/issue_template/bug_report.yml @@ -31,14 +31,11 @@ body: label: Bug Report description: Attach your WeirdUtils DLL(s) and crash log (.txt from Data/ folder) by dragging them into this box. value: | - What happened? + ## What happened? + ## Steps to reproduce: - Steps to reproduce: - 1. - 2. - 3. + ## Other DLLs loaded (nampower, SuperWoW, UnitXP, etc.): - Other DLLs loaded (nampower, SuperWoW, UnitXP, etc.): validations: required: true From 95704a412d650e7bb44552b868a7da2850807521 Mon Sep 17 00:00:00 2001 From: MarcelineVQ Date: Sat, 28 Mar 2026 01:59:01 +0100 Subject: [PATCH 32/34] update issue template --- .gitea/issue_template/bug_report.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/issue_template/bug_report.yml b/.gitea/issue_template/bug_report.yml index 5e4e2ae..72a8d05 100644 --- a/.gitea/issue_template/bug_report.yml +++ b/.gitea/issue_template/bug_report.yml @@ -29,7 +29,7 @@ body: id: description attributes: label: Bug Report - description: Attach your WeirdUtils DLL(s) and crash log (.txt from Data/ folder) by dragging them into this box. + description: Attach your WeirdUtils DLL(s) and crash log (.txt from Errors/ folder) by dragging them into this box. value: | ## What happened? From eb21c0870634d772c075be8f2a2aa20a311763da Mon Sep 17 00:00:00 2001 From: MarcelineVQ Date: Sat, 28 Mar 2026 01:59:04 +0100 Subject: [PATCH 33/34] update issue template From d71ab9d4fddd013a82af9f8ef8147e81ca30f7af Mon Sep 17 00:00:00 2001 From: MarcelineVQ Date: Sat, 28 Mar 2026 01:59:07 +0100 Subject: [PATCH 34/34] update issue template