aboutsummaryrefslogtreecommitdiffstats
path: root/research/gameplay-gaps.org
diff options
context:
space:
mode:
authorEmil A. Overbeck <emil.a.overbeck@gmail.com>2026-07-19 02:57:01 +0200
committerEmil A. Overbeck <emil.a.overbeck@gmail.com>2026-07-19 02:57:01 +0200
commitd42411ef884484c9c49482dd944a8394e78d8e15 (patch)
treeea1100f54056ee5549cf6bf7c594a944c72f4e5c /research/gameplay-gaps.org
parent0807c89343480b15c7b63a0e864782179eb28ef5 (diff)
downloadforts_clone-d42411ef884484c9c49482dd944a8394e78d8e15.tar.gz
forts_clone-d42411ef884484c9c49482dd944a8394e78d8e15.zip
Update docs
Diffstat (limited to 'research/gameplay-gaps.org')
-rw-r--r--research/gameplay-gaps.org88
1 files changed, 62 insertions, 26 deletions
diff --git a/research/gameplay-gaps.org b/research/gameplay-gaps.org
index 4974ef6..c6d1b17 100644
--- a/research/gameplay-gaps.org
+++ b/research/gameplay-gaps.org
@@ -17,20 +17,38 @@ constants.lua) cross-checked against community docs:
* 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), HP, two weapons (cannon = ballistic, laser = beam/ignite),
-a static enemy fort, Lua-data + mods, a dev UI. Resources are a placeholder
-(depleting pools, no generation).
+(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 [CRITICAL — this is the actual game]
+** 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. We have no reactor, no win/loss, no restart.
--> our M5.
+(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=):
@@ -43,9 +61,17 @@ Two resources, generated by devices (all values from =devices/*.lua=):
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.
-We have placeholder pools only. -> deferred to our M5.
+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.
-** 3. Devices (whole category — we have ZERO)
From =devices/device_list.lua=:
- Resource: mine, mine2, turbine, turbine2, derrick, battery (energy store),
store (metal store), reactor, minireactor.
@@ -89,7 +115,8 @@ Doors and shields are real tactical mechanics (open to shoot, shield vs lasers).
** 8. Weapon aiming/firing details we simplified
- Cannon/weapons cost energy+metal PER SHOT (EnergyFireCost) — firing is
- resource-limited, not just reload-limited.
+ 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.
@@ -115,29 +142,38 @@ replays (trivial with deterministic lockstep), sandbox. All post-v0.1.
Mapping the above onto the (already-reordered) milestones:
-| Gap | Milestone | Notes |
+| Gap | Milestone | Status / notes |
|---------------------------------------+-----------+--------------------------------|
-| Reactor + win/loss + restart | M5 | the actual objective |
-| Resource economy (mine/turbine/store) | M5 | deposits, generation, caps |
-| Repair + Recycle | M7 | resource-cost actions |
-| Devices framework (mount on struts) | M5/M6 | reactor is the first device |
+| 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 |
-| Per-shot energy cost + recoil | M4 | small, faithful |
+| 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 | needs a real map format |
+| Map deposits / terrain / foundations | M6 | deposits done; terrain flat |
| AI / campaign / multiplayer | post-v1 | out of scope |
* Smallest high-value next steps (concrete)
-1. *Reactor as a device + win/loss* (M5 kickoff): a mountable block with HP that,
- at 0 HP or when disconnected from a foundation, ends the round. Gives the game
- an actual goal to shoot for. (We already destroy struts and detect
- foundation-connectivity, so both victory paths are within reach.)
-2. *Real resources*: mines on deposits (+metal, -energy), turbines (+energy by
- height), storage caps, and make building/firing actually spend them.
-3. *Armour + Door materials*: data-only additions to the Lua material table
- (armour = high HP/stiff/heavy; door = toggles blocking) — cheap, high value.
-4. *Per-shot energy cost + firing recoil* on the cannon/laser — a few lines,
- makes combat feel like Forts.
+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.