DownpourRecomp

DownpourRecomp brings Silent Hill: Downpour to PC.

README

Silent Hill: Downpour — PC Port (DownpourRecomp)

Play Silent Hill: Downpour natively on Windows, in 1080p at 60 FPS, with keyboard + mouse — no emulator required.

Latest release Total downloads License Platform Stars

Murphy close-up — Silent Hill: Downpour running natively on PC

⬇ Download v1.1.8 for Windows


[!IMPORTANT] v1.1.8 (hotfix, 2026-09-03) — v1.1.7 refused to start on Windows 10 / older Windows 11 with Failed to get an adapter supporting Direct3D 12 (issue #29): the executable demanded a DirectX Agility runtime that was not in the package. v1.1.8 is v1.1.7 with that dependency removed — it uses the system Direct3D 12 runtime again, exactly like v1.1.6. Nothing else changed; if v1.1.7 already runs for you, updating changes nothing visible.

[!NOTE] v1.1.7 is out — and it is deliberately not a "final" anything. It's a compilation of every update that has been accumulating on the dev machine since v1.1.6, shipped as one package before something bigger that is already in the works.

Highlights: a first-run disc-image installer (community contribution by Alexbeav — point it at your own ISO and it extracts everything itself), no more AVX2 requirement (pre-2013 CPUs boot the game now), mouse look rebuilt on raw input with direct displacement mapping, nine correctness fixes ported from upstream ReXGlue v0.10, audio mix fixes (bass is back in stereo mixes; one-shot SFX no longer crunch), and achievements with unlock toasts — press F7 in-game to see your list. Full notes below.

Already on v1.1.x? Launch PlayDownpour.exe and click the pill banner — v1.1.7 installs in place; your saves, settings, and warm shader cache are preserved (and backed up to %TEMP% first, automatically).

Older release notes live in docs/CHANGELOG.md.

[!TIP]

🐭 Mouse tuning guide (v1.1.7 semantics)

v1.1.7 rebuilt mouse look from scratch on raw input with direct displacement mapping. With "Use Raw Input" ON (the default), the pipeline is now just:

deflection = deadzone_floor + |raw HID delta| × Raw Input Scale × Stick Scale

Motion this frame = camera turn this frame. Hand stops = camera stops, instantly. No smoothing filter, no decay tail, no ramp — those knobs now apply only to the WM_MOUSEMOVE fallback path (Use Raw Input off, Wine/VM/RDP setups).

FieldRaw path (default)Fallback path
Use Raw InputON — unaccelerated HID counts via WM_INPUTOFF — Windows pointer ballistics
Raw Input Scale✅ main speed knob (default 0.6)—
Stick Scale✅ second speed knob (default 800)—
Deadzone Compensation✅ floor for the first count of motion (default 4000, hard-floored at the game's own stick deadzone)✅ ramp target
Invert Mouse Y✅✅
Mouse Sensitivity / Smoothing / Acceleration Curve / Stick Decay— ignored✅ full legacy pipeline

Tuning: too slow/fast overall → Raw Input Scale (0.3 deliberate ↔ 1.5 twitchy at 1600 DPI; halve for 3200 DPI, double for 800 DPI). Small motions feel dead → raise Deadzone Compensation toward 9000. Flicks saturate too easily → lower Stick Scale.

The honest ceiling: the game reads a controller stick, and a fully-deflected stick is the fastest turn its input model allows. Mouse now reaches that ceiling instantly, but can't exceed it — raising it needs a camera-speed patch in the game code (on the roadmap).


What's new in v1.1.7

This is not a "final" release. v1.1.7 is a compilation of everything that has been accumulating on the dev machine since v1.1.6 — shipped as one package before something bigger that is already in progress.

💿 First-run disc-image installer (community contribution)

A fresh install no longer requires you to pre-extract your game dump by hand. If the game data is missing on first launch, a new wizard asks for your own Silent Hill: Downpour ISO (Redump, XGD3, or raw dump layouts are auto-detected), extracts the game partition itself, then chains into the existing Title Update installer — which can also fetch TU1 automatically. Extraction is resumable: interrupt it, relaunch, and it continues where it stopped. Headless installs are covered by DOWNPOUR_INSTALL_ISO / DOWNPOUR_INSTALL_TU environment variables.

Contributed by Alexbeav (PR #27) — the first external code contribution to the project. Thank you!

🧠 No more AVX2 requirement (issue #11)

The runtime was shipping with -march=x86-64-v3, which hard-requires AVX2 — CPUs older than Intel Haswell (2013) / AMD Excavator (2015) died with 0xc0000142 before the first log line. The build now targets baseline x86-64 + SSSE3 with proper Snappy feature-detection overrides. FX-8300-class machines boot the game.

🖱️ Mouse look rebuilt on raw input — direct displacement mapping

The raw-input mouse path was reimplemented from scratch in the runtime (WM_INPUT, no Windows pointer ballistics), and — after live testing — the whole stick-emulation filter chain was taken out of the raw path: no EMA smoothing (lag), no decay tail (camera drift after the hand stops), no ramp remap (which silently discarded small motions below the game's stick deadzone — the "mouse feels dead and slow" reports were this). Motion now maps directly: any movement instantly clears the deadzone floor; stopping stops the camera the same frame. Cursor capture also moved off the guest input-poll thread onto the UI thread, removing a poll-stall source. The legacy WM_MOUSEMOVE pipeline remains as the fallback (Use Raw Input off / Wine / VMs). See the mouse tuning guide.

🔧 Nine correctness fixes ported from upstream ReXGlue v0.10

Hand-ported (the fork can't rebase — upstream rewrote history) and verified against this game:

  • Occlusion-query end detection — a missed end left the game spinning in its render-thread wait loop.
  • GPU page-state coherency — double-buffered valid-page flags could drift and serve stale state (the same bug class made character bodies invisible in another title upstream); replaced with one coherent set. Also trims spurious re-uploads.
  • APC delivery through a trap frame + cr2-cr4 / FPSCR in the fiber save area — kernel callbacks and fiber switches no longer clobber guest registers or the FP rounding mode. Silent-corruption-class fixes.
  • Audio-stretch fix — stop suppressing SDL's timer-resolution management (also helps frame pacing).
  • 7e3 float decode — HDR clear colors decoded with the mantissa in the wrong bit position.
  • Thread-context init — a memset was wiping PPCContext defaults (including the initial msr).
  • Faster file opens — exact-name stat before directory scan (streaming hitches).
  • Crash diagnostics — unhandled guest access violations now log the guest address and thread; arena bases logged at boot so crash dumps can be decoded.
🔊 Audio mix fixes
  • 5.1 → stereo fold rewritten: the old fold discarded the LFE channel entirely (all bass — impacts, thunder — was missing from stereo/headphone mixes), used ad-hoc weights, never clamped, and the scalar path had the rear channels swapped. The new fold follows ITU-R BS.775 weights with a master-gain stage and proper clamping.
  • One-shot SFX crunch root-caused: the decoder reset between sounds called avcodec_flush_buffers, which is a no-op for the XMA codec — the previous sound's MDCT spectral tail leaked into the next sound's first frame. The reset now forces a codec reopen, which actually discards the history.
  • Clean audio-worker shutdown (drain with a timeout before the last-resort terminate).
🏆 Achievements — press F7

Achievement support with unlock toasts ships in the runtime (thanks to the upstream SDK community). Press F7 in-game to open the achievement list and your unlock progress. Unlocks are tracked locally and persist across sessions — there is no Xbox Live, nothing leaves your machine.

🧹 Housekeeping
  • The in-game log no longer floods: per-frame diagnostic lines are gated behind opt-in cvars, and the VFS "entry not found" lines (the game legitimately probing save-backup names) dropped to debug level.
  • The F4 settings overlay no longer lists dead experimental cvars — the retired native-render experiment left the build entirely (−22,000 lines).
  • The non-functional DoF-scale scaffolding was removed rather than shipped broken.
What this does NOT include (yet)
  • DoF disable — still open; the previous patch approach was confirmed to write FName metadata instead of the actual blur values.
  • In-game audio volume sliders — still queued (Coalesced SoundGroups rewrite).
  • XMA loop-wrap fix (looped ambience silences its last 192 samples per loop) — the fix exists upstream but replaces the decoder's output stage; ours is heavily customized, so it needs a dedicated session with listening tests.
  • The bigger thing this release clears the deck for.

Older releases: docs/CHANGELOG.md.


Preview

Murphy at the Silent Hill signYard / twilight
Murphy at the Silent Hill sign, 60 FPSYard twilight, 60 FPS
Bedroom — Ukrainian localization in-gameRusty key pickup — Ukrainian item description
Bedroom dialogue, 60 FPS, UkrainianRusty key pickup, 60 FPS, Ukrainian

What is this?

DownpourRecomp is a native Windows port of Silent Hill: Downpour (Konami / Vatra Games, Xbox 360, 2012). The original Xbox 360 game is converted into a regular Windows program — once and for all, at build time — so it runs on your PC the same way as any other Windows app.

If you've used Xenia or RPCS3 before, this is not that. There is no emulator, no JIT translator, no per-frame interpretation overhead. The PowerPC code in the original binary is translated into native x86-64 C++ ahead of time, then linked against a small host runtime that handles the Xbox-specific parts (input, kernel calls, GPU command processor, EDRAM). The result is a real downpour.exe that boots like any other game.

This technique is called static recompilation — the same idea behind N64: Recompiled, Skate 3 Recomp, and DPRecomp (the same author's Deadly Premonition port). DownpourRecomp uses the ReXGlue SDK — a Xenia-derived Xbox 360 host runtime — as the foundation.

Silent Hill: Downpour never received an official PC release; this project exists to be that release: a native Windows process, full mouse + keyboard support, 60 FPS, and the entire CPU side running at native x86-64 speed.

[!NOTE] You provide your own legally-owned copy of the game. The release zip is the host shell only. It does not contain default.xex, game data, music, or any Konami / Vatra assets. See What you need before playing.

How this was built — transparency note (AI assistance)

This project uses AI assistance (Claude Code) alongside hands-on reverse-engineering and engineering work. Where the line falls:

Hands-on work that drove every key decision: Ghidra reverse-engineering of the base XEX and TU1 PE; RenderDoc captures and pixel-history bisection (chromatic-noise fix, DXT5 alpha forensic); ~55 instrumented playtest sessions with frame-time logs analysed by hand; A/B testing every render-path decision; manual identification of community recipes. The test bench is real and named honestly: Intel Core i5-13400F + RTX 5070 + Win 11.

Where AI assistance was used: C++ implementation of SDK additions once the design was decided; HLSL shader writing; CMake/build automation; documentation drafts. Every word reviewed by a human before merging; technical claims grounded in real measurements or captures.

Never delegated: what renders incorrectly and what the user actually sees; what ships and what doesn't (broken experiments get reverted byte-perfect, not left in); architecture trade-offs.

If something feels off about a claim in these docs, open an issue — we'll back it up with the underlying capture / log / measurement, or correct the docs.

Comparison vs Xenia and the Xbox 360
Xbox 360 (original)Xenia emulatorDownpourRecomp
Resolution720p (HDMI)up to 4K (DSR)up to 4K, native 1080p default + 2× SSAA
Frame rate30 FPS30 FPS (UE3 cap)60 FPS unlocked (recompile-time patch)
InputXbox 360 controller onlyXInput controllersXInput + native mouse & keyboard
First-run setupdiscdumped XEX + game datayour own ISO → built-in installer wizard
Settings UIin-game options menuXenia F11 / config filesstandalone launcher + in-game F4 overlay
CPU executionPowerPC nativeDynamic recompiler (JIT)Statically recompiled to native x86-64
CPU requirementn/aAVX-capableany x86-64 CPU with SSSE3 (v1.1.7+)
Shader cachen/arebuilds per-driver-updateships pre-warmed (~1,370 PSOs)
AchievementsXbox Livenolocal unlocks + toasts, F7 list (v1.1.7+)
Colour gradeas authorednone7 ASC-CDL presets
Portable layoutn/a%AppData% / OS pathssaves + cache stay in the game folder
Modding hooksnonelimitedC++ source-level hooks

What you need before playing

The download is the application only. You bring the game:

  1. A legally-owned copy of Silent Hill: Downpour for Xbox 360 — disc, digital download, or backup of either. Region USA or EUR (title id 4B4E0823, base XEX hash 7A3D5809776EE6AB).
  2. A dump of that copy — since v1.1.7 a plain ISO of your disc is enough: the first-run wizard extracts everything itself (Redump / XGD3 / raw layouts auto-detected) and stages Title Update 1 for you. Pre-extracted file trees from older versions keep working as before.
  3. A Windows 10/11 x86-64 PC with a D3D12-capable GPU (RTX 30-series or equivalent recommended for 1080p 60).

[!IMPORTANT] Do not ask in the issue tracker or anywhere else where to get the game. Bring your own legally-acquired copy.

How to install and play

  1. Download the latest release zip: DownpourRecomp →
  2. Extract it somewhere with read/write access (e.g. C:\Games\DownpourRecomp\).
  3. Double-click PlayDownpour.exe and hit Play.
  4. First run: the installer wizard asks for your game dump — point it at your ISO (or an already-extracted assets/ tree) and, when prompted, at your default.xexp Title Update file (or let it download TU1). Extraction is resumable if interrupted.
  5. Play. First boot compiles the GPU-vendor shader library (~13 s on an RTX 5070); every subsequent boot is instant.

In-game: F4 — settings overlay (hot-reloadable cvars), F7 — achievements, F3 — diagnostics. The launcher's tabs (Graphics / Mouse / Controls / UE3 Engine / Debug) cover the same settings with sliders, and write them to downpour.toml next to the executable.

The layout is portable: saves, config, and the warm shader cache all live in the game folder. Move the folder — everything moves with it.

Default controls (mouse + keyboard)
ActionDefault keyNotes
MoveW A S DLeft-stick emulation
CameraMouseRaw-input mouse look (v1.1.7 semantics)
AttackLMBGamepad X
BlockRMBGamepad Y
Throw / shoot (RT)LMBRight-trigger chord
Lock-on / aim (LT)RMBLeft-trigger chord
Run / sprintShiftRight-shoulder
Look backZLeft-shoulder
Interact / selectEGamepad A
Cancel / drop itemGGamepad B
FlashlightFLeft-stick press
Zoom cameraMMBRight-stick press
Inventory / heal↑ (or 1)D-Pad up
D-Pad down / left / right↓ ← → (or 2 3 4)
Open journalTabGamepad Back
Pause menuEscGamepad Start

DualSense (PS5): full support over USB and Bluetooth, Level-1 adaptive triggers on by default (Weapon-mode RT with a click-point break, Feedback-mode LT). All 9 trigger parameters exposed in the launcher's Controls tab. Xbox controllers work out of the box.

Rebinding: launcher → Controls tab — every action is a text field (W, LMB, Up, Shift, …). Saved straight into downpour.toml.

Runtime configuration reference (downpour.toml excerpt)

For most users the launcher's tabs cover everything. Power-users who edit downpour.toml directly — the key shipped defaults:

# ===== Render path & quality =====
render_target_path_d3d12 = 'rov'      # auto-pinned to 'rtv' on AMD by the launcher
resolution_scale = 2                  # 2x SSAA (auto-seeded to 1 on <8GB VRAM)
anisotropic_override = 5              # 16x AF
swap_post_effect = 'fxaa'
skip_depth_color_7e3_aliasing_transfers = true   # chromatic-noise fix

# ===== Present =====
present_effect = 'fsr3'
d3d12_present_frame_limiter = true
d3d12_present_frame_limiter_fps = 60.0

# ===== 60 FPS lock =====
video_mode_refresh_rate = 120.0       # guest expects half-vblank ticks
vsync = true

# ===== Shader-compile stutter control =====
pso_missing_policy = 'skip'
d3d12_pso_no_block_at_submission_end = true
d3d12_pso_library_enable = true

# ===== Input =====
mnk_mode = true
mnk_capture_mouse = true
mnk_use_raw_input = true              # v1.1.7 raw-input mouse look
mnk_raw_input_scale = 0.6
mnk_stick_scale = 800.0
mnk_deadzone_compensation = 4000
mnk_invert_y = false

# ===== Correctness pins (do NOT flip) =====
readback_memexport = true             # required for HUD text
gpu_allow_invalid_fetch_constants = false

The launcher round-trips this file non-destructively — keys it doesn't recognise are preserved.


Frequently asked questions

Is this an emulator?

No. An emulator runs the original Xbox 360 instructions on a virtual CPU at runtime. DownpourRecomp converts the Xbox 360 instructions into native x86-64 code at build time, so what you run is a real Windows executable. The game is "re-translated" once, not interpreted on every frame.