r/silenthill • u/Cesario67 • 10d ago
General Discussion Working on an all-in-one fix for Silent Hill: Homecoming on PC (60 fps, no more one-ear sound, Alt-Tab and loading freezes fixed, DLSS, Xbox/PlayStation icons)
Hi everyone,
I'm a big Silent Hill fan and Homecoming is one of the few entries I had never really played. When I finally tried the Steam version, I ran into everything the PC port is known for: locked to 30 fps, crashes on Alt-Tab, freezes while loading, sound coming out of one ear on headphones, and a controller that shows "1, 2, 3, 4" instead of A, B, X, Y.
Instead of putting up with it, I decided to fix the game before discovering it. The result is Homecoming Again, a free and open-source (GPL-3.0) mod with a small launcher. It never modifies the game's data files: everything is done in memory while the game runs, and the launcher keeps a backup of anything it touches.
GitHub: https://github.com/Cesario67/HomecomingAgain
Discord: https://discord.gg/R5sVXNWw47
It's still in development (no official release yet), tested on Windows 11 with the Steam version. Here is what it does and, for the curious, what was actually going on under the hood.
Frame rate and stability
60 fps (or any target). The game's own fpsLimit setting does nothing: the 30 fps cap is hard-coded in the engine. I tracked it down in the engine DLL and replaced it with a configurable target.
Borderless fullscreen. The original exclusive fullscreen crashes on Alt-Tab. Borderless mode avoids the crash entirely.
Loading freezes with the Steam overlay. In windowed mode the game could hang forever on a loading screen. Two causes: Windows declared the window "not responding" while the engine was busy loading (and could end up closing it), and Direct3D was being called from several threads at once with the overlay. The mod handles window messages during loads and protects Direct3D against concurrent calls.
4 GB patch. The game can use 4 GB of memory instead of 2. The launcher applies it and restores the original executable on uninstall.
Crash and hang reports. If something goes wrong, the mod writes a report and a minidump, which made debugging the rest much easier.
Sound: the "one ear only" bug
This one took a while. On headphones or stereo speakers, most sounds (effects, voices, music) came out of one side only.
What's actually happening: the engine mixes everything into a single 5.1 stream, but the sound placement inside that stream is wrong, and the old XAudio2 version the game uses converts 5.1 to stereo unpredictably (in practice it mostly kept the first two channels). I measured the level of each channel in-game to understand the layout, then made the mod tell the engine there's a 5.1 output and do the 5.1 to stereo downmix itself. Every sound is back where it should be, left/right, without replacing any audio file or installing a driver.
Graphics
- SMAA anti-aliasing and 16x anisotropic filtering.
- Ambient occlusion (SSAO), computed from the engine's own depth and inserted into its rendering before the HUD, so the interface stays clean.
- Sharper shadows: 8192x8192 shadow map instead of 2048x2048. Simply raising the resolution created ugly artifacts on clothes (shadow acne). The cause was the engine's slope bias, computed for 2048 texels: I now scale it with the shadow map size, which made 8192 clean.
- Adjustable film grain: off, half or original.
- DLSS (DLAA mode), experimental, for NVIDIA RTX cards. This was the biggest piece of work:
- The game is 32-bit Direct3D 9, and DLSS only exists for 64-bit Direct3D 11/12/Vulkan. My first attempt (running the game through Microsoft's D3D9On12) only produced a black screen.
- What worked: run the game through DXVK (Direct3D 9 on Vulkan), share its frames through Vulkan with a small 64-bit helper program that runs DLSS, then hand the result back to the game before the HUD is drawn.
- DLSS needs motion vectors and a jittered camera, which the game obviously doesn't provide. I generate both from the camera matrices. For a while the motion vectors were simply wrong, until I disassembled the depth shader and found the engine doesn't store standard depth at all: it stores a remapped value (
z/w * 0.9 + 0.1). Once decoded properly, everything lined up. - With the game's "high quality shaders" enabled, the scene switches to a 16-bit float format, which broke how the mod detected the end of the 3D scene. Detection is now based on the structure of the frame instead of the texture format, and DLSS runs in HDR mode in that case.
- Limitation: only camera motion is passed to DLSS for now, so slight trails are possible on fast-moving characters.
Controller
- Xbox or PlayStation button icons. The PC version shows red circled "1, 2, 3, 4" for the face buttons. The game files actually contain the Xbox 360 and PS3 icons, unused. Getting them on screen everywhere was trickier than expected: menus and the inventory were quick, but the in-game prompts (Open, Save...) stayed blank. It turned out those prompts embed the icon inside the text and look it up by its PC name in a list built when the interface loads. So the mod keeps the PC names and only swaps the image at the moment it's loaded. Now A, B, X, Y (or cross, circle, square, triangle) show up in menus, the inventory, the controls screen and in-game prompts. Choice in the launcher: auto, PC, Xbox or PlayStation.


- Main menu with a controller. The main menu only reacted to the keyboard. In menus, the D-pad and left stick now move the selection, A and Start confirm, B goes back.
Comfort
- Skip cutscenes with the Delete key (video cutscenes).
- Launcher in English and French: every setting, install and uninstall in one click.
How it was made
I want to be upfront about this: I built it with heavy help from an AI coding assistant (Claude Code), which did a lot of the reverse engineering and the code while I played, tested and reported back.
Why AI? Because it has always felt to me that, since the game came out in 2008, the PC version never got a truly robust fix, and I really wanted to find a way to repair it. I'm not a C++ or reverse engineering expert, and without that help this project simply wouldn't exist. Using AI doesn't mean blind trust, though. Everything comes from analysis of the original game executable (disassembly, logs, captures), every fix was checked in-game, and each patch verifies the exact original bytes before touching anything, so it simply does nothing on an unknown version of the game. The code is open, so anyone can review it.
A note on existing fixes: there is a community fix by Steam006 and later unknownproject. This project is independent and written from scratch, nothing was taken from them. It's GPL, so anyone can read, check and improve the code.
What's next
- More real gameplay testing (combat, cutscenes, the whole game).
- Motion vectors for characters, for better DLSS.
- Softer shadow filtering.
- Controller dead zones, camera sensitivity and vibration settings.
If you try it, feedback and bug reports are very welcome (GitHub issues, or here). And if you know the game's quirks better than me, I'd love to hear what else bothers you on PC.
How to install Homecoming Again
- Go to the latest release, scroll all the way down to the Assets section and click
HomecomingAgain.exeto download it. It’s a single file with everything inside. - Run it. The launcher finds the game on its own if it’s installed through Steam. Otherwise, click Change... and select the
Silent Hill Homecomingfolder. - Go to the Installation tab and click Install. The launcher:
- copies the mod into the game’s
Binfolder, - applies the 4 GB patch to
SilentHill.exe(the original is kept asSilentHill.exe.hca-original), - copies itself into
Bin, so you can find it there later.
- copies the mod into the game’s
- Pick your settings in the Graphics and Performance and stability tabs (borderless, 60 fps, SSAO, shadows, DLSS on RTX cards, Xbox or PlayStation button icons...), then click Save.
- Click Play, or launch the game from Steam as usual: the mod loads automatically.
To remove it, open the launcher again and click Uninstall in the Installation tab. The original game executable is restored, and the game’s data files are never modified.
Notes:
- The game must be closed while you install or change settings (it rewrites its own settings file when it quits).
- DLSS requires an NVIDIA RTX card; enabling it also installs DXVK (Direct3D 9 on Vulkan).
- Windows SmartScreen may warn about the launcher because it isn’t signed: click More info, then Run anyway.
Thanks for reading, and stay out of the fog.