← Back
elmasas

elmasas/lcs-recomp

View on GitHub ↗
Stars
175
Forks
5
Watchers
175
Open issues
6
Contributors
3
Language
C++
License
MIT License
Default branch
main
Created Sep 24, 2026Updated Oct 1, 2026

Star growth

Today—
This week—
This month—

Star history will appear here once this repo has been tracked for a couple of days.

README

LCS Recomp

GTA: Liberty City Stories PC port, built on 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, or in lcs/game/ when building from source.

Build

Requires Visual Studio 2022 and LLVM (clang-cl).

lcs\BUILD_LCS.bat

Play

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.

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 to build the Linux version.

cd docker
./build.sh

Available options:

        archlinux       compile the source code on Arch Linux
        debian          compile the source code on Debian

Usage: ./build.sh <option>

That way you will get a pre-confugred build environment which also utilzes ccache for faster building times.

License

MIT, see LICENSE. Third-party notices: lcs/THIRD_PARTY.md.