Showcase · Quick start · How it works · Architecture · Full docs
Disclaimer: This project is for educational and research purposes. Using third-party software in online games may violate Terms of Service and result in bans. Use at your own risk.
| Section | Description |
|---|---|
| Visual showcase | Primary screenshots ordered by feature area |
| What this project does | Purpose, scope, and design goals |
| Quick start | Build, launch, and first-run checklist |
| Features | Every capability with media and deep links |
| How it works | External attach, overlay, and frame loop |
| Menu and controls | Tabs, hotkeys, and UI layout |
| Configuration | Named profiles and file format |
| Console diagnostics | Startup health checks |
| Project layout | Source tree map |
| Documentation | Extended guides in docs/ |
| Updating offsets | After Overwatch patches |
| Known limitations | Stability notes |
Images are ordered by importance: combined ESP first, then individual draw modes, menu tabs, ult tracker, config, and console.
Four overlay primitives selectable from the Visuals tab. Each screenshot shows the same practice-range scenario with one mode emphasized.
2D corner box
|
3D wireframe box
|
Skeleton
|
Snap lines
|
Full technical breakdown: docs/esp.md.

Ult Bars (world-space bar above head) and Ult Panel (fixed list with hero name + percent) share one screenshot.
Implementation: docs/esp.md#ult-tracker.
Aimbot![]() Aim settings, bone selection, flickbot, triggerbot, no-recoil. |
Visuals![]() Player ESP, team/vis filters, outline, glow, ult toggles. |
Config![]() Named profiles under %APPDATA%\OWExternal\configs.
|
Config tab (saved)![]() Save, Load, Delete, Refresh. Auto-save every 5 seconds. |
Sample .cfg file![]() Plain-text [esp], [aim], [trigger] sections.
|
Every key documented in docs/config-system.md.

Process attach, MZ read, RVA dump, entity/viewmatrix chain, entity counts, camera position, [+] Ready.
Line-by-line reference: docs/console-diagnostics.md.
OWExternal is a standalone external process for Overwatch 2. It never injects a DLL. After launch it:
- Finds
Overwatch.exeviaCreateToolhelp32Snapshotand opens the process with VM read/write access. - Resolves the main module base with
EnumProcessModulesand treats all game addresses as RVAs added to that base. - Decrypts live structures - entity manager, per-entity components, viewmatrix, visibility, team, bones, skill/ult data - using constants in
include/offsets.hpp. - Creates a transparent overlay - a topmost Direct3D 11 window with ImGui. When the menu is closed,
WS_EX_TRANSPARENTpasses mouse input through to the game. - Draws overlay ESP - 2D corner boxes, 3D wireframes, skeletons, snap lines, ult bars, and ult panel - via
ImDrawListafter world-to-screen projection. - Writes game memory for combat (aim angles on player controller), triggerbot (
mouse_event), no-recoil thread, and engine outline/glow components. - Persists settings to
%APPDATA%\OWExternal\configs\*.cfgwith auto-save every five seconds.
Nothing shares the game's render thread. All logic runs in OwExternal.exe's main loop (~1 ms frame sleep).
| Step | Action |
|---|---|
| 1 | Open OwExternal.sln in Visual Studio 2022 |
| 2 | Select Release | x64 and build |
| 3 | Output: Release/OwExternal.exe |
| 4 | Launch Overwatch 2 and enter Practice Range or a match |
| 5 | Run OwExternal.exe as Administrator |
| 6 | INSERT toggles menu · confirm [+] Ready. in console |
Build details, prerequisites, and troubleshooting: docs/getting-started.md.
When any ESP draw toggle is on, the overlay iterates g_entities, applies team/vis filters, projects bones through the decrypted viewmatrix, and draws only what you enable. Team Check and Vis Check are documented in text only (no separate screenshots) because they are logical filters, not distinct draw primitives.
Deep dive: docs/esp.md.
Reads ult charge from the skill component (ability id 0x1e32) and renders two independent UI modes. Both are shown in a single reference image:
Aimbot, flickbot, triggerbot, and no-recoil are configured on the Aimbot tab. Full memory paths, angle math, and timing documented without screenshots:
Outline and glow write Blizzard's in-engine outline component (TYPE_OUTLINE / TYPE_EMULATE), not the ImGui overlay. Encryption, color fields, and cleanup:
flowchart TB
subgraph ext [OwExternal.exe]
FIND[Find Overwatch.exe]
OPEN[OpenProcess RPM/WPM]
LOOP[Main loop]
end
subgraph overlay [Overlay HWND]
D3D[D3D11 swap chain]
IM[ImGui frame]
DRAW[DrawESP + RenderMenu]
end
subgraph game [Overwatch.exe]
ENT[Entity manager]
COMP[Encrypted components]
VM[Viewmatrix chain]
end
FIND --> OPEN --> LOOP
LOOP -->|every ~5ms| ENT
ENT --> COMP
LOOP -->|every frame| VM
COMP --> DRAW
VM --> DRAW
LOOP --> D3D --> IM --> DRAW
LOOP -->|WPM| COMP
Boot sequence
- Poll until
Overwatch.exePID is found. OpenProcess+ resolveg_base(main module).- Create overlay window, init D3D11 + ImGui.
ConfigLoadActive()from%APPDATA%\OWExternal\configs.PrintStartupDiagnostics()- MZ, entity root, viewmatrix, entity counts.- Spawn
NoRecoilThread. - Enter main loop: entity read, viewmatrix, combat, outline, ESP draw, Present.
Deep dive: docs/architecture.md.
| Input | Action |
|---|---|
| INSERT | Toggle menu (overlay ESP still draws when closed) |
| Aim key (configurable) | Hold to run aimbot when enabled |
| Flick key (configurable) | Hold to run flickbot when enabled |
| Trigger key (optional) | Hold gate for triggerbot when Hold Key is on |
flowchart LR
M[Menu INSERT] --> A[Aimbot]
M --> V[Visuals]
M --> C[Config]
A --> A1[Aim / tracking / FOV]
A --> A2[Flickbot / trigger / no-recoil]
V --> V1[ESP toggles]
V --> V2[Outline / glow / ult]
C --> C1[Save / load profiles]
%APPDATA%\OWExternal\configs\
├── active.txt # current profile name (one line)
├── default.cfg
└── <name>.cfg
INI-style sections: [esp], [aim], [trigger]. Saved from the Config tab; loaded on startup; auto-saved every 5 s and on exit.
Full key reference: docs/config-system.md.
Startup console output validates attach, lists active RVAs, probes entity and viewmatrix chains, and prints live entity statistics before [+] Ready.
Reference: docs/console-diagnostics.md.
ExternalOW/
├── OWSource/
│ ├── OwExternal.sln
│ ├── main.cpp Entry, main loop, timing
│ ├── include/
│ │ ├── offsets.hpp RVAs, component IDs, bone tables
│ │ ├── sdk.hpp EntityInfo, globals, OverwatchSDK
│ │ ├── config.h Profile load/save
│ │ ├── utils.hpp Component + visibility decrypt
│ │ ├── outline.h Engine outline/glow writes
│ │ ├── triggerbot.h Crosshair trigger
│ │ ├── ulttracker.h Ult bars + panel draw
│ │ └── console_log.h Startup diagnostics
│ ├── src/
│ │ ├── memory.cpp Entity pipeline, viewmatrix, W2S
│ │ ├── features.cpp Local player, aimbot, flick, recoil thread
│ │ └── render.cpp Menu tabs, ESP draw, screen cache
│ ├── docs/ Documentation + screenshots
│ └── Release/OwExternal.exe
└── Offsets/
└── offsets.hpp OwDumper reference export
| Document | Contents |
|---|---|
| architecture.md | Process model, threads, overlay, frame loop, data flow |
| getting-started.md | Build, admin launch, troubleshooting |
| esp.md | Every ESP mode, team/vis filters, ult tracker, W2S math |
| aimbot-and-combat.md | Aim, flick, trigger, recoil - code paths and offsets |
| visual-effects.md | Outline encryption, glow colors, cleanup |
| config-system.md | Every config key, API, auto-save |
| memory-and-offsets.md | Entity collection, components, decrypt, bones |
| offsets-dumper.md | OwDumper kernel workflow, header porting |
| console-diagnostics.md | Startup log line reference |
Offsets live in include/offsets.hpp (build tied to OwDumper export dated 2026-06-27). After an Overwatch update:
- Run OwDumper in practice range (kernel driver workflow).
- Copy exported RVAs and decrypt constants into
offsets.hpp. - Rebuild Release x64.
- Confirm green entity + viewmatrix lines in console diagnostics.
Guide: docs/offsets-dumper.md · Field map: docs/memory-and-offsets.md.
- Offsets are manual. Game patches require re-dumping; stale RVAs show as failed memory chain in console.
- External detection.
OpenProcess+ overlay + memory writes are observable. No anti-cheat evasion is implemented. - Fullscreen exclusive. Overlay tracks
TankWindowClassclient rect; borderless windowed is most reliable. - Combat and outline sensitivity. Aim writes and outline encryption depend on live keys and controller layout; see feature docs for tuning notes.
- Single-threaded entity cache.
g_entitiesis updated on the main loop only; no cross-thread locking.
- Dear ImGui - MIT
- Offsets generated via OwDumper
- For personal and educational use only
Repository: github.com/LucasZhang3/OW










