Docs: session log — LANTERN Phase 1 Group A (4-socket combat kit) + A0 materials
Records the A0 material foundation + Phase 1 Group A implementation (steps 1/1b/2/2.5: socket data model, per-socket stats, AbilityFireSystem restructure + SpawnId repack, feel-layer migration), 494 green, the editor-focus correction, and the deferrals (L3 gate, AbilityRef cleanup, Group B content). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
---
|
||||
date: 2026-07-14
|
||||
type: session
|
||||
tags: [session, lantern, phase-1, combat, sockets, implementation]
|
||||
permalink: gamevault/07-sessions/2026/2026-07-14-lantern-phase1-groupa-combat-sockets
|
||||
---
|
||||
|
||||
# Session 2026-07-14 — LANTERN Phase 1 Group A: the 4-socket combat kit
|
||||
|
||||
> Implementation of Group A of [[Phase1_Combat_Gym_Build_Spec]] (adopted [[DR-050_Lantern_Phase1_Combat_Design]]),
|
||||
> after the operator answered the parked forks + approved starting (verify-per-step, auto-commit). Serial MCP
|
||||
> edits, L1+L2 per step. Also: the A0 material foundation, and an operator correction on editor focus.
|
||||
|
||||
## Done
|
||||
|
||||
**A0 material foundation** (committed `831c41c71`): `PaletteAtlas.png` (8×8 ontology swatch grid, sRGB/point/
|
||||
no-mip) + 3 shared materials — `M_Lit_Palette` (Lit URP graph), `M_Skinned_Palette` (the deformation-aware
|
||||
`AnimatedLitShader`, per-instance tint), `M_Emissive_Gloam` (URP/Lit + HDR emission). The material-decision
|
||||
essence (one atlas, ~3 materials, zero per-asset texturing). The in-engine style-proof SCENE gate is still open.
|
||||
|
||||
**Phase 1 Group A — the 4-socket kit** (each step L1 clean + L2 green; auto-committed):
|
||||
- **Step 1** (`67095024b`): `AbilitySocket` (cold loadout buffer, SendToOwnerType.All) + `SocketCooldown` (hot
|
||||
owner-predicted, 4× `[GhostField] uint` + Burst-safe switch indexer) + `FrameId` (`[GhostField]` class signal)
|
||||
baked on the player. Isolated player-ghost re-bake.
|
||||
- **Step 1b** (`b143eb6bb`): `EffectiveSocketStats` (4-wide) + a second per-socket fold loop in
|
||||
`StatRecomputeSystem` (uniform band). L2 `SocketFold` test.
|
||||
- **Step 2** (`12f86c86d`): the netcode core — `PlayerInput` +4 `Socket0..3` events + `GetSocket`; gather binds
|
||||
keys 1–4 (+socket 0 on the legacy primary); `AbilityFireSystem` restructured to a 4-arg query + `BufferLookup`s
|
||||
(the 7-arg-cap fix), looping 4 sockets with per-socket cooldown/stats/dispatch (Cone + Projectile). **The
|
||||
`SpawnId` repack** `owner14|socket2|fireCount12|fork4` via the pure `ProjectileSpawnId.Pack` (the #1 HIGH
|
||||
desync fix — NP-1/RS-1/DB-3), with 5 unit tests.
|
||||
- **Step 2.5** (`21f609c6c`): the client feel layer migrated — `PlayerAnimationDriveSystem` (both jobs → socket
|
||||
reads via a shared `SocketFireAndCone` any-socket-firing helper) + `CombatFeedbackSystem` (muzzle + cone
|
||||
unified into one per-socket fire-edge loop).
|
||||
|
||||
**Suite: 489 → 494 EditMode green** (+SocketFold, +5 ProjectileSpawnId), zero regressions throughout.
|
||||
|
||||
## Decisions / notes
|
||||
|
||||
- Editor-focus correction (operator, 2026-07-14): the editor runs full-speed even minimized/unfocused here — do
|
||||
NOT gate on focus. Recorded in native memory [[unfocused-unity-editor-hazards]].
|
||||
- `SocketCooldown` is `SendToOwnerType.All` (parity with the old implicit-send-all `AbilityCooldown`, so remote
|
||||
ability feel replicates), NOT the buffer shape the spec floated — the scalar-shaped 4-field component
|
||||
sidesteps the unproven predicted-buffer rollback (NP-4).
|
||||
- Legacy `AbilityRef`/`AbilityCooldown`/`EffectiveAbilityStats` kept (vestigial) for compile-safe transition.
|
||||
|
||||
## Open / deferred (surfaced, NOT silent)
|
||||
|
||||
- **Group-A L3 gate (NEXT):** two-player Play + induced-rollback for the predicted `SocketCooldown` (NP-4
|
||||
gate) + the operator's eyes on muzzle/anim/HUD. Needs a socketed Spark (sockets bake empty) — a default gym
|
||||
loadout (socket0=Primary projectile, socket1=Cone) makes firing testable.
|
||||
- **AbilityRef-removal cleanup:** the `FrameId` server-writer + the 2 class-HUD re-points + `HudSystem`'s
|
||||
ability bar + removing legacy `AbilityRef`/`AbilityCooldown`/`EffectiveAbilityStats` — deferred because
|
||||
`AbilityRef` still works as the class signal through the transition (no feel regression).
|
||||
- **Group B (steps 3–6):** Aoe/Hitscan archetypes + decoy/zone ghosts; the 5 Sparks + `BlinkSystem` + Harpooner
|
||||
reel + player zone; two frames; manual-aim windups. Nothing fires in-game until the Sparks land (or the
|
||||
default loadout above).
|
||||
|
||||
## Next
|
||||
|
||||
Run the group-A L3 gate (bake the default loadout → 2-instance Play → fire keys 1&2 → verify server==client +
|
||||
SpawnId no-desync + rollback + eyeball feel), then Group B content.
|
||||
|
||||
## Related
|
||||
|
||||
- [[Phase1_Combat_Gym_Build_Spec]] · [[DR-050_Lantern_Phase1_Combat_Design]] · [[Roadmap_Lantern_Slice]] ·
|
||||
[[Art_Direction_Lantern]] · [[2026-07-13_Lantern_Phase0_Design_Pass_B]]
|
||||
Reference in New Issue
Block a user