States for building on Linux and Mac
This repository is the home of two games: CaveExpress and CavePacker
CaveExpress is a classic 2D platformer with physics-based gameplay and dozens of levels. Master your pedal-powered flying machine to pick up packages from your cave-dwelling clients and drop them off at the collection point. But beware! Mighty mastodons, terrifying pterodactyls and others would rather see you extinct.
Features:
- Multiplayer
- Built-in map editor
- Physics-based gameplay
The map editor is available from the main menu (Editor) or via caveexpress -ui_push editor. See docs/caveexpress/EDITOR.md for how to create maps, tools, and key bindings. Map Lua scripts and cutscenes: docs/caveexpress/MAPS.md. Sprites, atlases, and drawing: docs/caveexpress/SPRITES.md.
Online version: caveexpress
CavePacker is a sokoban game. It is a puzzle game where you have to move the packages onto their targets without getting stuck. The lesser steps you made for solving a level, the better. You may only push but not pull packages.
The maps are taken from XSokoban, KSokoban - the author of sasquatch and microban maps is David W. Skinner and the maps gri* are made by GRIGoRusha.
Btw.: Did I mention that this is a sokoban game that even supports network based multiplayer gaming. Check it out.
The multiplayer maps were all created by me and are released in the Public Domain or CC0.
Features:
- Multiplayer
- Built-in mapeditor
CavePacker includes a map editor. You can start it by executing it via cavepacker -ui_push editor
Online version: cavepacker
Use the nightly builds from github actions or install a stable release:
apt-get install caveexpress cavepacker
Download from github releases
- cmake >= 2.8.7
- gcc, clang or msvc as compiler (C++11 support is needed)
- SDL2 >= 2.0.3
- SDL2_mixer >= 2.0.0
- SDL2_net >= 2.0.0
- SDL2_image >= 2.0.0
- sqlite3
- glm
- lua >= 5.2
- Box2D >= 2.4.1
- yajl (only if you compile tools)
How to build projects from sources described on wiki page Compilation.
CI builds arm64-v8a debug APKs with the NDK CMake toolchain and the Gradle project in android-project/ (same layout as libsdl-org/SDL). Local builds use the same Makefile entry point.
make android-setup # SDK, NDK r28c, emulator, AVD (skips files that already exist)
make android BUILDTYPE=Release # arm64-v8a APKs (same as GitHub Actions)
make android-run # host-ABI APK, start emulator, install, launch CaveExpressmake android-run ANDROID_GAME=cavepacker launches CavePacker. make android-stop shuts the emulator down. make android-logs follows logcat (crashes, SDL, the game process); ANDROID_LOGS_DUMP=1 make android-logs prints the current buffer and exits.
Need JDK 17+, ninja, unzip, and /dev/kvm for a fast emulator. The SDK is stored in build/android_sdk/ by default. ANDROID_SKIP_APK=1 builds only the native .so files. ANDROID_ABI defaults to arm64-v8a for make android and to the host ABI (x86_64 or arm64-v8a) for make android-run.
HTML5 builds and local HTTP testing: docs/EMSCRIPTEN.md.
make android-aab packages release Play App Bundles. Signed bundles need ANDROID_KEYSTORE_PATH, ANDROID_KEYSTORE_PASSWORD, ANDROID_KEY_ALIAS, and optionally ANDROID_KEY_PASSWORD.
Helper targets after the Android tree is configured: android-caveexpress-apk, android-cavepacker-apk, android-caveexpress-aab, android-caveexpress-install, android-caveexpress-start.
Secrets, the Play service account, internal testing, and git tags: docs/PLAY-STORE.md.
Tools used for development, included in sources.
The physical shapes with box2deditor
To convert the tps files into a texture atlas you can use the bundled tool textureatlas. The tps files can get created with Texturepacker 3.9.4.
The tool can read tps files (to some extent) and generate the needed texture atlas and lua sprite definitions that are needed for cavepacker and caveexpress. Call the tool with -h as parameter to get an overview of the command line options.
To generate e.g. all needed images and lua scripts for caveexpress, you can do this:
./textureatlas contrib/assets/png/caveexpress*.tpsConverts the box2deditor json output into CaveExpress readable format.
Generate the entitysound.lua file for CaveExpress.
Generate tiled mapeditor tileset definitions.
There is an in-game console (open it with SHIFT+TAB where you can execute commands and show or change configuration variables)

