Resistance 3 Port

Resistance3Port is a native PC port of Resistance 3 that translates its code to C/C++ and uses RPCS3's Vulkan renderer with upscaling and keyboard and mouse controls.

README

Resistance 3 — native PC port/recomp (work in progress)

A static recompilation of the PS3 game Resistance 3 into a native Windows program. No emulation of the CPU: the game's PowerPC and SPU code is translated to C/C++ and compiled for your PC. Graphics go through RPCS3's Vulkan renderer, with NVIDIA DLSS / AMD FSR upscaling, 60 fps, keyboard and mouse controls, and higher resolutions.

⚠️ Not Perfect. I have only tested it on my PC (Ryzen 5 5600X, GeForce RTX 5070, 32 GB RAM, Windows 11, 1080p screen) and haven't beaten the game. Only the intro and the opening Haven level have been played; past that it's untested, so things could go wrong. Some crashes or freezes may happen.

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/ and project/r3_patches.cpp).

What you need

  • A PC running Windows 10 or 11 (64-bit).
  • A CPU with AVX2: Intel 4th gen or newer, or any AMD Ryzen. Older CPUs without AVX2 won't run it.
  • A Vulkan 1.3 GPU. DLSS needs a GeForce RTX card; everything else (including FSR) works on AMD, NVIDIA and Intel. Only tested on NVIDIA so far.
  • Your own dump of Resistance 3, US disc (BCUS98176), version 1.00. This is the folder that contains PS3_GAME, the same kind of folder RPCS3 uses. Other regions and patched versions are not supported yet.
  • About 50 GB of free disk space: ~37 GB for the game files and the rest for the build tools and the build.
  • An internet connection for the 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\Resistance3Port.
  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 Resistance3Port-Setup-<version>.exe from the Releases page and run it. It installs the port (default C:\Games\Resistance3Port), 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 opens Setup, the window with the progress bar, with your game already filled in: click Install there (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 only in the install folder.

By hand:

  1. Download this repository: click on Code at the top, then Download ZIP, then unzip it somewhere with no spaces in the path, for example C:\Games\Resistance3Port.

  2. Double-click Setup.bat. It will:

    • install the free build tools if they're missing (Visual Studio 2022 Build Tools, LLVM, CMake, Ninja, Python, Git), using winget;
    • look for your game (an ISO or a game folder), check it, then copy it into the port folder (or move a folder, if it's on the same drive);
    • decrypt the game's program file, using the application keys from RPCS3's public source code;
    • download RPCS3's source at a fixed version and apply this port's renderer patch (ps3recomp/patches/r3-rpcs3.patch);
    • generate the game code from your copy and build the game.

    The first run takes a while: tool installs plus a 20–60 minute build. At the end, Setup offers to put a "Resistance 3" shortcut to the launcher on your desktop.

  3. Play with Launcher.exe. It detects your PC and recommends settings (Auto-detect), and has all the settings (display mode, resolution, frame rate, VSync, anti-aliasing, upscaling, texture filtering, sharpening, frame generation, controls, notifications, mods and updates) and the key bindings. See Launcher.

You only need to run Setup again after downloading a newer version of the port; otherwise just use the launcher.

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 3 (US disc, BCUS98176), about 34.6 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 the launcher's Check for updates option (Advanced page) 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 3\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). Saves are still kept in the port folder (gamedata); the uninstaller asks before deleting it, and its default is to keep it.

No console window: the launcher starts the game without a console. The game's output goes to logs\run.log.

First launch: the game shows its own one-time setup screens and an autosave notice. Before the game starts, the launcher prepares the shader cache from your game files (a progress panel; Skip for now or Esc skips it), and the game then compiles every known shader behind a Compiling shaders N / M panel (see Shader precompile), so levels play without shader stutter from the first visit. Shaders are cached for later starts.

Controls

Keyboard and mouse are supported out of the box: WASD move, Space jump, C/Ctrl crouch, Shift sprint, direct mouse look, Mouse1 fire, Mouse2 aim, Mouse3/F secondary fire, R reload, V/Mouse4 melee, G/Mouse5 grenade, 1/2 grenade type, Q / wheel weapon select, E use, Esc pause, Tab select, F8 releases the mouse. Controllers work too. All keyboard and mouse bindings can be changed in the launcher (Controls page, two keys per action; saved in controls.txt).

Button prompts follow the device you used last. Touch the keyboard or mouse and every on-screen prompt shows your keys; press a button or move a stick on a controller and they switch to that controller's buttons. Switching is instant and works anywhere, mid-game or in a menu. With an Xbox / XInput controller (or any non-PlayStation pad) the prompts show Xbox buttons, drawn by the port as simple coloured letters (no copied artwork):

PS3XboxPS3Xbox
CrossAL1 / R1LB / RB
CircleBL2 / R2LT / RT
SquareXL3 / R3LS / RS (stick click)
TriangleYSelect / StartView / Menu
D-padD-padLeft / right stickLeft / right stick

With the XInput backend (PAD_BACKEND=xinput), a Sony DualShock 3/4 or DualSense that is plugged in (detected by its USB/Bluetooth ID, used through DS4Windows / Steam Input as XInput) keeps the PlayStation symbols; with SDL3 (default) the prompts follow the controller type, see Controllers (SDL3) below. The launcher's Controller button prompts option forces Xbox or PlayStation.

Where the prompts are replaced: Resistance 3's menus and HUD are Scaleform (Flash) movies, and every button symbol in them, on every screen, is one of the game's 18 img://iconN button pictures. The port swaps those pictures for the device in use, which covers the title / "Press Start" screen, the main menu, the lobby and options, the pause menu, loading-screen tips, the HUD and tutorial hints. Text that names a button inside a sentence (tutorials, hints) uses a symbol character; on keyboard that is rewritten to the key's name. PlayStation Move pictures are left alone. Prompts name the game's default button layout; if you remap buttons in the game's own options, they still name the default ones. R2_KEY_PROMPTS=0 turns all of this off (PS3 symbols always).

Mouse look is direct: raw mouse counts turn the camera's yaw and pitch each frame (× the launcher's sensitivity, with its invert option), not an emulated right stick: no acceleration, dead zone or speed cap. While aiming down sights the turn rate is scaled by the scope zoom (R2_ZOOM_SENS: 1 = default, 0 = no scaling, up to 2). Mouse movement made while the camera isn't yours (menus, pause, cutscenes) is dropped, so the view doesn't jump afterwards. The launcher's Mouse aiming = Classic switches back to stick emulation. The game has no mouse pointer in its menus; use the keyboard (arrows / Enter / Esc) or a controller. F8 frees the cursor.

Aiming and sticks (launcher, Controls page):

OptionValuesVariable
Vertical mouse sensitivitySame as horizontal, 50 %, 75 %, 125 %, 150 %, 200 %PAD_MOUSE_SENS_Y=<0.1..4> (multiplies the up/down mouse speed, direct and classic mouse aiming)
Aiming sensitivityGame default, 50 %, 75 %, 125 %, 150 %R2_ADS_SENS=<0.1..3>: extra mouse multiplier while aiming down the sights or through a scope (on top of the zoom scaling)
Aim modeHold, TogglePAD_AIM_TOGGLE=1: the Aim key / left bumper (L1) toggles aiming; menus release it. Keyboard, mouse and controller
Stick deadzoneDefault (XInput standard, per axis), Small 8 %, Medium 15 %, Large 25 %, Very large 35 %PAD_DEADZONE=<0..0.9> (radial)
Stick response curveDefault, Linear, Precise (1.6), Very precise (2.2), Fast (0.7)PAD_CURVE=<0.5..3>: stick travel past the deadzone raised to this power

Controllers (SDL3). The port reads controllers through SDL3 (built in, no extra DLL): Xbox, DualShock 4, DualSense, DualShock 3 (with its Windows driver), Switch Pro and Joy-Con work directly. DS4Windows and Steam Input are no longer needed (they still work; if they expose a virtual Xbox pad next to the real controller, the port ignores the duplicate so it doesn't become a ghost player 2). Controllers can be plugged in and out at any time, no restart, up to 8. Rumble works on every pad that has it (DualSense included), and a DualShock 4 / DualSense light bar shows the player's colour (player 1 blue, player 2 red). If SDL3 can't start, the port falls back to XInput automatically (logs\run.log shows [cellPad] controllers: SDL3 or SDL3 could not start).

Button prompts by controller type: with Controller button prompts = Auto, a PlayStation pad (DualShock 3/4, DualSense) shows PlayStation symbols and an Xbox or other pad shows Xbox letters. Switch controllers are read by button position (the bottom button is Cross); with Nintendo button layout = Nintendo style A (right) confirms and B cancels as on a Switch, and the prompts show the Xbox-style letters. Under Steam Input the real controller type is used when SDL reports it; otherwise set the prompts by hand.

Gyro aiming (DualShock 4, DualSense, Switch Pro, Joy-Con; off by default): turning the controller turns the view, added directly to the camera like the mouse (smooth, not limited by the stick). While aiming only uses it with the Aim button (L1 / LB) held. Leave the controller still for about a second after it connects so the resting drift is calibrated. In split-screen co-op each player's gyro moves only their own view (as a right-stick input, like the second player's mouse).

Option (launcher Controls page / in game More PC Options)ValuesVariable
Controller supportSDL3, XInputPAD_BACKEND=sdl3|xinput (restart). sdl2 is accepted and uses SDL3
Gyro aimingOff, On, While aimingPAD_GYRO=0|1|aim
Gyro sensitivity2x, 0.5x-6xPAD_GYRO_SENS=<0.05..20> (view degrees per controller degree)
Gyro verticalNormal, InvertedPAD_GYRO_INVERT_Y=1 (on top of the game's own invert setting)
Gyro turning axisController, PlayerPAD_GYRO_SPACE=local|player (player = yaw around gravity, works flat or upright)
Gyro calibrationOn connect, OffPAD_GYRO_CALIBRATE=0 turns off the 1 s still-calibration
Light barPlayer colour, OffPAD_LIGHTBAR=0
Nintendo button layoutBy position, Nintendo stylePAD_NINTENDO_SWAP=1
(no launcher option)OnPAD_DEDUP=0 keeps virtual duplicates (Steam Input / DS4Windows / ViGEm) as separate controllers
(no launcher option)360PAD_GYRO_STICK_DPS=<deg/s>: gyro speed that equals a full right stick (co-op / classic mouse aiming, where gyro drives the stick)

With PAD_BACKEND=xinput the old behaviour returns: XInput only (up to four), PlayStation pads through DS4Windows / Steam Input, no gyro or light bar.

Local co-op

Two players on one PC, split-screen, as on PS3. No PSN account is needed: the port provides a second local user.

Starting it: plug in two controllers (or one, with Player 2 uses keyboard and mouse). Main menu → Campaign → the co-op / split-screen option. On the lobby screen, press START on the second controller (or Enter / Esc on the keyboard for a keyboard player 2): on PS3 this opens the "select a user" box; the port answers it at once with a local user named Player 2, and player 2 is in. Start the chapter and the screen splits.

Resistance 3 counts at most two local players, ignores PlayStation Move pads, and won't let one user join twice (so player 2 is always the second local user).

Who is who:

  • Player 1 = the keyboard and mouse plus the first controller found (as in single player).
  • Player 2 = the next controller. A controller keeps its player while it stays plugged in. A controller plugged in later takes the lowest free player; when one is unplugged, its player has no input until it is plugged back.
  • With two local players the direct mouse look is off. The mouse then moves the keyboard player's view like a right stick (it would otherwise turn both heroes).

Options (launcher, Controls page; or settings.bat):

OptionValuesVariable
Local co-op (split-screen)On, OffPAD_COOP=0: the game sees only player 1. Extra controllers (or duplicate virtual pads from Steam Input / DS4Windows) can't join
Player 1 controllerAutomatic, Controller 1-8PAD_P1_CONTROLLER=<1..8>: the controller that is player 1 (SDL3: in the order they were connected; XInput: 1-4, Windows' XInput order)
Player 2 controllerAutomatic, Controller 1-8PAD_P2_CONTROLLER=<1..8>: the controller that is player 2 (numbered as above)
Player 2 uses keyboard and mouseOff, OnPAD_P2_KEYBOARD=1: player 1 = the first controller only, player 2 = keyboard and mouse
(no launcher option)2PS3_LOCAL_USERS=<1..4>: local users the game sees. 1 = player 2 can't sign in. PS3_USER2_NAME=<name> renames player 2

logs\run.log shows which controller each player got ([cellPad] player 2 <- controller 2) and when the game counts two local players ([coop] local players: 2).

Known limits: Player 2's progress and settings are not saved separately (as on PS3 for a guest player). If you use NVIDIA DLSS, it may not work right in split-screen. Turn it off (or use FSR / no upscaler) for co-op if the image smears or one half looks wrong.

PC features

  • PC menu: press F10, or hold View + Menu (Select + Start) on a controller for 1.5 s, for a small overlay menu: Resume, PC Options and Quit to Desktop. The game is paused while it is open. PC Options changes, live: frame rate, upscaler (DLSS / FSR 3.1 / off; applies at the next start), mouse sensitivity, field of view and controller prompts (Auto / Keyboard keys / Xbox / PlayStation). Each change is saved where the launcher keeps it (settings.ini + settings.bat, controls.txt). Arrow keys / D-pad move, Enter / A select, Esc / B back. The game's own pause and main menus are Scaleform (Flash) movies the port doesn't edit, so a small hint, F10: PC menu, appears while the pause menu is up and once at start. R2_MENU_PC=0 turns the menu off (F10 / View+Menu then go straight to the quit box), and R2_MENU_PC_HINT=0 hides the hint (it is off by default in exclusive fullscreen).
  • PC wording: the game's text is adjusted where it talks about the console (rules in project\r3_pctext.cpp). In English: the epilepsy warning's "BEFORE USING SEE THE INSTRUCTION MANUAL INCLUDED WITH YOUR PS3™ SYSTEM FOR MORE DETAILS." → "STOP PLAYING AND CONSULT A DOCTOR IF YOU FEEL UNWELL.", "Press and hold the PS button to quit the application" → "Press F10 to quit the game", "Insufficient Hard Disk Drive space" → "Insufficient disk space", "Do not switch off the power when the HDD access indicator is flashing" → "Do not close the game while it is saving", "Logging into PlayStation®Network" → "Signing in to online services", "PlayStation®Network account" → "online account", "PlayStation®Store" → "online store", "USB keyboard" → "keyboard", and "wireless controller" → "controlle