062026 7
Opus 4.8
Summary
Session 7 of the 062026 side-project (SNKRX-derived active-aim roguelite). Finished the HUD slot polish, established a consistent ability-damage model, built the per-ability hover cards (the last big card piece — only the keyword-hover is deferred to next session), discussed a gacha-party design pivot, and trimmed the HUD to its single chosen layout.
HUD slot polish (hud.lua):
- Charge pips → rounded squares (
PIP_RAD1) lifted further off the slot (PIP_LIFT5);ui_pipsgained aradiusopt (defaultsize/2= circular) — reverse-sync candidate. - Surge's active-duration bar moved out of the icon (it was an invisible yellow-on-yellow 2px line at the slot top) up into the charge-pip band: a dark track (spec shaded by
COOLDOWN_VALUE) + a bright ability-color fill draining left. - Cooldown reworked: while cooling, the icon is HIDDEN and the countdown number stands in for it, drawn in the ability ink (spec darkened by
SLOT_ICON_VALUE) so the white number no longer collides with the icon; the bg brightness recharges up from the bottom (hud_cooldownsimplified to bg-only).spec_shade(sp,value)local folds the "a shade darker" copies. - Cooldown readout: whole seconds while >2s, then one TRUNCATED decimal (2.0→0.1) via
cd_label. Drawn glyph-by-glyph (hud_cd_number) withCD_TRACK -2tightening (Awesome's '.' has a wide advance); vertically centered viaglyph_metrics(48)bearingY/height — NOTfont.height(checked anchor.c:layer_draw_glyphbaseline = top +font.ascent, andfont_get_heightreturns line_height which sat too low). - Surge cooldown now shows during the buff (dropped the active-suppress) so all four countdowns start at press = consistent with Blade/Leap.
- HP value text wears the darkened fill spec:
ui_bargained avalue_inkopt (value text drawn throughfill_spec× mult — the glyph-ink idiom) — reverse-sync candidate; value bars passvalue_ink = SLOT_ICON_VALUE. - HP/shield fill specs baked from F5 (
hud_hp_specgreen→lime linear_gradient,hud_shield_spectext→white). - SURGE floating word (player.lua
fx_status_text): drained letters fade to off-yellow (ability color × 0.78², "doubled down") instead of white.
Damage model (main.lua + player.lua): Replaced the arbitrary placeholder numbers with base × coefficient. SWORDSMAN_DMG = 3 (base D); per-ability *_COEFF globals; damage = D × coeff via player:ability_damage(name) (character-branched — the single source for gameplay AND the cards). Cleave ×1 (=3) + CLEAVE_CROWD (+1/enemy); Leap ×3 (=9); Surge buff (no damage); Blade ×4 (=12)/landing (started ×3, bumped to ×4 at session end). Tier vocab x1 light / x2 medium / x3 heavy / x5 ult. The four numbers stay placeholders until the stat-system pass. Wrote 062026/reference/stats_survey.md — a cross-game survey of stat systems (common + unusual) feeding the eventual stat design.
Design discussion — gacha-party pivot (leaning, NOT committed): Owner is converging toward a gacha-tactical party model — bring 3-4 of the ~55 units, switch between them live to combo (Genshin/Honkai quick-swap; returns to SNKRX's party + class-synergy DNA). My recommendation that landed: under that model, CUT the player-facing stat system (it duplicates the gem system; high friction across 4 units) — depth comes from class-synergies + switch-combos + lighter gems, and per-unit kits get leaner than the solo 5-slot Swordsman. Owner parked it to finish the Swordsman first; the make-or-break is the switch-mechanic texture.
Per-ability hover cards — card.lua (NEW, required after hud): One card per ability, shown on hover over its HUD slot. Adapted from SNKRX-update's unit_card_v2 (read via inventory.lua), restructured from card-per-unit to card-per-ability. Took many layout iterations before a cohesive design landed (showed the owner an SVG mockup mid-way via the visualize tool to resolve the cohesion problem):
- Header: square 24px icon (ability spec bg + darkened glyph, like the slot) + name (gradient), name vertically centered to the icon; the icon+name group centered horizontally.
- Tags:
[bracketed]space-separated grey tokens, centered, one row below the header. Balanced wrap viatag_lines_balanced(minimax: greedy line count at the width, then binary-search the smallest width still fitting that count → even line widths). An earlier two-group split (activation/role beside the icon + mechanical below) was tried and removed as incoherent. - Description: centered, wraps at
DESC_WRAP_W = 150. - Chips: charcoal pills (muted label + yellow value), row centered; per-ability set with CD always 2nd — Cleave DMG·CD, Leap DMG·CD·CHARGES, Surge DUR·CD, Blade DMG·CD·HITS.
- Width = shrink-to-fit: wrap desc/tags to the
DESC_WRAP_Wbudget, then card width = the ACTUAL widest rendered line (content-light cards like Surge/Cleave shrink, descriptions never narrow). Fixed an earlier mistake where lowering the floor narrowed descriptions. - Data:
ability_cards[character][ability] = { tags, desc=fn(), chips=fn() };desc/chipsare functions reading liveability_damage+ tunables so numbers never go stale. - Juice: card appear-pop (
ui_juice_scale/ui_juice_pull('ability_card', 0.25)+ pivot push, SNKRX-update pattern); slots gained hover-juice (scale-pop + bamboo) inhud_slot; persistence = card stays while the cursor is in the slot+card bounding box (you can move up onto it), hides only when fully outside. - Ported game-side from SNKRX-update inventory.lua:
runs_width,wrap_runs;tag_lines_balancedis new. Reverse-sync candidates. - Wording follows the locked register; "Flash" (flash-step) for Blade Dance instead of "leap"; Surge "Doubles your movement and attack speed for 4s."
HUD trimmed to single layout: Removed the A/C/D layout mockups, the F6 cycler, the layout-name label, and the value_bars/corner_bars helpers. HUD B kept as the sole layout (renamed hud_draw). Removed the toggle_hud_layout bind.
NEXT SESSION (start here): the keyword-hover — the LAST card task; once done, the cards are finished. Wire the glossary underline + definition popup, MECHANISM ONLY (no definitions written — owner's call). Port mark_terms (~inventory.lua 341-369), glossary_popup_draw (~432-454), and a ui_popup_layer from SNKRX-update; register the mechanical keyword list (area, charges, buff, movement, knockback…) with blank/placeholder descs so they underline + a popup appears with a "pending" placeholder. card.lua's tags already render as [bracketed] grey tokens (tag_lines_balanced) — the underline goes on those keyword tokens.
🔒 Only the summary of this log is public. Private because this is 062026.