Files
dota_factory/docs/concept.md
2026-04-16 21:13:42 +02:00

5.3 KiB
Raw Blame History

Concept

Overview

A single-player asymmetric game inspired by DOTA's wave/tower structure, combined with a Factorio-style factory builder. The player builds a factory on an asteroid to supply shipyards that produce autonomous combat ships. Those ships fight off endless enemy waves advancing from the right. The goal is to survive as long as possible; elapsed time is always displayed.

Setting & Visuals

  • Science-fiction setting on the boundary between an asteroid and space.
  • 2D (or 2.5D) top-down view similar to Factorio.
  • The game world has a fixed height and scrolls horizontally.
  • The asteroid occupies the left portion of the world; space extends to the right.

Game World Layout (left to right)

  1. Asteroid — the player's factory and shipyards are built here. The HQ sits at the asteroid's right edge.
  2. Player defence stations — automatically engage approaching enemies; can be destroyed by the enemy.
  3. Enemy defence stations — the push target; can be destroyed by the player; mark the right boundary of the scrollable area.
  4. Enemy spawn area — waves originate from off-screen to the right.

Factory & Belts

  • Factory buildings placed by the player are queued and constructed one at a time, each taking some time to complete.
  • The crafting/production tree is defined in a config file so it can be extended without code changes.
  • Materials are transported between buildings using belts (straight, curved) and splitters.
  • Buildings accept any material delivered by belts feeding into them; there are no labeled input ports. Each building has one fixed output port.
  • Each building's input buffer can hold up to twice the amount needed for one production cycle of the selected recipe.

Resources & Building Blocks

Two sources feed the same production tree:

  • Mining — the starting resource method; ores are extracted from the asteroid and smelted into basic materials.
  • Scrap — collected by salvage ships from destroyed enemies; can be smelted into basic materials like mined ores, or processed in a Reprocessing Plant to extract higher-level intermediate products (fixed probabilities per product type).

Building blocks are the only globally shared resource. An assembler recipe produces them from materials; they are transported via belts into the HQ, which adds them to the global stock. Building blocks are spent to place factory buildings and to unlock additional asteroid columns.

Buildings

Building Size Description
HQ 4×3 Pre-placed. Accepts building blocks via belt and adds them to the global stock.
Miner 2×2 Player selects which ore type to extract. Ore never depletes.
Smelter 2×2 Converts ore or scrap into basic materials. No recipe selection needed.
Assembler 3×3 Player selects a recipe. Produces building blocks or intermediate/advanced products.
Reprocessing Plant 3×3 Converts scrap into higher-level products with fixed probabilities per product type.
Shipyard 4×2 Player selects a blueprint. Produces that ship type when required materials are available.
Belt 1×1 Transports materials. Comes in straight and curved variants.
Splitter 1×1 Splits a belt's flow into two outputs.

Ships & Shipyards

  • Shipyards are built at the asteroid's right edge.
  • The player clicks a shipyard to assign a blueprint; the shipyard then automatically produces that ship type whenever the required materials are available.
  • New blueprints are unlocked as loot from destroyed enemy defence stations.
  • Ships are fully autonomous. Known roles:
    • Combat ships — travel right and engage enemies.
    • Salvage ships — fly out, collect scrap from destroyed enemies, and return; vulnerable while operating.
    • Repair ships — fly out and repair damaged player defence stations and ships.

Enemy Waves & Difficulty Scaling

  • Waves consist of a single enemy ship type whose stats scale with difficulty.
  • Waves spawn over several seconds; a gap follows before the next wave begins spawning. The previous wave may still be approaching or fighting during the gap.
  • Difficulty scales multiplicatively from two sources:
    • Time scaling — enemy strength increases gradually over elapsed time.
    • Push scaling — destroying a set of enemy defence stations multiplies enemy strength by a configurable factor. The replacement stations are scaled by the same factor.

Push Mechanic

  • The player is not forced to push; purely defensive play is valid.
  • Destroying enemy defence stations applies the push scaling multiplier to all future waves, extends the scrollable area, and places a new (stronger) set of stations at the new boundary.
  • Destroyed enemy defence stations drop ship blueprints.

Starting Conditions & Game Over

  • The player starts with the HQ and player defence stations pre-placed and a stock of building blocks; no other buildings are pre-placed.
  • There is a grace period before the first wave to allow initial setup.
  • If all ships and player defence stations are destroyed, enemies attack the HQ. The game is lost when the HQ is destroyed. Factory buildings are never targeted.

Asteroid Expansion

  • The asteroid has a configurable number of columns at game start.
  • Additional columns are unlocked by spending building blocks (cost per column to be tuned).