Repository navigation
Releases: levaleureux/dr_mod
Releases Β· levaleureux/dr_mod
Release list
v0.3.0 β Responsive UI, panels, ProTracker effects
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
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
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.