Character and movement pass
NPC characters - Articulated rig (hips/knees, shoulders/elbows/hands) replaces rigid capsules; the walk cycle bends knees and elbows and flees with a longer stride. - Layered outfits (jacket/vest/coat/dress), extended accessories and hand items (bag, umbrella, phone, camera, clipboard, cup), face details and five hair silhouettes, all deterministic per profile seed. - Idle behaviour layers (phone, clipboard, crossed arms, look-around), breathing and weight shift; escalation raises hands or points, and noticed NPCs turn toward the guard. - Reaction symbols above the head (!!, ?!, !, ?), door-queue offsets assigned by GameManager, three LOD tiers with hysteresis and a billboard impostor. - smoke_npc_budget.gd: 16 avatars = 534 meshes, ~6.9 ms average (50 ms budget). Player movement - Separate accel/decel, step-up assist for kerbs and the entrance steps, and a forward-axis fix: W was inverted (get_axis(forward, back) is negative). - Head bob, landing dip and precision-walk FOV, gated by persisted head-bob and invert-Y settings; precision chip and tick; surface-aware footsteps and a landing cue forwarded to AudioFeedback. - Gamepad support (sticks, deadzone, face buttons, bumpers), a control legend that follows the active device, and named actions for the remaining keys. - Key/button remapping in Settings, persisted as input_bindings and applied by InputBindings (mouse and gamepad axes are never removed). - smoke_movement.gd (windowed): climbs the steps, checks precision speed, chip, footsteps and landing; new 11-precision-walk capture and catalogue entry. Verification: headless 208/208, Python tooling 56/56, all 11 smokes pass, compare 11 good / 0 bad, movement judge match. Version 0.5.0. Only optional Future ideas remain in TODO.
This commit is contained in:
1 parent
2a4e0d1998
commit
a27e8cb74c
35 files changed
+1608
-185
No files matched your search
@@ -45,6 +45,8 @@ var wand_panel: PanelContainer
|
||||
var wand_text: Label
|
||||
var wand_meta: Label
|
||||
var escalation_label: Label
|
||||
var precision_label: Label
|
||||
var _controls_label: Label
|
||||
|
||||
var _debug_enabled := false
|
||||
var _log_lines: Array[String] = []
|
||||
@@ -119,7 +121,9 @@ func _init() -> void:
|
||||
controls.text = Strings.lookup("hud.controls")
|
||||
controls.add_theme_font_size_override("font_size", 12)
|
||||
controls.modulate = Color(0.8, 0.8, 0.85)
|
||||
controls.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART
|
||||
vbox.add_child(controls)
|
||||
_controls_label = controls
|
||||
|
||||
# --- emergency radio cooldown indicator ---
|
||||
radio_cooldown_label = Label.new()
|
||||
@@ -133,6 +137,12 @@ func _init() -> void:
|
||||
mode_label.text = "Door: open · Light: off"
|
||||
mode_label.add_theme_font_size_override("font_size", 13)
|
||||
mode_label.modulate = Color(0.85, 0.85, 0.9)
|
||||
precision_label = Label.new()
|
||||
precision_label.text = Strings.lookup("hud.precision")
|
||||
precision_label.add_theme_font_size_override("font_size", 12)
|
||||
precision_label.modulate = Color(0.55, 0.85, 1.0)
|
||||
precision_label.visible = false
|
||||
vbox.add_child(precision_label)
|
||||
vbox.add_child(mode_label)
|
||||
|
||||
# --- escalation level indicator (color-coded) ---
|
||||
@@ -371,6 +381,20 @@ func _add_corner_brackets(color: Color) -> void:
|
||||
func set_action_hint(text: String) -> void:
|
||||
hint_label.text = text
|
||||
|
||||
## Precision-walk state chip next to the door/light indicators.
|
||||
func set_precision(active: bool) -> void:
|
||||
if precision_label:
|
||||
precision_label.visible = active
|
||||
|
||||
## Swap the control legend for the device the player is actually using.
|
||||
func set_input_device(device: String) -> void:
|
||||
if _controls_label == null:
|
||||
return
|
||||
if device == "gamepad":
|
||||
_controls_label.text = Strings.lookup("hud.controls_gamepad")
|
||||
else:
|
||||
_controls_label.text = Strings.lookup("hud.controls")
|
||||
|
||||
|
||||
|
||||
## Color-coded escalation feedback (PLAN.md: Polish and Accessibility).
|
||||
|
||||
Reference in new issue
Block a user