Files
dota_factory/docs/concept.md
2026-04-15 22:12:33 +02:00

96 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.
## 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 surface occupies the left portion of the world; space extends to the right.
- The number of buildable tiles on the asteroid is configurable.
## Game World Layout (left to right)
1. **Asteroid** — factory and shipyards are built here.
2. **Player defence stations** — a set of stations positioned in space at some distance from the asteroid edge. They automatically engage approaching enemies. They can be destroyed.
3. **Enemy defence stations** — a set of stations further to the right of the player's stations. The player can only scroll the view up to these stations. They are the push target.
4. **Enemy spawn area** — enemy waves originate from off-screen to the right.
## Factory
- The player constructs factory buildings on the asteroid to produce materials and ship parts.
- Buildings are placed in a queue and constructed one at a time; each building takes time to complete.
- The crafting/production tree is defined in a config file so it can be extended later without code changes.
- The factory is simpler than Factorio in depth but follows the same production-chain principle.
- Materials are transported between buildings manually using **belts**.
## Resources & Building Blocks
Two sources feed the same production tree:
- **Mining** — the player's starting resource method. Ores are extracted from the asteroid and smelted into basic materials.
- **Scrap** — collected by dedicated salvage ships from destroyed enemy ships.
- Scrap can be smelted into the same basic materials as mined ores.
- A dedicated **Reprocessing Plant** building can extract higher-level intermediate products from scrap (with fixed probabilities per product type), bypassing parts of the normal crafting chain.
**Building Blocks** are the one globally shared resource:
- An assembler recipe turns input materials into building blocks.
- Building blocks are transported via belts into the HQ, where they are added to the global building blocks stock.
- The global building blocks stock is the only global inventory; all other materials exist only in buildings and on belts.
- Building blocks are spent to place new factory buildings and to unlock new asteroid columns (see Asteroid Expansion).
## Ships & Shipyards
- Shipyards are built at the edge of the asteroid.
- When the player clicks a shipyard, they choose a blueprint from all currently unlocked blueprints.
- The shipyard automatically produces one ship of the selected blueprint whenever all required materials are available in the shipyard.
- Ships are fully autonomous and do not require player input. Known ship roles:
- **Combat ships** — travel right and engage enemy ships.
- **Salvage ships** — fly out to the battlefield, collect scrap from destroyed enemy ships, and return to the asteroid. They are vulnerable to enemy ships while operating.
- **Repair ships** — fly out and repair damaged player defence stations and other player ships in the field.
- If the player's ships are all destroyed, enemy ships advance unhindered toward the player's defence stations and then the asteroid.
## Enemy Waves & Difficulty Scaling
- Waves spawn continuously over a period of several seconds, then there is a gap before the next wave begins spawning.
- The previous wave may still be in transit or fighting during the gap — there is no hard "wave cleared" state.
- Difficulty scales multiplicatively from two independent sources:
- **Time scaling** — enemy strength increases gradually over elapsed game time.
- **Push scaling** — each time the player destroys a set of enemy defence stations, enemy strength is multiplied by a configurable factor (e.g. 1.5×). This factor also determines the strength of the replacement defence stations.
- Both scaling factors stack multiplicatively.
## Push Mechanic (Enemy Defence Stations)
- The enemy owns a pair of defence stations positioned just beyond the scrollable area boundary.
- The player is **not** forced to push — purely defensive play is valid.
- If the player's fleet becomes strong enough that incoming waves are trivial, pushing to destroy enemy defence stations provides a new challenge: destroying them multiplies the enemy threat level by the configurable push scaling factor (starting with the next wave), extends the scrollable area, and places a new pair of stations (scaled by the same factor) at the new boundary.
- Destroyed enemy defence stations drop loot: primarily **ship blueprints** that unlock new ship types at shipyards.
## Starting Conditions
- The player starts with the **HQ** pre-placed and a stock of building blocks.
- Enemy waves do not begin immediately; there is a grace period at the start to allow initial factory setup.
## Game Over Condition
- There is a **Headquarters (HQ)** building at the asteroid edge, through which building blocks enter the global stock via belts.
- If enemy ships breach the asteroid — all player ships and defence stations destroyed — they attack the HQ.
- The game is lost when the HQ is destroyed.
- Individual factory buildings are **not** targeted or destroyed by enemies.
## Progression & Goals
- The primary goal is to survive as long as possible.
- Elapsed time is always displayed.
- New ship blueprints are unlocked by destroying enemy defence stations.
## Asteroid Expansion
- The asteroid has a fixed number of columns, configurable at game start.
- Additional columns can be unlocked by spending building blocks from the global stock.
- Each unlocked column costs a fixed amount of building blocks (value to be tuned).