Inspiration
Phone sandbox games usually pick one lane: you build, or you explore, or you automate, or you grind loot. We wanted to see what happens when you stitch all of those genres together into one creature, and make it run offline on a mid-range phone with no artist and no audio designer. That is the Frankenstein brief taken literally.
What it does
PlanetCraft: Galactic Survival is an original, fully offline 3D voxel survival sandbox for Android. You crash-land on an alien world, mine and build, automate a colony, tame and hunt alien creatures, fly between six worlds and terraform dead planets into living ones.
The chimera, part by part:
| Part | Usually found in | In PlanetCraft |
|---|---|---|
| Block-by-block building | Sandbox builders | Streaming 16x16x128 chunk engine with greedy meshing and ambient occlusion |
| Space exploration | Space games | 6 seed-generated worlds, ship assembly, star map, jumps |
| Factory automation | Automation sims | Power grid, miner drones, auto-smelting, production while you are on another planet |
| Survival | Survival games | Oxygen, suit energy, food, temperature, radiation, storms |
| Loot and bosses | Action RPGs | Rarity tiers, elite variants, 16 rare-or-better items, a bestiary, the Void Guardian boss |
| Planet simulation | Terraforming / god games | Mining raises pollution; terraformers change atmosphere, water, life, sky colour and ground |
| Story | Narrative RPGs | 25-step campaign in 6 chapters, 6 NPCs, 14 side jobs, trading |
Plus 61 placeable blocks, 75 data-driven recipes, 11 creatures with procedural animation, a drivable rover, weather and meteor showers, an offline cosmetic Stellar Store, touch controls and full settings. The APK requests no permissions and works fully offline.
How we built it
The technology chimera is just as mixed as the genres:
- Godot 4.7.2 + GDScript for the engine, UI and Android export.
- A custom voxel engine in GDScript: seeded generation, padded-volume greedy mesher, WorkerThreadPool streaming, DDA raycasts, AABB voxel physics.
- Custom GL ES 3.0 shaders: terrain lighting from a Texture2DArray, wind sway, fluids, and a procedural sky with a ringed planet, stars, clouds and storms.
- Procedural pixel art: all 78 block textures and every item icon are generated from JSON recipes at boot.
- Procedural audio: 28 sound effects from oscillators and noise, plus generative day/night music rendered on a background thread. The repo has no image or audio assets apart from the SVG app icon.
- A JSON data layer: 12 data files drive content, so new planets, creatures or quests need no code.
- Python, PowerShell + adb, and GitHub Actions for tooling, real-device testing and CI that tests and exports the APK on every push.
How Kiro was used
The whole project was built from an empty folder with Kiro CLI:
- Steering docs (
.kiro/steering/product.md,tech.md,structure.md) pinned the hard rules from day one: offline only, original art, 30+ FPS on mid-range Android, Godot 4.7.2 + GDScript only, no nodes touched from worker threads, all content indata/*.json, and an honesty rule that the docs must list limitations instead of overstating features. These rules are visible in the code, for example the worker threads only touch packed arrays. - Spec-driven development (
.kiro/specs/phase1-foundationandphase2-4-gameplay): requirements R1 to R17 with acceptance criteria, a design doc and 28 tasks. The design decided things before code existed, such as the column-contiguous block index the mesher relies on, the face-key format that keeps AO exact when quads merge, and clockwise winding that a test later checks. Compared with vibe coding, the spec kept a game this size coherent across many sessions. - Agentic verification: Kiro ran
godot --headless --importafter changes to catch GDScript errors, grew a headless suite to 47 checks, and wrote a gameplay bot (tests/autoplay.gd) whose screenshots it inspected. That is how it caught a zero-size HUD, spawning inside a cave, and a planet jump that reloaded the old planet. - Real-device loop over adb: install, launch, simulated touch, logcat
[PERF]lines and screenshots. The first run showed 20 FPS; Kiro changed render scale and lighting and reached about 50 FPS on a Redmi Note 11. - MCP:
.kiro/settings/mcp.jsonconnects a local gateway with Blender and Godot tools, set up and verified in-session. It was not used to make game assets, since all art is procedural by design. - Agent hooks were not used in this project.
Challenges we ran into
- Voxel meshing and world generation are CPU-heavy, and GDScript is interpreted, on a phone. The fix was threading plus data layout (column-contiguous blocks, padded volumes) and a per-frame mesh budget.
- Automation and planet simulation want the whole universe running, but a phone can afford one planet. Other worlds advance with a time-delta simulation when you return.
- Original art and sound for dozens of systems with no artist: everything is synthesised by code, which also keeps the APK small and the style consistent.
- GitHub's CDN returned 504s on the 1.2 GB Godot template archive, so Kiro wrote a Python tool that pulls only the Android entries with HTTP range requests.
Accomplishments that we're proud of
- Seven genres in one 29 MB APK with zero permissions, running fully offline.
- Not a single hand-made texture or sound file in the repo.
- About 50 FPS on a mid-range Snapdragon 680 phone, up from 20 FPS on the first device run.
- CI that tests and builds the APK on every push and publishes releases.
What we learned
Steering and specs matter more as a project grows. Writing the constraints down once meant Kiro kept respecting performance and offline rules even when we redirected it mid-session ("make everything much more massive", "add a main story, NPCs and music", "add an offline store and rare drops"). Letting Kiro look at its own screenshots found bugs that unit tests could not.
What's next for PlanetCraft: Galactic Survival
Wired power networks and real conveyor transport, modular space stations with zero-g building, underground multi-room dungeons with a second boss, colonist AI that builds from blueprints, far-terrain LOD, flowing water and lava, a balancing pass, and a release-signed Play Store build.
Known limits today (honest list): balancing is first-pass, the APK is debug-signed, and it has been tested on one physical device.