Skip to content

feat(view): Rock Band-style 3D drum highway with keyboard drumming - #26

Open
mattromano wants to merge 3 commits into
got-feedBack:mainfrom
mattromano:feature/drums-rock-band-highway
Open

mattromano wants to merge 3 commits into
got-feedBack:mainfrom
mattromano:feature/drums-rock-band-highway

Conversation

@mattromano

Copy link
Copy Markdown

Replaces #22. Stacked on #25 — this branch includes that PR's two commits; review that one first. The only new commit here is the view (c17122b, +1683/−22 over the scoring branch).

  • assets/highway3d.js (MIT, original code, no game artwork): three.js drum track on core's vendored three.js — pad lanes + kick bar, bevelled pad gems, domed cymbals, strikeline targets, hit flashes / sparks, star power / fill / solo highlighting
  • HUD: streak, multiplier, star power, score, stars, accuracy, difficulty badge, the early/late timing meter with Apply, star power hint, "This song has no drums"
  • Gems move on the same smoothed highway clock the scoring uses
  • View setting Auto (3D with WebGL2) / 3D / 2D; feedBackViz_drums3d / _drums2d for hosts
  • Keyboard drumming in both views (Keys, default on): B kick, F red, J/K/L toms, Shift or U/I/O cymbals; Enter is the scoring PR's star power key

Tests: node tests/highway3d.test.js (6) plus the scoring PR's suites, all passing. The WebGL scene was checked in a browser harness; it still needs a pass in the real v0.3 player chrome.

🤖 Generated with Claude Code

mattromano and others added 3 commits October 9, 2026 17:32
Score drum charts the way the rhythm games do: assets/engine.js is a
JavaScript port of YARG.Core's drums engine (LGPL-3.0, kept as its own
replaceable file with LICENSE.LGPL-3.0, LICENSE.GPL-3.0 and NOTICE.md),
driven through assets/session.js (MIT) which adds difficulty levels,
star power metadata, assists and timing / roll / drum-solo bonuses.

- Per-player difficulty Easy..Expert+ (settings, HUD badge, D/Shift+D).
  Expert drops x2 kicks; lower levels, star power, fills and solos come
  from the drum tab's feedpak 1.20.0 gameplay metadata (Expert only
  without it).
- Assists: auto kick / auto cymbals up to a difficulty (played on the
  drum sound at their own volume), timing presets, Pro cymbals, input
  offset.
- The 2D view marks hits / misses from the engine and draws a score HUD
  (multiplier, score, streak, stars, star power) with Score on.
- Drum-tab accents follow the authored `a` flag; x2 kicks map to GM 35.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: mattromano <42412983+mattromano@users.noreply.github.com>
Address the CodeRabbit findings on the first scoring PR and bring in the
scoring work field-tested since (drums 5.8-5.15 in Matt's own build).

Review fixes:
- The input offset now moves the engine's clock too. The session owns
  the offset (createSession inputOffsetMs / setInputOffset) and applies
  it to update(), hit() and activate() alike; before, a positive offset
  only shifted the hits, so a late-registered hit found its note already
  missed.
- MIDI velocity reaches the engine as velocity / 127. The engine reads
  values <= 1 as already normalised, so velocity 1 counted as full
  strength.
- Star power can be activated on charts with phrases but no fills
  (manual activation): Enter while the drum view is focused, or an
  optional SP pad (settings, drums_sp_pad_v1: hi-hat pedal, ride bell,
  splash or china). The HUD says how when star power is ready.
- A scoring script that failed to load (or loaded without registering)
  has its <script> element removed, so the next init loads it again.
- Docs: legacy charts with GM 35 double kicks still offer Expert+;
  LGPL-3.0 section 2(b) also allows a modified engine.js under the GPL.

Ported from the 5.x line:
- Hit timing: a smoothed per-highway clock (core 3D highway pattern)
  for drawing and scoring, hits timed by the MIDI message timestamp when
  the provider passes one, and the engine trails the frame clock by
  60 ms so a hit struck just before a frame keeps its own time.
- Early/late timing meter under the score with the suggested input
  offset and an Apply button. The default offset stays 0.
- End-of-song results card (single view): total with bonuses, best
  score per song and difficulty, stars, accuracy and the breakdown.
- Auto kick / cymbals scheduled from the audio clock by one shared,
  forward-only schedule: no late or doubled auto notes.
- The drum view refuses a part that isn't drums ("This song has no
  drums" / "Pick the Drums part") instead of scoring guitar notes.
- Splitscreen: kit hits go to the drum view that is on screen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: mattromano <42412983+mattromano@users.noreply.github.com>
Add assets/highway3d.js, a three.js drum track in the style of the
classic drum games (MIT, original code, no artwork from those games):
pad lanes and a kick bar, bevelled rectangle pad gems, domed cymbals,
strikeline targets, hit flashes and sparks, star power / fill / solo
highlighting and a HUD with streak, multiplier, star power, score,
stars, accuracy and the difficulty badge. It renders the scoring
session from the previous change, through core's vendored three.js.

- View setting Auto (3D with WebGL2) / 3D / 2D; the main player swaps
  renderers on change; feedBackViz_drums3d / _drums2d for hosts.
- Keyboard drumming in both views (Keys, default on): B kick, F red,
  J/K/L toms, Shift or U/I/O cymbals. Enter stays with the scoring
  change's star power key, which only takes it when star power can be
  activated by hand.
- The 3D HUD shows the early/late timing meter with its Apply button
  (session.js timingSummary), the star power hint and the "This song
  has no drums" message, and the track moves on the same smoothed
  highway clock the scoring uses, so gems glide instead of stepping
  with each audio sample.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: mattromano <42412983+mattromano@users.noreply.github.com>
@coderabbitai

coderabbitai Bot commented Oct 15, 2026

Copy link
Copy Markdown

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 59 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 7e103622-7b7b-429a-ba25-215bdd778dc5
📥 Commits

Reviewing files that changed from the base of the PR and between 871eb0e and c17122b.

📒 Files selected for processing: 14
  • CHANGELOG.md
  • LICENSE.GPL-3.0
  • LICENSE.LGPL-3.0
  • NOTICE.md
  • README.md
  • assets/engine.js
  • assets/highway3d.js
  • assets/session.js
  • plugin.json
  • screen.js
  • tests/engine.test.js
  • tests/highway3d.test.js
  • tests/screen.test.js
  • tests/session.test.js
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant