520 lines
20 KiB
NASM
520 lines
20 KiB
NASM
|
|
|||
|
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
|