Skip to content

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

Closed
mattromano wants to merge 2 commits into
got-feedBack:mainfrom
mattromano:feature/21-rock-band-3d-view
Closed

mattromano wants to merge 2 commits into
got-feedBack:mainfrom
mattromano:feature/21-rock-band-3d-view

Conversation

@mattromano

Copy link
Copy Markdown

What

Closes #21. Stacked on #20 (feature/ISSUE-yarg-scoring-engine) — review that first; this PR's own change is the last commit.

  • assets/highway3d.js (MIT, original code, no artwork/fonts/logos from those games) — a three.js scene on core's vendored /static/vendor/three/three.module.min.js: pad lanes + kick bar, bevelled rounded-rectangle pad gems, domed cymbals with bell and ring, flat kick bars (magenta for double kicks), accents bigger / ghosts translucent, missed gems grey; rectangular strikeline targets, hit flashes + sparks, red lane flash on misses / overhits; beat + measure lines; star power (silver gems, blue rails/wash), fill highlight with the activator ring, violet solo tint; HUD canvas with streak + multiplier (left) and star power meter, score, stars, accuracy, difficulty badge (right). Core draw hooks fire on the HUD canvas. It renders the scoring session from the previous PR.
  • View setting: Auto (3D with WebGL2) / 3D / 2D. One picker entry (feedBackViz_drums, no static contextType so Auto still works without WebGL2); the instance declares contextType: 'webgl2' and uses the async readyPromise contract. Changing the view swaps the renderer in the main player. feedBackViz_drums3d / feedBackViz_drums2d exported for hosts.
  • Keyboard drumming in both views (Keys, default on): B / F / J K L / Shift or U I O / Enter; only while the view is visible and focused, never while typing; Space stays play/pause, D / Shift+D stay difficulty.

Dropped from the custom version: retiring core's bundled drum_highway_3d (picker blocking / prefs migration) and the "take over guitar views" shim — both were Slopsmith 0.2.9 workarounds. Note for maintainers: core still bundles drum_highway_3d, which sorts before drums and wins Auto for drum parts; users pick "Drum Highway" explicitly until core decides which drum view Auto prefers.

Screenshots

3D track paused; a star power phrase at x3 with keyboard hits; a tom fill (rectangle gems) with star power building; the settings panel with View / Keys:
(b2-3d-paused.jpg, b2-3d-star-power-phrase.jpg, b2-3d-fill-toms.jpg, b2-3d-settings-panel.jpg)

Tests

  • node tests/highway3d.test.js — 6 pass (exports, WebGL2-less createView throws cleanly, keyboard layout, key fallbacks / modifiers, synth notes round-trip through GM, D is never a drum key, view resolution + factories)
  • engine 44, session 40, screen 23 — all pass; validator ok; node --check all JS
  • Manual in core (0.3.0-alpha.1 + the metadata PR) with a ch_to_sloppak.py test pack: 3D view loads via the assets route + vendored three.js, keyboard hits score (streak 21 / x3 in the screenshot), star power notes, fill toms and the settings panel render. Audio never played (paused + seek; frames driven by screenshots).

🤖 Generated with Claude Code

mattromano and others added 2 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>
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 star power.

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 10, 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: e8463fe7-8c1e-4781-b3d8-e6e13bcac8a2

📥 Commits

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


📒 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.

@mattromano

Copy link
Copy Markdown
Author

Superseded by #26 (the 3D drum highway, stacked on #25).

@mattromano mattromano closed this Oct 15, 2026
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.

Rock Band-style 3D drum track (and keyboard drumming)

1 participant