| ProTracker | TrickyTracker |
|---|---|
| Pattern (64 rows) | Segment (16 rows) |
| Sample slots (1-31) | Instruments (1-8) |
| Pattern order list | Arrangement grid |
| .MOD file | .TT file (JSON) |
In ProTracker, a pattern is 4 channels locked together for 64 rows — you sequence entire patterns as a unit.
In TrickyTracker, a segment is a block of 16-rows. You assign segments per channel in the arrangement grid, so you can assign which segment each channel plays independently — channel 1 might play segment 3 while channel 2 plays segment 7 at the same time position.
This means you compose horizontally (across channels) and vertically (across time) independently — no more giant 4-channel blocks moving in lockstep.
The Arrangement View (top) is a grid: rows = time positions, columns = channels. Each cell holds a segment ID.
Each instrument is two waveforms blended together:
| Slider | Range | Function |
|---|---|---|
| PER | 0-4 | Secondary period multiplier (×1, ×4, ×8, ×16, ×32) — higher = lower pitch |
| MIX | 1-4 | Blend ratio (see table below) |
| VOL | 0-64 | Base volume |
| VSL | -32 to +31 | Volume slide per tick (negative = fade out) |
| PSL | -32 to +31 | Pitch slide per tick (negative = pitch down) |
MIX values:
| MIX | Primary | Secondary |
|---|---|---|
| 1 | 50% | 50% |
| 2 | 75% | 25% |
| 3 | 87% | 13% |
| 4 | 94% | 6% |
| Key | Action |
|---|---|
| F5 / Right Shift | Play/Stop |
| Ctrl+F5 / Ctrl+Shift | Play from cursor |
| F6 | Rewind (stop + reset) |
| F7 / Space | Toggle record mode |
| Escape | Stop playback |
| Enter | Preview current row |
| Key | Action |
|---|---|
| 1-8 | Select instrument |
| Shift+1-4 | Mute/unmute channel |
| F1 / F2 | Octave down/up |
| F4 | Help |
| Ctrl+Z / Ctrl+Y | Undo / Redo |
| Ctrl+N / Ctrl+O / Ctrl+S | New / Open / Save |
| Ctrl+E | Export to assembly |
| Ctrl+I | Project info |
White keys: Z X C V B N M , . (C to D+1)
Black keys: S D G H J L (C# D# F# G# A# C#+1)
Shows export statistics to help optimize size:
Single-use items are highlighted — candidates for inlining/removal to save bytes when compressing the module.
Exports to 68000 assembly for Amiga:
Tricky_Init — call once to set up audioTricky_Play — call every VBlank for playbackFor embedding directly in runtime players without assembly compilation. The binary format is structured for fast PC-relative loading on the Amiga.
Header (26 bytes):
Offset 0x00: Longword Note table offset (PC-relative)
Offset 0x04: Longword Segments offset (PC-relative)
Offset 0x08: Longword Channel arrangements offset (PC-relative)
Offset 0x0C: Longword Instruments offset (PC-relative)
Offset 0x10: Longword Generation data offset (PC-relative)
Offset 0x14: Word Instrument count - 1
Offset 0x16: Word Song length
Offset 0x18: Word Channel stride (always 8)
Data sections (big-endian Motorola order):
| Section | Format | Content |
|---|---|---|
| Note Table | Word array | Note periods (one word per used note) |
| Segments | Word pairs | 16 rows × 4 channels per segment: [instrument_id, note_index] |
| Arrangements | Word array | 4 channels × song_length entries: segment indices |
| Instruments | 4 words each | [unused, volume, pitch_slide, volume_slide] per instrument |
| Generation | 4 words each | [primary_waveform, secondary_waveform, mix_shift, secondary_shift] per instrument |
Key features:
Usage in player code:
; a4 = base address of binary header
move.l 0(a4),d0 ; Note table offset
lea (a4,d0.l),a1 ; Resolve to absolute address
move.l 4(a4),d0 ; Segments offset
lea (a4,d0.l),a2 ; Resolve to absolute address
; ... etc for other sections