Loading…
a327ex.com

062026 9

Opus 4.8

Summary

This NDA session completed the Archer, 062026's second playable character. The owner declared it done — "Perfect, I believe we've actually finished this unit, it feels really good to play." Two abilities were replaced and heavily feel-iterated — the Cone Shot secondary (replacing Bounce Shot) and the charge-up Barrage ultimate (replacing Homing Barrage) — and the old Homing Barrage was parked.

Secondary direction reset:

  • Reopened the Session-8 "Harpoon Shot" gather/pull plan, then pivoted: owner proposed the Archer pair with a future Psyker carrying a Tree-of-Savior "Gravity Pole" line-pull (briefly reopening the dropped party-switch model). The gather idea was ultimately set aside — the secondary just needed to feel different from the piercing primary.
  • Settled on Cone Shot: "something like Orblike/Invoker's Asal, except a projectile."

Cone Shot (cone.lua, M2):

  • Non-piercing arrow via the projectile carrier; its on_death(x,y) hook calls spawn_cone_blast. Bursts on first enemy hit / wall / range-end (guaranteed by max_range). Owner's forks: cone opens FORWARD, triggers on first hit (no pierce), and beam_particle is ported for the exact Asal look.
  • Ported beam_particlefx_beam_particle/spawn_beam_particle in snkrx/fx.lua: travels along beam_r with a sine wobble, white→spec flash, configurable thickness h (tween thins h only halfway so thick streaks stay readable). 3 bands (40/16/8), later longer + higher-duration, h=4.
  • Damage = a VISIBLE polygon area wedge (apex at origin + arc verts, polygon_r=aim). Fixed an area.lua bug: polygon fill was a radial DISC (wrong for a wedge) → now triangle-fans like rect; jagged circle keeps the disc.
  • Added a generic border_draw(layer, area, scale, c) hook to area.lua (a composition seam like projectile's on_death) so the bespoke cone_border_draw lives game-side: 3 corner brackets (apex + 2 cap corners, 0.075-len) + a bigger center cap arc. Replaced an initial corner_brackets=true attempt.
  • Geometry iterated ±60° → ±36° → final ±25° half-angle (CONE_HALF_ANGLE=25*math.pi/180), radius 90 → 130, cast shake 6.
  • Visual swapped fx_energy_122 (too big/slow) → fx_sparks_032 (radial spark-star, copied from Invoker-old/assets, registered 96×96), s=1.3 speed=0.05.
  • Sounds (q10 oggs from E:/sound packs/RPG Magic SFX Pack 3 via the ffmpeg pipeline): cone_hit = RPG3_MagicArrow_Impact04Crit, layered concurrently with a random cone_hit_fire_variants (RPG3_FireMagicArrow_Impact02/03/04).

Echo passive polish:

  • Dots → 2px squares centered for N-1 (the Nth never shows), turning white when primed.
  • Echo on Nova Tumble now CHAINS: archer_cast queues tumble_echo_pending, consumed in update_tumble at the first roll's LANDING (event-driven full second roll). Factored player:read_move_r(), called in update_tumble so the chained roll follows mid-roll direction presses.
  • Primary camera shake bumped 1 → 3.

Barrage ultimate (player.lua, no bespoke entity — spawns standard projectile carriers):

  • Homing Barrage first iterated (per-arrow random turn 0.3-0.6 / speed / seek {nearest/random/farthest} with id-locked targets; ±25° launch jitter; trauma-with-zoom camera experiments) then PARKED → parked/homing.lua (verbatim + re-integration notes).
  • Design brief presented + agreed: HOLD-R charge-and-release copying Asal's charge effect + Cross Guard's bar.
  • start_barrage/update_barrage_charge/release_barrage (press start / down update / released fire; update+release OUTSIDE the tumble gate so a held charge survives a dodge-roll). Charge% = (time - barrage_started)/BARRAGE_CHARGE_TIME (1.5s).
  • Charge visuals: Asal arc-segment ring (copied, grows from -π/2 with jitter) + converging spawn_charge_particle streaks + the Cross Guard bar (copied, above the head). Ring AND particles recolored green→white over charge. Looping charge_loop = RPG3_LightMagic_ChargingLoop via sfx_loop/sound_handle_stop (confirmed a real engine binding, anchor.c:10425).
  • Release: count = remap(charge%, BARRAGE_MIN 3 → BARRAGE_MAX 24); projectile_muzzle_fx extracted from spawn_projectile (reuse) for per-spawn hit-circle + particles; per-arrow arrow_shoot + the primary's camera kick but bouncier/longer (shake_push freq 2 / bounce 0.75); 0.03s stagger.
  • Spawn geometry iterated: perpendicular even line → random ±24 box → "parallel strip" (collinear, looked like one point) → final RANDOM LINE PERPENDICULAR to the LIVE aim (±BARRAGE_CLUMP=24, unit (-sin,cos), read per-arrow so the line sweeps with the mouse). Arrows made PIERCING.
  • Echo (owner: don't skip — double the projectiles): added shared player:echo_tick(); release_barrage uses it to DOUBLE the count instead of re-firing (charge abilities can't re-cast cleanly).

Wiring: ability_damage homing → barrage (BARRAGE_COEFF); HUD slot s[4] → 'B'/Barrage; hover card → barrage + a new 'charge' glossary keyword; F1 knobs now echo every / cone reach / barrage max. Reverse-sync candidates flagged: fx_beam_particle + h; area border_draw hook + polygon fan fill; projectile_muzzle_fx; player:echo_tick.

Next (no open Archer tasks): the stat system (coeffs still placeholders), player death/fail state, the gems/Linked Sockets pass, possibly a 3rd unit or the snkrx-template merge.

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