SNKRX Swordsman and Archer Lv.3 Redesign
Opus 4.8
Summary
Redesigned and actually BUILT the Swordsman and Archer Lv.3 abilities in SNKRX-update to match their finished 062026 counterparts (the prior 5 units' Lv.3s were display-only). Established the cross-project "design the full kit in 062026, distill the unit here" principle, added a per-ability card-chips architecture, a new blade_dance.lua dancer entity, and the subtle_whoosh asset.
Re-orientation (where we left off):
- Roster unchanged at 5/28 ported (archer, swordsman, magician, outlaw, cannoneer); merge system + live inventory overlay already built. Working tree was clean; last commit "SNKRX Merging and Inventory".
- Listed the 5 ported units and their (then display-only) Lv.3s: archer/Bouncing Shot, swordsman/Sharpen, magician/Quick Cast, outlaw/Flying Daggers, cannoneer/Cannon Barrage.
Cross-project principle (owner ruling this session):
- Design the full 5-ability active-aim kit in 062026 FIRST, then DISTILL the individual unit (Lv.1 + Lv.3, shared names/vibe) in SNKRX-update.
- Lv.3 = whatever ability best captures the unit's identity AND fits the auto-attack nature (passive OR active), NOT necessarily the 062026 ultimate (owner corrected an early "Lv.3 = the ult" rule I proposed).
- Do this for an initial 20-30-unit roster, then SNKRX-update adds units freely without 062026 and the two diverge (SNKRX scales to hundreds; 062026 can't design hundreds of full kits that feel good).
- Cross-unit ideas (e.g. party-wide Echo) belong to the CLASS set-bonus layer (deferred), NOT a unit Lv.3 — the ranger set bonus is literally "release a barrage to allied rangers".
- My appraisal of the plan: core principle is sound (distillation = subtraction from a proven-fun kit, higher-confidence than cold invention); the real prize of the shared period is the reusable TOOLKIT it forces into existence, not the 20-30 units; the weak joint is gating systems behind a roster COUNT when the loop itself isn't built yet (snake-vs-seekers, no run/enemies/economy) — gate on "is the loop fun" instead; the relationship is bidirectional (a unit that won't distill signals a weak 062026 core) and some units will diverge early because their 062026 fun is purely manual (Cross Guard/Leap/charge have no auto analog).
Swordsman Lv.3 → Blade Dance:
- Read 062026's IMPLEMENTED swordsman kit (diverged from design.md): Cleave / Leap Slam / Blade Dance (ult) / Surge; Cross Guard parked.
- Auto-attack filter: Leap Slam ✗ (unit can't leave the snake), Surge ✗-ish (duplicates magician Quick Cast + needs buff subsystem), Blade Dance ✓✓. Picked Blade Dance.
- Formation question resolved: the snake is trail-follow (each unit's slot is a derived moving point; only death has gap-handling), so the unit does NOT leave — a detached dancer leaps while the swordsman stays in the snake rendered PHASED (oscillating low alpha ~0.15-0.55,
snake_unit:draw). Owner picked Option A + the phasing tell. - First pass used the flicker carrier as a stand-in; owner rejected it as not faithful (no AoE per hit, wrong targeting). Replaced with a faithful port.
blade_dance.lua(new dancer entity, mirrors 062026snkrx/player.luabd_):pick_targetdense far-edge jump-band (score = pack density [already-hit 0.3] + 1.5edge, weighted top-3, fallback farthest), bezier hop (062026 control points + per-leap hit_circle + subtle_whoosh),land= a Cleave-style squarespawn_area(FLAT damage, no crowd) + the flicker final-burst juice (hit_stop 0.06, slash_final + sword_slash, shake_shake/shake_push, fx_energy_122, hit_circle, 6 particles; NO knockback), 062026's wake trail (cubic_bezier/trail_update/trail_draw copied verbatim — jag is leap/tumble-only so Blade Dance's wake is the smooth dashed trail).- Knobs (owner): 3 landings, NO crowd bonus, HIGH flat base damage 25 → 100/landing at the Lv.3 ×4 merge, 6s periodic, radius 40, jump band 70-160. Decisions: AoE spawned with no caster (final-burst is the landing juice); landing square aligns to travel direction (no mouse on an auto unit); copied
RPG3_Generic_SubtleWhoosh02.oggfrom 062026 (vol 0.43). - Driver:
unit_level3_update(u, dt)(units.lua) — only at level 3, every 6s spawn the dancer + setblade_dancing/attack_suppressed; end-poll onentities[dance_id]drops the phase when the dancer self-destructs (after its trail fades). - Files:
blade_dance.lua(new),snake.lua(unit_level3_update call + phasing draw),units.lua(def fields, ability, unit_level3_update),main.lua(require + update/draw loops + subtle_whoosh sound).
Per-ability card chips (architecture change, inventory.lua unit_card_v2):
- Owner ruling: each ability (Lv.1 and Lv.3) owns its OWN chips as an independent card portion (the chips were hard-wired to the def's headline DMG/CD/RANGE and would show Cleave's numbers under Blade Dance).
- Each ability block now sources
ab.chips(sdef)(returns {label,value} rows); an active with no chips fn falls back to the headline DMG/CD/RANGE (so the other 4 units are unchanged). The mergesdefproxy gainedblade_dance_damage+barrage_damagescaling. Glossary gained thechainkeyword.
Archer Lv.3 → Echo→Barrage:
- Read 062026's finished archer kit: Echo (passive — every 5th ability re-fires) / Piercing Arrow / Cone Shot / Nova Tumble / Barrage (charge-up wall of piercing arrows).
- Recommended Echo (the signature passive) but owner found plain "fire twice every 5th" underwhelming; noted cross-unit Echo would be interesting but architecturally muddy. Resolved: cross-unit Echo IS the ranger class bonus (deferred), keep the Lv.3 self-contained; keep Echo's rhythm but make the payoff a Barrage. Owner picked Echo→Barrage.
- Implementation:
ECHO_N(5) counter in the archer attack fn — at level 3, every 5th shot alsoarcher_barrage(u). Barrage = a staggered stream of 8 piercing arrows fired FROM the unit (owner: not 062026's perpendicular launch-strip),pierce=true, speed 300,barrage_damage6 → 24 at L3. - Three follow-up refinements: (1) each arrow targets a DIFFERENT enemy across a ±34° cone of the primary direction (
barrage_cone_targets, round-robin, live-tracked + jittered) so the volley fans instead of converging; (2) copied 062026's barrage sound exactly —arrow_shootper arrow at 0.9-1.1 random pitch, played manually (the projectilefire_soundsis pitchless); (3) doubled the inter-arrow stagger from 062026's 0.03 to 0.06. Verdict: "works wonderfully." - Card: Lv.3 block "Barrage" (active · multiple · pierce), chips DMG/ARROWS, desc "Every 5th Piercing Arrow looses a barrage of 8 arrows." Reused existing glossary terms (no new keyword).
Testing instructions given (both units): hover the unit's cell in the live inventory and press 3 to set merge level 3; spawn enemies with E/B; watch the Lv.3 fire (swordsman every 6s, archer every 5th shot). Below level 3 neither triggers.
Pending bookkeeping (deferred to next session): porting.md §7/§9 (swordsman/archer Lv.3 rulings), CLAUDE.md (the dancer entity + per-ability chips), and a card wording-variant pick (first-draft lines shipped and accepted as "works wonderfully").
Next session: redesign the Magician Lv.3 — GATED on the owner finishing the Magician's kit in 062026; paused until then.
🔒 Only the summary of this log is public. Private because this is SNKRX update.