Repository navigation
Releases: h714je/ZachFix
Release list
ZachFix v0.2.6
ZachFix v0.2.6
This is a maintenance release focused on timing, legacy input stability, startup behavior, and D3D9 reset compatibility.
Fixes
- Fixed the vanilla long-session QPC/x87 precision failure by running the affected native timer helpers in scoped x87 PC53 and restoring the caller's precision state afterward.
- Fixed pathological legacy WinMM polling where repeated
JOYERR_PARMSresults could cause DirectInput registry-handle growth, high kernel CPU usage, and severe FPS loss. Affected joystick slots are now suppressed until device configuration changes and are then revalidated. - Added a runtime Skip Intro patch for verified Steam 1.01b and GOG builds. The game executable is not modified on disk.
- Fixed windowed D3D9 Reset handling by forcing stale fullscreen refresh-rate values to
0, matching the D3D9 windowed presentation contract.
Experimental
- Clarified the experimental Aim FPU Precision Fix documentation. The scoped PC24 workaround is known to correct the affected aiming behavior, but the underlying trigger/root cause remains unidentified, so the fix remains disabled by default.
Documentation
- Added guidance for using an external 4 GB / Large Address Aware patch where appropriate.
This release remains part of the conservative 0.2.x maintenance line.
ZachFix v0.2.5
ZachFix v0.2.5
This maintenance release adds several compatibility and stability improvements.
Audio
- Fixed the looping vehicle brake sound that could occur when Windows audio was configured for 5.1 or 7.1 surround.
- Restored the game's native surround routing while preserving vanilla stereo behavior.
- Improved surround-audio initialization and failure handling.
Stability
- Fixed a vanilla movement-update bug where a zero frame delta could produce invalid floating-point values and eventually enter the game's deliberate invalid-float busy loop.
- Zero-delta movement updates now use one nominal 60 Hz tick for the affected calculation.
Display
- Added an internal frame-rate limiter, configurable from the ZachFix settings panel or
ZachFix.ini. - Supports limits from 30 to 240 FPS, or can be disabled entirely.
- Uses QPC-based deadline pacing and applies changes at runtime.
Notes
- The frame limiter is disabled by default.
- Existing external limiters such as RTSS or DXVK configuration remain optional.
ZachFix v0.2.4
v0.2.4 - 2026-10-03
Native Gamepad and SDL3
- Replaced the production XInput-only native controller bridge with a provider-neutral Native Gamepad path.
Backend = Autonow prefers SDL3 and falls back to XInput while preserving DP's existingconfigJ.cnf, action helpers, and CInput pipeline. - Added a pinned SDL 3.4.16 provider, linked statically as the guaranteed runtime fallback. Advanced users can override it with an x86
ZachFix\SDL3.dllthrough SDL Dynamic API; an existingSDL3_DYNAMIC_APIoverride is honored first. - Kept the legacy
NativeXInputINI key as a read-only migration alias. Saving settings writes the currentNativeGamepad/Backendkeys instead.
Input fixes
- Added the opt-in
Experimental.AimFpuPrecisionFix, which forces x87 PC24 precision only while the native mode-2 aim handler runs and restores the caller control word afterward. This remains a best-effort workaround because the reported restricted-aim bug is not locally reproducible. - Added
LowLatencyInput, which moves the native CInput poll before the same-frame input commit while preserving the original fallback path. - Reworked native controller ownership around the controller slot selected by DP, including controller handoff, disconnect, Auto Input Switch, analog LT/RT, combat-strafe input, and vibration lifecycle handling.
- Fixed diagnostic vibration behavior across keyboard/controller transitions, disabled vibration, live strength changes, controller changes, and failed output attempts.
- Preserved a prepared WinMM activity fallback when the native gamepad backend is unavailable.
- Documented Alt+Tab as a practical recovery path for the reported restricted aiming range when the issue occurs.
Save and runtime fixes
- Hardened transactional save handling so failed or incomplete writes cannot commit a bad
dp.sav, while preserving valid synchronous positioned writes. - Fixed Reload INI → Apply → Save so newly loaded non-live settings are not overwritten by stale runtime values.
- Hardened runtime world-setting Hot Apply, including unavailable unchanged settings, effective-state rollback, and restart-required handling after an incomplete rollback.
- Fixed
StretchRectreplacement-surface coordinate handling for empty or invalid rectangles and preserved underlying Direct3D error results. - Fixed fullscreen PostFX state handling for scissor and fill mode.
- Hardened screenshot batch naming and path-length handling.
- Fixed save-backup ordering to use filesystem timestamps instead of local filename timestamps.
- Improved failure cleanup and diagnostics for the restored difficulty selector.
Documentation and research
- Updated save, input, native UI, PhysX, player, timing, and engine-map research alongside the runtime changes.
- Updated SDL3 integration, licensing, installation, build documentation, and third-party attribution.
ZachFix v0.2.3
This release focuses on restoring original gameplay behavior, fixing input and New Game regressions, and hardening ZachFix's runtime patching infrastructure.
Highlights
Fixed New Game difficulty selection
- Fixed the restored native Easy / Normal / Hard difficulty selector being skipped when starting a New Game without an existing save.
- The native selector now works correctly on both the no-save path and the existing-save overwrite path.
- Preserves the game's native per-save difficulty state.
Restored original Xbox combat strafe
- Restored the original Xbox 360 combat-only LB/RB strafe ingress into the preserved PC movement states.
- Preserves the original capability and player-state gating.
- Requires Native XInput with the Xbox 360 input profile.
- Disabled by default and available through
Gamepad.RestoreCombatStrafe.
Input and controller fixes
- Fixed several Native XInput ownership and input-mode transition issues.
- Prevented Xbox 360 aim deadzone processing from leaking into mouse-look after switching back to keyboard/mouse.
- Improved vibration state handling when changing input devices.
- Fixed the analog vehicle-control trampoline to preserve the native x87 instruction sequence and FPU stack behavior.
- Fixed F10 Reload/Apply handling for
RestoreCombatStrafe. - Made the F10 vibration diagnostic non-blocking and safer across controller changes.
Runtime stability
- Hardened MinHook rollback and residual-hook handling.
- Added validation for the Direct3DCreate9 IAT target before applying known-build patches.
- Improved validation for world-distance configuration values.
- Fixed Additional DoF Blur resource handling across D3D9 device reset.
- Improved screenshot comparison-state restoration and reporting.
Engine research and cleanup
- Reconciled and expanded the reverse-engineered engine map.
- Added detailed CEffect / CRdObjectEffect / XWP architecture documentation.
- Cross-checked the fixed-effect timing path against the original Xbox 360 executable.
- Removed retired experimental PhysX timing, vehicle cadence, solver telemetry, and player motor/brake runtime code.
- ZachFix continues to leave native physics timing untouched while the remaining timing questions stay research-only.
Quick Turn and CEffect timing modification remain research-only and are not enabled in this release.
SHA-256
ZachFix-v0.2.3-win32.zip
2D569368A0057FE20A36408B899B782B0F77B73DF1158634C7A4E0B6A7B77AFF
ZachFix v0.2.2
ZachFix v0.2.2
This update focuses on visual comparison/restoration tools, world visibility controls, and renderer cleanup.
Highlights
Comparison screenshot workflow
ZachFix now includes a built-in workflow for making repeatable A/B screenshots without manually changing settings between captures.
- Added switchable screenshot presets configured directly in
ZachFix.ini. - Presets can start from either the live-switchable original PC rendering state or the user's configured ZachFix state, then override selected rendering, world, and PostFX settings.
- Added lossless final-backbuffer PNG capture.
- Default hotkeys:
- F6: cycle screenshot presets
- F7: capture the current frame
- F8: capture all configured presets as a timestamp-matched comparison set
- Capture All restores the exact live rendering/PostFX state that was active before the batch.
- Optional gameplay-timer freezing is available for fixed-framing comparisons, but remains disabled by default because freezing gameplay timers can hang some cutscenes.
- Restart-only state, such as shadow depth format and already-loaded texture ownership, is intentionally excluded from the live
Originalpreset.
World visibility distance
Added native main-frustum distance controls for the camera classes responsible for several shorter-distance scene elements.
Available modes:
- Original
- Extended: 1000 minimum far plane
- Extended Plus: 5000 minimum far plane
- Extreme: 20000 minimum far plane
Only the native far-plane values for camera classes 3/4/5 are redirected. Object classification, streaming, activation, LOD selection, frustum testing, shadow volumes, and render submission remain handled by the game.
The temporary research probes used to identify this path have been removed from the production build.
Xbox 360 tone and display restoration
Added two new runtime-switchable color/output controls under F10 -> PostFX -> Color.
PostFX.Color.Mode:
PCXbox360GradingXbox360Full
Xbox360Grading restores the scene-authored ENV Contrast/Pitch/Chroma/Addsub tail. Xbox360Full additionally removes the Director's Cut PC-only exposure scaling from the native final-composite path.
PostFX.Color.DisplayGamma:
PCXbox360HDTV
Xbox360HDTV applies the reconstructed Xbox 360 HDTV display transfer as a late full-frame sRGB decode -> BT.709 encode pass before Present, including the HUD and menus.
Both options are hot-switchable and leave DP.exe unmodified.
Renderer cleanup and optimization
- Centralized persistent PostFX tuning state so config, UI, and renderer paths use one shared runtime source of truth.
- Reduced normal render-hook overhead by gating inactive G-buffer/projection tracking and other PostFX work.
- Cached repeated surface state where possible.
- Enabled interprocedural optimization for supported Release builds.
- Removed completed shader-probe, render-trace, and D3D9 resource-lifetime research tooling from the production build and current diagnostics documentation.
Compatibility
Supported game builds:
- Steam 1.01b
- GOG 1.01b
The existing native D3D9, DXVK, and dgVoodoo2 deployment paths remain supported.
Updating
Replace the previous ZachFix files with the contents of ZachFix-v0.2.2-win32.zip.
Existing ZachFix.ini files can be kept. New settings use safe defaults, so the new Xbox 360 color/output restoration and extended frustum modes do not change the existing PC presentation unless enabled.
See CHANGELOG.md in the release package for the full technical change list.
ZachFix v0.2.1
ZachFix v0.2.1
A small diagnostics-focused maintenance release.
This release adds an opt-in D3D9 Resource Lifetime Audit for investigating the original PC port's rare long-session framerate degradation reports. It does not claim to fix that issue yet; the goal is to make future reports actionable without leaving heavy diagnostics enabled for normal players.
What's new
- Added D3D9 Resource Lifetime Audit under F10 -> Diagnostics.
- The audit is session-only and is never saved to
ZachFix.ini; every game start returns it to OFF. - Starting a capture creates a separate collision-safe
ZachFix-resource-audit-<timestamp>.log, so evidence is not lost when the normalZachFix.logis recreated. - Samples every 30 seconds include FPS, process memory, handles, GDI/USER objects, thread count, D3D9 texture-memory trend, and created/released/live D3D9 resources by type.
- Still-live resources retain creation-site attribution, including
DP.exe+RVAwhen available, so suspicious growth can be traced back to a concrete game code location. - Audit logs identify the DP build, GPU/driver, and privacy-safe D3D9 backend origin to make native D3D9 vs DXVK comparisons easier.
- The broader resource hooks are installed lazily only if the audit is actually used. Normal sessions keep the existing production hook surface.
Notes
- No configuration migration is required from v0.2.0.
- Normal gameplay and rendering behavior are unchanged when the audit is left disabled.
- The audit only tracks resources created after recording starts.
IDirect3DDevice9::GetAvailableTextureMem()is logged as a trend only, not as exact VRAM usage.
All restoration, controller, save-safety, world, rendering, PostFX, and compatibility work from v0.2.0 remains included.
ZachFix v0.2.0 - Restoration Update
ZachFix v0.2.0 — Restoration Update
ZachFix v0.2.0 is a major restoration and stability release for Deadly Premonition: The Director's Cut on PC.
This release goes beyond rendering fixes and compatibility work. Several native game systems that survived in the PC executable but were disabled, damaged, or bypassed by the Director's Cut port have now been restored and integrated into ZachFix.
Highlights
Native difficulty restored
The original Easy / Normal / Hard New Game difficulty selection has been restored using the game's surviving native difficulty state and combat logic.
ZachFix does not emulate difficulty through custom damage multipliers. The game once again stores and consumes its original 0 / 1 / 2 difficulty values through the native save record and surviving gameplay tables and branches.
Continue preserves the saved difficulty normally.
Native controller support improvements
The native controller path has received substantial restoration work:
- native XInput bridge;
- independent LT / RT support;
- original two-channel vibration restored;
- exact native 16-bit rumble values preserved;
- Xbox 360-style input profile;
- optional analog vehicle triggers;
- automatic keyboard/mouse and controller input switching;
- permanent vibration test available from the F10 diagnostics UI.
Director's Cut interior visibility fix
Fixed the Director's Cut visibility-volume regression that can make objects such as the pillows near the bedroom mirror disappear.
The normal frustum culling path remains native. ZachFix bypasses only the confirmed broken interior visibility-volume rejection.
The runtime toggle now uses a one-time bridge installed during startup. F10 changes only a data flag and no longer rewrites executable code while the game is running.
World rendering controls
Added native world-detail and object-activation controls.
The original PC object activation radius is preserved as the default, while ZachFix can optionally extend the distance at which world objects become active.
Rendering and Hot Apply hardening
Runtime rendering changes received a substantial stability pass:
- replacement render resources are safely retired before D3D9 Reset;
- stale resource identities are discarded across device generations;
- COM replacement lifetime is protected against Hot Apply/render-thread races;
- filtering state is rebuilt after a successful Reset;
- D3D9 hook installation is now transactional;
- renderer hooks are scoped to the actual Deadly Premonition D3D9 device;
- unrelated overlay, capture, or injector devices pass through untouched.
Configuration cleanup
Startup and F10 Reload now use the same canonical configuration parser.
Validation, defaults, enum parsing, aliases, and invalid-value handling are therefore consistent regardless of when the INI is loaded.
Steam and GOG build-specific addresses have also been consolidated into the central build profile.
Diagnostics overhead reduced
Diagnostic features now stay out of the normal game path when unused:
- Tuning Pause timer hooks are installed lazily only when the feature is actually enabled;
- Shader Probe draw notification has a cheap inactive fast path.
Supported versions
- Steam 1.01b
- GOG 1.01b
Both builds use dedicated verified build profiles.
Notes
ZachFix continues to favor narrow restoration of confirmed native behavior over broad bypasses, guessed gameplay coefficients, or permanent research hooks.
Some diagnostic options remain intentionally advanced and are not required for normal gameplay.
Upgrade
Replace the previous ZachFix files with the files from the v0.2.0 package.
Review ZachFix.ini if upgrading from an older release, especially if you previously used experimental or prerelease settings.
ZachFix v0.1.1-rc1 - Native Difficulty Restoration
ZachFix v0.1.1-rc1 - Native Difficulty Restoration
This release starts the 0.1.1 prerelease line and supersedes v0.1.0-rc10.
There are no gameplay or compatibility changes relative to RC10. The same native-difficulty restoration and per-difficulty save-profile implementation has been rechecked successfully on both supported Steam 1.01b and GOG 1.01b executables.
Native difficulty restoration
Deadly Premonition's surviving native Easy / Normal / Hard difficulty system is restored through a startup command-line switch:
-zachfix-difficulty=0 Easy
-zachfix-difficulty=1 Normal
-zachfix-difficulty=2 Hard
If no switch is supplied, ZachFix uses Easy, preserving the default Director's Cut behavior.
The selected difficulty is enforced through the game's native difficulty state. ZachFix does not introduce custom health or damage multipliers.
The active difficulty is shown in the F10 menu as read-only information and cannot be changed during a running session.
Separate save profiles
Each difficulty uses an independent save directory:
savedata\easy\dp.sav
savedata\normal\dp.sav
savedata\hard\dp.sav
This prevents persistent world state created on one difficulty from being silently reused by another.
Existing Director's Cut saves remain usable. On the first Easy-profile launch, if savedata\easy\dp.sav does not exist but the original savedata\dp.sav does, ZachFix copies the legacy save into the Easy profile and leaves the original untouched.
Users may manually copy a save into another difficulty profile. ZachFix does not automatically migrate persistent world state from one difficulty to another.
Save Safety integration
Transactional Save Safety and compressed rolling backups are separated by difficulty:
ZachFix\save_backups\easy\
ZachFix\save_backups\normal\
ZachFix\save_backups\hard\
Each difficulty therefore keeps its own independent backup history.
Supported builds
Tested successfully with:
- Steam 1.01b
- GOG 1.01b
As with all release candidates, keeping external backups of important saves is still recommended.
ZachFix v0.1.0-rc.9
ZachFix v0.1.0-rc9
RC9 is focused on controller fidelity and native vibration. It brings the PC Director's Cut input path much closer to the original Xbox 360 behavior while deliberately keeping the more modern Director's Cut control routing, including aiming on the right stick.
Highlights
Xbox 360 gamepad profile
- Added a hot-applicable
Gamepad.InputProfile = PC | Xbox360switch. PCpreserves the Director's Cut stick evaluator, secondary filtering, slew, and aim shaping.Xbox360restores the confirmed Xbox 360 stick normalization: raw deadzone7864with exact scale0x38286CF7.- The Xbox 360 profile bypasses the confirmed PC secondary
+/-16 / 109filter and0.5slew layer. - Restored the original Xbox aim shaping at the confirmed live-aim consumers:
0.25deadzone followed by4/3renormalization. - Aiming intentionally remains on the right stick, matching the Director's Cut routing rather than restoring the original Xbox left-stick aiming layout.
- Ordinary LT/RT action bindings now use the original Xbox digital trigger threshold: raw
0..30is released and31..255is pressed.
Analog vehicle LT/RT
- Added independent hot-applicable
Gamepad.AnalogVehicleTriggers. - Restored all three confirmed Xbox 360 analog throttle/brake consumers.
Gamepad.VehicleTriggerDeadzone = 30matches the original Xbox threshold. Values at or below the threshold are zero; surviving values remainraw / 255without post-deadzone renormalization.- Disabling the option immediately returns vehicle throttle/brake to the vanilla PC digital path.
Native two-channel vibration
- Restored Deadly Premonition's surviving native two-channel rumble path through XInput instead of inventing new per-event vibration effects.
- Preserved DP's native effect timing, duration/countdown, channel balance, and automatic stop behavior.
- Added hot-applicable
Gamepad.VibrationandGamepad.VibrationStrength. - Preserved the original full 16-bit A/B actuator amplitudes. The PC port truncates actuator B with
>> 6; ZachFix now captures the synchronous native actuator command before that loss and publishes the exact original 16-bit pair toXInputSetState. - Controller disconnects and controller-index changes stop active motors safely.
Controller glyph themes
- Rebuilt the bundled Xbox and PlayStation themes from CC0 Kenney Input Prompts artwork.
- Added bundled Steam Deck and Nintendo Switch themes.
- Standardized glyph sizing and corrected Nintendo face-button labels while preserving Deadly Premonition's semantic action slots.
- Documented the validated 1024x1024 gamepad atlas regions for custom theme authors.
Compatibility
RC9 continues to support both 32-bit Deadly Premonition: The Director's Cut 1.01b executables from the same ZachFix.asi:
- Steam 1.01b
- GOG 1.01b
Build-specific hooks remain signature-gated and fail closed on unsupported or mismatched executables. Native D3D9, DXVK, and dgVoodoo2 remain supported paths.
Configuration notes
New/default controller options are available under [Gamepad]:
[Gamepad]
NativeXInput = false
InputProfile = Xbox360
AnalogVehicleTriggers = true
VehicleTriggerDeadzone = 30
Vibration = true
VibrationStrength = 1.0InputProfile, analog vehicle triggers/deadzone, vibration, and vibration strength can be changed from the F10 UI without restarting the game once Native XInput is active.
When upgrading an existing installation, keep any personal configuration choices you want to preserve rather than blindly replacing a customized ZachFix.ini.
ZachFix v0.1.0-rc8
ZachFix v0.1.0-rc8
ZachFix is an unofficial fix and modernization layer for Deadly Premonition: The Director's Cut PC version 1.01b.
Supported game builds
- Steam 1.01b
- GOG 1.01b
The same ZachFix build supports both versions. ZachFix automatically identifies the installed DP.exe; no Steam/GOG configuration option is required.
What's new in RC8
GOG 1.01b support
RC8 adds first-class support for the GOG 1.01b executable alongside the existing Steam 1.01b build.
Build-sensitive hooks now use centralized executable profiles containing the appropriate RVAs for each supported game executable. Individual hooks continue to verify their expected instruction signatures before patching.
Unknown executables fail closed instead of receiving addresses intended for a supported build.
Steam and GOG compatibility
Both supported executables have been tested with the same RC8 build.
Verified functionality includes:
- early
Direct3DCreate9interception - Native XInput support
- automatic keyboard/mouse and controller switching
- runtime world-detail handling
- vanilla zero-delta speed NaN protection
- transactional Save Safety
- compressed save backups
- texture overrides
- dynamic keyboard and gamepad glyph themes
- resolution and rendering improvements
- PostFX
- fullscreen and borderless handling
The zero-delta protection has also been confirmed to trigger during real gameplay on both Steam 1.01b and GOG 1.01b.
DXVK and dgVoodoo2 compatibility paths have both been exercised with RC8.
Stability logging
Repeated zero-delta 0/0 prevention events are now aggregated during sustained bursts to avoid flooding ZachFix.log.
The actual stability fix is unchanged. It still intervenes only in the confirmed exact distance == 0 && frameDelta == 0 case.
Installation
Download ZachFix-v0.1.0-rc8-win32.zip and extract it into the Deadly Premonition installation directory.
The release package includes:
scripts\ZachFix.asiZachFix.ini- keyboard and gamepad glyph resources under
ZachFix\glyphs\ - README and CHANGELOG
- third-party license information
Keeping the complete package together is recommended so that the binary, configuration and bundled resources remain in sync.
Supported game version
ZachFix RC8 targets:
Deadly Premonition: The Director's Cut PC version 1.01b
| Distribution | Supported version |
|---|---|
| Steam | 1.01b |
| GOG | 1.01b |
Other PC executables are not currently supported unless explicitly listed.
SHA-256
ZachFix-v0.1.0-rc8-win32.zip
DB69850B4152370AE3CCEF05AD348A94EAE402CDCD0E90CDFB3C5210CA839127
Full technical changes are documented in CHANGELOG.md.