A 2D turn-based tactical space game. Save the last rebel outpost: develop a strategy, execute it in tactical battles and micromanage your ship.
Spacecraft Tactics blends strategic campaign play, ship management and turn-based tactical combat into one deep, moddable package. Play it solo, in online co-op, PvP or PvE — and once you're done playing, the built-in editors and mod tools let you build the game yourself.
What's in the game
Campaign
Fight through 5 chapters, collect loot, craft items and upgrade your ship against increasingly difficult challenges — with 3 difficulty levels, a dedicated speedrun mode with splits, and global highscores.
Micromanage your ship
Command your crew across energy, shield, O2 and network grids: distribute power, fight damage, heal and revive the crew, keep shields, air and healing fields up — with automations when things get busy.
Tactical battles
Manage your capacitor, shield buffer and EM emissions. Pick the right loadout, position your ship, watch your opponent — develop a strategy and execute it.
5 game modes
The Last Outpost, Battles (PvE with progression), Arena (PvP), Race and Custom Game — all single-player and multiplayer, with online co-op, a game browser, Steam invites and quick-join codes.
Editors & sharing
Design your own ships in the ship editor and new scenarios in the scene editor — then share them with the integrated sharing functionality or on Steam Workshop.
Modding
Modular from the ground up: rebalance the game, add tilesets, sounds and translations, or go full conversion with the Groovy scripting API. Workshop-ready.
Screenshots
One person, seven years, one game
Spacecraft Tactics is a one-man project, developed in my spare time over seven years between 2016 and 2023 — engine, tools, art direction, servers, everything. I hope you like it.
An LLM-driven choose-your-own-adventure that adapts to you. You describe your next move — the game responds with new narration.
Guide a party through dangerous places, talk to characters, inspect the world, collect gear, craft solutions and make choices that reshape the narrative. There is no script to stay on: your freeform instructions are interpreted into real world actions. Behind the chat flow, a structured simulation — locations, entities, items, quests — grounds every action and remembers what you did.
How it plays
Say what you want to do
Move, attack, talk, inspect, trade, craft, sneak, manage your party — your instruction is classified into structured actions, and multiple actions can chain in one turn. Or just pick one from the menu.
Party & inventory
Run a party of characters, each with attributes, skills, health and a personal backpack. Pick up, use and transfer items, or trade them with NPCs.
Quests & a connected world
Main and side quests with ordered objectives that update automatically as the story unfolds — across a graph of locations with NPCs, ambient items and danger levels.
Game Master
An autonomous LLM-driven game master resolves world-side consequences after your turn: NPC reactions, pursuit, missed fallout, quest developments. Toggle it on or off as you like.
Three-tier memory
A sliding chat window, importance-filtered summaries and a tag-based archive keep the story coherent over long sessions — while keeping VRAM and token costs low.
Fully local LLMs
Ships with an embedded llama-server and runs on edge-device hardware from about 8 GB VRAM. Also connects to Ollama and OpenAI-compatible endpoints. Your story stays on your machine.
Screenshots
Local-first, by design
Exo's CYOA only connects to the bundled runtime or LLM software on your own machine — cloud providers are not supported. Guardrails with eight protected categories keep the sandbox safe without becoming moral censorship. Adventures can be exported as PDF, chat-style or as a book. It launched in Early Access on Steam: fully playable today, with roughly a year of polish, deeper world reactivity and more adventure styles ahead.
What it does
lm-lib is a modular Java library for building LLM-powered applications with a strong focus on agentic orchestration. Its goal is to keep both multi-step orchestration and model integration out of application code: instead of manually wiring agent flow control, prompt formatting, cache checks, token counting and REST requests in every project, you compose agents and clients — while lm-lib handles the repetitive infrastructure.
The library has two centers of gravity: an agent runtime for prompt templating, conversation orchestration, branching, merging, grading and execution tracing — and a client layer for model profiles, chat and text completions, streaming, reasoning capture, token and cost accounting, caching, retries and interceptors.
lm-lib is the LLM foundation of Exo's CYOA and is published under the Apache License 2.0 on Maven Central.
Capabilities
- Agentic graph flows — conversation management, branching via
[[key]]placeholders, parallel fan-out and merging, retries, and a compact execution trace for every run. - Tool calling — tool definitions, tool-call rounds and follow-ups, sequential or parallel, with one uniform API across all providers that support it.
- Model profiles —
.propertiesfiles, category-based selection (S / M / L / XL, hot, cold, custom runtime categories) or fully programmatic profiles with per-model cost data. - Token & cost accounting — pluggable tokenizers (jTokkit, llama.cpp llama-server, Anthropic endpoint, deterministic fallback) and request statistics: cached and reasoning tokens, duration, throughput and cost.
- Caching & interceptors — optional completion caching with per-request bypass, plus interceptors for logging, accounting, rate limiting and guardrails.
- Graders — conventional and agent-based graders with binary or 0–100 scoring and optional feedback loops that route critique back into the flow.
- Spring Boot native — auto-configuration with selective module enablement: profile, tokenizer, restclient, prompt, client and agent modules toggle independently.
Model providers
Six built-in provider implementations cover cloud APIs and fully local setups — and the client abstraction stays open for your own implementations:
- OpenAI-compatible chat completions — OpenAI itself, llama-server, vLLM and other compatible frontends; the preferred default with streaming and tool calls.
- OpenAI-compatible Responses API — same lm-lib API on
/v1/responses, with function tools and stateless reasoning replay. - Legacy text completions — explicit prompt templating with model-specific prompt strategies for instruct-style models.
- OpenRouter — chat completions plus model catalog, capability and pricing metadata discovery.
- Ollama — native chat API for local installs and direct cloud access, with capability probing via
/api/show. - Anthropic Claude Messages — native tool blocks, extended thinking and model discovery.
Get started
The published artifacts are on Maven Central, so no additional repository configuration is required:
<dependency>
<groupId>de.extio</groupId>
<artifactId>lm-lib</artifactId>
<version>2.11.3</version>
</dependency>
Requirements: Java 25 or higher, Spring Boot 4.0 or higher. The full documentation — model profiles, provider dialects, tool calling, graders and the complete agent reference — lives in the README, linked via the GitHub and Gitea buttons at the top of this page.
In practice — a real agent from Exo's CYOA
ActionClassifierAgent is one of dozens of lm-lib agents shipping in Exo's CYOA: it has the model classify
the player's instruction as JSON, JsonAgentResponseHandler parses the
answer into the agent context, and post processing filters the parsed fields down to usable actions.
Condensed for brevity.
What it does
game-engine is a modular game engine framework for building complex 2D games with comprehensive support for rendering, audio, localization, event management and persistent storage. Game functionality is organized into modules that can be dynamically loaded, activated and managed during runtime — so a game is composed of reusable, lifecycle-managed components instead of one monolithic loop.
The engine is built on Spring Boot 4 and Java 25 as a starter library using auto-configuration
exclusively: every subsystem ships its own *AutoConfiguration class and can be enabled or
disabled independently through game-engine.<subsystem>.enabled properties, so you use
only the components your game actually needs.
It is derived from Spacecraft Tactics, a 2D turn-based tactical space game released on Steam in 2023, and extracts and modernizes the core systems that powered its UI, campaign and built-in editors. Together with lm-lib, it is also the foundation of Exo's CYOA.
Subsystems
- Module system — Spring-managed modules with a load/activate/deactivate/unload lifecycle plus show/hide display states for client UI modules, including automatic cleanup of event handlers and rendering working sets.
- Rendering engine — 2D rendering with both cycle-based and stateful approaches, pooled rendering objects, and windows with container layout in normalized coordinates.
- Event system — concurrent, type-safe event bus using structured concurrency for decoupled communication between modules.
- Storage & resources — UUID- and path-based persistent storage with ZSTD compression and indexed lookups, plus static resource loading from the filesystem with streaming support.
- Localization — YAML-based i18n with an integrated GUI editor.
- Input & audio — rebindable key bindings with modifier support; multi-strategy audio playback (software mixing and Java mixer) with OGG Vorbis support.
- Steamworks integration — achievements, lobbies, rich presence and workshop support.
- Spatial & utilities — 2D spatial calculations with QuadTree and grid indexing, YAML serialization, ring buffers and fast UUID generation.
Get started
game-engine is distributed from source — clone it from GitHub or Gitea and install it into your local Maven repository:
git clone https://github.com/extio-de/game-engine.git && cd game-engine && mvn install
Then add the dependency to your build:
<dependency>
<groupId>de.extio</groupId>
<artifactId>game-engine</artifactId>
<version>1.0.40</version>
</dependency>
Requirements: Java 25 or higher, Spring Boot 4.0 or higher. DemoModule in the test sources
is the reference implementation for a first module — windows, rendering objects, event handling,
audio and localization in one place. The full documentation for every subsystem lives in the README,
linked via the GitHub and Gitea buttons at the top of this page.
In practice — a real module from Exo's CYOA
DisclaimerModule is one of dozens of game-engine modules shipping in Exo's CYOA: it owns a draggable
Window, builds its UI from pooled ControlRenderingBo objects, reacts to typed
events on the event bus and switches the displayed language through the localization service.
Condensed for brevity.
Legal information · Imprint
eXtIO.de does not use cookies and does not track.
Legal Disclosure
Information in accordance with Section 5 TMG
Address and phone number are provided as an image to protect against automated crawlers.
Disclaimer
Accountability for content
The contents of our pages have been created with the utmost care. However, we cannot guarantee the contents' accuracy, completeness or topicality. According to statutory provisions, we are furthermore responsible for our own content on these web pages. In this matter, please note that we are not obliged to monitor the transmitted or saved information of third parties, or investigate circumstances pointing to illegal activity. Our obligations to remove or block the use of information under generally applicable laws remain unaffected by this as per §§ 8 to 10 of the Telemedia Act (TMG).
Accountability for links
Responsibility for the content of external links (to web pages of third parties) lies solely with the operators of the linked pages. No violations were evident to us at the time of linking. Should any legal infringement become known to us, we will remove the respective link immediately.
Copyright
Our web pages and their contents are subject to German copyright law. Unless expressly permitted by law, every form of utilizing, reproducing or processing works subject to copyright protection on our web pages requires the prior consent of the respective owner of the rights. Individual reproductions of a work are only allowed for private use. The materials from these pages are copyrighted and any unauthorized use may violate copyright laws.
Privacy Policy
This website does not use cookies and also does not do tracking.
Technical log files that contain the IP address of the visitor are kept for 7 days. Purpose is to analyze
and repair technical issues.
These data are not shared with other parties.