Releases: LittleBitUA/DownpourRecomp
v1.1.6 — pre-update save backup + raw-input toggle + launcher sliders
Critical hotfix on v1.1.5
🛟 Pre-update save backup (the headline)
After a community report of save-data loss during the v1.1.4 → v1.1.5 auto-update — the PowerShell update script provably never deletes user data (copies only six specific binaries over the install, never touches user/ or downpour.toml), but one user lost everything anyway — every auto-update from v1.1.6 onward now snapshots user/ + downpour.toml + launcher.ini into %TEMP%\dpr_user_backup_v<your-current-version>.zip BEFORE applying any binary copy. If anything ever wipes your saves again, that zip is your one-click restore.
🐭 New Mouse setting — Use Raw Input (default ON)
High-DPI gaming mice (16,000+ DPI) reported the v1.1.2+ raw-input path felt worse than v1.1.1 after every cvar tuning attempt. Settings → Mouse → "Use Raw Input" checkbox lets you fall back to the v1.1.1 WM_MOUSEMOVE + Windows-pointer-ballistics path with one click. Every user can now find a working feel regardless of DPI.
🎛️ Launcher sliders
Mouse Sensitivity, Smoothing, Acceleration Curve, Stick Decay, Raw Input Scale, Stick Scale, Deadzone Compensation, DualSense trigger parameters, resolution scale, FPS cap, and UE3 shadow/anisotropy/LOD-bias controls now have a draggable Win32 trackbar paired with the existing numeric edit field — like every native game's settings screen. Type a precise value OR drag the slider. Window Width / Height keep the plain numeric field (exact resolution matters).
🎵 Launcher music controls
Settings → Advanced now has Launcher Music Volume (0-100%, default 25%) and Mute Launcher Music (checkbox). The intro music's old default was full volume, which several users called out as loud. Persisted in launcher.ini so the choice survives across releases.
Smaller fixes
- Version-comparison bug — pre-v1.1.6 the "Update available" pill banner used raw string equality (
v1.1.5 != v1.1.6→ banner showed). v1.1.6 parses both into(major, minor, patch)tuples and compares element-wise; banner only fires if the GitHub tag is actually newer. - Window Width / Height excluded from the new slider system (typing
1920is faster than dragging to ~1920 anyway). - Win11 taskbar / Alt-Tab caption + PE
VERSIONINFObumped to1.1.6.0.
What this does NOT include
- DoF disable — community contributor
bomaconfirmed our approach (open bothdefault.pe.binTU0 +default.tu1.pe.binTU1 in Ghidra, find the same function shape, remap addresses). We located thebEnableDOF+DOF_BlurKernelSizeregistration blocks in TU1 at0x832ed1f0and0x832ed230, but the actual default values live in compile-time C++ static initializers / cook data, not in the UE3 property storage cells. A proper fix needs either theelasota/liblzxX360 LZX encoder integration (~4-8h) or a runtime hook onFunction_82363CB0to detect BlurKernelSize registration and overwrite the runtime value (~2-4h). Slotted for v1.1.7. - In-game audio volume sliders — Coalesced has the full
[Engine.AudioDevice]SoundGroups hierarchy (Master / Music / SFX / Dialog / Cinematic / etc.) but our launcher's Coalesced patcher only handles flat[SystemSettings]keys. Patching SoundGroups means variable-length FString rewrite + chunk-offset bookkeeping — ~2-3h focused session. Also v1.1.7.
Auto-update
Already on v1.1.x? Launch PlayDownpour.exe, click the pill banner. v1.1.6 installs in place AND creates your first backup zip in %TEMP%.
Silent Hill: Downpour v1.1.5 (cosmetic)
What's new in v1.1.5
Cosmetic patch on v1.1.4 — surfaces the actual shipping version everywhere it should have appeared all along.
Fixes
- Window title (taskbar / Alt-Tab / Win11 jump-list) now shows the shipping version:
Silent Hill: Downpour v1.1.5 | «Little Bit». Through v1.0 → v1.1.4 the title was hardcoded once at v1.0 ship time and never updated, so every subsequent release looked like v1.0 in the taskbar even though the binaries were newer. - In-canvas top-right corner version label now reads from the same constant as the auto-update probe (
kLauncherVersion). Previously hardcoded toDPourLauncher v1.0and forgotten about. - PE VERSIONINFO resource bumped from
1.0.0.0→1.1.5.0. Visible in File Properties → Details on Windows.
Future releases auto-update the title everywhere — only kLauncherVersion in main.cpp and the four version fields in resources.rc need to be bumped.
Upgrade path
Same as before: launch PlayDownpour.exe, click the pill banner. Settings / saves / shader cache preserved.
🤖 Generated with Claude Code
Silent Hill: Downpour v1.1.4 (mouse saturation root-cause fix)
🐭 Mouse tuning guide
Everything below is user-tunable in launcher → Settings → Mouse. Save & Close, relaunch the game.
What each field does
| Field | What it controls | Sensible range |
|---|---|---|
| Mouse Sensitivity | Linear multiplier on turn rate | 0.6 (deliberate) – 3.0 (twitchy). Default 0.7. |
| Mouse Smoothing | EMA filter — higher = smoother but laggier | 0.05 – 0.20. Default 0.10. |
| Mouse Acceleration Curve | 1.0 = linear. >1.0 = small motions slow, fast flicks amplified |
Default 1.0. Try 1.3 – 1.8 if you want acceleration. |
| Stick Decay (after stop) | How fast the stick re-centres when the mouse stops | 0.05 – 0.20. Default 0.10. |
| Deadzone Compensation | Smooth ramp so tiny motions still cross the stick deadzone | Default 4000. |
| Invert Mouse Y | — | Off by default. |
| Raw Input Scale (mouse) | Pre-multiplier on raw HID counts. Calibrate to your mouse DPI. | See table below. Default 0.20. |
| Stick Scale (advanced) | Mouse-to-stick base multiplier | 150 (default) – 1500 (full bypass for Wine / VM). |
Raw Input Scale by mouse DPI (with default Stick Scale 150)
| Your mouse DPI | Try this Raw Input Scale |
|---|---|
| 3200+ DPI gaming mouse | 0.08 – 0.15 |
| 1600 DPI gaming mouse | 0.15 – 0.30 (default region) |
| 800 DPI mouse | 0.30 – 0.60 |
| 400 DPI office mouse | 0.70 – 1.50 |
Recommended tuning sequence
- Set Sensitivity to
1.0(sane baseline). - Set Smoothing to
0.10and Stick Decay to0.10if you upgraded from v1.0 / v1.1 / v1.1.1 — those had0.15/0.30as defaults and the launcher preserves your existing values across upgrade. - Set Raw Input Scale from the table above based on your mouse DPI.
- Save & Close → relaunch game → sweep camera in an open area.
- Still too slow / fast?
- Slow → bump Sensitivity (
1.0 → 2.0 → 3.0), or bump Raw Input Scale one notch up. - Too fast → drop Sensitivity (
1.0 → 0.6), or drop Raw Input Scale one notch down.
- Slow → bump Sensitivity (
- At max settings and STILL too slow? Bump Stick Scale from
150to300/500/1500. Each doubling makes the whole pipeline twice as fast. Also the lever for Wine / VM setups whereWM_INPUTraw mouse isn't being delivered.
Direct toml edit (alternative)
Edit downpour.toml next to PlayDownpour.exe. Example "fast and responsive" preset for a 1600 DPI mouse:
mnk_sensitivity = 2.0
mnk_smoothing = 0.08
mnk_decay = 0.08
mnk_acceleration_exponent = 1.2
mnk_raw_input_scale = 0.25
mnk_stick_scale = 200.0Relaunch game. All cvars hot-reload on next process start.
What's new in v1.1.4 — actual root-cause fix for "mouse very slow"
v1.1.3 only tuned raw HID count calibration; it left the bigger problem in place — a hardcoded kBaseScale = 1500 multiplier inside the SDK's MnK driver. The right-stick pipeline is:
stick_target = curved(mouse_dx_) × mnk_sensitivity × kBaseScale
stick_value = clamp(stick_target, -32767, +32767) ← int16 saturation
With kBaseScale = 1500 and mnk_raw_input_scale = 0.5, 1 mm of physical mouse motion at 1600 DPI produced a stick_target of ~280,000 — saturated to 32,767. Setting mnk_sensitivity = 6.0 only made the pre-clamp value bigger; the saturated output was identical. Community report "sensitivity 6.0 = no change" was accurate: sensitivity has no effect past saturation.
Fix
kBaseScale becomes the user-tunable cvar mnk_stick_scale (default 150, 10× lower than the v1.1.3 constant; range 10 – 3000). mnk_raw_input_scale default 0.5 → 0.20.
New magnitude table on a 1600 DPI mouse:
| Mouse motion | mouse_dx_ | stick at sens 0.6 | stick at sens 3.0 |
|---|---|---|---|
| 0.5 mm | 6 | 540 (1.6 %) | 2,700 (8 %) |
| 1 mm | 13 | 1,170 (3.6 %) | 5,850 (18 %) |
| 1 cm | 126 | 11,340 (35 %) | saturated |
| 3 cm | 378 | saturated | saturated |
Sensitivity now controls slope from deliberate (0.6) to twitchy (3.0). Mouse hardware DPI tunes via Raw Input Scale.
🤖 Generated with Claude Code
Silent Hill: Downpour v1.1.3 (mouse calibration hotfix)
🐭 You can tune the mouse to your hardware
If mouselook feels too slow or too fast after upgrading, open the launcher → Settings → Mouse → "Raw Input Scale" and adjust:
| Your mouse DPI | Try this scale |
|---|---|
| 3200+ DPI gaming mouse | 0.20 – 0.35 |
| 1600 DPI gaming mouse | 0.40 – 0.65 (default 0.5) |
| 800 DPI mouse | 0.70 – 1.20 |
| 400 DPI office mouse | 1.50 – 3.00 |
Lower = slower, higher = faster. The same Settings tab also lets you tune Sensitivity, Smoothing, Stick Decay, Acceleration Curve, Deadzone Compensation, and Invert Y. Press Save & Close and relaunch.
What's new in v1.1.3 (mouse-calibration hotfix)
v1.1.2 introduced WM_INPUT raw-mouse plumbing in the SDK and applied a hardcoded divide by 8 on raw HID counts to match the magnitude of WM_MOUSEMOVE pixel deltas. The premise: an 800 DPI mouse → ~800 counts/inch vs ~96 pixels/inch from WM_MOUSEMOVE → ~8x ratio. What the premise missed: Windows applies pointer ballistics ("Enhance pointer precision") to WM_MOUSEMOVE deltas, inflating them at higher velocities. Raw input has no ballistics, so the same divider felt much slower in motion than the pre-raw pixel path. Community report — "mouse very, very slow in game".
Fix: tunable cvar instead of hardcoded divider
mnk_raw_input_scale (default 0.5) replaces the hardcoded /8. Surfaced in launcher Settings → Mouse → "Raw Input Scale" so you can dial to your mouse DPI + preferred feel. Existing mnk_sensitivity keeps its previous semantics — mnk_raw_input_scale is a separate pre-stage that normalises raw count magnitude to the pixel-delta scale that mnk_sensitivity was originally tuned for.
Update path
Existing v1.1.x users: launch PlayDownpour.exe and click the pill notification at the top — v1.1.3 installs in place. Your saves, settings, and warm shader cache are preserved. After upgrade, if mouselook still feels off → use the table above to tune it.
🤖 Generated with Claude Code
Silent Hill: Downpour v1.1.2
What's new in v1.1.2
Community-feedback follow-up to v1.1.1. Three targeted fixes for the largest playtest report we've received so far (RTX 3050 user, full opening hour through first Screamer).
🖱️ Raw-mouse input (WM_INPUT) in the SDK
The SDK's Win32Window now registers for raw-mouse messages on startup and broadcasts sub-pixel HID deltas through a new OnRawMouseInput listener. The MnK driver consumes them once they start arriving and stops accumulating WM_MOUSEMOVE pixel deltas (to avoid double-counting). Result: mouselook on gaming mice no longer feels like the right stick is being dragged through molasses at low cursor velocity — slow movements now produce smooth stick output instead of integer-pixel chunks at monitor refresh rate.
Raw HID counts are pre-scaled by 8 to roughly match the previous pixel-delta magnitude, so mnk_sensitivity values tuned in v1.1.x keep their feel. High-DPI mice (3200+ DPI) can compensate by lowering sensitivity.
Defaults adjusted for the smoother input source:
mnk_smoothing: 0.15 → 0.10mnk_decay: 0.30 → 0.10
Existing users with mnk_smoothing / mnk_decay pinned in their downpour.toml keep their values. To pick up the new defaults: open the launcher → Settings → Mouse, set 0.10 / 0.10, click Save.
🖥️ VSync no longer silently overridden
d3d12_allow_variable_refresh_rate_and_tearing default flipped from true to false. A community NVIDIA RTX 3050 user reported that vsync = true was silently ignored on their setup because the tearing swap-chain path took precedence at present time — they had to engage VSync at NVIDIA Control Panel level just to get tearless presentation.
Trade-off: G-Sync / FreeSync users no longer get VRR pacing by default. Flip it back via launcher Settings → Advanced or by editing downpour.toml directly.
Upgrading from v1.1.1? Your existing toml still has the old = true value pinned. Delete that line from downpour.toml (the launcher will reseed to false), or set it to false directly.
📉 Auto-tune of resolution scale for low-end GPUs
Launcher now reads the primary GPU's DedicatedVideoMemory via DXGI. On GPUs with under 8 GiB (RTX 3050, GTX 1650, Steam Deck Van Gogh APU) or on Intel integrated graphics, fresh installs seed resolution_scale = "1" instead of the default "2" — same community report, RTX 3050 user got "slideshow at 2x" until they manually dropped to 1x. Discrete RTX 30xx 8GB+, RX 6700+, Arc A750+ stay on the sharper 2x default.
v1.1.x upgraders keep their existing toml setting either way — toml round-trip is non-destructive.
Update path
If you're already on v1.1.x: launch PlayDownpour.exe and click the pill notification at the top — v1.1.2 installs in place, preserving saves, settings, and shader cache.
Fresh install: download the zip below, extract, drop your Xbox 360 dump of Silent Hill: Downpour into assets/, and double-click PlayDownpour.exe.
Tested against the USA and Europe Xbox 360 releases (title id 4B4E0823, base XEX hash 7A3D5809776EE6AB). Title Update 1 required.
🤖 Generated with Claude Code
Silent Hill: Downpour v1.1.1
What's new in v1.1.1
A small, focused follow-up to v1.1 (released a few hours earlier today). Three fixes:
⚙️ Settings no longer reset after F4
The launcher now reseeds every managed cvar (launcher_language, user_language, all mnk_*, all keybind_*, all dualsense_*, colour-grade, every Debug-tab cvar) into downpour.toml on boot if missing. This fixes the recurring "language flipped back to Ukrainian" and "my keybinds disappeared" reports — the SDK's in-game F4 SaveConfig drops cvars whose current value equals the SDK default, and v1.1's launcher previously only reseeded perf cvars.
🩺 Auto-updater no longer fails silently
The PowerShell self-replacer now wraps the whole update in try/catch with $ErrorActionPreference = 'Stop', logging step-by-step to %TEMP%\dpr_update.log. On success the log is removed. On failure (corrupt zip, locked file, disk full, etc.) the log stays put, the catch block makes a best-effort relaunch of whatever PlayDownpour.exe is currently in place, and on next launcher boot a dark Yes/No dialog offers to open the log in Notepad.
🚀 SDK: batched memexport readback
The D3D12 memexport readback FastPath used to fall back to FullPath whenever a key's ring-buffer slot wasn't ready — that fallback closed the current submission and AwaitAll-ed before copying out. In heavy UE3 skinning scenes Downpour was doing ~37 of those fallbacks per frame, eating ~1 ms each. v1.1.1 instead defers all such missed reads to ONE end-of-frame AwaitAll + memcpy in IssueSwap. Guest CPU sees fully valid post-GPU data before the next frame begins.
Expected uplift: AMD GPUs (which v1.1+ defaults to the RTV path on, because ROV is broken on RDNA 2) should see ~27 FPS → ~45-50 FPS in skinning-heavy scenes. NVIDIA + Intel users on ROV are unchanged — Case A almost never fires on the warm ROV ring.
Update path
If you're already on v1.1 (or v1.0): launch PlayDownpour.exe and click the pill notification at the top — v1.1.1 will install in place, preserving your saves, settings, and shader cache.
If installing fresh: download the zip below, extract, drop your Xbox 360 dump of Silent Hill: Downpour into assets/, and double-click PlayDownpour.exe.
Tested against the USA and Europe Xbox 360 releases (title id 4B4E0823, base XEX hash 7A3D5809776EE6AB). Title Update 1 is required and the launcher walks you through staging it on first run.
🤖 Generated with Claude Code
v1.1 — auto-update + AMD fixes + cursor + language
v1.1 — polish + community-feedback patches
Polish release on top of v1.0. The headline feature is auto-updates: existing v1.0 users will see a pill-shaped notification at the top of the launcher window — click it and v1.1 is installed in place, no zip-extract required, saves preserved.
🆕 Auto-update
- Boot-time GitHub releases probe → pill notification if a newer tag is available.
- Click → dark-themed confirm dialog → live download progress → hidden PowerShell self-replace.
- Preserves
assets/,user/,logs/,downpour.toml,downpour.toml.backup,launcher.ini. - Refreshes binaries (PlayDownpour.exe, downpour.exe, rexruntimerd.dll, TracyClientrd.dll, gamecontrollerdb.txt, README.txt) and overlays new portable shader cache entries.
🛠️ Render-path fixes
- AMD GPU vendor detection. Steam Deck (Van Gogh RDNA 2) and RX 6000 users reported single-digit FPS and full-screen rendering artifacts on the ROV path. v1.1's launcher reads the DXGI VendorID on first run and defaults
render_target_path_d3d12 = "rtv"on AMD. NVIDIA + Intel installs stay on ROV (still the warm-cache perf winner there). - Shipped
downpour.tomlno longer pins ROV, so the vendor seed actually fires on fresh installs.
🐛 Bug fixes
- Mouse cursor stuck on screen —
mnk_capture_mouseSDK default flipped totrue. Cursor now hides automatically when MnK mode is active and the game window has focus. - Launcher language: English selected, Ukrainian displayed — single-quoted TOML strings (which SDK F4 SaveConfig writes) are now stripped during boot, so the language toggle no longer falls through to a stale legacy
launcher.langsidecar. - First-run main button label — reads
UNPACK GAME/РОЗПАКУВАТИ ГРУuntilassets/default.xexexists, switches toPLAYafter extraction.
🎨 Theme
- Update confirmation + progress + cancel dialogs all use the dark Settings palette (
RGB(24,26,30)+ Bahnschrift / Segoe UI). No more white Win32 MessageBoxes interrupting the title screen.
🧹 Cleanup
native_2x_msaano longer seeded into freshdownpour.toml. Community feedback: UE3 deferred-light-prepass on Xenon uses no guest MSAA, so the cvar only ever toggled host-side 2× vs two-samples-of-4× emulation — neither matters for Downpour.
📚 Documentation
0xc0000142startup-error FAQ entry (Visual C++ Redistributable missing).- Transparency section in README about workflow and AI-assisted vs hands-on work (Ghidra, RenderDoc, ~55 playtests).
🚧 Deferred to v1.1.x / v1.2
- DoF "ефект скла" disable. A community contact gave us BlurKernelSize addresses 0x82837D6C / 0x82837DB4 with a
fsubs f1,f1,f1patch hint. Applied byte-perfect, but DoF persisted — most likely those addresses are base-XEX offsets and our recomp generates from the TU1 PE (the same offsets there hit unrelated integer load / function-call instructions). Reverted byte-perfect. Tracking for v1.1.x once we can map base XEX ↔ TU1 addresses. - DXT5 / BC3 alpha decode bug (asylum kitchen black smoke sprite). EID 7117 forensic complete; ~1-day SDK fix scoped.
- AMD ROV equivalent of the DP1 rainbow-noise fix. Would let AMD users get ROV's perf without artifacts. Scoped at ~4-5 h on a
dp1-mainSDK fork.
How to update
- From v1.0: just open
PlayDownpour.exe. The banner is auto. Or download the zip from this release page and extract over your install (it's safe — user data is left alone by the script either way). - Fresh install: extract the zip, drop your unpacked Xbox 360 game files into
assets/, runPlayDownpour.exe. Requires Microsoft Visual C++ Redistributable x64 — https://aka.ms/vs/17/release/vc_redist.x64.exe.
🇺🇦 MADE IN UKRAINE 🇺🇦
Silent Hill: Downpour v1.0
Silent Hill: Downpour Recomp has been updated!
https://github.com/LittleBitUA/DownpourRecomp/releases
First stable release of Silent Hill: Downpour as a native Windows port.
Tested against the USA and Europe Xbox 360 releases (title id
4B4E0823, base XEX hash7A3D5809776EE6AB). Title Update 1 is required and the launcher walks you through staging it on first run.
Highlights
Performance
- 60 FPS unlocked. Game logic + camera + animation all run at the full guest tick (not capped at 30 like the X360 release).
- ROV warm-cache. ~1,700 PSO descriptions pre-packed; first launch builds the GPU-vendor library locally (~13 s on RTX 5070, then instant on every subsequent boot).
- No per-frame shader compile stutter. New cvar
d3d12_pso_no_block_at_submission_end(default true) skips the render-thread wait on in-flight async PSO compiles. - Memexport readback de-flooding (triple-buffer + targeted fence waits): fence_waits/frame in steady gameplay went from ~18 → 0.
- VRAM-aware texture cache. Launcher auto-tunes soft/hard limits from your GPU's
DedicatedVideoMemory— 12 GB cards get 4096/8192 MB pools, low-VRAM cards get conservative limits.
Launcher
PlayDownpour.exe— standalone GUI launcher, no TOML hand-editing required. Settings round-trip non-destructively.- Tabs: Graphics / Advanced / Mouse / Controls / Debug / UE3 Engine. DualSense adaptive triggers exposed via 9 cvars (USB + Bluetooth both work via SDL3).
- Portable layout: saves + cache live next to the executable, not in
%Documents%/downpour. Drop the folder on a USB stick — your saves come with you. - Linux / Wine support via the font fallback chain (Bahnschrift → Segoe → Tahoma → system sans-serif).
Visuals
- Native ASC-CDL colour grading with 7 presets (identity / cinematic / horror / vivid / noir / warm / cold). Hot-reloadable.
- 2× supersampling default + 16× anisotropic filtering + FSR3 final present.
Quality of life
- Silent by default. Logging fully off (
log_to_file = false,log_level = off) — toggle on via launcher Debug tab when you need a diagnostic capture. - Shader compile overlay is opt-in now, and when enabled it's small + quiet.
- F4 in-game cvar overlay still works for power-users.
What's in this zip
```
PlayDownpour.exe Win32 launcher (10.5 MB)
downpour.exe Statically-recompiled game runtime (106 MB)
rexruntimerd.dll ReXGlue SDK runtime (15.9 MB)
TracyClientrd.dll Tracy profiler client (required by rexruntimerd)
downpour.toml Canonical v1.0 default config
gamecontrollerdb.txt SDL controller mappings
cache/shaders/shareable Pre-packed GPU-portable PSO descriptors
README.txt Quick install + system req notes
```
Total ~35 MB. Game files are NOT included.
Requirements
- Windows 10 1903+ or Windows 11 (64-bit), or Linux via Proton / Wine
- GPU with D3D12 feature level 11_0 (NVIDIA Turing+, AMD RDNA, Intel Arc)
- 8 GB RAM minimum, 12 GB recommended
- Xbox 360 game files (USA or Europe)
- Title Update 1 (installer wizard guides you through staging on first run)
Install
- Extract this zip to any folder with write permission.
- Put your unpacked X360 game files into the
assets/subfolder. - Double-click
PlayDownpour.exe. - First-run wizard walks you through Title Update 1 staging.
- First boot compiles the shader library (~13 s on modern GPUs). After that — instant boots.
Known issues
- Depth-of-field haze still present. UE3 ships
BlurKernelSizeas a baked CDO default in the cooked package, not aconfigproperty — disabling it cleanly requires re-encoding the X360 LZX-wrapped Engine.xxx, which needs an open-source X360 LZX encoder we don't have wired up yet. Deferred to v1.0.1. - Foliage cyan/purple specks on certain mip transitions. Inherent to the Xenia heritage 7e3 → float16 resolve fallback path; fix requires custom DXBC and is queued for v1.0.1.
Credits
Built on Xenia, ReXGlue, and XenonRecomp open-source foundations. Strong community testing + feedback over the v0.1.1 → v1.0 cycle made this possible — thank you.
🤖 Release notes co-authored with Claude Code