feat: card layer — 2-slot hand, build-generated charges, card-time freeze/dilate

Hand (CanvasLayer, PROCESS_MODE_ALWAYS): Space toggles the hand, Q/E
play slot 1/2, charges accrue from auto-fire hits (4 hits/charge, cap
5). KINETIC card: radial shockwave shove + light damage. HEAT card:
paints heat status in a radius; heat accumulates, glows, detonates at
threshold (damage only, no knockback — tag purity). Freeze/dilate is
an exposed knob: [ and ] step dilation 0.0-0.3 live.

Freeze uses SceneTree.paused, not Engine.time_scale = 0: probed on
4.7 headless — time_scale 0 still steps physics with delta 0, so
delta-independent logic (heat thresholds, contact callbacks) kept
firing while nominally frozen. Dilation > 0 uses time_scale slow-mo.
Hand._exit_tree restores pause + time_scale so hull-zero reloads can
never strand a frozen world.

Smoke gate extended: charge accrual from build hits, pause-on-open at
knob 0, HEAT x2 spend + threshold, detonation on release. 3/3 green
on nh3-dev headless 4.7.1.
This commit is contained in:
vh
2026-08-06 22:42:46 -07:00
parent 380088c694
commit c340b7bc48
8 changed files with 405 additions and 9 deletions
+19 -1
View File
@@ -1,8 +1,10 @@
[gd_scene load_steps=6 format=3]
[gd_scene load_steps=8 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"]
[sub_resource type="RectangleShape2D" id="wall_h"]
size = Vector2(640, 16)
@@ -66,3 +68,19 @@ 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")