Files
WowPresence/README.md
T

239 lines
6.7 KiB
Markdown

# 🎮 WowPresence
Native Discord Rich Presence for **World of Warcraft 1.12.1 (build 5875)** and compatible clients.
Focused on **simple installation, read-only game sampling and native Discord IPC**.
> WowPresence targets **WoW 1.12.1 / build 5875-compatible client environments**.
## 🔌 Requirements
- **World of Warcraft 1.12.1 (build 5875)** or a compatible client
- **Discord Desktop**
- A compatible DLL loader such as **VanillaFixes**
- A free **Discord Application ID**
The DLL only reads character status from the game. Discord communication is handled by the separate `WowPresence.exe` companion process.
## 📦 Installation
1. Download **`WowPresence.zip`** from Releases.
2. Extract the ZIP directly into your WoW game directory.
3. Open:
```text
WowPresence\discord_application_id
```
4. Replace the placeholder with **your numeric Discord Application ID**.
5. Add `WowPresence.dll` to your VanillaFixes `dlls.txt`.
6. Launch WoW normally through VanillaFixes.
After extraction, the relevant files should look like this:
```text
<WoW folder>\
├─ WowPresence.dll
├─ WowPresence.exe
└─ WowPresence\
├─ discord_application_id
└─ discord_broadcast_flags
```
`WowPresence.exe` is started automatically by the DLL and normally does **not** need to be launched manually.
The runtime JSON and log files are created automatically inside the same `WowPresence` folder.
When WowPresence is installed through **Modernization Tool**, the same binaries automatically use:
```text
<WoW folder>\.modernization_tool\WowPresence\
```
instead. No separate build is required.
## 🛰️ Discord Application ID
For **OctoWoW**, you can use the preconfigured Discord Application ID:
```text
1544072796098011176
```
This is the same Application ID automatically configured by **Modernization Tool**.
If you want to use your own Discord application instead:
1. Open the **Discord Developer Portal**: https://discord.com/developers/applications
2. Create a **New Application**.
3. Give it the name you want Discord to display.
4. Open **General Information**.
5. Copy the **Application ID**.
6. Paste only that numeric ID into:
```text
WowPresence\discord_application_id
```
Example:
```text
123456789012345678
```
No Discord Client Secret, bot token or bot account is used or required.
If `discord_application_id` is missing or invalid, Rich Presence remains disabled and the reason is written to `WowPresence\WowPresence.log`.
## ✨ Features
- Character name and guild display.
- Level and class display.
- Race and faction display.
- Current zone display resolved from the client AreaTable instead of heuristic text-address scanning.
- Stable elapsed-session timer across character changes.
- Automatic companion startup.
- Exact WoW process tracking.
- Read-only game-memory sampling.
- Native Discord IPC.
- Optional privacy flags for individual character fields.
- No bot, Client Secret or external service required.
## 🔧 Compatibility
### Tested
- **OctoWoW** — WoW 1.12.1 / build 5875 based client
### Expected compatible
- **World of Warcraft 1.12.1 build 5875**
- Private-server clients preserving the relevant 1.12.1 client memory layout
### Not compatible
- WoW Classic Era 1.14.x
- The Burning Crusade Classic
- Wrath of the Lich King Classic
- Retail World of Warcraft
Other modified 1.12.1 clients should be considered **untested until verified**.
## ⚙️ How it works
```text
WoW
└─ WowPresence.dll
├─ read-only character sampling
├─ Area ID → AreaTable zone resolution
├─ WowPresence\discord_wow_status.json
└─ starts WowPresence.exe
└─ Discord local IPC
```
Zone names are resolved from the player's current AreaTable ID, matching the client's own zone data and avoiding internal map tokens such as `H32D` or `HLVA`.
The DLL does not communicate directly with Discord.
The companion executable does not read or write WoW memory.
Runtime files are kept together in one of these locations:
**Standalone installation:**
```text
<WoW folder>\WowPresence\
├─ discord_application_id
├─ discord_broadcast_flags
├─ discord_wow_status.json
└─ WowPresence.log
```
**Installed through Modernization Tool:**
```text
<WoW folder>\.modernization_tool\WowPresence\
├─ discord_application_id
├─ discord_broadcast_flags
├─ discord_wow_status.json
└─ WowPresence.log
```
If the Modernization Tool managed folder exists, WowPresence automatically prefers it. Otherwise it uses the standalone `WowPresence` folder.
## 🔒 Privacy flags
The included file:
```text
WowPresence\discord_broadcast_flags
```
controls which character details are published to Discord.
| Value | Field |
| ---: | --- |
| 1 | Name |
| 2 | Guild |
| 4 | Faction |
| 8 | Class |
| 16 | Level |
| 32 | Zone |
| 63 | All fields |
The release package uses `63` by default.
If the file is deleted, WowPresence also defaults to all supported fields.
## 🛡️ Administrator privileges
Discord and WoW should run with matching privilege levels.
If Discord runs as administrator, WoW must also run as administrator for local Rich Presence IPC to work reliably.
Running both normally is recommended unless elevation is required by the local setup.
## 🛠️ Building
WowPresence targets **32-bit x86 Windows**, matching WoW 1.12.1.
With an x86 MSVC developer environment:
```bat
cl /nologo /O2 /MT /W3 /LD src\WowPresence.c /Fe:WowPresence.dll /link /INCREMENTAL:NO
cl /nologo /O2 /MT /W3 src\WowPresenceLauncher.c user32.lib /Fe:WowPresence.exe /link /SUBSYSTEM:WINDOWS /INCREMENTAL:NO
```
GitHub Actions builds:
- `WowPresence.dll`
- `WowPresence.exe`
- `WowPresence.zip`
The ZIP includes the ready-to-edit `WowPresence` configuration folder.
Tags matching `v*` can publish these files as a GitHub Release.
## 📜 Project identity & licensing
WowPresence is an **independent community project**.
Compatibility with **World of Warcraft**, **Discord**, **OctoWoW**, **VanillaFixes**, **IchaLaunch**, or other referenced projects does not imply affiliation, endorsement, sponsorship or ownership by their respective rights holders or maintainers.
**World of Warcraft**, **Warcraft**, **Blizzard Entertainment**, **Discord**, and related names and marks remain the property of their respective rights holders.
This repository does not currently declare a software license.
For detailed provenance and third-party information, see:
- [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md)
## 🙏 Credits
WowPresence is maintained by **Dusk-92**.
The project was inspired in part by the WoW character-status / Discord Rich Presence implementation in **IchaLaunch** by **brutaliccus**.
The current WowPresence implementation is maintained separately and does not include IchaLaunch binaries.