Files
vh fc4fc59a2b 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.
2026-08-07 20:30:43 -07:00

104 lines
2.9 KiB
Plaintext

[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"]
[ext_resource type="Script" path="res://scripts/spawner.gd" id="3"]
[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)
[sub_resource type="RectangleShape2D" id="wall_v"]
size = Vector2(16, 360)
[node name="Arena" type="Node2D"]
script = ExtResource("1")
[node name="WallTop" type="StaticBody2D" parent="."]
position = Vector2(320, 8)
collision_layer = 1
collision_mask = 0
[node name="Collision" type="CollisionShape2D" parent="WallTop"]
shape = SubResource("wall_h")
[node name="WallBottom" type="StaticBody2D" parent="."]
position = Vector2(320, 352)
collision_layer = 1
collision_mask = 0
[node name="Collision" type="CollisionShape2D" parent="WallBottom"]
shape = SubResource("wall_h")
[node name="WallLeft" type="StaticBody2D" parent="."]
position = Vector2(8, 180)
collision_layer = 1
collision_mask = 0
[node name="Collision" type="CollisionShape2D" parent="WallLeft"]
shape = SubResource("wall_v")
[node name="WallRight" type="StaticBody2D" parent="."]
position = Vector2(632, 180)
collision_layer = 1
collision_mask = 0
[node name="Collision" type="CollisionShape2D" parent="WallRight"]
shape = SubResource("wall_v")
[node name="Mech" parent="." instance=ExtResource("2")]
position = Vector2(320, 180)
[node name="Spawner" type="Node2D" parent="."]
script = ExtResource("3")
[node name="Sting" type="AudioStreamPlayer" parent="."]
stream = ExtResource("6")
volume_db = -6.0
[node name="HUD" type="CanvasLayer" parent="."]
[node name="HullBack" type="ColorRect" parent="HUD"]
offset_left = 8.0
offset_top = 8.0
offset_right = 128.0
offset_bottom = 14.0
color = Color(0.06, 0.07, 0.08, 1)
[node name="HullFill" type="ColorRect" parent="HUD"]
offset_left = 9.0
offset_top = 9.0
offset_right = 127.0
offset_bottom = 13.0
color = Color(0.55, 0.8, 0.55, 1)
[node name="Hand" type="CanvasLayer" parent="."]
layer = 2
script = ExtResource("4")
[node name="Dim" type="ColorRect" parent="Hand"]
visible = false
anchor_right = 1.0
anchor_bottom = 1.0
color = Color(0, 0, 0, 0.35)
[node name="HUD" type="Control" parent="Hand"]
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")