# LCS Recomp GTA: Liberty City Stories PC port, built on [PSPRecomp](https://github.com/jessicanataliagta/PSPRecomp). Game files not included. ## Setup Requires the US v1.05 release (ULUS-10041). Place your decrypted `EBOOT.ELF` and the disc's `PSP_GAME` folder in `game/` for the [release](https://github.com/elmasas/lcs-recomp/releases/latest), or in `lcs/game/` when building from source. ## Build Requires Visual Studio 2022 and LLVM (clang-cl). ```text lcs\BUILD_LCS.bat ``` ## Play ```text lcs\PLAY_LCS.bat ``` Settings are in `lcs/config/LCSNative.ini`. `Display.ResolutionMode` is the window (`PSP`, `Scale`, `Custom`, or `Desktop`). `Rendering.InternalResolutionMode` is the GE render target, with the same four choices. `Desktop` uses the monitor on Windows and on Linux. `Rendering.TextureLodBias` shifts texture mip selection; negative values keep textures sharper at a distance. ## Mouse and keyboard Edit `[Controls]` in `lcs/config/LCSNative.ini`, then restart. A binding is one or more names separated by commas. `None` clears it. `Shift`, `Ctrl`, and `Alt` set both sides. The accepted names are commented in that file. F10 opens host settings. F11 toggles fullscreen. Moving the mouse looks around. A controller button takes the same action names. | Binding | Default | Action | | --- | --- | --- | | `MoveForward` | W | On foot, move forward. In a vehicle, accelerate. | | `MoveBack` | S | On foot, move back. In a vehicle, brake. | | `MoveLeft` | A | Move or steer left. | | `MoveRight` | D | Move or steer right. | | `Walk` | Left Alt | Shorter steps. | | `Sprint` | Space | Run on foot. Not sent in a vehicle. | | `Jump` | Left Shift, Right Shift | Jump. In a vehicle the game reads this as the brake. | | `Attack` | Left mouse button | Attack or fire. | | `Aim` | Right mouse button | Aim on foot. Not sent in a vehicle. | | `CenterCamera` | H, middle mouse button | Put the camera behind you. Also picks up a weapon. | | `EnterVehicle` | F, Enter | Enter or exit a vehicle. | | `WeaponPrevious` | Q, Left, wheel up | Previous weapon. In a vehicle, previous radio station. | | `WeaponNext` | E, Right, wheel down | Next weapon. In a vehicle, next radio station. | | `Up` | Up | Toggle a special mission. In a vehicle, also pitches up. | | `Down` | Down | D-pad down. In a vehicle, horn and pitch down. | | `Pause` | Escape | Pause. | | `Camera` | V | Change camera. | | `Handbrake` | Space | Handbrake in a vehicle. | Controller names follow the Xbox layout. On a PlayStation pad, A is Cross, B is Circle, X is Square, and Y is Triangle. `LeftStick` and `RightStick` are `Move` or `Camera`. A trigger does not send its buttons in a vehicle; accelerate and brake still apply. | Button | Default | Action | | --- | --- | --- | | A / Cross | `Sprint` | Run. Also sent in a vehicle. | | B / Circle | `Attack` | Attack or fire. | | X / Square | `Jump` | In a vehicle the game reads this as the brake. | | Y / Triangle | `EnterVehicle` | Enter or exit a vehicle. | | LB / L1 | `CenterCamera` | Puts the camera behind you. Also picks up a weapon. | | RB / R1 | `Aim` | Aim. In a vehicle, the handbrake. | | LT / L2 | `MoveBack`, `CenterCamera` | Brake. On foot, also centers the camera. | | RT / R2 | `MoveForward`, `Aim` | Accelerate. On foot, also aims. | | D-pad left | `WeaponPrevious` | Previous weapon. In a vehicle, the previous radio station. | | D-pad right | `WeaponNext` | Next weapon. In a vehicle, the next radio station. | | D-pad up | `Up` | Special mission. | | D-pad down | `Down` | Horn in a vehicle. | | Start | `Pause` | Pause. | | Back / Share | `Camera` | Change camera. | | Left stick | `Move` | Movement. `LeftStick` swaps this with the camera. | | Right stick | `Camera` | Camera. | | Left stick click | `Down` | Horn in a vehicle. | | Right stick click | `None` | `PadRightStickClick`. | ## Linux The native build uses Vulkan for the GE and SDL2 for the window and audio. It needs `glslangValidator`, plus the Vulkan, SDL2, and FFmpeg development packages. The Linux build also compiles a small tool that packs `lcs/host/font5x7.txt` into the F10 menu font. The Windows build does not run that step. ```text lcs/scripts/build_linux.sh lcs/scripts/play_linux.sh ``` That build compiles `lcs/host/vulkan/ge.vert` and `ge.frag` to SPIR-V with `glslangValidator`. Editing either shader rebuilds it into `LCSNative`. `lcs/config/LCSNative.ini` is shared with Windows, so the checked-in setting stays `Backend=DirectX12`. On Linux that value selects the Vulkan GE. `Backend=Vulkan` selects it explicitly, and any other backend name keeps the software rasterizer. `LCS_VULKAN_VALIDATION=1` turns on the Khronos validation layer and prints its warnings and errors. ## Docker You also can utilize [Docker](https://www.docker.com/) to build the Linux version. ```bash cd docker ./build.sh Available options: archlinux compile the source code on Arch Linux debian compile the source code on Debian Usage: ./build.sh