aboutsummaryrefslogtreecommitdiffstats

LibreForts

Open-source clone of Forts, a 2D physics artillery RTS. Custom C++ engine, content driven by Lua. Work in progress. See CLAUDE.md for details.

Stack

C++20, Meson/Ninja, SDL3, Dear ImGui, a custom mass-spring physics solver, Lua 5.4 with sol2, and stb_image. Box2D is linked but idle; bgfx, SoLoud, ENet and EnTT are planned but not yet wired up.

Build and run

Container (reproducible, any distro)

The Makefile wraps the Podman workflow. Run it from the repo root:

make image   # one-time, and after editing Containerfile
make run     # compile in the container, then launch on the host
Target What it does
make build compile in the container (default; configures on first use)
make run compile, then run the game on the host
make check compile + validate the Lua data
make reconfigure re-run meson setup after editing meson.build
make shell interactive shell in the dev container
make clean / make clean-image remove builddir/ / the dev image

The container builds every dependency into /usr/local and links Lua statically, so the resulting binary runs on any host. Compilation happens in the container, but the game runs on the host, which supplies SDL3 and a display; make run handles both halves. Run from the repo root either way, since data/ is resolved relative to the working directory.

Local (Arch Linux)

meson.build falls back to system packages, so a native build only needs the libraries the code actually uses. bgfx, SoLoud, ENet and EnTT are part of the planned stack but not yet wired up, so they are not required to build.

The make targets above all go through Podman, so a native build drives meson directly. (make check-lua is the exception: it runs on the host and works either way.)

# repo packages
sudo pacman -S --needed meson ninja gcc pkgconf sdl3 lua54 glm box2d

# sol2 (header-only Lua bindings) from the AUR, e.g. with an AUR helper
paru -S sol2        # or: yay -S sol2

meson setup builddir
meson compile -C builddir
./builddir/forts-clone   # run from repo root

Native builds link Lua dynamically against the system lua54, which is fine when you build and run on the same machine.

Assets

The repo ships CC0 placeholders only. If you own Forts, real textures load at runtime from your install via forts: paths (set $FORTS_DATA). Nothing copyrighted is stored here. Forts is copyright EarthWork Games.