Porting Naughty Dog’s Custom GOAL Lisp Compiler to ARM64 (Precursor)
Jak and Daxter: The Precursor Legacy (2001), Jak II (2003), and Jak 3 (2004) are unique in video game engineering history: Naughty Dog co-founder Andy Gavin wrote more than 95% of the trilogy’s engine and gameplay code in GOAL (Game Object Assembly Lisp), a custom Lisp dialect that compiled directly into PlayStation 2 Emotion Engine (MIPS III + VU0/VU1 vector unit) machine instructions.
The upstream OpenGOAL project spent years decompiling the PS2 binaries back into readable GOAL source code and building a modern compiler (goalc) targeting desktop x86-64 processors with OpenGL 4.3. Because goalc only emitted x86-64 instructions, OpenGOAL could not run natively on Android phones or handhelds without slow x86 container layers.
Precursor (maintained by thebardockgames as an independent, experimental fork) extends OpenGOAL’s compiler with a native 64-bit ARMv8-A (aarch64) code generator and ports the custom PS2 renderer (tfrag, tie, shrub, merc, and ocean render buckets) from desktop OpenGL 4.3 to OpenGL ES 3.2.
Current Alpha Playability Status Across the Trilogy
Because translating custom PS2 Vector Unit (VU1) microprograms and Lisp register conventions to ARM64 NEON SIMD instructions is an ongoing engineering effort, playability varies by title:
- Jak and Daxter: The Precursor Legacy (
jak1): Boots through the title screen, opening cutscene, Geyser Rock, and Sandover Village at around 60 FPS on modern Snapdragon hardware with working audio and controls, though graphical shader bugs and mid-campaign crashes can still occur. - Jak II (
jak2): Reaches the opening Prison escape and Haven City streets, but exhibits more frequent crashes and unfinished renderer passes. - Jak 3 (
jak3): Early experimental boot support; hangs after the initial cutscene and is not yet playable.
(Note: Precursor is an independent community fork and is not supported by the upstream OpenGOAL desktop team; always report Android-specific issues directly on the Precursor GitHub repository).
On-Device ISO Extraction & Compilation Workflow
Unlike the desktop OpenGOAL setup, Precursor includes an on-device extractor and GOAL compiler right inside the Android APK:
- Prepare Your Retail PS2
.isoImage: Create an unmodified.isobackup from your own retail PlayStation 2 disc of Jak and Daxter: The Precursor Legacy (NTSC-U, PAL, or NTSC-J revisions are supported; PS3/PS4 remaster files are not compatible). - Install the
PrecursorAPK from GitHub Releases and copy your.isofile to internal storage. - Run On-Device Extraction & Compilation: Select your
.isoinside the Precursor launcher. The app unpacks the PS2.DGO/.CGOarchives, decompiles the textures and geometry, and compiles the GOAL object files into native ARM64 packages directly on your phone (allow 3 to 8 minutes during first-time setup).
Controls & Hardware Requirements
Requires a 64-bit ARMv8 device running Android 9+ with full OpenGL ES 3.2 support (Tier 3 or Tier 4 chipset such as Snapdragon 865, 8 Gen 2, or 8 Gen 3 recommended). Includes an on-screen touch overlay that automatically hides when an Xbox, PlayStation, or handheld gamepad is active.