aboutsummaryrefslogtreecommitdiffstats
path: root/research
diff options
context:
space:
mode:
Diffstat (limited to 'research')
-rw-r--r--research/gameplay-gaps.org40
1 files changed, 31 insertions, 9 deletions
diff --git a/research/gameplay-gaps.org b/research/gameplay-gaps.org
index 0d28e80..919e8b6 100644
--- a/research/gameplay-gaps.org
+++ b/research/gameplay-gaps.org
@@ -28,7 +28,8 @@ beam/ignite) with per-shot energy cost and firing arcs, a pre-built enemy fort
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.
+ HP, damaged by splash, beams and fire, and mounted on the strut graph so
+ cutting their supports destroys them (win condition path (c)).
- *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
@@ -43,7 +44,7 @@ Since the first draft of this document we also have:
* MISSING — grouped by system, each with the in-game reference
-** 1. The Reactor + win/loss [MOSTLY DONE — M5]
+** 1. The Reactor + win/loss [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
@@ -51,9 +52,31 @@ Win = destroy the enemy reactor by (a) direct damage, (b) fire/splash, or
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.
+restarts. Path (c) now also works: devices are mounted onto the strut graph
+(=BuildGraph::mount_device=, two mount-point nodes matching how struts attach)
+at placement time -- both map-load devices and interactively-placed ones snap
+onto the nearest strut within 2 world units. Each tick, after structural
+collapse (=kill_grounded=, strut snapping) runs, any device whose mount nodes
+were both destroyed has its HP zeroed, which flows through the existing
+win-condition/cleanup code unchanged (it was already correct once something
+actually killed the device on structural collapse -- nothing did, until now).
+=src/game/build_graph.{hpp,cpp}= own the mount bookkeeping, including a
+=break_node= index-shift fix so node indices stay correct after other geometry
+is destroyed elsewhere on the same fort. Fire damaging devices also landed as
+part of this: =update_fire= now damages any device whose mount strut is
+burning, proportional to burn state.
+
+Verified by =tools/device_collapse_test.cpp= (15/15 passing, headless, no
+SDL/Lua): tower-stands-under-gravity, reactor-destroyed-by-collapse,
+reactor-falls-when-platform-cut, reactor-survives-partial-support-loss,
+splash/beam/fire damage through mount struts, multiple devices on one
+structure, device-index stability across unrelated breaks, and clean unmount.
+=tools/sim_check.cpp= (all 3 maps, 5s soak) shows zero regressions.
+
+STILL MISSING: nothing for the core win-condition itself. Devices that aren't
+near any strut (radius 2.0) stay unmounted and immune to structural collapse,
+same as before this feature -- acceptable, since Forts devices are always
+built on structure in practice.
** 2. Real resource economy [CRITICAL for the core loop]
Two resources, generated by devices (all values from =devices/*.lua=):
@@ -72,10 +95,9 @@ 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.
+We have reactor, mine, turbine and battery, placeable with HP, now mounted on
+the strut graph (see #1) so they fall when their supports are cut. Remaining
+gap: most of the catalogue below is still absent.
From =devices/device_list.lua=:
- Resource: mine, mine2, turbine, turbine2, derrick, battery (energy store),