Vision, requirements, tech stack, and phased roadmap for the space survival game, plus Unreal-appropriate .gitignore/.gitattributes and Git LFS setup.
5.9 KiB
5.9 KiB
Tech Stack
Engine & language
- Unreal Engine 5 (latest stable release at time of starting, e.g. 5.4/5.5 — verify current LTS-ish version when you install).
- C++ for core systems, Blueprint for iteration/content glue. As a solo dev newer to Unreal: prototype gameplay logic in Blueprint first, then move performance- or replication-critical code (ship building grid, networked movement, inventory) into C++ once the design is proven. Don't build the whole game in Blueprint and don't build the whole game in C++ from day one either — the hybrid is standard Unreal practice, not a compromise.
- Visual Studio 2022 (Windows) as the C++ IDE/toolchain.
Version control
- Git + Git LFS for the project (binary assets — meshes, textures, audio —
must go through LFS or the repo becomes unusable). This repo has been
initialized; add a
.gitattributesfor LFS and an Unreal-appropriate.gitignorebefore the first Unreal project commit. - Perforce is the more common choice at studios for large binary-heavy UE projects, but Git LFS is sufficient for a solo/small-team project and keeps your existing GitHub workflow.
Networking (Core phase — session-based multiplayer)
- Unreal's built-in actor replication for gameplay state (ship position, block placement, inventory, damage).
- Epic Online Services (EOS) for session creation/discovery, friend invites, and cross-platform accounts — chosen over Steamworks-only APIs specifically because you want console support eventually. EOS is free and is the standard path to PC+console cross-play in Unreal.
- Dedicated server build target (headless
UnrealServerbuild) so a session can be hosted without a full client running, even before persistence exists.
Backend & persistence (Stretch phase — persistent shared world)
This is the biggest jump in complexity and the part most likely to get descoped. Recommended shape when you get here:
- Sharding by star system, not one seamless server. Each star system instance runs as its own dedicated server process. Traveling between systems is a disconnect/reconnect to a different server instance (conceptually like EVE Online's per-constellation model, simplified). This avoids the single hardest unsolved problem in the genre (Star Citizen's seamless single-shard server meshing) and is achievable for a small team.
- A backend service outside Unreal for anything that must survive a server
restart: player accounts, ship/base ownership and layout, galaxy generation
seeds, and per-system deltas (what's been mined, what's been built).
- Service layer: a small REST or gRPC API (Node.js, Go, or C# — pick whatever you're already comfortable with; this is a small service, not a place to learn a new language under pressure).
- Database: PostgreSQL. Relational is the right fit for accounts, ownership, and structured ship/base data.
- On-demand server orchestration: system servers spin up when a player jumps in and idle down when empty, rather than running every possible system 24/7. Start manual (a script that launches a server process per active system) — only reach for Kubernetes/Agones-style orchestration if you actually hit the scale that needs it.
- Cloud hosting: any provider works; budget is the main constraint here more than technical fit (AWS/GCP/a cheaper VPS host are all fine for the scale in 02_REQUIREMENTS.md's non-functional target of "dozens per shard").
Procedural generation
- Seed-based deterministic generation: a star system's layout and a planet's terrain/biome are derived from a seed, not stored wholesale. Only store deltas (player-built structures, depleted resource nodes) in the database — this is what makes a "big" galaxy cheap to persist.
- Noise library: Unreal's built-in noise nodes are fine to start; FastNoise2 (available as a plugin) if you need more control/performance for terrain.
- Recommend deferring full procedural planet terrain until after Phase 3 (02_REQUIREMENTS.md marks it Stretch) — hand-authored landing zones get you a playable game much faster and de-risk the building/survival/multiplayer work first.
Planet rendering approach
- Start with instanced landing zones: a bounded terrain tile (built with UE5 Landscape + World Partition for streaming, Nanite for detail where useful) that you load into when landing, rather than a fully seamless planet sphere. This is explicitly the pragmatic call flagged in 01_VISION.md — seamless space-to-surface (No Man's Sky/Star Citizen-style) is a well-known multi-year problem even for funded teams.
- If/when seamless landing becomes a real goal, that's a dedicated R&D phase on its own (large-scale floating-origin rendering, planet-scale LOD) — don't plan it into an early milestone.
Ship/base construction system
- No first-party Unreal system does grid-based modular construction
out of the box; this needs custom work:
- A snap-grid attachment system (component-based: each block is an actor or instanced static mesh with defined attachment points).
- Underlying systems (power, thrust, life support) modeled as data that blocks contribute to/consume from, independent of the visual mesh.
- Check the Unreal Marketplace/Fab for existing modular building or grid-snap plugins to jumpstart the visual/placement layer — but expect to write the systems layer (power/thrust/life-support simulation) yourself, since that's specific to this game's design.
Tooling summary
| Purpose | Tool |
|---|---|
| Engine | Unreal Engine 5 (latest stable) |
| IDE | Visual Studio 2022 |
| Source control | Git + Git LFS |
| Multiplayer sessions/accounts | Epic Online Services |
| Backend API (Stretch) | Node.js/Go/C# REST or gRPC service |
| Database (Stretch) | PostgreSQL |
| Procedural noise | UE built-in, or FastNoise2 plugin |
| CI (once useful) | GitHub Actions or Jenkins for automated builds |