http://garvalf.online.fr/index.php?page=articles_vortex_tracker.en

I want arps!
To create an arpeggio, use the ornaments tab. It's very simple and easy 
to get the hang of, even though it looks scary.

Adjust the length of the ornament to 3. Now, just enter "0" in the first 
row, "3" in the second row, and "7" in the third row. Go to the test 
field and hit some notes. Minor arp!

00|+00
00|+03
00|+07

To use this in your song, go back to the pattern editor. Change the 
third period after the note you want to arp to "1". Play your song, and 
you'll hear some arps. To turn the arping off (so you can have it 
applying only to specific notes, not to a whole column), just enter the 
number of an ornament you haven't used yet. Such as F.




http://karoshi.auic.es/index.php?topic=397.msg4641#msg4641


Hello.

Long ago I tried to write a kind of doc about PT3 modules. I stopped it 
but due to a certain person who asked for it ... (this goes especially 
for Nerlaska) I write here what I have. I can't remember exactly what I 
wrote on some papers so when you see something like (?), it means I 
can't remember what I wrote Shocked Shocked Shocked

It would be very nice if someone could complete the info here given. 
It's very easy; just write some basic on Vortex Tracker II and start 
watching with an hex-viewer the changes ... at least, that's what I did 
Grin

Have fun.

===========================================================================

PT3 format:

*Info inside the module*

$00: "ProTracker 3."
$0D: Version (always "5" for Vortex Tracker II).
$0E: " compilation of "
$1E: Name of the module.
$3E: " by "
$42: Author of the module.
$63: Frequency table (from 1 to 4).
$64: Speed ----------------------------------------------------------- Delay:    1 byte
$65: Number of patterns.
$66: Pattern loop --------------------------------------------------- LPosPtr:  1 byte
$67: Position of patterns inside the module ---------------- PatsPtrs: 2 bytes
$69: Position of samples inside the module ----------------- SamPtrs:  2 bytes
     (2 bytes per address * 32 samples = 64 bytes)
$A9: Position of ornaments inside the module ------------- OrnPtrs:  2 bytes
     (2 bytes per address * 16 ornaments = 32 bytes)
$C9: It points to where the patterns order ist ------------- CrPsPtr:  2 bytes
     If you have a look to where this address points you can see, for instance,
     $00,$03,$06,$03,$FF, which means:

pattern 0 ($00), pattern 1 ($03), pattern 2 ($06), pattern 1 ($03), END ($FF).
As you can see, you have to multiply for 3 every pattern number.

------------------------------------------------------------------------------

Now, in group of 6 bytes, come the address of every channel of every pattern.
So the first 6 bytes will point to the address of channel A, B and C of
pattern 0 (3 channels * 2 bytes = 6 bytes). The next 6 bytes to the 3 channels
of pattern 1, etc ...

------------------------------------------------------------------------------

In $69 (SamPtrs) we have the address where the definition of the samples
start. So $69 and $70 will contain the address of the definition of the first
sample in the module. $71 and $72 of the second, and so on.

The definition of the samples are like this:

byte 1: Loop
byte 2: Length of the sample
byte 3: 0 0 0 0 0 0 0 0
           ¦_¦ ¦______¦ ¦___ 0: Envelope   1: No envelope
            ¦         ¦
            ¦         ¦________ Noise: 0 - 31
            ¦
            ¦______________ 10: Volume down   11: Volume up

byte 4: 0 0 0 0 0 0 0 0
           ¦_¦ ¦_¦  ¦____¦
            ¦    ¦       ¦
            ¦    ¦       ¦______ Volume
            ¦    ¦
            ¦    ¦___________ Noise slide (?)
            ¦
            ¦______________ Frequency slide (?)

byte 5: Low byte.
byte 6: High byte.
These two bytes (5 and 6) contain the frequency slide. In case of negative
slide (higher pitch) the frequency you want to rest is rested to $FFFF and
stored in these 2 bytes.

Bytes 3,4,5 and 6 form a line of the sample (raster). So a sample will have
so many groups of these bytes as lines has the sample.

------------------------------------------------------------------------------

Definition of ornaments are much easier:

Byte 1: Loop
Byte 2: Length
Byte 3: Note (0-95)

The same as for samples. Byte 3 contains the definition of one line so there
will be as much bytes containing the new note as lines of definition has the
ornament.

------------------------------------------------------------------------------

Now it becomes more complex Smiley

The address of the channels of every pattern come in group of 6, as we said.
If we go to the address pointed for channel A (the first 2 bytes of those 6)
we'll have definition of the channel A in the tracker. The bytes are coded so
we have to read the higher 4 bites:

$4x: Ornament ($40-$4F)
$50-$AF: Note to play. There are 96 (12 notes * 8 octaves). The byte before
         this one tells the length in lines inside the tracker. For instance:
         $05,$50 will play C1 (Do in octave 1) during 5 lines of tracker. If
         the Speed (Delay) is 6, the player will play this note during 30
         (6 rasters * 5 lines in tracker) rasters.
$Bx: Envelope. We have to add 1 to know which value should we give to register
     13. If there's envelope (a value different to $B1) the next 2 bytes are
     register 12 and register 11 of the PSG. An example: $B9, $00, $50 means
     R13=$08, R12=$00, R11=$50.
$Cx: Volume - $C0-$CF
$Dx: Sample - $D0-$EF
$0X: Effects/Commands ... The values they handle are set after note value
     ($50-$AF).

*Effects*

$01: Sound frequency decreasing in that channel.
     First byte indicates the delay used to add the new frequency.
     Next 2 bytes will indicate the frequency to add. Example:
     $02,$23,$00 will add $23 to the final frequency in that raster
     and another $23 every 2 rasters.

$01: Sound frequency increasing in that channel.
     It's the same as above but the value is rested to $FFFF. Example:
     $01,$DD,$FF will rest $23 to the final frequency in every raster.

$02: Tone portamento.
     First byte is delay again. (?)

$03: Starts playing sample from a particular position/line definition.
     Byte indicates from which position.

$04: Starts playing ornament from a particular position/line definition.
     Byte indicates from which position.

$06: Periodical sound off/on in that channel.
     Two bytes are used here. The first one tells how many rasters will be
     played and the second how many will be not. Example. $03,$04 means
     that that channel will be played 3 rasters, 4 not played, 3 played, ...

$08: Envelope frequency increasing.
     Two bytes will indicate the frequency to add to registers R12 and R11.
     Example: $34,$00 will add $34 to R11.

$09: Set playing speed (new Delay).
     The byte after the note will tell the new delay.

$0A: Envelope frequency decreasing.
     Same as increasing but the value is rested to $FFFF.
     Example: $CC,$FF will rest $34 to R11.

------------------------------------------------------------------------------

*Example 1*

So if we have this in the module: $D2,$CF,$B1,$05,$50 we will have this in the
tracker:

C-1   2..F   ....
---     ....    ....
---     ....    ....
---     ....    ....
---     ....    ....

$D2: Sample 2    ($Dx samples)
$CF: Volume 15   ($Cx volume)
$B1: No envelope ($Bx envelope)
$05,$50: Play note $50 (C1) during five tracker lines.

*Example 2*

If we have this in the module: $D1,$CE,$09,$B1,$08,$50,$07

$D1: Sample 1.
$CE: Volume 14.
$09: New delay will be set. See after note is set.
$B1: No envelope.
$08,$50: Play note $50 (C1) during eight tracker lines.
$07: New Delay.
