An experimental PlayStation Portable port of Radical Entertainment's 2003 classic — running the original SRR2 / Pure3D engine on the handheld through a hand-written sceGU renderer.
The engine's fixed-function pipeline runs on a native sceGU backend, and the retail PC assets are squeezed offline to fit the PSP's ~22 MB of RAM. The animated frontend menu already renders on a real PSP‑2000.
What works (verified on real PSP‑2000 hardware, and on PPSSPP):
- ✅ Native sceGU
pddirenderer (src/libs/pure3d/pddi/psp) — replaces the fixed-function GL path - ✅ radcore — custom heaps, async radfile with a Memory‑Stick drive, threads & timing
- ✅ Pure3D asset & scene loading — chunk files, geometry, textures (CLUT/paletted), skeletons, CPU-skinned composites, scene graph & keyframe animation
- ✅ Scrooby frontend — 2D UI, fonts & text
- ✅ The animated 3D menu — Homer's living room, the RC car, item glows and the TV, framed over the 2D menu
- ✅ Offline asset optimizer to make the retail assets fit in RAM
On the roadmap:
- 🚧 Gameplay (
GameFlowcontexts), player input (pspctrl) & audio (sceAudio) - 🚧 Game-asset packaging
- 🚧 Native DXT/T4 texture sampling + narrower cache flushes for extra speed
Requires the pspdev SDK on your PATH (psp-gcc, psp-cmake). From the repo root:
psp-cmake -S psp -B psp/build && make -C psp/build -jThe bootable EBOOT is written to psp/build/EBOOT/EBOOT.PBP.
The PSP has only ~22 MB of usable RAM, shared by everything, and the sceGU backend samples texture data straight from that heap — so a texture's resident cost is its full decompressed size. The retail PC assets don't fit (the frontend's textures alone are ~24 MB resident, mostly needless 32‑bit true‑colour), so tools/p3dopt rewrites .p3d files offline before they're deployed:
| Lever | What it does |
|---|---|
| 🎨 Textures | Paletteize true‑colour images to an 8‑bit CLUT (4× smaller), optionally downscale to a max power‑of‑two size, and drop unused mipmaps |
| 📐 Geometry | Decimate meshes (quadric edge‑collapse), converting triangle strips → lists and carrying UVs / normals / colours across the reduction |
It's a small, dependency‑light Python tool (Pillow · numpy · fast-simplification), and every rewrite is re‑parsed to verify it isn't corrupt. Palette‑only is near‑lossless and drops the frontend's resident texture use from ~24 MB → ~7 MB.
cd tools/p3dopt
python3 -m venv .venv && ./.venv/bin/pip install Pillow numpy fast-simplification
# textures only (safe default) — the whole frontend tree
./.venv/bin/python batch.py content/art/frontend psp/dist/art/frontend --paletteize --drop-mips
# textures + geometry decimation — for levels
./.venv/bin/python batch.py content/art psp/dist/art --paletteize --drop-mips --decimate --reduction 0.5
# inspect where texture RAM goes before choosing settings
./.venv/bin/python analyze.py content/art/frontend/scrooby/frontend.p3dSee tools/p3dopt/README.md for the full option reference.
Copy the build output and the optimized assets onto the memory stick:
PSP/GAME/SHAR/
├── EBOOT.PBP # from psp/build/EBOOT/
└── art/ … # optimized assets from psp/dist/
Then launch SHAR from the PSP's Game menu (or point PPSSPP at the memory‑stick folder).
This repository contains modified source code and references to original game assets for preservation and enhancement purposes only.
- Not affiliated with, endorsed by, or sponsored by the original publishers or IP owners.
- No ownership of the original intellectual property is claimed.
- Not monetized in any way (no sales, ads, sponsorships, or donations).
- Commercial redistribution of this project or its builds is not permitted.
The Simpsons: Hit & Run and all related characters, assets, audio, trademarks, and branding remain the property of their respective rights holders.
This port builds on the Simpsons: Hit & Run source project (the C++20 / x64 / UWP‑enhanced SRR2 tree). Issues and contributions for the PSP work are welcome via fork & pull request.