feat: M2 run skeleton — belt, card draft, node fork, room sequencing, run tally

Belt (canon: charges are the cost, the belt is the ammo): cards are
CARD_TYPES indices consumed on play, next slides into the 2-slot hand;
belt cap 8; HUD shows hand glyphs + upcoming-card ticks. Card pool
grows to 4: SHOCKWAVE, HEATWAVE, DASH (impulse along held movement
direction — aimable while frozen, no aim input), IGNITE (nearest-enemy
heat spike past threshold). Rooms: spawn-budget waves (base 8 +4/room,
4 rooms/run); clear -> interstitial fork (CARD vs SCRAP +8) -> CARD
opens a 3-option draft + scrap decline (+4) -> next room; final clear
or mech destruction -> tally overlay (rooms/kills/scrap/chem) with
relaunch on 1. Interstitial owns the pause while active; the hand
yields input and time authority to it. Mech death now signals the run
manager instead of hard-reloading.

Chain semantics (same-tag surge / cross-tag chemistry trigger)
deliberately deferred to M3.

Smoke gate: belt consumption white-boxed in the card phase, _until
moved to process_frame (physics awaits deadlock under pause), run
phase covers clear->fork->draft->belt growth->room advance->tally.
3/3 green on nh3-dev headless 4.7.1.
This commit is contained in:
vh
2026-08-07 20:30:43 -07:00
parent 32383865f1
commit fc4fc59a2b
14 changed files with 474 additions and 46 deletions
+13 -1
View File
@@ -1,4 +1,4 @@
[gd_scene load_steps=9 format=3]
[gd_scene load_steps=11 format=3]
[ext_resource type="Script" path="res://scripts/arena.gd" id="1"]
[ext_resource type="PackedScene" path="res://scenes/mech.tscn" id="2"]
@@ -6,6 +6,8 @@
[ext_resource type="Script" path="res://scripts/hand.gd" id="4"]
[ext_resource type="Script" path="res://scripts/hand_hud.gd" id="5"]
[ext_resource type="AudioStream" path="res://assets/audio/chem_sting_kinetic_heat_ph.wav" id="6"]
[ext_resource type="Script" path="res://scripts/interstitial.gd" id="7"]
[ext_resource type="Script" path="res://scripts/interstitial_hud.gd" id="8"]
[sub_resource type="RectangleShape2D" id="wall_h"]
size = Vector2(640, 16)
@@ -89,3 +91,13 @@ anchor_right = 1.0
anchor_bottom = 1.0
mouse_filter = 2
script = ExtResource("5")
[node name="Interstitial" type="CanvasLayer" parent="."]
layer = 3
script = ExtResource("7")
[node name="HUD" type="Control" parent="Interstitial"]
anchor_right = 1.0
anchor_bottom = 1.0
mouse_filter = 2
script = ExtResource("8")