aboutsummaryrefslogtreecommitdiffstats
path: root/research/gameplay-gaps.org
blob: c6d1b176568d0168b13c758c6c70ea537e8b9592 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
#+TITLE: Forts Gameplay — What Our Clone Is Missing (sourced)
#+AUTHOR: Forts Clone Project
#+DATE: 2026-07-01
#+OPTIONS: toc:3 num:t

* Purpose

An ENUMERATED, sourced list of gameplay systems Forts has that our clone does
not — so scope is driven by facts, not vibes. Ground truth is the shipped game
data (=SteamLibrary/.../Forts/data/=, device_list.lua / weapon_list.lua /
constants.lua) cross-checked against community docs:

- Steam guide "How to be a PRO at Vanilla Forts" (id 2035024654)
- Steam guide "Forts Glossary" (id 1380793614) and "Base Building" (1308699887)
- Forts RTS Wiki: Technology page
- Wikipedia: Forts (video game)

* What we HAVE (baseline)

Re-verified against the code on <2026-07-18>. Keep this section honest: it is
what the rest of the document is measured against.

Building (wood / bg-brace / rope), mass-spring structural sim with stress +
axial/angle breaking + cascading collapse, ground destroys debris, fire
(DoT + spread), per-strut HP, two weapons (cannon = ballistic, laser =
beam/ignite) with per-shot energy cost and firing arcs, a pre-built enemy fort
(=data/mods/enemy-fort/=), Lua-data + mods, a dev UI.

Since the first draft of this document we also have:
- *Devices*: reactor (=is_core=), mine, wind turbine, battery -- placeable, with
  HP, damaged by splash and beams.
- *A real economy*: mines on metal deposits, turbines scaling with height,
  storage caps, and metal/energy actually spent on building and firing.
- *A game loop*: win/lose when a team loses its last =is_core= device, plus
  restart on R.
- *Bring-your-own Forts art*: =texture_forts= paths load real sprites from the
  player's own install, falling back to the CC0 placeholders.

* MISSING — grouped by system, each with the in-game reference

** 1. The Reactor + win/loss  [MOSTLY DONE — M5]
The core the whole game is about. =devices/reactor.lua=: HitPoints 100 (fragile),
and it is ALSO a generator (EnergyProductionRate 100, MetalProductionRate 5).
Win = destroy the enemy reactor by (a) direct damage, (b) fire/splash, or
(c) cutting its supports so it falls.

DONE: the reactor exists as an =is_core= device that also generates, takes
splash and beam damage, and ends the round when a team has none left; R
restarts. STILL MISSING: fire does not damage devices, and path (c) does not
exist -- devices sit at fixed coordinates rather than being mounted on the strut
graph, so cutting the supports under a reactor never drops it.

** 2. Real resource economy  [CRITICAL for the core loop]
Two resources, generated by devices (all values from =devices/*.lua=):
- *Metal*: Mines on metal *deposits* (=mine.lua= MetalProductionRate 4,
  EnergyProductionRate -5 — mining COSTS energy). Upgrade =mine2= (5 metal, -7 e).
- *Energy*: Wind *Turbines* — output scales with HEIGHT and clearance
  (v0.1-core.org; MinWindEfficiency / MaxWindHeight fields). Reactor also makes
  100 energy + 5 metal baseline.
- *Storage caps*: Battery (=battery.lua= EnergyStorageCapacity 2000), Metal Store.
  Resources are capped, not infinite pools.
- *Costs*: building pieces, weapons, devices, AND FIRING all cost metal/energy
  (cannon EnergyFireCost 2000, MetalFireCost 50). Repair costs too.
DONE in M5: mines on deposits, turbines scaling with height, battery storage
caps, and metal/energy spent on both building and firing. STILL MISSING: the
upgraded variants (mine2, turbine2), the derrick and the metal store, and
repair costs (see #7).

** 3. Devices  [PARTIAL — we now have 4 of them]
We have reactor, mine, turbine and battery, placeable with HP. Two structural
gaps remain: devices are NOT mounted on the strut graph (they sit at fixed
coordinates, so they cannot fall when their supports are cut -- see #1), and
most of the catalogue below is still absent.

From =devices/device_list.lua=:
- Resource: mine, mine2, turbine, turbine2, derrick, battery (energy store),
  store (metal store), reactor, minireactor.
- Tech buildings: workshop, armoury, munitions plant, factory, upgrade centre
  (see #4).
- Utility/defence: sandbags (HP 300, cheap absorber), explosive barrel (barrel),
  target (mission objective, HP 30).
Devices mount on structure, have HP, can be shot, and some need clearance/ground.

** 4. Tech tree + Upgrades  [large system, OUT of v0.1 scope but core to Forts]
5 tech buildings gate weapons (wiki Technology; weapon_list Prerequisite fields):
- Workshop -> Mortar, Swarm Missiles
- Armoury -> Flak, EMP Rocket
- Munitions Plant -> 20mm Cannon, Cannon   (needs Armoury)
- Factory -> Firebeam, Plasma Laser         (needs Workshop)
- Upgrade Centre -> unlocks UPGRADING existing weapons/devices (mine2, turbine2,
  mortar2, sniper2, minigun … =Prerequisite = "upgrade"=).
Research/prereqs create build-order strategy. We have neither tech nor upgrades.

** 5. More weapons  [M4 continues]
We have cannon + laser. Full vanilla roster (=weapons/weapon_list.lua=):
machinegun, minigun (point-defence / anti-projectile), sniper (+spotter
mechanic, guides swarm missiles), mortar (high-arc, high building damage),
swarm missiles (guided), missile launcher, 20mm cannon, cannon, flak
(anti-projectile), EMP rocket (disables devices), firebeam / plasma laser
(beam). Notable *mechanics* we lack: point-defence (shoot down incoming shells),
guided/tracking projectiles, hitscan (machinegun/sniper), EMP disable.

** 6. Building materials we lack
=materials/building_materials.lua=: *armour* (HP 400, +25% stiffness, 2x mass —
kinetic tank), *door* (openable/closable, blocks then opens for your own fire),
*energy shield* (reflects beams/plasma, warmup), *metal beam*, *camo*, *solar*
(energy on the strut), *fuse* (relays fire slowly). We have wood/bg/rope only.
Doors and shields are real tactical mechanics (open to shoot, shield vs lasers).

** 7. Fort actions: Repair + Recycle  [our M7]
- *Repair*: restore a damaged piece/device for resources proportional to damage
  (Forts Repair.EnergyCostMultiplier; materials MetalRepairCost/EnergyRepairCost).
- *Recycle/Scrap*: remove a piece, recover partial resources (MetalReclaim,
  ScrapTime). We have neither.

** 8. Weapon aiming/firing details we simplified
- Cannon/weapons cost energy+metal PER SHOT (EnergyFireCost) — firing is
  resource-limited, not just reload-limited. DONE for energy (=energy_cost= per
  weapon); the per-shot METAL cost is still missing.
- Recoil/kickback pushes the fort (we apply knockback to targets only, not
  recoil to the firing structure — Forts Recoil 600000, KickbackMean 40).
- Spotters: sniper reveals targets and guides swarm missiles.
- Fire-clearance: a weapon won't fire if its own structure blocks the muzzle
  (MinFireClearance) — prevents shooting through your own fort.

** 9. Commanders + Factions  [OUT of v0.1 scope]
15 commanders across 5 factions, each with a passive trait + active ability
(e.g. Firebird halves fire spread & double-extinguishes on her forts). Huge
matchup variety. Purely a post-v1 concern but defines Forts' identity.

** 10. Map / world systems
- Metal *deposits* embedded in terrain (mine targets) — we have none.
- Terrain shape + foundation material chosen by ground *slope angle*
  (StandardNode.Foundations brackets by angle). Ours is a flat half-plane.
- No-build zones, destructible terrain, water/buoyancy (High Seas DLC).

** 11. Meta / not-gameplay-but-expected
Skirmish AI opponent, campaign/missions, multiplayer lockstep netcode,
replays (trivial with deterministic lockstep), sandbox. All post-v0.1.

* Priority for OUR roadmap

Mapping the above onto the (already-reordered) milestones:

| Gap                                   | Milestone | Status / notes                 |
|---------------------------------------+-----------+--------------------------------|
| Reactor + win/loss + restart          | M5        | DONE; no collapse-win path     |
| Resource economy (mine/turbine/store) | M5        | DONE (no mine2/turbine2/store) |
| Per-shot energy cost                  | M4        | DONE (metal-per-shot missing)  |
| Devices framework (mount on struts)   | M5/M6     | not mounted on strut graph     |
| Armour + Door + Shield materials      | M4/M7     | data-driven, small each        |
| Firing recoil on the shooter          | M4        | small, faithful, not started   |
| More weapons (mortar/flak/mg/missile) | M4        | point-defence + guided are new |
| Repair + Recycle                      | M7        | resource-cost actions          |
| Tech tree + Upgrades                  | post-v0.1 | big; build-order strategy      |
| Commanders/Factions                   | post-v0.1 | defines identity, large        |
| Map deposits / terrain / foundations  | M6        | deposits done; terrain flat    |
| AI / campaign / multiplayer           | post-v1   | out of scope                   |

* Smallest high-value next steps (concrete)

Items 1 and 2 of the original list (reactor + win/loss, real resources) are DONE;
what follows is the refreshed queue.

1. *Armour material*: data-only addition to =data/materials.lua= (Forts armour is
   HP 400, +25% stiffness, 2x mass). The material system already has every field
   it needs, and =materials/armor.tga= is a TGA, so =texture_forts= picks up the
   real sprite for free. Cheapest real gameplay depth available.
2. *Firing recoil*: apply an impulse to the FIRING structure, not just the target
   (Forts Recoil 600000, KickbackMean 40). The knockback machinery already
   exists; this is a few lines and makes combat feel like Forts.
3. *Mount devices on the strut graph*: attach devices to nodes so cutting the
   supports drops them. Unlocks the second victory path in #1 and makes reactors
   killable by collapse, which is a signature Forts moment.
4. *Door material*: toggles =blocks_projectiles= so you can open to shoot and
   close to tank. Needs a small mechanic, not just data.
5. *Mortar or flak*: the next weapons. Flak brings a genuinely new mechanic
   (point-defence intercepting incoming shells); mortar is a high-arc,
   high-building-damage counterpart to the cannon.