Loading…
a327ex.com

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_RAD 1) lifted further off the slot (PIP_LIFT 5); ui_pips gained a radius opt (default size/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_cooldown simplified 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) with CD_TRACK -2 tightening (Awesome's '.' has a wide advance); vertically centered via glyph_metrics(48) bearingY/height — NOT font.height (checked anchor.c: layer_draw_glyph baseline = top + font.ascent, and font_get_height returns 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_bar gained a value_ink opt (value text drawn through fill_spec × mult — the glyph-ink idiom) — reverse-sync candidate; value bars pass value_ink = SLOT_ICON_VALUE.
  • HP/shield fill specs baked from F5 (hud_hp_spec green→lime linear_gradient, hud_shield_spec text→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 via tag_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_W budget, 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/chips are functions reading live ability_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) in hud_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_balanced is 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.