Skip to content

About

External Overwatch 2 overlay with configurable combat/visual features. Runs as a standalone executable that attaches to the game process.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Latest commit

 

History

17 Commits

Folders and files

Repository files navigation

ExternalOW

OWExternal ESP active in the Overwatch Practice Range

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.


Table of contents

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

Visual showcase

Images are ordered by importance: combined ESP first, then individual draw modes, menu tabs, ult tracker, config, and console.

Primary ESP

Combined ESP (hero overview)

All ESP layers enabled in practice range
2D box, 3D box, skeleton, snap lines, ult bars, and visibility highlighting stacked together.
Menu with console (Insert)

ImGui menu open beside startup console
INSERT toggles the menu. Console shows attach status, offset RVAs, and memory chain validation.

ESP draw modes

Four overlay primitives selectable from the Visuals tab. Each screenshot shows the same practice-range scenario with one mode emphasized.

2D corner box
Corner bracket box around Tracer
3D wireframe box
3D box around enemy
Skeleton
Bone lines on enemy model
Snap lines
Lines from crosshair to targets

Full technical breakdown: docs/esp.md.

Ult tracker

Ult bar above head and ult panel top-left
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.

Menu tabs

Aimbot

Aimbot tab with FOV, tracking, flick, trigger
Aim settings, bone selection, flickbot, triggerbot, no-recoil.
Visuals

Visuals tab with ESP and outline toggles
Player ESP, team/vis filters, outline, glow, ult toggles.
Config

Config save and load UI
Named profiles under %APPDATA%\OWExternal\configs.

Configuration

Config tab (saved)

Config UI after save
Save, Load, Delete, Refresh. Auto-save every 5 seconds.
Sample .cfg file

default.cfg in text editor
Plain-text [esp], [aim], [trigger] sections.

Every key documented in docs/config-system.md.

Console startup

Full startup diagnostic output
Process attach, MZ read, RVA dump, entity/viewmatrix chain, entity counts, camera position, [+] Ready.

Line-by-line reference: docs/console-diagnostics.md.


What this project does

OWExternal is a standalone external process for Overwatch 2. It never injects a DLL. After launch it:

  1. Finds Overwatch.exe via CreateToolhelp32Snapshot and opens the process with VM read/write access.
  2. Resolves the main module base with EnumProcessModules and treats all game addresses as RVAs added to that base.
  3. Decrypts live structures - entity manager, per-entity components, viewmatrix, visibility, team, bones, skill/ult data - using constants in include/offsets.hpp.
  4. Creates a transparent overlay - a topmost Direct3D 11 window with ImGui. When the menu is closed, WS_EX_TRANSPARENT passes mouse input through to the game.
  5. Draws overlay ESP - 2D corner boxes, 3D wireframes, skeletons, snap lines, ult bars, and ult panel - via ImDrawList after world-to-screen projection.
  6. Writes game memory for combat (aim angles on player controller), triggerbot (mouse_event), no-recoil thread, and engine outline/glow components.
  7. Persists settings to %APPDATA%\OWExternal\configs\*.cfg with 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).


Quick start

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

Ready state with menu available

Build details, prerequisites, and troubleshooting: docs/getting-started.md.


Player ESP

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.

Full ESP stack

Deep dive: docs/esp.md.

Ult tracker

Reads ult charge from the skill component (ability id 0x1e32) and renders two independent UI modes. Both are shown in a single reference image:

Ult bars and panel

Combat assists

Aimbot, flickbot, triggerbot, and no-recoil are configured on the Aimbot tab. Full memory paths, angle math, and timing documented without screenshots:

docs/aimbot-and-combat.md

Engine outline and glow

Outline and glow write Blizzard's in-engine outline component (TYPE_OUTLINE / TYPE_EMULATE), not the ImGui overlay. Encryption, color fields, and cleanup:

docs/visual-effects.md


How it works

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
Loading

Boot sequence

  1. Poll until Overwatch.exe PID is found.
  2. OpenProcess + resolve g_base (main module).
  3. Create overlay window, init D3D11 + ImGui.
  4. ConfigLoadActive() from %APPDATA%\OWExternal\configs.
  5. PrintStartupDiagnostics() - MZ, entity root, viewmatrix, entity counts.
  6. Spawn NoRecoilThread.
  7. Enter main loop: entity read, viewmatrix, combat, outline, ESP draw, Present.

Deep dive: docs/architecture.md.


Menu and controls

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]
Loading

Visuals tab layout    Aimbot tab layout


Configuration

%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.

Config tab

Full key reference: docs/config-system.md.


Console diagnostics

Startup console output validates attach, lists active RVAs, probes entity and viewmatrix chains, and prints live entity statistics before [+] Ready.

Console diagnostics

Reference: docs/console-diagnostics.md.


Project layout

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

Documentation

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

Updating offsets

Offsets live in include/offsets.hpp (build tied to OwDumper export dated 2026-06-27). After an Overwatch update:

  1. Run OwDumper in practice range (kernel driver workflow).
  2. Copy exported RVAs and decrypt constants into offsets.hpp.
  3. Rebuild Release x64.
  4. Confirm green entity + viewmatrix lines in console diagnostics.

Guide: docs/offsets-dumper.md · Field map: docs/memory-and-offsets.md.


Known limitations

  • 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 TankWindowClass client 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_entities is updated on the main loop only; no cross-thread locking.

License and credits

  • Dear ImGui - MIT
  • Offsets generated via OwDumper
  • For personal and educational use only

Repository: github.com/LucasZhang3/OW

About

External Overwatch 2 overlay with configurable combat/visual features. Runs as a standalone executable that attaches to the game process.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages