Resistance: Fall of Man: native PC port

Resistance: Fall of Man: native PC port is a native Windows port of the PlayStation 3 game Resistance: Fall of Man with 60 fps support and NVIDIA DLSS.

README

Resistance: Fall of Man: native PC port

A static recompilation of the PS3 game Resistance: Fall of Man into a native Windows program. Nothing is emulated: the game's PowerPC and SPU code is translated to C/C++ and compiled for your PC. It renders through its own Direct3D 12 renderer, with NVIDIA DLSS / DLAA and AMD FSR 3.1.

No game files and no translated game code are distributed, in this repository or in the installer. You need your own copy of the game. Setup decrypts its program on your PC, translates it into C/C++ and builds the game there; the generated code and the built game never leave your PC, and no prebuilt game program is released. The repository holds the port's own code plus the small references it needs to find its place in the game's program: function addresses, patch values and short context lines from the generated code (tools/hooks/).

Highlights

  • 60 fps and higher (30 to 165, Just under refresh for G-Sync / FreeSync, or unlimited). Game speed is correct at every frame rate.
  • NVIDIA DLSS / DLAA, AMD FSR 3.1 and Intel XeSS, NVIDIA Reflex, render resolutions up to 4K, and a 1080p → DLSS 4K preset for RTX 40 / 50 cards.
  • Native PC controls: raw mouse look (not stick emulation), rebindable keys, and separate melee and interact keys. Xbox and PlayStation controllers work and can be swapped at any time.
  • Button prompts follow your device: your keyboard keys, or Xbox buttons when an Xbox controller is in use.
  • In-game PC menu (F10, or hold Esc / Start): Resume, PC Options, and Quit to Desktop with a confirmation. No Alt+F4 needed.
  • Ultrawide (Hor+), field of view slider, performance overlay (F3), screenshots (F12), mods folder, and saves in Saved Games.
  • Launcher that detects your hardware and picks recommended settings.
  • Performance work: the renderer was profiled down to about 5 µs of CPU per draw (see Performance).

What you need

  • A PC running Windows 10 or 11 (64-bit).
  • A CPU with AVX2 (Intel 4th generation or newer, or any AMD Ryzen).
  • A DirectX 12 GPU. It has been tested on AMD (RX 6700 XT) and NVIDIA (RTX 5070) cards. DLSS needs a GeForce RTX card; every other GPU uses FSR 3.1 or Intel XeSS (XeSS runs on any DirectX 12 GPU with Shader Model 6.4).
  • Your own dump of Resistance: Fall of Man, US disc (BCUS98107), version 1.00: the folder that contains PS3_GAME, the same kind of folder RPCS3 uses. Other regions and patched versions are not supported yet.
  • About 25 GB of free disk space: 16 GB for the game files, the rest for the build tools and the build.
  • An internet connection for setup.

Install

Quick install (recommended):

  1. Download the release zip from the Releases page and unzip all of it to a folder with no spaces in the path, for example C:\Games\ResistancePort.
  2. Run Setup.exe in that folder. (It is not code-signed: if Windows says "Windows protected your PC", click More info → Run anyway.)
  3. Pick your game: ISO... or Folder.... Setup checks the copy at once and says what to do if it can't be used (see If your game copy is not accepted below).
  4. Click Install and wait. Setup installs the missing build tools (one administrator prompt), copies your game files, builds the game with as many parallel jobs as your RAM allows, adds Start-menu and desktop shortcuts and starts the launcher. It shows the progress and the time left. If it stops (error, sleep, power cut), run Setup.exe again and click Resume.

The release contains no game code: the game is always built from your own copy. Requirements, disk space, build times, uninstalling and troubleshooting (SmartScreen, antivirus, low RAM, no winget): docs/INSTALL.md.

Manual install (advanced)

With the Inno installer (if a -Setup-<version>.exe is on the Releases page): download ResistancePort-Setup-<version>.exe from the Releases page and run it. It installs the port (default C:\Games\ResistancePort), adds Start-menu and desktop shortcuts, and asks for your game. It lists the copies it finds on the PC (common folders and RPCS3's game list); you can also type or paste a path, or use the ISO... / Folder... buttons. It checks the copy before going on and says what is wrong and what to do if it can't be used (see If your game copy is not accepted below). At the end it runs Setup.bat for you (step 2 below). The installer contains only the port; the game files always come from your own copy. Use a decrypted ISO or a game folder (the same kind RPCS3 uses). Tick Portable mode to keep settings and saves only in the install folder.

By hand:

  1. Download this repository (Code → Download ZIP) and unzip it to a path without spaces, for example C:\Games\ResistancePort.

  2. Double-click Setup.bat. It:

    • installs the free build tools if they're missing (Visual Studio 2022 Build Tools, LLVM, CMake, Ninja, Python) using winget;
    • looks for your game (an ISO or a game folder), checks it, then copies it into the port folder (or moves a folder, if it's on the same drive);
    • decrypts the game's two program files using the application keys from RPCS3's public source code;
    • downloads the DLSS SDK and FFmpeg;
    • generates the game code from your copy and builds the game.

    The first run takes a while: installing the tools, plus a 20 to 60 minute build.

  3. Play with Launcher.exe. On the first start it detects your hardware and picks recommended settings; everything is adjustable there.

Run Setup again only after downloading a newer version of the port.

Choosing the game in Setup.bat: it lists the copies it found, numbered. Type a number, or type or paste the path of the ISO or game folder (you can also drag it into the window). B opens a file picker (Windows only). Setup.bat -Game "<path>" skips the question. The path can be an ISO, the game folder, or a file inside it. An ISO is opened by Windows, copied from and closed again; if Windows can't open it, Setup reads it directly.

If your game copy is not accepted

The installer and Setup check the copy before copying anything. The supported version is Resistance: Fall of Man (US disc, BCUS98107), about 16.5 GB.

MessageWhat to do
compressed archive (.zip, .7z, .rar)Extract it first, then pick the ISO or folder inside.
PlayStation Store package (.pkg) / game update folderPick the disc copy. Game updates are not needed.
not <game> / from another regionUse the supported disc version listed above.
PlayStation Store versionOnly the disc version is supported.
encrypted disc image / PARAM.SFO is not validDecrypt the ISO first (for example PS3Dec with the disc key from the .dkey file), or use a game folder from a PS3 or RPCS3.
program file was decrypted or replaced (plain ELF)Use the original, unmodified files. Setup decrypts them itself.
files are missing / smaller than expectedThe copy is incomplete. Copy or dump it again.
different from the known file (warning)The copy may be modified. You can continue; Setup stops later if the decrypted program is not the supported version.
not enough free spaceFree up space, or install on another drive.

The checks run on your PC only. Nothing is uploaded.

Updates: the launcher checks this repository's Releases page once at start and says when a newer version is out (it only opens the download page; nothing is downloaded or replaced). Turn it off with Launcher → Advanced → Check for updates → Off, or the environment variable PORT_NO_UPDATE_CHECK=1. The installed version is in the VERSION file.

Settings and controls (settings.ini, settings.bat, controls.txt, mouselook.cfg) are also kept in %USERPROFILE%\Saved Games\Resistance Fall of Man\config. Missing files are restored from there when the launcher or game starts, so they survive reinstalling or updating the port. To keep everything in the port folder only, create an empty file named portable.txt next to Launcher.exe (the installer's Portable mode does this).

No console window: the launcher starts the game without a console. Everything the console used to show is written to logs\run.log.

First launch: the game shows its one-time "initial setup" screens. Shaders are compiled before the game starts, with a Compiling shaders N / M progress panel (see Shader precompile), so levels don't sit black while they compile. The shader cache is kept, including a backup that survives updates and reinstalls.

Controls

Keyboard and mouse, Xbox controllers, PlayStation pads (DualShock 4, DualSense, DualShock 3 with its driver) and Switch Pro / Joy-Con all work, and you can switch between them at any time. Controllers are read through SDL3 (built in, no extra DLL), so DS4Windows and Steam Input are no longer needed (they still work; a virtual Xbox pad they add next to the real controller is ignored as a duplicate). If SDL3 can't start, the port falls back to XInput (logs\run.log: [cellPad] controllers: SDL3 or SDL3 could not start).

  • Button prompts follow the last device you used. On keyboard and mouse the game shows your key bindings. On an Xbox / XInput controller it shows Xbox buttons that match the real mapping: Cross = A, Circle = B, Square = X, Triangle = Y, L1/R1 = LB/RB, L2/R2 = LT/RT, L3/R3 = LS/RS, Select = View, Start = Menu. The Xbox glyphs are drawn by the port (coloured circles with letters); no Microsoft artwork is used. A PlayStation controller (by its SDL3 type, or with XInput by its USB / Bluetooth ID) keeps the PlayStation symbols. Switch controllers are read by button position (bottom = Cross) and show PlayStation symbols; with Nintendo button layout = Nintendo style A (right) confirms and B cancels, and the prompts show the Xbox-style letters. RFOM_PAD_GLYPHS=auto|xbox|ps overrides the choice (default auto; use it under Steam Input if the real controller type isn't reported).
  • Controller hot-plug: controllers are polled every few milliseconds, so plugging one in or pulling it out works at any time without a restart. The log shows [cellPad] controller N connected / disconnected.
  • Mouse look is native. Raw mouse movement (Windows raw input) turns the player's camera directly, 1:1 on foot; it is not converted into an analog stick. Scoped weapons scale it by their zoom.
  • Melee and interact are split onto separate keys (on the PS3 they shared a button).
  • Bindings are edited in the launcher (Controls page) or by hand in controls.txt (KEY = ACTION, one per line; the header of the file lists every key and action name).

Mouse and controller options in controls.txt:

OptionDefaultWhat it does
mouse_lookdirectdirect: raw mouse deltas turn the camera. stick: the old analog-stick emulation.
mouse_sensitivity2.00Overall mouse speed (also multiplied by the game's own Look Sensitivity).
mouse_degrees_per_count0.050Degrees turned per mouse count in direct mode, before mouse_sensitivity.
mouse_invert_y01 inverts vertical look.
mouse_deadzone, mouse_smoothing0.28, 0.03Only for mouse_look = stick.
mouse_release_keyF8Frees / recaptures the mouse cursor.
pad_interactNONEA controller button that only uses things (doors, switches, vehicles); the Action button then only melees. NONE = as on PS3.

More input options (launcher → Controls page, written to settings.bat; log line at start: [controls] PC options: vertical mouse x.., stick deadzone .., curve .., zoom hold|toggle (game)):

Launcher settingChoices (default)Environment variableWhat it does
Vertical sensitivity50%, 75%, Same as horizontal, 125%, 150%, 200%PAD_MOUSE_SENS_Y=0.1..4Up/down mouse speed relative to left/right (direct and stick mouse look).
Zoomed sensitivity50%, 75%, Same, 125%, 150%RFOM_ADS_SENS=0.1..3Extra mouse multiplier while zoomed or scoped, on top of the automatic zoom matching (RFOM_ZOOM_SENS).
ZoomToggle (PS3), HoldPAD_AIM_HOLD=1Hold: zoomed only while the zoom key / R3 is held. The game's zoom is a toggle, so the port presses zoom again when you let go (keyboard, mouse and the first controller).
Stick deadzoneDefault (24%, per axis, as on PS3), 5-30%PAD_DEADZONE=0..0.9A radial deadzone for both controller sticks, rescaled so the full range stays usable. Raise it if the view drifts.
Stick response curveLinear, Fast, Precise, Very precisePAD_CURVE=0.5..3 (exponent; 1 = linear)Above 1: small movements are slower for fine aiming; below 1: quicker. A curve other than 1 also switches the sticks to a radial 24% deadzone when none is chosen.

"Restore default controls" also resets these.

Controllers (SDL3), gyro and light bar (launcher → Controls page, and in game More PC Options; written to settings.bat). Rumble works on every pad that has it, DualSense included. Gyro aiming (DualShock 4, DualSense, Switch Pro, Joy-Con; off by default) turns the camera directly like the mouse (smooth, not limited by the stick; with mouse_look = stick it drives the right stick instead). Leave the controller still for about a second after it connects so its resting drift is calibrated.

Launcher settingChoices (default)Environment variableWhat it does
Controller supportSDL3, XInputPAD_BACKEND=sdl3|xinputXInput = the old path (Xbox pads and wrappers only, up to four, no gyro / light bar). sdl2 is accepted and uses SDL3. Restart to change.
Gyro aimingOff, On, While zoomedPAD_GYRO=0|1|aimaim: only while zoomed in / scoped.
Gyro sensitivity2x, 0.5x-6xPAD_GYRO_SENS=0.05..20View degrees per controller degree.
Gyro verticalNormal, InvertedPAD_GYRO_INVERT_Y=1On top of the game's own invert setting.
Gyro turning axisController, PlayerPAD_GYRO_SPACE=local|playerPlayer: yaw follows gravity, so it works with the controller flat or upright.
Gyro calibrationOn connect, OffPAD_GYRO_CALIBRATE=0Off: no 1 s still-calibration.
Light barPlayer colour (blue), OffPAD_LIGHTBAR=0DualShock 4 / DualSense light bar.
Nintendo button layoutBy position, Nintendo stylePAD_NINTENDO_SWAP=1Switch controllers: A confirms, B cancels.
(none)Automatic (the first connected)PAD_P1_CONTROLLER=1..8Which controller (SDL3: in connection order) is the player's while it is connected; otherwise the first connected one is used.
(none)OnPAD_DEDUP=0Keep virtual duplicates (Steam Input / DS4Windows / ViGEm) as separate controllers.
(none)360PAD_GYRO_STICK_DPS=deg/sGyro speed equal to a full right stick (only when gyro drives the stick).
Keys that always work
KeyWhat it does
Alt + EnterSwitch between borderless fullscreen and a window.
F8Free / capture the mouse cursor (changeable with mouse_release_key).
F10, or hold Esc for 1 s, or hold Start / Menu for 1.5 sPC menu: Resume / PC Options / Quit to Desktop (see Window, focus and quitting). It always opens on Resume (the mouse takes over the highlight only once moved). The game is paused and muted while it is up, and its SPU threads idle instead of spinning.
F12 or PrtScnScreenshot: a PNG in the screenshots folder (RFOM_YYYYMMDD_HHMMSS_mmm.png); a "Screenshot saved" toast shows briefly.
F3Performance overlay (see Performance overlay).
Alt + F4 / the window's close buttonAlso quits cleanly (waits for a save in progress).

Launcher settings

Launcher.exe writes settings.ini (its own choices) and settings.bat (the environment variables the game reads); Play runs run.bat, which loads settings.bat. On the first start (no settings.ini yet) the launcher detects your hardware and fills in the recommended settings. Each list tags the value recommended for your PC with a small "recommended" label. The Display, Graphics and Upscaling & Frame Gen pages open with a Recommended for your PC panel: what was detected (GPU, VRAM, CPU cores/threads, RAM, screen), the recommended configuration, whether your settings differ from it, and Auto-detect (recommended), which applies it. Hover a setting to see what it does in the help strip at the bottom; most options state their pros and cons.

The options are sorted into pages (the same pages as the Resistance 2 / 3 launchers); each page groups them under headings. Launcher.exe --page N opens on page N:

NPageWhat is on it
0DisplayScreen (mode, window size, monitor, resizable window, Alt+Enter, aspect ratio, seamless level loads), Frame rate (limit, menu frame rate, VSync, tearing), HDR
1GraphicsResolution (render resolution, scaling), Quality (texture filtering, LOD bias, shadow maps), View (field of view), Accessibility (colour-blind filter)
2Upscaling & Frame GenAnti-aliasing and upscaling (DLSS / FSR / XeSS, DLSS model, sharpening, object motion vectors), Frame generation and latency (Frame Generation, Reflex)
3PerformanceShader cache (compile before playing, compile threads, Rebuild shader cache)
4ControlsKey bindings, Mouse, Controller, Gyro, Controller buttons
5AudioSound (speaker layout, audio buffer), In the background
6Interface & NotificationsNotifications (achievement pop-ups), Movies (hold to skip, skip hint), Overlays (F3 overlay and its corner), Photo mode and Discord
7AdvancedStart-up and quitting, Gameplay (gore, adaptive difficulty), Mods and textures, Saves (location, backups, Open save folder), Updates
8AchievementsUnofficial fan-made achievements read from your save (see Achievements under Trophies)
9Saves & toolsSave backups, the benchmark
10AboutVersion, credits and licences, the key list, folder buttons, the project page, Report a problem, Reset all to defaults

Options that are empty by default write nothing to settings.bat until changed (the game's default is used).

Display

SettingChoices (default)Environment variableNotes
Display modeBorderless fullscreen, WindowedRSX_DISPLAY=borderless|windowedAlt+Enter switches in game.
Window size1280x720 … 3840x2160 (1920x1080)RSX_WINDOW=WxHWindowed mode only.
MonitorMain display, Monitor 2-4RSX_MONITOR=0|2|3|4Numbered in Windows' order, main display first. The log shows [display] monitor n of m.
Resizable window / Alt+EnterOn, OffRSX_RESIZABLE=0, RSX_ALT_ENTER=0See PC extras.
Aspect ratioAuto (window shape), 16:9 (PS3), 16:10, 21:9, 32:9RFOM_ASPECT=auto|off|16:10|21:9|32:9|<a:b>|<decimal>Ultrawide / Hor+; see Ultrawide below.
Seamless level loadsOn, OffRFOM_SEAMLESS=0
Frame rate limit30, 55, 60, 72, 82, 90, 120, 144, 165, Just under refresh (G-Sync / FreeSync), UnlimitedCHILD_RFOM_FPS (→ RFOM_FPS, vrr = just under refresh)Game speed is the same at every limit (see Frame rate below).
Menu frame rate30, 60, 90, Same as the gameRFOM_MENU_FPS (0 = same as the game)Cap while the pause / options menu is up over the game. Above ~90 fps the pause menu's dimming layer can flicker.
VSyncOff, Every refresh, Every 2nd, Every 3rdRSX_VSYNC=0..3Off is smoothest with FreeSync / G-Sync.
TearingAllowed (lowest latency, VRR), NeverRFOM_PRESENT=tearing|notearWith VSync off: Allowed presents immediately (with G-Sync / FreeSyn