Loading…
a327ex.com

062026 8

Opus 4.8

Summary

Session focused on 062026 (the side-project build-heavy action roguelite): finished the ability-card keyword-glossary hover, dropped the party-switching pivot in favor of a RoR single-character + gems + items model, then built and extensively redesigned the Archer (the project's second playable character). Ended with the Archer's secondary still an open design decision.

Keyword-glossary hover (finished the ability cards):

  • Ported mark_terms, glossary_popup_draw, and the ui_popup_layer / ui_popup_render infrastructure from SNKRX-update inventory.lua into 062026/card.lua + snkrx/ui/init.lua.
  • Added ui_popup_layer to 062026's UI toolkit (a second screen-space layer so the definition popup casts its own drop shadow over the card) — flagged as a reverse-sync candidate to snkrx-template / SNKRX-update.
  • Iterated the hoverable-keyword affordance heavily: (1) dashed underline under the word — rejected ("just not looking good"; it fights the toolkit's "no 1px borders" rule); (2) tried a soft-blue "link" color — rejected; (3) settled on option A: brackets ARE the hoverable signal — only tags with a glossary entry render [bracketed] and get a charcoal hover pill behind them (the list_row / slot hover-fill idiom), plain tags render bare. card_keyword_spec (bracket-tag styling) became a flat grey solid F5 target named card_keyword.
  • Glossary definitions written in the Artifact-Classic register (active / area / primary / secondary / charges / movement / buff / utility / ultimate / pierce / ricochet / homing).

Party-pivot DROPPED:

  • Owner decided against the gacha-tactical party-switching model ("yet another thing to think about when designing things"). Chose RoR-style single character + gems + items for variety. Plant / stand-still "turret" gambles were explicitly reserved for a future summoner / deploy unit, not the Archer.

The Archer — initial build (later mostly replaced):

  • Scaffolded the second character into the existing if self.character == ... architecture: player:set_character(c) (debug-swap with c), generic ability binds (primary / secondary / mobility / ultimate = M1 / M2 / Space / R), archer_spec (SNKRX-update lime→green), HUD hud_slots_archer, ability cards, ability_damage / ability_spec archer rows.
  • Initial kit: Piercing Arrow (primary), Arrow Rain (secondary), Tumble (mobility), Power Barrage (ultimate), Through-Line (pierce passive).

Arrow Rain → removed:

  • Built a lobbed multi-arrow rain (2 volleys, airborne arc, foreshortening to fake top-down depth — length shrinks / width grows with arc height). Owner: the arrows "don't really look good" — the airborne multi-object lob doesn't read under a top-down camera ("the airborne system may only make sense for single objects"). Removed entirely.

Tornado Shot → shelved (parked):

  • Replaced Arrow Rain with a Tornado Shot (a moving projectile that bursts into a radial arrow nova + travel-pierce). Iterated through many visual forms — spinning blade, X, a live shape cycler (blade / x / star / square / triangle on Y), plain non-rotating projectile, then a proper arrow silhouette (shaft + triangular head, then an open chevron head with TORNADO_HEAD_LEN / TORNADO_HEAD_ANGLE F1 sliders). Added cursor-targeting (explode at the cursor if within range, else max range). Owner shelved it; tornado.lua moved to parked/.

Design discussion — what makes the Swordsman fun, transposed to the Archer:

  • Established the Swordsman's fun = two engines: (1) positioning skill (maximize overlap — crowd-scaling Cleave rewards a tight CLUMP), (2) a greed gamble (the clump that powers you is the same thing killing you → "how long do I stay in the blender"; press-your-luck). The square's constraint is what creates the positioning skill (an omni-circle would erase the decision).
  • The Archer already has Engine 1 on a rotated axis: the LINE (1D overlap — threading one pierce through a column is the crowd-Cleave moment; the Swordsman angles his body, the Archer angles his shot). It was MISSING Engine 2 — the pierce passive was "ambient power with no decision attached" (why it felt one-note).
  • The gamble must stay MOBILE (owner rejected "plant / stand-still": "feels like it'd be more at home with a summons/turrets unit"). The kiter's tempting-dangerous move = "let the column close on you" / fight point-blank. Surveyed interesting LoL/Dota ranged-projectile abilities by mechanic (charge, distance-scaling, returning/boomerang, bounce, detonate-mark, delayed strike, grab/drag, spread, seeking, trap).

Archer revised kit (built + iterated this session):

  • Passive · Echo — every Nth archer ability fires again (player:archer_cast wrapper; the echo flag skips the cooldown stamp and isn't re-counted; ECHO_N = 5). A row of dots under the Archer shows the echo level (drawn in player:draw, archer-gated). Caveat flagged to owner: the hold-fire primary dominates the count — may want to exclude it so the "line up your big ability on the echo" minigame works.
  • Primary · Piercing Arrow (hold M1) — unchanged infinite-pierce arrow.
  • Secondary · Bounce Shot (bounce.lua) — chains to the nearest new enemy + ricochets off walls (reflects off physics_raycast normal_x/y), up to BOUNCE_MAX redirects. Owner flagged it as not meaningfully different from the primary → BEING REPLACED.
  • Mobility · Nova Tumble (nova_tumble) — the movement-direction roll (airborne hop + afterimage trail, t toggles trail mode) PLUS a radial nova of short-range NON-piercing arrows, emitted OVER TUMBLE_DUR (a sweeping spray, not a keypress burst).
  • Ultimate · Homing Barrage (homing.lua) — 30 single-hit seeking arrows that launch alternately to the ±sides (HOMING_LAUNCH ≈ 90°) then curve forward into an arc; arrows 10×4 (match the primary); fire-and-forget (no root). Owner kept homing despite my pushback that auto-tracking undercuts the precision-archer identity ("SNKRX already has a homing barrage implemented... it's just spawning projectiles in a certain way").
  • Removed Power Barrage entirely (its charge / cone-to-line telegraph + root); parked Tornado.

The open decision (where we stopped):

  • The secondary needs a replacement (Bounce ≈ Primary, both are "fire a forward arrow"). Proposed "Harpoon Shot" — a gather/pull that makes the line-game proactive: a fast piercing harpoon tethers every enemy it passes (they're on your aim line), a beat later they're yanked to a rally point forming a tight threadable column you then thread with the primary + Nova-Tumble out. Verb = "move enemies into position" (orthogonal to the kit), and the rally is close so the setup = the danger (the greed-gamble). Reuse: piercing spawn_projectile + e:push(angle_inward, force, dur) (seekers have :push).
  • Open fork the owner is sleeping on: rally in front of you (close = the gamble; my recommendation) vs rally at the cursor (safe remote blob, no gamble). Owner ended the session to think it over.

Files / misc: new bounce.lua, homing.lua; parked/tornado.lua. Tunables in main.lua ARCHER block (ECHO_* / BOUNCE_* / NOVA_* / HOMING_* / TUMBLE_* / ARCHER_* / SHOOT_*). F1 tuner_knobs now: echo every / bounces / homing turn. Debug keys: c swap character, t tumble-trail toggle. All damage coeffs are placeholders. The Swordsman kit is unchanged and still selectable (swap with c).

🔒 Only the summary of this log is public. Private because this is 062026.