impulsetracker/IT_TUTE.ASM

520 lines
20 KiB
NASM
Raw Normal View History

2014-10-19 04:00:17 -07:00
Jumps
.386
include switch.inc
IF TUTORIAL
Extrn S_DrawBox:Far
Extrn S_DrawString:Far
Extrn Music_GetSongSegment:Far
Extrn Music_GetPlayMode:Far
Extrn PE_GetLastInstrument:Far ; Returns BX = LastInst-1
Segment Pattern BYTE Public 'Code'
Extrn PatternDataArea:Word
Extrn LastKeyBoard1:Word
Extrn LastKeyBoard2:Word
EndS
Segment Disk Byte Public 'Code' USE16
Extrn SamplesInModule:Byte
Extrn InSampleFileName:Byte
EndS
Public Glbl_TutorialHandler
Segment Glbl BYTE Public 'Code' USE16
Assume CS:Glbl, DS:Nothing, GS:Pattern
Extrn CurrentMode:Byte
TutorialState DW 0
; TutorialInfo structure:
; DW Offset function
; DB x, y (top left)
; DB x, y (bottom right)
; DB colour
; DB Message, 0
TutorialFunctionArray Label Word
DW Offset Tute_State0
DW Offset Tute_State1
DW Offset Tute_State2
DW Offset Tute_State3
DW Offset Tute_State4
DW Offset Tute_State5
DW Offset Tute_State6
DW Offset Tute_State7
DW Offset Tute_State8
DW Offset Tute_State9
DW Offset Tute_State10
DW Offset Tute_State1
DW Offset Tute_State12
DW Offset Tute_State2
DW Offset Tute_State14
DW Offset Tute_State5
DW Offset Tute_State16
DW Offset Tute_State9
DW Offset Tute_State18
DW Offset Tute_State19
DW Offset Tute_StateEnd
MAXTUTESTATE = ($-Offset TutorialFunctionArray)/2
TutorialInfoArray Label Word
DW Offset TutorialDisplayState0
DW Offset TutorialDisplayState1
DW Offset TutorialDisplayState2
DW Offset TutorialDisplayState3
DW Offset TutorialDisplayState4
DW Offset TutorialDisplayState5
DW Offset TutorialDisplayState6
DW Offset TutorialDisplayState7
DW Offset TutorialDisplayState8
DW Offset TutorialDisplayState9
DW Offset TutorialDisplayState10
DW Offset TutorialDisplayState11
DW Offset TutorialDisplayState12
DW Offset TutorialDisplayState13
DW Offset TutorialDisplayState14
DW Offset TutorialDisplayState15
DW Offset TutorialDisplayState16
DW Offset TutorialDisplayState17
DW Offset TutorialDisplayState18
DW Offset TutorialDisplayState19
DW Offset TutorialDisplayState20
DW Offset TutorialDisplayStatexx
TutorialDisplayState0 DB 0, 40, 79, 49
DB 0FFh, 20, " Welcome to the Impulse Tracker Tutorial!", 13, 13
DB "This tutorial was designed to provide you with a basic understanding of how", 13
DB "this program works. Everything that you learn here is exactly the same as in", 13
DB "the main program. By the end of this tutorial, you should be able to compose", 13
DB "your own modules!", 13, 13
DB "Good luck! (Press Enter to continue)", 0
TutorialDisplayState1 DB 0, 0, 79, 4
DB "This is the load-module screen that Impulse Tracker will normally begin with.", 13
DB "As we will start a song afresh, switch to the sample list screen by pressing", 13
DB "F3.", 0
TutorialDisplayState2 DB 36, 1, 78, 13
DB "There are two basic elements to an", 13
DB "Impulse Tracker module: patterns and", 13
DB "samples. Samples provide all the 'real'", 13
DB "sound information to the program. These", 13
DB "sounds can be instruments, voices, WAV", 13
DB "files - anything you like! IT understands", 13
DB "a wide variety of sound files and even", 13
DB "allows you to take sounds directly from", 13
DB "other modules. Since there are no samples", 13
DB "currently loaded, press Enter to switch", 13
DB "to the load sample screen.", 0
TutorialDisplayState3 DB 0, 0, 79, 5
DB "A file called TUTE.IT was included with this tutorial. You should be able to", 13
DB "see it highlighted in the listing below. IT will hilight any file that it", 13
DB "recognises as a sound file. You can also navigate through your directories", 13
DB "from this menu. Select TUTE.IT and step into it by pressing Enter.", 0
TutorialDisplayState4 DB 2, 28, 45, 39
DB "Here you can see a list of all the samples", 13
DB "that are contained within TUTE.IT. To have", 13
DB "a listen to how they sound, press the down", 13
DB "arrow once to hilight the first sample and", 13
DB "press 'Q'. Try moving to the other samples", 13
DB "and playing them. Try pressing 'W', 'E',", 13
DB "'R'. You will notice that the samples are", 13
DB "played at a different pitch. Once you've", 13
DB "heard all of the samples, select the Bass", 13
DB "Drum and press Enter.", 0
TutorialDisplayState5 DB 36, 14, 78, 20
DB "OK! You have now loaded the Bass Drum", 13
DB "into memory. This means that you can use", 13
DB "it in your songs. Lets do that now!", 13, 13
DB "Press F2 to go to the pattern editor.", 0
TutorialDisplayState6 DB 33, 16, 78, 19
DB "The pattern editor is where you set out the", 13
DB "notes that you want to play. Press 'Q'", 0
TutorialDisplayState7 DB 33, 16, 78, 35
DB "So what does this mean?", 13, 13
DB "C-5 01 ", 173, 173, " .00", 13, 13
DB "C-5 means to play the note C at octave 5.", 13
DB "01 means to use sample number 1.", 13, 13
DB "If this doesn't make sense now, don't worry!", 13
DB "All of this will be explained later in this", 13
DB "tutorial.", 13, 13
DB "For now, try to enter a Bass Drum every four", 13
DB "rows in Channel 1 (ie. on row 4, 8, 12, ...)", 13, 13
DB "Continue to use 'Q' to enter the notes. The", 13
DB "arrow keys may be of assistance. If you make", 13
DB "a mistake, use the '.' key to blank out the", 13
DB "entry.", 0
TutorialDisplayState8 DB 33, 16, 78, 21
DB "OK, that's enough!", 13, 13
DB "Lets take a listen to what you've done.", 13
DB "Press F6 to play what you've entered.", 0
TutorialDisplayState9 DB 33, 16, 78, 23
DB "As the pattern is played to you, you will", 13
DB "notice that a cursor on the left hand side", 13
DB "of the screen indicates the current playback", 13
DB "position. Press F6 to watch that again.", 13, 13
DB "When you're ready, press F8 to stop playback", 0
TutorialDisplayState10 DB 33, 16, 78, 25
DB "To finish off the task of entering the Bass", 13
DB "Drum, move up one row to row 16 and press", 13
DB "Alt-4. This will cause the cursor to step", 13
DB "4 rows after every note that you enter", 13
DB "instead of 1.", 13, 13
DB "Hold down 'Q' until Channel 1 has a Bass", 13
DB "Drum every 4 rows until row 60.", 0
TutorialDisplayState11 DB 33, 16, 78, 21
DB "Now we'll add in a snare drum. Before we do", 13
DB "that though, set the cursor step back to", 13
DB "a single row at a time. Press Alt-1, then", 13
DB "F3 to go back to the sample list.", 0
TutorialDisplayState12 DB 36, 14, 78, 18
DB "To load a sample into the second sample", 13
DB "slot, first press the down arrow a single", 13
DB "time so that sample two is hilighted.", 0
TutorialDisplayState13 DB 36, 14, 72, 17
DB "Now press Enter to call up the Load", 13
DB "Sample screen.", 0
TutorialDisplayState14 DB 7, 25, 42, 28
DB "Select the Snare Drum and load it", 13
DB "(by pressing Enter).", 0
TutorialDisplayState15 DB 36, 14, 74, 17
DB "And now return to the Pattern Editor", 13
DB "(F2)", 0
TutorialDisplayState16 DB 36, 16, 78, 24
DB "Press Ctrl-PgUp to move to the top of", 13
DB "the pattern and enter a snare drum in", 13
DB "every 4th row starting at line 2.", 13
DB 13
DB "Use C-5 again, and to make it easier, you", 13
DB "can set the skip to 4 once you've moved", 13
DB "to line 2.", 0
TutorialDisplayState17 DB 34, 16, 78, 19
DB "Have a listen to what you've just created!", 13
DB "(Press F6)", 0
TutorialDisplayState18 DB 36, 16, 78, 28
DB "As part of this tutorial, we'll try out", 13
DB "one of the block functions that IT", 13
DB "offers. Our goal is to halve the speed", 13
DB "at which this plays just by modifying", 13
DB "the pattern data. IT has two functions", 13
DB "that will automatically halve or double", 13
DB "the length of a hilighted block.", 13, 13
DB "First, hilight channel 1.", 13
DB "Move to the top of the channel first", 13
DB "by pressing Ctrl-PgUp, then press Alt-L", 0
TutorialDisplayState19 DB 36, 16, 78, 26
DB "Alt-L is a function which will mark the", 13
DB "entire channel that your cursor is", 13
DB "currently on. Pressing it twice will", 13
DB "mark the entire pattern. For now, we", 13
DB "only need the first channel so you do", 13
DB "not need to press it a second time.", 13
DB 13
DB "Now that the block is marked, press", 13
DB "Alt-G to actually double the block size!", 0
TutorialDisplayState20 DB 36, 16, 78, 33
DB "Uhhh. Ooops!! That was supposed to be", 13
DB "Alt-F. No matter - the automatic undo", 13
DB "in IT will be able to recover our data.", 13
DB "(Yes, we could just double it twice and", 13
DB "everything would be perfectly fine, but", 13
DB "this is meant to teach you about IT,", 13
DB "right? [smile])", 13
DB 13
DB "Whenever you do a block function in IT", 13
DB "the contents of the entire pattern is", 13
DB "saved first. IT will store up to 10 of", 13
DB "these in memory so that you can recover", 13
DB "from any mistakes that you make.", 13
DB 13
DB "Press Ctrl-Backspace to pull up the", 13
DB "undo menu.", 0
TutorialDisplayStatexx DB 33, 16, 78, 21
DB "Incomplete...", 0
TuteFileName DB "TUTE.IT"
BassDrumText DB "Bass Drum"
SnareDrumText DB "Snare Drum"
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Tute_State0
Cmp AL, 9
Ret
EndP Tute_State0
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Tute_State1
Cmp AL, 3
Ret
EndP Tute_State1
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Tute_State2
Cmp AL, 13
Ret
EndP Tute_State2
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Tute_State3
Push Disk
Pop ES
Assume ES:Disk
Cmp ES:SamplesInModule, 1
JNE Tute_State3a
Mov DI, Offset InSampleFileName
Mov SI, Offset TuteFileName
Mov CX, 7
RepE CmpsB
Tute_State3a:
Ret
EndP Tute_State3
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Tute_State4
Call Music_GetSongSegment
Mov ES, AX
Mov DI, [ES:64912]
Mov SI, Offset BassDrumText
Add DI, 14h
Mov CX, 9
RepE CmpSB
Ret
EndP Tute_State4
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Tute_State5
Cmp AL, 2
Ret
EndP Tute_State5
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Tute_State6
Cmp Word Ptr [FS:0], 13Ch
Ret
EndP Tute_State6
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Tute_State7
Cmp Word Ptr [FS:320*16], 13Ch
Ret
EndP Tute_State7
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Tute_State8
Call Music_GetPlayMode
Cmp AX, 1
Ret
EndP Tute_State8
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Tute_State9
Call Music_GetPlayMode
Test AX, AX
Ret
EndP Tute_State9
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Tute_State10
Cmp Word Ptr [FS:60*320], 13Ch
Ret
EndP Tute_State10
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Tute_State12
Call PE_GetLastInstrument
Cmp BX, 1
Ret
EndP Tute_State12
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Tute_State14
Call Music_GetSongSegment
Mov ES, AX
Mov DI, [ES:64914]
Mov SI, Offset SnareDrumText
Add DI, 14h
Mov CX, 10
RepE CmpSB
Ret
EndP Tute_State14
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Tute_StateEnd
Inc AX ; Ensure zero flag is not set.
Ret
EndP Tute_StateEnd
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Tute_State16
Cmp Word Ptr [FS:62*320], 23Ch
Ret
EndP Tute_State16
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Tute_State18
Cmp [Word Ptr GS:LastKeyboard1+2], 2600h
Ret
EndP Tute_State18
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Tute_State19
Cmp [Word Ptr GS:LastKeyboard1+2], 2200h
Ret
EndP Tute_State19
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Glbl_TutorialHandler Far
PushAD
Push DS
Push CS
Pop DS
Assume DS:Glbl
Push Pattern
Pop GS
Mov FS, [GS:PatternDataArea]
Assume FS:Nothing
Mov BX, [TutorialState]
Mov AL, CurrentMode
LEA SI, [EBX+EBX]
Push BX
Call [TutorialFunctionArray+SI]
Pop BX
JNE Glbl_TutorialHandler1
Inc BX
Glbl_TutorialHandler1:
Mov [TutorialState], BX
Cmp BX, MAXTUTESTATE
JAE Tute_TuteFinished
Xor AX, AX
LEA SI, [EBX+EBX]
Mov SI, [TutorialInfoArray+SI]
LodsB
Push AX
LodsB
Push AX
LodsB
Push AX
LodsB
Push AX
Mov AL, 30
Push AX
Call S_DrawBox
Add SP, 10
Mov AL, 80
Mul Byte Ptr [SI-3] ; y*80
Add AL, Byte Ptr [SI-4]
AdC AH, 0
LEA DI, [EAX+EAX]
Add DI, (80+1)*2
Mov AH, 13h
Call S_DrawString
Tute_TuteFinished:
Pop DS
PopAD
Ret
EndP Glbl_TutorialHandler
Assume DS:Nothing, FS:Nothing
EndS
ENDIF
End