Resistance2Port
Resistance2Port is a native PC port of Resistance 2 for Windows, featuring higher resolutions, 60 fps, and keyboard and mouse controls.
- Type: PC port
- Game: Resistance 2
- Runs on Windows
- By miroslavdanutalexandru-alt
- Latest release v0.2.2-beta, 2026-11-12
- Source: https://github.com/miroslavdanutalexandru-alt/Resistance2Port
README
Resistance 2 — native PC port/recomp (work in progress)
A static recompilation of the PS3 game Resistance 2 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. The campaign has been played through the opening Iceland levels; 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/andproject/r2_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 2, EU disc (BCES00226), 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 35 GB of free disk space: ~22 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):
- 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\Resistance2Port. - Run
Setup.exein that folder. (It is not code-signed: if Windows says "Windows protected your PC", click More info → Run anyway.) - 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).
- 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.exeagain 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 Resistance2Port-Setup-<version>.exe from the Releases page and run it. It installs the port (default C:\Games\Resistance2Port), 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:
-
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\Resistance2Port. -
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/r2-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 2" shortcut to the launcher on your desktop.
- install the free build tools if they're missing (Visual Studio 2022 Build Tools, LLVM, CMake, Ninja, Python, Git), using
-
Play with
Launcher.exe. It has the settings (display mode, resolution, frame rate, VSync, anti-aliasing, upscaling, texture filtering, sharpening) and the key bindings.
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 2 (EU disc, BCES00226), about 23.3 GB.
| Message | What to do |
|---|---|
| compressed archive (.zip, .7z, .rar) | Extract it first, then pick the ISO or folder inside. |
| PlayStation Store package (.pkg) / game update folder | Pick the disc copy. Game updates are not needed. |
| not <game> / from another region | Use the supported disc version listed above. |
| PlayStation Store version | Only the disc version is supported. |
| encrypted disc image / PARAM.SFO is not valid | Decrypt 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 expected | The 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 space | Free 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 2\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, mouse look, Mouse1 fire, Mouse2 aim, R reload, G grenade, E use, V/Mouse4 melee, Q / wheel switch weapon, T flashlight, M map, Esc pause). Controllers work too. All keyboard and mouse bindings can be changed in the launcher.
Button prompts follow the device you used last. Touch the keyboard or mouse and the on-screen prompts (hints, menu legends, tutorial text) show 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 mid-game. 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):
| PS3 | Xbox | PS3 | Xbox |
|---|---|---|---|
| Cross | A | L1 / R1 | LB / RB |
| Circle | B | L2 / R2 | LT / RT |
| Square | X | L3 / R3 | LS / RS (stick click) |
| Triangle | Y | Select / Start | View / Menu |
| D-pad | D-pad | Left / right stick | Left / 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. Prompts name the game's default button layout; if you remap buttons in the game's own options, the prompts still name the default ones.
Mouse look is direct: raw mouse counts turn the camera's yaw and pitch each frame (× the launcher's sensitivity × the game's own Look Sensitivity), 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 so the same mouse movement covers the same part of the screen (R2_ZOOM_SENS: 1 = default, 0 = no scaling, up to 2). The game's aim assist only acts on stick input, so it doesn't pull against the mouse, and while the mouse is in use the right stick's turn rate is ignored so the two never add up. Mouse counts made while the camera isn't yours (menus, pause, cutscenes, scripted sequences) are 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; they are driven by the keyboard (arrows / Enter / Esc) or a controller. F8 frees the cursor.
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) | Values | Variable |
|---|---|---|
| Controller support | SDL3, XInput | PAD_BACKEND=sdl3|xinput (restart). sdl2 is accepted and uses SDL3 |
| Gyro aiming | Off, On, While aiming | PAD_GYRO=0|1|aim |
| Gyro sensitivity | 2x, 0.5x-6x | PAD_GYRO_SENS=<0.05..20> (view degrees per controller degree) |
| Gyro vertical | Normal, Inverted | PAD_GYRO_INVERT_Y=1 (on top of the game's own invert setting) |
| Gyro turning axis | Controller, Player | PAD_GYRO_SPACE=local|player (player = yaw around gravity, works flat or upright) |
| Gyro calibration | On connect, Off | PAD_GYRO_CALIBRATE=0 turns off the 1 s still-calibration |
| Light bar | Player colour, Off | PAD_LIGHTBAR=0 |
| Nintendo button layout | By position, Nintendo style | PAD_NINTENDO_SWAP=1 |
| (no launcher option) | On | PAD_DEDUP=0 keeps virtual duplicates (Steam Input / DS4Windows / ViGEm) as separate controllers |
| (no launcher option) | 360 | PAD_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 → Co-op → the offline / split-screen co-op staging screen (the online options need PSN and don't work). On the staging screen player 2 presses START (or Enter / Esc on the keyboard for a keyboard player 2) to join: 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 shows as logged in. Start the mission and the screen splits.
Only the offline, split-screen part of co-op works: everything that needs PSN (online co-op, competitive, the lobby browser) stays unavailable.
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):
| Option | Values | Variable |
|---|---|---|
| Local co-op (split-screen) | On, Off | PAD_COOP=0: the game sees only player 1. Extra controllers (or duplicate virtual pads from Steam Input / DS4Windows) can't join |
| Player 1 controller | Automatic, Controller 1-8 | PAD_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 controller | Automatic, Controller 1-8 | PAD_P2_CONTROLLER=<1..8>: the controller that is player 2 (numbered as above) |
| Player 2 uses keyboard and mouse | Off, On | PAD_P2_KEYBOARD=1: player 1 = the first controller only, player 2 = keyboard and mouse |
| (no launcher option) | 2 | PS3_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 (Resume / PC Options / Quit to Desktop): press F10, or hold View + Menu (Select + Start) on a controller for 1.5 s — from gameplay, the game's pause menu or the main menu. The game is paused and gets no input while it is open. It always opens on Resume; the mouse takes over the highlight only once it is moved. Navigate with arrows / W S A D, Enter / Space / A = OK, Esc / Backspace / B = back, F10 = close; the mouse works too (hover, left click = OK / next value, right click = previous value). A controller's d-pad or left stick moves the selection.
- Quit to Desktop asks Quit to desktop? — Enter / Space / A = yes, Esc / Backspace / B = back to the PC menu. On yes (and also when the window is closed with Alt+F4 or the X button) the port waits for a save in progress to finish (up to 15 s, "Saving..."), flushes open files and exits.
- PC Options: Frame rate (30 / 60 / 120 / 144 / Match display / Uncapped), Upscaler / anti-aliasing (Off / AMD FSR 3.1 / NVIDIA DLSS), Mouse sensitivity (0.10–4.00, steps of 0.05), Field of view (Original / Wider / Widest — the Extended FOV patch below, can misalign some shadows), Button prompts (Auto / Keyboard keys / Xbox / PlayStation). Mouse sensitivity, field of view and button prompts apply at once; frame rate and upscaler are marked
*and apply the next time the game starts. Every change is saved straight to the launcher's files (settings.ini,settings.bat,controls.txt), so the launcher shows it too. - Hint: when you open the game's own pause menu (Esc / Enter / Start during play) a small box at the bottom says PC menu: F10 or hold View + Menu, and the same box shows once ~12 s after start-up (for the main menu).
R2_MENU_PC_HINT=0hides it (it is off by default with exclusive fullscreen). R2_MENU_PC=0turns the PC menu off: F10 / View+Menu then open only the old Quit to desktop? box.- The entries are an overlay drawn by the port, not rows inside the game's Scaleform menus (see Not done below).
- PC wording in the game's text: strings that talk about the console are rewritten as the text files load (rules in
project\r2_pctext.cpp). In English: the health warning (…see the WARNING section in the Safety and Support Manual included with your PS3™ system → Before playing, please read the health and safety warnings for this game.), the auto-save and save-icon notices (…do not quit the game or turn off your PC), Press and hold the PS button… → Press F10 to quit the game., HDD wording → disk wording, PlayStation®Network → online service / online account, PSN Friends → Friends, wireless controller → controller / mouse, PLAYSTATION®3 / PS3™ system → PC, the XrossMediaBar cable help → your PC's display settings. Other languages: PLAYSTATION®3 / PS3 → PC, PlayStation®Network → Online, PlayStation®Store → Store, the PS button in quit messages → F10, and SIXAXIS™ / PSN are dropped. Credits and trademark lines are left as they are. Only replacements that fit in the original string are made, and only the text in memory changes (the game files aren't touched).R2_PC_TEXT=0turns it off. - Alt+Enter switches between borderless fullscreen and windowed. *Alt+Tab