jpmschweitzer and Claude Opus 4.6
58e592fd5e
feat(client): confrontation D-033 color shift ( #521 , D-063)
...
Entity renderer now tracks relationship per entity and tweens D-033
tint color over 0.7s when relationship changes (e.g. on confrontation
delivery). Uses manual lerp in _process() for testability instead of
SceneTree tweens. Cursor hover tint cascades automatically via
Constants.color_for_entity_kind().
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-19 08:46:12 +01:00
jpmschweitzer and Claude Opus 4.6
80d5a57b5d
feat(client): introduce Michroma font and implant UI theme ( #517 )
...
Add Michroma-Regular.ttf (OFL license) as the game font. Create
FontVariation with +1px tracking and a global Theme resource with
cyan-white (#E0F7FA) implant text color. Wire theme into project.godot
so all Label/RichTextLabel/Button/LineEdit nodes inherit automatically.
Add IMPLANT_TEXT_COLOR/DIM/PULSE constants to constants.gd.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-18 12:53:08 +01:00
jpmschweitzer and Claude Opus 4.6
6d6b59c17b
fix(client): address PR #24 review — 5 critical bugs, 3 warnings, 8 suggestions
...
Critical:
- Protocol test assertions updated v6→v7 (test_protocol_v6.gd)
- Dialogue signal connections wired (option_selected→DialogueResponse,
dialogue_dismissed→DialogueEnd sent to server via SimBridge)
- Consume-once race fixed: _consume_dialogue() checks is_dialogue_active()
before re-showing; dialogue_id tracking prevents re-trigger during fade
- Dialogue box responsive: _update_layout() clamps width to MAX_WIDTH_PX
(832px) or 65% viewport, height to 20% viewport (MAX_HEIGHT_RATIO)
- Auto-pause added: SimBridge.send_input(PAUSE) on dialogue open/close
Warnings:
- Test coverage: 16 new tests in test_protocol_v7.gd (pending_recognitions
decode, current_dialogue, GameState, SimBridge mock data, insert colors)
- queue_redraw() optimization: early return when no entities and no pings
- Fixed 200px height → responsive 20% viewport via _update_layout()
Suggestions:
- WASD detection refactored to _WALK_AWAY_ACTIONS array loop
- Button colors reference Constants.INSERT_COLOR_TEXT/HOVER/ACTIVE
- Named constants: COLOR_TRANSITION_START, SILHOUETTE_APPEAR_THRESHOLD,
SILHOUETTE_SIZE with explanatory comments
- Bounds check: MAX_PENDING_RECOGNITIONS=64 with truncation warning
- Mock dialogue sustained across ticks (not 1-tick flash)
- COLOR_PING coupling with cursor documented as intentional
- Consume helpers extracted: _consume_monologue(), _consume_dialogue()
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-16 01:30:15 +01:00
jpmschweitzer and Claude Opus 4.6
2659de0c28
feat(client): add fog entity visualization and wire Sprint 7 UI ( #431 , #434 )
...
Fog entity cognitive delay rendering (D-059/D-060): sonar-style sound
pings (3 concentric rings, 1.5s fade), unrecognized grey blobs with
breathing pulse, D-033 color transition at 50% recognition progress,
±0.5 tile position drift. FogEntities node at z:950 between fog
shader and InsertOverlay.
Protocol v7 bump to match server PR #23 (pending_recognitions field).
Wires dialogue box and fog entities into game loop with mock test data.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-16 01:19:24 +01:00
jpmschweitzer and Claude Opus 4.6
9e8ccb13bf
fix(client): address PR #22 review — 3 critical bugs, 2 warnings, 8 suggestions
...
Critical fixes:
- fog_state: guard _compute_bounds() against all-invalid tiles (negative Rect2i crash)
- fog_shader: read Camera2D zoom dynamically instead of hardcoded Vector2(2,2)
- world_radial: set custom_minimum_size in _ready() from spoke geometry
Warnings:
- fog.gdshader: tighten PERIPHERAL_LOW 0.15→0.55 to match D-059 peripheral band
- Extract color_for_entity_kind() to Constants.gd, decouple CursorRenderer from EntityRenderer
Documentation: shallow copy assumption, gradual decay TODO, tween guard rationale,
fade timing rationale, ToggleInsert TODO, monologue consume-once, hover offset safety,
v6 fixture gap TODO.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-15 23:23:11 +01:00
jpmschweitzer and Claude Opus 4.6
1fcf08d21f
feat(client): Sprint 6 Touch — z-layer pipeline, cursor, fog, interactions, inventory, stance, radial
...
Three-scope z-layer rendering pipeline (D-049): world z:0-900 inside
CanvasGroup, insert overlay CanvasLayer 10, UI CanvasLayer 20, modal
CanvasLayer 30. Y-sort contract enforced (entities z_index=0). Reserved
ranges for VFX, airborne, lower floors documented in constants.gd.
Sprint 6 client tickets:
- #429 : Cursor state machine — 4 states, 150ms transitions (D-056)
- #430 : Fog shader rebuild — 5-layer fragment shader, animated noise (D-059)
- #432 : Entity interaction list — vertical multi-verb, insert-styled (D-057)
- #433 : World radial menu — 2 spokes, drag-release + click-click (D-058)
- #438 : Inventory UI — 3x3 grid, 40x40px, 1-9 hotkeys (D-065)
- #439 : Stance indicator — color-coded HUD, C/X keybinds (D-053)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-15 23:06:03 +01:00
jpmschweitzer and Claude Opus 4.6
64897a40b3
fix(client): address PR #11 review — type safety, perf, tests
...
Add Dictionary validation in game_state visible_tiles loop to prevent
crash on malformed data (Hoshe critical). Skip redundant modulate.a
writes (Hoshe suggestion). Add 3 tests: malformed visible_tiles,
facing rotation accuracy, v1 backward compatibility. Clarify D-033
Phase 1/Phase 2 comments.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-12 01:07:02 +01:00
jpmschweitzer and Claude Opus 4.6
f3793bf16e
feat(client): D-033 entity colors, peripheral dimming, facing indicator ( #130 )
...
Replace hardcoded entity colors with D-033 relationship palette:
Player=#e0e8ff, Npc=unknown teal #4a9ebb, Object=grey #8b8ba0.
Phase 1 defaults by entity kind; Phase 2 (#361 ) will derive color
from RelationshipState via knowledge graph.
Entities in peripheral vision dimmed to 50% alpha (D-015).
Player entity gets a Polygon2D triangle indicator showing facing
direction, rotated from GameState.player_facing.
82 tests total, 0 failures.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-12 00:53:28 +01:00
jpmschweitzer and Claude Opus 4.6
aa3a3fea7d
fix(client): address PR review — invalidation, constants, tests
...
Review feedback from Hoshe + Tyre on PR #8 :
- Extract shared TILE_SIZE to Constants class_name (Tyre #5 , Hoshe #7 )
- Fix tile invalidation: detect tile/visibility count changes instead
of one-shot dirty flag, supports chunk loading (Tyre #3 , #4 )
- Fog dirty tracking: only re-render when visible_positions changes
- Add bounds warning for unknown tile types (Hoshe #1 )
- Add player-not-found warning in GameState (Hoshe #5 )
- Use Image.fill_rect() instead of pixel loops (Tyre #10 )
- Document _player_pos as reserved for fog decay #113 (Tyre #6 )
- Add TODO(#130 ) for D-033 relationship colors (Hoshe #3 , Tyre #8 )
- Add class_name to EntityRenderer, FogRenderer, TileRenderer
- 20 new rendering tests (D-030 Layer 1): entity lifecycle, fog
registration, tile type mapping, snapshot completeness, constants
- 65 total tests passing, 0 failures
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-12 00:15:42 +01:00