Skip to content

Releases: levaleureux/dr_mod

v0.3.0 β€” Responsive UI, panels, ProTracker effects

Choose a tag to compare

@levaleureux levaleureux released this 07 Apr 12:17

Highlights

  • 🎨 Responsive UI: vim-like StatusBar + right SidebarPanel + scaled PatternDraw
  • ⌨️ Tab toggle between PLAY (tracker) and SAMPLE views
  • 🎡 4 ProTracker effects: Set Speed/BPM, Set Volume, Volume Slide, Position Jump/Pattern Break
  • πŸ§ͺ 75 tests (was 53), zero rubocop offenses
  • πŸ—οΈ Hash-based effect dispatch for extensibility
  • πŸ“¦ DR 6.x only (dropped 2024)
  • πŸ”€ JetBrains Mono Nerd Font

Bug fixes

  • Pattern navigation to last position no longer crashes
  • Cursor alignment pixel-perfect on current position
  • Channel keys 1-4 use proper DR key names

πŸ€– Generated with Claude Code

v0.2.1 β€” Fix keys + tempo effect

Choose a tag to compare

@levaleureux levaleureux released this 04 Apr 18:45

Fixed

  • Reload key: F5 β†’ W (F5 not valid in DragonRuby)
  • Channel mute keys 1-4: use word names (one, two, three, four)
  • Tempo: correct Amiga-to-DR conversion (was hardcoded 10, now 7 frames)

Added

  • Effect 0xF: Set Speed (1-31) / BPM (32+)
  • PatternTempo and PatternInput modules
  • 5 tempo conversion tests (58 total)

v0.2.0 β€” Audio fixes, 53 tests, zero rubocop offenses

Choose a tag to compare

@levaleureux levaleureux released this 04 Apr 18:04

Changelog

All notable changes to dr_mod are documented in this file.

[0.2.0] β€” 2026-04-04

Fixed

  • Sample data corruption: Amiga word-to-byte conversion (Γ—2 missing) and
    pattern_count off-by-one caused every sample to read wrong data (#33)
  • Sample frequency: replaced broken custom_rate with Amiga PAL formula
    hz = 7093789.2 / (period * 2) (#29)
  • Sample looping: one-shot lambda prevents infinite playback loop
  • Sample indexing: ProTracker 1-indexed samples (0 = no instrument) (#31)
  • Finetune parsing: signed 4-bit (-8 to +7), was read as unsigned (#34)
  • Finetune applied: frequency adjusted by 2^(finetune/96) (#34)
  • Sample volume: mapped ProTracker 0-64 to DragonRuby gain 0.0-1.0 (#35)
  • Visual alignment: colored bands now aligned with pattern text (#20)
  • DR 6.x compatibility: replaced dynamic load_dep_files with explicit requires (#41)

Added

  • Pattern loop mode: press L to repeat current pattern (#45)
  • Channel mute/unmute: press 1-4 to toggle channels (#44)
  • Hot reload MOD: press F5 to reload MOD file without restart (#36)
  • Sidebar shortcuts: display current key bindings and state
  • 53 unit tests: Cell, LoadTool, Sample, Song parsing (was 4) (#28)
  • GitHub Actions CI: rubocop + reek lint on push/PR (#40)
  • Lefthook pre-commit: rubocop + reek + dr_spec (#15)
  • Architecture docs: Mermaid class diagram and data flow (#24)
  • Code style guide: anti-parentheses, Sandi Metz rules (#14)
  • Reek config: adapted for DragonRuby patterns (#27)
  • Blog drafts: MOD file layout bugs, ProTracker finetune, sample indexing,
    lefthook-driven refactoring with AI

Changed

  • Rubocop: 93 β†’ 0 offenses (#14)
  • Reek: 124 β†’ 32 warnings (#27)
  • Pattern player: uses real MOD samples instead of hardcoded WAV files
  • 6 modules extracted: CellInfo, SfxDraw, PatternDraw, PatternSideBar,
    PatternAudio, SfxDraw (Sandi Metz: 5 lines/method, 100 lines/class)
  • README: updated with all controls, git flow, dev setup

Removed

  • Dead code: start_game, sine_wave lambda, debug puts
  • Floating methods outside Cell class
  • Dynamic load_dep_files (DR 6.x incompatible)

[0.1] β€” 2024

Initial version. Basic MOD file loading, pattern display, sample view.