Cake is the new Jake2 client implementation built on libGDX with the LWJGL3 desktop backend.
Main game client logic: rendering, audio, input, HUD, networking integration, and gameplay screen flow.
Desktop platform launcher/wrapper for core.
Standalone desktop launcher for the Cake model viewer.
Standalone desktop tooling for engine asset generation workflows.
From repository root:
./gradlew :cake:cake-client:run- runs the desktop client launcher directly../gradlew :cake:cake-modelviewer:run --args="/absolute/path/to/file.md2"- runs the model viewer launcher directly.
Main desktop entrypoint:
Build portable ZIPs with Java 25:
./gradlew :cake:cake-client:distZip :cake:cake-modelviewer:distZipEach launcher's build/distributions/ contains a ZIP with bin/ launch scripts
and lib/ application/dependency JARs. Extract the entire ZIP and run
bin/cake-client or bin/cake-modelviewer (the .bat script on Windows).
Pass an asset path to the model viewer; Quake 2 game data remains external.
For a local installation, use :cake:cake-client:installDist or
:cake:cake-modelviewer:installDist; scripts are under the corresponding
build/install/<application>/bin/ directory. JARs under build/libs/ are normal
project JARs and need the distribution classpath. Use distZip instead of the
former custom dist task; standalone fat JARs are no longer produced.
The existing launcher helper supplies macOS first-thread startup by restarting the JVM when needed. ZIPs require Java; bundled-runtime images and native executables use the separate Beryx and Graal tasks.
Configuration cache is enabled for ordinary builds, JVM distributions, and run
tasks. Beryx 2.0.1 still requires --no-configuration-cache for
runtime, runtimeZip, jpackageImage, and jpackage, for example:
./gradlew :cake:cake-client:runtimeZip --no-configuration-cache
./gradlew :cake:cake-client:jpackageImage --no-configuration-cacheruntimeZip writes build/image.zip; jpackageImage writes an application
under build/jpackage/. Use the corresponding model-viewer tasks for that app.
These outputs bundle the project Java toolchain and target the build machine's
OS and architecture. Installers remain disabled.
Graal support is opt-in. Enable the native plugin and helpers when building an experimental native executable:
./gradlew -PenableGraalNative=true :cake:cake-client:nativeCompile
./gradlew -PenableGraalNative=true :cake:cake-modelviewer:nativeCompileThese tasks require GraalVM 25 or newer with Native Image. Set GRAALVM_HOME to
that installation; Gradle can continue running on the regular project JDK.
Native resources are detected from the runtime classpath, including repository
assets and dependency libraries. Ordinary JVM builds and ZIPs omit the Graal helpers.
- Desktop video configuration
- Configuration and asset ownership
- Asset resolution and loading
- MD2 loading and rendering
- BSP loading and rendering
- Input, bindings, and configuration persistence
- UI styles and menu architecture
- Menu screens
- Console
- Ingame runtime
- HUD layouts
- Effects and particles
- Shared virtual filesystem