Commit 69b6715

Nick Faro committed on
Reorganize the HT repository at Toxa's suggestion
Basically make it slightly less cluttered, which will accomodate
the new upcoming manual well, fix a couple bugs, and update the build
script.
commit 69b67154131714411459e983dc8144fdb90ea6aa parent f67e079
96 changed files +895−1144
Modified.github/workflows/build.yml +14−11
@@ -27,7 +27,7 @@ jobs:
27 run: | 27 run: |
28 sudo apt -qq update 28 sudo apt -qq update
29 sudo apt install -yq lazarus libsdl2-dev bison 29 sudo apt install -yq lazarus libsdl2-dev bison
30 curl -Lo rgbds.tar.gz 'https://github.com/gbdev/rgbds/releases/download/v0.6.0/rgbds-0.6.0.tar.gz' 30 curl -Lo rgbds.tar.gz 'https://github.com/gbdev/rgbds/releases/download/v0.6.1/rgbds-0.6.1.tar.gz'
31 tar xvf rgbds.tar.gz rgbds/{include,src,Makefile} 31 tar xvf rgbds.tar.gz rgbds/{include,src,Makefile}
32 cd rgbds 32 cd rgbds
33 make -j4 rgbasm rgblink rgbfix Q= 33 make -j4 rgbasm rgblink rgbfix Q=
@@ -45,8 +45,8 @@ jobs:
45 shell: bash 45 shell: bash
46 run: | 46 run: |
47 choco install lazarus 47 choco install lazarus
48 curl -Lo 'sdl2.zip' 'https://www.libsdl.org/release/SDL2-2.0.22-win32-x64.zip' 48 curl -Lo 'sdl2.zip' 'https://github.com/libsdl-org/SDL/releases/download/release-2.26.2/SDL2-2.26.2-win32-x64.zip'
49 curl -Lo 'rgbds.zip' 'https://github.com/gbdev/rgbds/releases/download/v0.6.0/rgbds-0.6.0-win64.zip' 49 curl -Lo 'rgbds.zip' 'https://github.com/gbdev/rgbds/releases/download/v0.6.1/rgbds-0.6.1-win64.zip'
50 unzip -d rgbds rgbds.zip rgb{asm,link,fix}.exe 50 unzip -d rgbds rgbds.zip rgb{asm,link,fix}.exe
51 51
52 - name: Set up MSYS2 52 - name: Set up MSYS2
@@ -91,25 +91,28 @@ jobs:
91 run: | # The PATH manipulation is because the macOS and Windows installs do NOT put it in the PATH >_< 91 run: | # The PATH manipulation is because the macOS and Windows installs do NOT put it in the PATH >_<
92 export PATH="$PATH":/Applications/Lazarus:/c/lazarus 92 export PATH="$PATH":/Applications/Lazarus:/c/lazarus
93 93
94 lazbuild --add-package-link rackctls/RackCtlsPkg.lpk 94 lazbuild --add-package-link src/rackctls/RackCtlsPkg.lpk
95 lazbuild --add-package-link bgrabitmap/bgrabitmap/bgrabitmappack.lpk 95 lazbuild --add-package-link src/bgrabitmap/bgrabitmap/bgrabitmappack.lpk
96 96
97 lazbuild hUGETracker.lpi --build-mode="Production ${{ matrix.name }}" 97 lazbuild src/hUGETracker.lpi --build-mode="Production ${{ matrix.name }}"
98 lazbuild uge2source/uge2source.lpi --build-mode=Release 98 lazbuild src/uge2source/uge2source.lpi --build-mode=Release
99 99
100 - name: Package build 100 - name: Package build
101 shell: bash 101 shell: bash
102 run: | # macOS does NOT have `realpath` :) 102 run: | # macOS does NOT have `realpath` :)
103 mkdir packaging 103 mkdir packaging
104 for f in hUGETracker/{Resources/"Sample Songs",hUGEDriver,Resources/Fonts/PixeliteTTF.ttf,Resources/Keymaps}; do ln -sv "$PWD/$f" packaging; done 104 for f in hUGETracker/{sample-songs,src/hUGEDriver,fonts/PixeliteTTF.ttf,keymaps}; do ln -sv "$PWD/$f" packaging; done
105 OBJ=`mktemp` 105 OBJ=`mktemp`
106 HDOBJ=`mktemp` 106 HDOBJ=`mktemp`
107 rgbds/rgbasm -E -i hUGETracker/hUGEDriver -o "$HDOBJ" hUGETracker/hUGEDriver/hUGEDriver.asm 107 rgbds/rgbasm -E -i hUGETracker/src/hUGEDriver -o "$HDOBJ" hUGETracker/src/hUGEDriver/hUGEDriver.asm
108 rgbds/rgbasm -i hUGETracker/hUGEDriver/include -o "$OBJ" hUGETracker/halt.asm 108 rgbds/rgbasm -i hUGETracker/src/hUGEDriver/include -o "$OBJ" hUGETracker/src/halt.asm
109 rgbds/rgblink -o packaging/halt.gb -n packaging/halt.sym "$OBJ" "$HDOBJ" 109 rgbds/rgblink -o packaging/halt.gb -n packaging/halt.sym "$OBJ" "$HDOBJ"
110 rgbds/rgbfix -vp0xFF packaging/halt.gb 110 rgbds/rgbfix -vp0xFF packaging/halt.gb
111 rm "$OBJ" "$HDOBJ" 111 rm "$OBJ" "$HDOBJ"
112 cp -v hUGETracker/Release/hUGETracker hUGETracker/uge2source/Release/uge2source packaging 112 cp -v hUGETracker/src/Release/hUGETracker hUGETracker/src/uge2source/Release/uge2source packaging
113
114 mv packaging/sample-songs "packaging/Sample Songs"
115 mv packaging/keymaps "packaging/Keymaps"
113 116
114 - name: Extra Windows packaging 117 - name: Extra Windows packaging
115 if: matrix.name == 'Windows' 118 if: matrix.name == 'Windows'
Modified.gitignore +1−0
@@ -3,6 +3,7 @@ backup
3 ConverterBackup 3 ConverterBackup
4 **/backup 4 **/backup
5 lib 5 lib
6 *.zip
6 *.exe 7 *.exe
7 *.dll 8 *.dll
8 *.lps 9 *.lps
Modified.gitmodules +4−4
@@ -1,12 +1,12 @@
1 [submodule "hUGEDriver"] 1 [submodule "hUGEDriver"]
2 path = hUGEDriver 2 path = src/hUGEDriver
3 url = http://github.com/SuperDisk/hUGEDriver 3 url = http://github.com/SuperDisk/hUGEDriver
4 [submodule "Pascal-SDL-2-Headers"] 4 [submodule "Pascal-SDL-2-Headers"]
5 path = Pascal-SDL-2-Headers 5 path = src/Pascal-SDL-2-Headers
6 url = https://github.com/ev1313/Pascal-SDL-2-Headers 6 url = https://github.com/ev1313/Pascal-SDL-2-Headers
7 [submodule "rackctls"] 7 [submodule "rackctls"]
8 path = rackctls 8 path = src/rackctls
9 url = https://github.com/olivluca/rackctls 9 url = https://github.com/olivluca/rackctls
10 [submodule "bgrabitmap"] 10 [submodule "bgrabitmap"]
11 path = bgrabitmap 11 path = src/bgrabitmap
12 url = https://github.com/bgrabitmap/bgrabitmap 12 url = https://github.com/bgrabitmap/bgrabitmap
DeletedCPU/PROCS.INC +0−213
@@ -1,213 +0,0 @@
1 procedure add16(Var first:Word;second:Word);
2 begin
3 qtemp.Q:=longint(first)+longint(second);
4 first:=qtemp.w1;
5 af.l:=(af.l and $C4) OR (qtemp.b2 and $38);
6 if qtemp.b3=0 then af.l:=af.l and 254 (* reset Cf *) else
7 af.l:=af.l or 1;(* set Cf *)
8 end;
9
10 procedure adc16(first,second:Word);
11 begin
12 qtemp.Q:=longint(first)+longint(second)+(af.l and 1);
13 af.l:=(qtemp.b2 and $B8);
14 if qtemp.b3=0 then af.l:=af.l and 254 (* reset Cf *) else af.l:=af.l or 1;(* set Cf *)
15 if qtemp.w1>0 then af.l:=af.l and 191 (* reset Zf *) else af.l:=af.l or 64;(* set Zf *)
16 if ((first XOR qtemp.w1) SHR 15>0) and
17 ((first XOR second) SHR 15=0) then af.l:=af.l or 4 (* set Pf *) else
18 af.l:=af.l and 251;(* reset Pf *)
19 hl.W:=qtemp.w1;
20 end;
21
22 procedure sbc16(first,second:Word);
23 begin
24 qtemp.Q:=longint(first)-longint(second)-(af.l and 1);
25 af.l:=(qtemp.b2 and $B8) OR 2;
26 if qtemp.b4=0 then af.l:=af.l and 254 (* reset Cf *) else af.l:=af.l or 1;(* set Cf *)
27 if qtemp.w1>0 then af.l:=af.l and 191 (* reset Zf *) else af.l:=af.l or 64;(* set Zf *)
28 if ((first XOR qtemp.w1) SHR 15>0) and
29 ((second XOR qtemp.w1) SHR 15=0) then af.l:=af.l or 4 (* set Pf *) else
30 af.l:=af.l and 251 ;(* reset Pf *)
31 hl.W:=qtemp.w1;
32 end;
33
34 procedure add8(Lo,Pls:Byte);
35 begin
36 ptemp.W:=Lo+Pls;
37 if ptemp.h=0 then
38 begin
39 ptemp.h:=ptemp.l;
40 ptemp.l:=ptemp.l and 254; (* reset Cf *)
41 end
42 else
43 begin
44 ptemp.h:=ptemp.l;
45 ptemp.l:=ptemp.l or 1;(* set Cf *)
46 end;
47 ptemp.l:=ptemp.l and 253;(* reset Nf *)
48 if ptemp.h>0 then
49 ptemp.l:=ptemp.l and 191 (* reset Zf *)
50 else
51 ptemp.l:=ptemp.l or 64;(* set Zf *)
52 if ((Lo XOR Pls XOR ptemp.h) and 16>0) then
53 ptemp.l:=ptemp.l or 16 (* set Hf *)
54 else
55 ptemp.l:=ptemp.l and 239;(* reset Hf *)
56 if ((Lo XOR ptemp.h) SHR 7>0) and ((Lo XOR Pls) SHR 7=0) then
57 ptemp.l:=ptemp.l or 4 (* set Pf *)
58 else
59 ptemp.l:=ptemp.l and 251;(* reset Pf *)
60 af.W:=ptemp.W;
61 end;
62
63 procedure sub8(Lo,Mns:Byte);
64 begin
65 ptemp.W:=Lo-Mns;
66 if ptemp.h=0 then
67 begin
68 ptemp.h:=ptemp.l;
69 ptemp.l:=ptemp.l and 254; (* reset Cf *)
70 end
71 else
72 begin
73 ptemp.h:=ptemp.l;
74 ptemp.l:=ptemp.l or 1;(* set Cf *)
75 end;
76 ptemp.l:=ptemp.l or 2; (* set Nf *)
77 if ptemp.h>0 then
78 ptemp.l:=ptemp.l and 191 (* reset Zf *)
79 else
80 ptemp.l:=ptemp.l or 64;(* set Zf *)
81 if (Lo XOR Mns XOR ptemp.h) and 16>0 then
82 ptemp.l:=ptemp.l or 16 (* set Hf *)
83 else
84 ptemp.l:=ptemp.l and 239;(* reset Hf *)
85 if ((Lo XOR ptemp.h) SHR 7>0) and ((Mns XOR ptemp.h) SHR 7=0)
86 then ptemp.l:=ptemp.l or 4 (* set Pf *)
87 else ptemp.l:=ptemp.l and 251;(* reset Pf *)
88 af.W:=ptemp.W;
89 end;
90
91 procedure adc8(Lo,Pls:Byte);
92 begin
93 ptemp.W:=Lo+Pls+(af.l and 1);
94 if ptemp.h=0 then
95 begin
96 ptemp.h:=ptemp.l;
97 ptemp.l:=ptemp.l and 254; (* reset Cf *)
98 end
99 else
100 begin
101 ptemp.h:=ptemp.l;
102 ptemp.l:=ptemp.l or 1;(* set Cf *)
103 end;
104 ptemp.l:=ptemp.l and 253;(* reset Nf *)
105 if ptemp.h>0 then
106 ptemp.l:=ptemp.l and 191(* reset Zf *)
107 else
108 ptemp.l:=ptemp.l or 64;(* set Zf *)
109 if (Lo XOR Pls XOR ptemp.h) and 16>0 then
110 ptemp.l:=ptemp.l or 16 (* set Hf *)
111 else
112 ptemp.l:=ptemp.l and 239;(* reset Hf *)
113 if ((Lo XOR ptemp.h) SHR 7>0) and ((Lo XOR Pls) SHR 7=0) then
114 ptemp.l:=ptemp.l or 4 (* set Pf *)
115 else ptemp.l:=ptemp.l and 251;(* reset Pf *)
116 af.W:=ptemp.W;
117 end;
118
119 procedure sbc8(Lo,Mns:Byte);
120 begin
121 ptemp.W:=Lo-Mns-(af.l and 1);
122 if ptemp.h=0 then
123 begin
124 ptemp.h:=ptemp.l;
125 ptemp.l:=ptemp.l and 254; (* reset Cf *)
126 end
127 else
128 begin
129 ptemp.h:=ptemp.l;
130 ptemp.l:=ptemp.l or 1;(* set Cf *)
131 end;
132 ptemp.l:=ptemp.l or 2; (* set Nf *)
133 if ptemp.h>0 then
134 ptemp.l:=ptemp.l and 191 (* reset Zf *)
135 else
136 ptemp.l:=ptemp.l or 64;(* set Zf *)
137 if (Lo XOR Mns XOR ptemp.h) and 16>0 then
138 ptemp.l:=ptemp.l or 16 (* set Hf *)
139 else
140 ptemp.l:=ptemp.l and 239;(* reset Hf *)
141 if ((Lo XOR ptemp.h) SHR 7>0) and ((Mns XOR ptemp.h) SHR 7=0)
142 then
143 ptemp.l:=ptemp.l or 4 (* set Pf *)
144 else ptemp.l:=ptemp.l and 251;(* reset Pf *)
145 af.W:=ptemp.W;
146 end;
147
148 procedure cp_sub8(Lo,Mns:Byte);
149 begin
150 ptemp.W:=Lo-Mns;
151 af.l:=(Mns and 40) OR (ptemp.l and 215) OR 2;
152 if ptemp.l>0 then af.l:=af.l and 191 (* reset Zf *) else af.l:=af.l or 64;(* set Zf *)
153 if ptemp.h=0 then af.l:=af.l and 254 (* reset Cf *) else af.l:=af.l or 1;(* set Cf *)
154 if (Lo XOR Mns XOR ptemp.l) and 16>0 then
155 af.l:=af.l or 16 (* set Hf *)
156 else
157 af.l:=af.l and 239;(* reset Hf *)
158
159 if ((Lo XOR ptemp.l) SHR 7>0) and ((Mns XOR ptemp.l) SHR 7=0) then
160 af.l:=af.l or 4 (* set Pf *) else
161 af.l:=af.l and 251 ;(* reset Pf *)
162 end;
163
164 procedure swap(var bval: Byte);
165 var
166 h: Byte;
167 begin
168 h := hi(bval);
169 bval := (bval shl 4) or h;
170
171 if bval = 0 then
172 af.l := 64
173 else
174 af.l := 0;
175 end;
176
177 procedure anda(bval:Byte);
178 begin
179 af.h:=af.h and bval;
180 af.l:=16 or (af.h and 236) or parity[af.h];
181 if af.h=0 then af.l:=af.l or 64 else af.l:=af.l and 191;
182 end;
183
184 procedure ora(bval:byte);
185 begin
186 af.h:=af.h or bval;
187 af.l:=(af.h and 236) or parity[af.h];
188 if af.h=0 then af.l:=af.l or 64 else af.l:=af.l and 191;
189 end;
190
191 procedure xora(bval:byte);
192 begin
193 af.h:=af.h xor bval;
194 af.l:=(af.h and 236) or parity[af.h];
195 if af.h=0 then af.l:=af.l or 64 else af.l:=af.l and 191;
196 end;
197
198 procedure copy_b53(btemp:Word);
199 Begin
200 af.l:=(af.l and 215) or (btemp and 40);
201 end;
202
203 procedure pop(var wpval:Word);
204 Begin
205 wpval:=wordpeek(sp_.W);
206 inc(sp_.W,2);
207 end;
208
209 procedure push(wpval:Word);
210 Begin
211 dec(sp_.W,2);
212 wordpoke(sp_.W,wpval);
213 end;
ModifiedREADME.md +10−14
@@ -11,10 +11,7 @@ If you want help using the tracker, driver, or just want to chat, join the [hUGE
11 11
12 # Build instructions 12 # Build instructions
13 13
14 The general build instructions are yet to be 100% solidified, but these steps will guide you in the right direction. 14 The only requirements to build hUGETracker are a recent version of [Lazarus](https://www.lazarus-ide.org/) for your platform, and [RGBDS.](https://rgbds.gbdev.io/)
15
16 The only requirements to build hUGETracker are a recent version of [Lazarus](https://www.lazarus-ide.org/) for your platform.
17 If you plan on building for other platforms than your own, you'll need the FPC crosscompilers for those platforms. (I recommend using [FPCUpDeluxe](https://github.com/LongDirtyAnimAlf/fpcupdeluxe) but honestly you probably don't need to do this)
18 15
19 ```bat 16 ```bat
20 :: Download this repo 17 :: Download this repo
@@ -24,19 +21,18 @@ git clone --recursive https://github.com/SuperDisk/hUGETracker
24 cd hUGETracker 21 cd hUGETracker
25 22
26 :: Let Lazarus know about the dependencies that HT uses 23 :: Let Lazarus know about the dependencies that HT uses
27 lazbuild --add-package-link rackctls/RackCtlsPkg.lpk 24 lazbuild --add-package-link src/rackctls/RackCtlsPkg.lpk
28 lazbuild --add-package-link bgrabitmap/bgrabitmap/bgrabitmappack.lpk 25 lazbuild --add-package-link src/bgrabitmap/bgrabitmap/bgrabitmappack.lpk
29 26
30 :: At this point if you want to develop HT, then open hUGETracker.lpi in Lazarus, make sure you're in the 27 :: At this point, you'll successfully be able to build hUGETracker.
31 :: Development build mode, and everything should build correctly. However, in order to allow for concurrent 28 :: However, in order to run properly, it needs some extra files (SDL, halt.gb, fonts, etc)
32 :: development on the tracker (this repo) and the sound driver (https://github.com/SuperDisk/hUGEDriver), 29 :: so run the following script to automatically set that up. If you're on Mac or Linux,
33 :: the hUGEDriver folder is not copied to the output directory, and you're expected to symlink it there yourself; 30 :: you can replicate the commands in it yourself.
34 :: Pick one of the following:
35 31
36 mklink/J lib\Development\x86_64-win64\hUGEDriver hUGEDriver 32 setup-windows.cmd
37 ln -s hUGEDriver lib/Development/x86_64-linux/hUGEDriver
38 33
39 :: If you just want to build a release for whatever platform you have, pick one of the following: 34 :: Now, you can either build and run hUGETracker from within Lazarus,
35 :: or run one of the following to just build a binary:
40 36
41 lazbuild hUGETracker.lpi --build-mode="Production Windows" 37 lazbuild hUGETracker.lpi --build-mode="Production Windows"
42 lazbuild hUGETracker.lpi --build-mode="Production Mac" 38 lazbuild hUGETracker.lpi --build-mode="Production Mac"
RenamedResources/Color Schemes/barryvan - TangoDark.colors → color-schemes/barryvan - TangoDark.colors +0−0
File metadata changed without textual changes.
Deleteddmfimport.pas +0−251
@@ -1,251 +0,0 @@
1 unit DMFImport;
2
3 {$mode objfpc}{$H+}
4
5 interface
6
7 uses
8 Classes, SysUtils, ZStream, Song, Instruments, hUGEDataTypes, Constants;
9
10 type
11 EDMFException = class(Exception);
12
13 function LoadSongFromDmfStream(Stream: TStream): TSong;
14
15 implementation
16
17 type
18
19 { TDMFStream }
20
21 TDMFStream = class(Tdecompressionstream)
22 function ReadDMFString: String;
23 end;
24
25 function LoadSongFromDmfStream(Stream: TStream): TSong;
26 var
27 DS: TDMFStream;
28 I, J, Row: Integer;
29 TotalInstruments, TotalWavetables: Integer;
30 Temp: QWord;
31 TempS: String;
32 Pat: PPattern;
33 DmfNote, DmfOctave: Integer;
34 begin
35 InitializeSong(Result);
36
37 DS := TDMFStream.create(Stream);
38
39 //FORMAT FLAGS
40 // 16 Bytes: Format String, must be ".DelekDefleMask."
41 DS.Seek(16, soCurrent);
42 // 1 Byte: File Version, must be 24 (0x18) for DefleMask v0.12.0
43 Temp := DS.ReadByte;
44 Writeln(temp);
45 if Temp <> 24 then
46 raise EDMFException.Create('This DMF file has an unsupported version.');
47
48 //SYSTEM SET
49 //1 Byte: System:
50 //SYSTEM_GAMEBOY 0x04 (SYSTEM_TOTAL_CHANNELS 4)
51 if DS.ReadByte <> $04 then
52 raise EDMFException.Create('This DMF file is not a Game Boy module.');
53
54 //VISUAL INFORMATION
55 // 1 Byte: Song Name Chars Count (0-255)
56 // N Bytes: Song Name Chars
57 Result.Name := DS.ReadDMFString;
58 writeln(result.name);
59
60 // 1 Byte: Song Author Chars Count (0-255)
61 // N Bytes: Song Author Chars
62 Result.Artist := DS.ReadDMFString;
63 writeln(result.artist);
64
65 // 1 Byte: Highlight A in patterns
66 // 1 Byte: Highlight B in patterns
67 DS.Seek(2, soCurrent);
68
69 //MODULE INFORMATION
70 //1 Byte: Time Base
71 DS.Seek(1, soCurrent);
72 //1 Byte: Tick Time 1
73 //1 Byte: Tick Time 2
74 Result.TicksPerRow := DS.ReadByte;
75 DS.Seek(1, soCurrent);
76 //1 Byte: Frames Mode (0 = PAL, 1 = NTSC)
77 //1 Byte: Using Custom HZ (If set to 1, NTSC or PAL is ignored)
78 //1 Byte: Custom HZ value 1
79 //1 Byte: Custom HZ value 2
80 //1 Byte: Custom HZ value 3
81 DS.Seek(5, soCurrent);
82 //4 Bytes: TOTAL_ROWS_PER_PATTERN
83 Temp := DS.ReadDWord;
84 Writeln(temp);
85 if Temp <> 64 then
86 raise EDMFException.Create('This DMF file has '+IntToStr(Temp)+' rows per pattern, but hUGETracker needs exactly 64.');
87 //1 Byte: TOTAL_ROWS_IN_PATTERN_MATRIX
88 Temp := DS.ReadByte;
89 writeln('rows in pattern matrix ', temp);
90 for I := Low(Result.OrderMatrix) to High(Result.OrderMatrix) do
91 SetLength(Result.OrderMatrix[I], Temp);
92
93 //PATTERN MATRIX VALUES (A matrix of SYSTEM_TOTAL_CHANNELS x TOTAL_ROWS_IN_PATTERN_MATRIX)
94 for I := Low(Result.OrderMatrix) to High(Result.OrderMatrix) do
95 for J := Low(Result.OrderMatrix[I]) to High(Result.OrderMatrix[I]) do
96 //1 Byte: Pattern Matrix Value: (Index from SYSTEM_TOTAL_CHANNELS loop, Index from TOTAL_ROWS_IN_PATTERN_MATRIX loop)
97 Result.OrderMatrix[I, J] := (100*(I+1))+DS.ReadByte;
98 //1 Byte: TOTAL_INSTRUMENTS
99 TotalInstruments := DS.ReadByte;
100 if TotalInstruments > 15 then
101 raise EDMFException.Create('DMF files must have 15 instruments or less.');
102
103 // Read all instruments
104 writeln('total instruments ', totalinstruments);
105 for I := 0 to TotalInstruments-1 do begin
106 // 1 Byte: Instrument Name Chars Count (0-255)
107 // N Bytes: Instrument Name Chars
108 TempS := DS.ReadDMFString;
109 Result.Instruments.Duty[I+1].Name := TempS;
110 Result.Instruments.Wave[I+1].Name := TempS;
111 Result.Instruments.Noise[I+1].Name := TempS;
112
113 // TODO
114 Result.Instruments.Wave[I+1].Waveform := 0;
115
116 // 1 Byte: Instrument Mode (0 = STANDARD INS, 1 = FM INS)
117 if DS.ReadByte <> 0 then
118 raise EDMFException.Create('This DMF file contains an FM-type instrument, which is unsupported.');
119
120 //ARPEGGIO MACRO
121 //1 Byte: ENVELOPE_SIZE (0 - 127)
122 //Repeat this ENVELOPE_SIZE times
123 //4 Bytes: ENVELOPE_VALUE (signed int, offset=12)
124 //IF ENVELOPE_SIZE > 0
125 //1 Byte: LOOP_POSITION (-1 = NO LOOP)
126 //1 Byte: ARPEGGIO MACRO MODE (0 = Normal, 1 = Fixed)
127 Temp := DS.ReadByte;
128 DS.Seek(4*Temp, soCurrent);
129 if Temp > 0 then
130 DS.Seek(1, soCurrent);
131 DS.Seek(1, soCurrent);
132
133 //DUTY/NOISE MACRO
134 //1 Byte: ENVELOPE_SIZE (0 - 127)
135 //Repeat this ENVELOPE_SIZE times
136 //4 Bytes: ENVELOPE_VALUE
137 //IF ENVELOPE_SIZE > 0
138 //1 Byte: LOOP_POSITION (-1 = NO LOOP)
139 Temp := DS.ReadByte;
140 DS.Seek(4*Temp, soCurrent);
141 if Temp > 0 then
142 DS.Seek(1, soCurrent);
143
144 //WAVETABLE MACRO
145 //1 Byte: ENVELOPE_SIZE (0 - 127)
146 //Repeat this ENVELOPE_SIZE times
147 //4 Bytes: ENVELOPE_VALUE
148 //IF ENVELOPE_SIZE > 0
149 //1 Byte: LOOP_POSITION (-1 = NO LOOP)
150 Temp := DS.ReadByte;
151 DS.Seek(4*Temp, soCurrent);
152 if Temp > 0 then
153 DS.Seek(1, soCurrent);
154
155 //1 Byte: Envelope Volume
156 //1 Byte: Envelope Direction
157 //1 Byte: Envelope Length
158 //1 Byte: Sound Length
159 with Result.Instruments.Duty[I+1] do begin
160 InitialVolume := DS.ReadByte;
161
162 VolSweepDirection := TSweepType(DS.ReadByte);
163 if VolSweepDirection = stUp then
164 VolSweepDirection := stDown
165 else
166 VolSweepDirection := stUp;
167
168 VolSweepAmount := TEnvelopeSweepAmount(DS.ReadByte);
169 //Length := DS.ReadByte;
170 DS.Seek(1, soCurrent);
171 end;
172 end;
173
174 //WAVETABLES DATA
175 //1 Byte: TOTAL_WAVETABLES
176 //Repeat this TOTAL_WAVETABLES times
177 // 4 Bytes: WAVETABLE_SIZE
178 // Repeat this WAVETABLE_SIZE times
179 // 4 Bytes: Wavetable Data
180 TotalWavetables := DS.ReadByte;
181 for I := 0 to TotalWavetables-1 do begin
182 Temp := DS.ReadDWord;
183 writeln('wave length was ', temp);
184 for J := 0 to Temp-1 do begin
185 writeln(i, ' ', j);
186 Result.Waves[I, J] := Byte(DS.ReadDWord);
187 end;
188 end;
189
190 for I := Low(TOrderMatrix) to High(TOrderMatrix) do begin
191 Temp := DS.readbyte;
192 writeln('fx columns ', temp);
193 if Temp <> 1 then
194 raise EDMFException.Create('This DMF file contains patterns with more than one effect column, which is unsupported.');
195
196 writeln('iterating '+inttostr(High(Result.OrderMatrix[I]) - Low(Result.OrderMatrix[I]) + 1), ' times');
197 for J := Low(Result.OrderMatrix[I]) to High(Result.OrderMatrix[I]) do begin
198 Pat := Result.Patterns.GetOrCreateNew(((I+1)*100) + J);
199 for Row := Low(TPattern) to High(TPattern) do begin
200 with Pat^[Row] do begin
201 DmfNote := DS.ReadWord;
202 DmfOctave := DS.ReadWord;
203 if (DmfNote = 0) and (DmfOctave = 0) then
204 Note := NO_NOTE
205 else
206 Note := DmfNote + (12*DmfOctave) - (12*2);
207
208 DS.Seek(2,soCurrent); //volume
209
210 EffectCode := Byte(DS.ReadWord);
211 if EffectCode = High(Byte) then
212 EffectCode := 0;
213
214 EffectParams.Value := Byte(DS.ReadWord);
215 if EffectParams.Value = High(Byte) then
216 EffectParams.Value := 0;
217
218 Instrument := Byte(DS.ReadWord);
219 if Instrument = High(Byte) then
220 Instrument := 0
221 else
222 Inc(Instrument);
223 end;
224 end;
225 end;
226 end;
227
228 DS.Free;
229 end;
230
231 { TDMFStream }
232
233 function TDMFStream.ReadDMFString: String;
234 Var
235 TheSize : Byte;
236 P : PByte ;
237 begin
238 ReadBuffer (TheSize,SizeOf(TheSize));
239 SetLength(Result,TheSize);
240 // Illegal typecast if no AnsiStrings defined.
241 if TheSize>0 then
242 begin
243 ReadBuffer (Pointer(Result)^,TheSize);
244 P:=Pointer(Result)+TheSize;
245 p^:=0;
246 end;
247 end;
248
249
250 end.
251
RenamedResources/Docs/Manual.docx → docs/Manual.docx +0−0
File metadata changed without textual changes.
RenamedResources/Docs/gb_note_table.xlsx → docs/gb_note_table.xlsx +0−0
File metadata changed without textual changes.
RenamedResources/Fonts/PIXELITE.FON → fonts/PIXELITE.FON +0−0
File metadata changed without textual changes.
RenamedResources/Fonts/PixeliteTTF.sfd → fonts/PixeliteTTF.sfd +0−0
File metadata changed without textual changes.
RenamedResources/Fonts/PixeliteTTF.ttf → fonts/PixeliteTTF.ttf +0−0
File metadata changed without textual changes.
Deletedgit2revisioninc.cmd +0−18
@@ -1,18 +0,0 @@
1 echo \" <<'BATCH_SCRIPT' >/dev/null ">NUL "\" \`" <#"
2 @ECHO OFF
3 REM ===== Batch Script Begin =====
4 FOR /F "delims=" %%i IN ('git describe --tags --always') DO set gittag=%%i
5 echo '%gittag%' > revision.inc
6 REM ====== Batch Script End ======
7 GOTO :eof
8 TYPE CON >NUL
9 BATCH_SCRIPT
10 #> | Out-Null
11
12 set +o histexpand 2>/dev/null
13 # ===== Bash Script Begin =====
14 echo \'$(git describe --tags --always)\' > revision.inc
15 # ====== Bash Script End ======
16 case $- in *"i"*) cat /dev/stdin >/dev/null ;; esac
17 exit
18 #>
RenamedResources/Graphics/HUGELogo.gif → graphics/HUGELogo.gif +0−0
File metadata changed without textual changes.
RenamedResources/Graphics/hUGE Logo.ai → graphics/hUGE Logo.ai +0−0
File metadata changed without textual changes.
RenamedResources/Graphics/hUGE Logo.svg → graphics/hUGE Logo.svg +0−0
File metadata changed without textual changes.
RenamedResources/Graphics/ht-icon.png → graphics/ht-icon.png +0−0
File metadata changed without textual changes.
RenamedResources/Keymaps/FamiTracker.km → keymaps/FamiTracker.km +0−0
File metadata changed without textual changes.
RenamedResources/Sample Songs/Arachno - A Sad Touch.uge → sample-songs/Arachno - A Sad Touch.uge +0−0
File metadata changed without textual changes.
RenamedResources/Sample Songs/Coffee Bat - Blue Ocean.uge → sample-songs/Coffee Bat - Blue Ocean.uge +0−0
File metadata changed without textual changes.
RenamedResources/Sample Songs/Coffee Bat - Pilgrim's Peril Menu.uge → sample-songs/Coffee Bat - Pilgrim's Peril Menu.uge +0−0
File metadata changed without textual changes.
RenamedResources/Sample Songs/Coffee Bat - Wyrmhole.uge → sample-songs/Coffee Bat - Wyrmhole.uge +0−0
File metadata changed without textual changes.
RenamedResources/Sample Songs/FADE - Microplastics in the Air.uge → sample-songs/FADE - Microplastics in the Air.uge +0−0
File metadata changed without textual changes.
RenamedResources/Sample Songs/FADE - Strap in and Suit Up.uge → sample-songs/FADE - Strap in and Suit Up.uge +0−0
File metadata changed without textual changes.
RenamedResources/Sample Songs/Final Soldier - Stage 1 (arr. Michirin).uge → sample-songs/Final Soldier - Stage 1 (arr. Michirin).uge +0−0
File metadata changed without textual changes.
RenamedResources/Sample Songs/Gradius - Mechanical Globule (arr. MelonadeM).uge → sample-songs/Gradius - Mechanical Globule (arr. MelonadeM).uge +0−0
File metadata changed without textual changes.
RenamedResources/Sample Songs/Incomplete/FinalBlast.uge → sample-songs/Incomplete/FinalBlast.uge +0−0
File metadata changed without textual changes.
RenamedResources/Sample Songs/Incomplete/Gametheme.uge → sample-songs/Incomplete/Gametheme.uge +0−0
File metadata changed without textual changes.
RenamedResources/Sample Songs/Incomplete/Lunawaves.uge → sample-songs/Incomplete/Lunawaves.uge +0−0
File metadata changed without textual changes.
RenamedResources/Sample Songs/Incomplete/Plagiate.uge → sample-songs/Incomplete/Plagiate.uge +0−0
File metadata changed without textual changes.
RenamedResources/Sample Songs/Incomplete/Plagiate1.uge → sample-songs/Incomplete/Plagiate1.uge +0−0
File metadata changed without textual changes.
RenamedResources/Sample Songs/Incomplete/Plagiate2.uge → sample-songs/Incomplete/Plagiate2.uge +0−0
File metadata changed without textual changes.
RenamedResources/Sample Songs/Incomplete/Plagiate3.uge → sample-songs/Incomplete/Plagiate3.uge +0−0
File metadata changed without textual changes.
RenamedResources/Sample Songs/Incomplete/funky lesbians.uge → sample-songs/Incomplete/funky lesbians.uge +0−0
File metadata changed without textual changes.
RenamedResources/Sample Songs/Incomplete/mado.uge → sample-songs/Incomplete/mado.uge +0−0
File metadata changed without textual changes.
RenamedResources/Sample Songs/Incomplete/nationalpark.uge → sample-songs/Incomplete/nationalpark.uge +0−0
File metadata changed without textual changes.
RenamedResources/Sample Songs/Incomplete/sarah.uge → sample-songs/Incomplete/sarah.uge +0−0
File metadata changed without textual changes.
RenamedResources/Sample Songs/Incomplete/twentyfour.uge → sample-songs/Incomplete/twentyfour.uge +0−0
File metadata changed without textual changes.
RenamedResources/Sample Songs/Incomplete/urea.uge → sample-songs/Incomplete/urea.uge +0−0
File metadata changed without textual changes.
RenamedResources/Sample Songs/Jester - FishNChips.uge → sample-songs/Jester - FishNChips.uge +0−0
File metadata changed without textual changes.
RenamedResources/Sample Songs/Junichi Masuda - Pokemon Center (arr. Yomaru Kasuga).uge → sample-songs/Junichi Masuda - Pokemon Center (arr. Yomaru Kasuga).uge +0−0
File metadata changed without textual changes.
RenamedResources/Sample Songs/Junichi Masuda - Wild Pokemon Appear.uge → sample-songs/Junichi Masuda - Wild Pokemon Appear.uge +0−0
File metadata changed without textual changes.
RenamedResources/Sample Songs/Maktone - Softworld.uge → sample-songs/Maktone - Softworld.uge +0−0
File metadata changed without textual changes.
RenamedResources/Sample Songs/MelonadeM - Boatship for Rent.uge → sample-songs/MelonadeM - Boatship for Rent.uge +0−0
File metadata changed without textual changes.
RenamedResources/Sample Songs/Quazar - Funky Stars (excerpt).uge → sample-songs/Quazar - Funky Stars (excerpt).uge +0−0
File metadata changed without textual changes.
RenamedResources/Sample Songs/Reed - Funkabeer's Revenge.uge → sample-songs/Reed - Funkabeer's Revenge.uge +0−0
File metadata changed without textual changes.
RenamedResources/Sample Songs/SVL - UwU.uge → sample-songs/SVL - UwU.uge +0−0
File metadata changed without textual changes.
RenamedResources/Sample Songs/SVL - Yyna.uge → sample-songs/SVL - Yyna.uge +0−0
File metadata changed without textual changes.
RenamedResources/Sample Songs/Soft Maniac - Ryukenden.uge → sample-songs/Soft Maniac - Ryukenden.uge +0−0
File metadata changed without textual changes.
RenamedResources/Sample Songs/Unknown Artist - Cognition.uge → sample-songs/Unknown Artist - Cognition.uge +0−0
File metadata changed without textual changes.
RenamedResources/Sample Songs/raphaelgoulart - The Murderous Funk Machine (intro).uge → sample-songs/raphaelgoulart - The Murderous Funk Machine (intro).uge +0−0
File metadata changed without textual changes.
Addedsetup-windows.cmd +20−0
@@ -0,0 +1,20 @@
1 set BUILD_DIR=src\lib\Development\x86_64-win64
2 set SDL_URL=https://github.com/libsdl-org/SDL/releases/download/release-2.26.2/SDL2-2.26.2-win32-x64.zip
3
4 mkdir %BUILD_DIR%
5
6 rem Get SDL
7 curl -LO %SDL_URL%
8 tar -Oxf SDL2-2.26.2-win32-x64.zip SDL2.dll > %BUILD_DIR%\SDL2.dll
9
10 rem Copy font
11 copy fonts\PixeliteTTF.ttf %BUILD_DIR%\
12
13 rem Compile halt.gb
14 rgbasm -E -i src\hUGEDriver -o hUGEDriver.obj src\hUGEDriver\hUGEDriver.asm
15 rgbasm -i src\hUGEDriver\include -o halt.obj src\halt.asm
16 rgblink -o %BUILD_DIR%\halt.gb -n %BUILD_DIR%\halt.sym halt.obj hUGEDriver.obj
17 rgbfix -vp0xFF %BUILD_DIR%\halt.gb
18
19 rem Link the hUGEDriver directory
20 mklink/J %BUILD_DIR%\hUGEDriver src\hUGEDriver
RenamedPascal-SDL-2-Headers → src/Pascal-SDL-2-Headers +0−0
File metadata changed without textual changes.
Renamedabout_hugetracker.lfm → src/about_hugetracker.lfm +0−0
File metadata changed without textual changes.
Renamedabout_hugetracker.pas → src/about_hugetracker.pas +0−0
File metadata changed without textual changes.
Renamedbgrabitmap → src/bgrabitmap +0−0
File metadata changed without textual changes.
Renamedclipboardutils.pas → src/clipboardutils.pas +0−0
File metadata changed without textual changes.
Renamedcodegen.pas → src/codegen.pas +0−0
File metadata changed without textual changes.
Renamedconstants.pas → src/constants.pas +0−0
File metadata changed without textual changes.
RenamedCPU/TABLES.INC → src/cpu_tables.pas +6−4
@@ -1,3 +1,7 @@
1 unit cpu_tables;
2
3 interface
4
1 Const 5 Const
2 PARITY:array[0..255] of byte= 6 PARITY:array[0..255] of byte=
3 (4, 0, 0, 4, 0, 4, 4, 0, 0, 4, 4, 0, 4, 0, 0, 4, 7 (4, 0, 0, 4, 0, 4, 4, 0, 0, 4, 4, 0, 4, 0, 0, 4,
@@ -1187,7 +1191,5 @@ Const
1187 $8A,$8B,$8C,$8D,$8E,$8F,$90,$91,$92,$93,$94,$95,$96,$97,$98, 1191 $8A,$8B,$8C,$8D,$8E,$8F,$90,$91,$92,$93,$94,$95,$96,$97,$98,
1188 $99)); 1192 $99));
1189 1193
1190 var in_table: array[0..255] of byte; 1194 implementation
1191 { $ifndef assembler} 1195 end.
1192 add8_table,sub8_table,cpsub8_table : array[0..255] of byte;
1193 { $endif}
Renamedeffecteditor.lfm → src/effecteditor.lfm +0−0
File metadata changed without textual changes.
Renamedeffecteditor.pas → src/effecteditor.pas +0−0
File metadata changed without textual changes.
Renamedfindreplace.lfm → src/findreplace.lfm +0−0
File metadata changed without textual changes.
Renamedfindreplace.pas → src/findreplace.pas +0−0
File metadata changed without textual changes.
RenamedhUGEDriver → src/hUGEDriver +0−0
File metadata changed without textual changes.
RenamedhUGETracker.ico → src/hUGETracker.ico +0−0
File metadata changed without textual changes.
RenamedhUGETracker.lpi → src/hUGETracker.lpi +75−70
@@ -29,8 +29,8 @@
29 <Filename Value="Release\hUGETracker"/> 29 <Filename Value="Release\hUGETracker"/>
30 </Target> 30 </Target>
31 <SearchPaths> 31 <SearchPaths>
32 <IncludeFiles Value="CPU;Sound;Global;$(ProjOutDir)"/> 32 <IncludeFiles Value="$(ProjOutDir)"/>
33 <OtherUnitFiles Value="CPU;Sound;Global;Pascal-SDL-2-Headers"/> 33 <OtherUnitFiles Value="Pascal-SDL-2-Headers"/>
34 <UnitOutputDirectory Value="lib\Production\$(TargetCPU)-$(TargetOS)"/> 34 <UnitOutputDirectory Value="lib\Production\$(TargetCPU)-$(TargetOS)"/>
35 </SearchPaths> 35 </SearchPaths>
36 <Parsing> 36 <Parsing>
@@ -63,6 +63,8 @@
63 </Linking> 63 </Linking>
64 <Other> 64 <Other>
65 <Verbosity> 65 <Verbosity>
66 <ShowNotes Value="False"/>
67 <ShowHints Value="False"/>
66 <ShoLineNum Value="True"/> 68 <ShoLineNum Value="True"/>
67 </Verbosity> 69 </Verbosity>
68 <WriteFPCLogo Value="False"/> 70 <WriteFPCLogo Value="False"/>
@@ -78,8 +80,8 @@
78 <Filename Value="Release\hUGETracker"/> 80 <Filename Value="Release\hUGETracker"/>
79 </Target> 81 </Target>
80 <SearchPaths> 82 <SearchPaths>
81 <IncludeFiles Value="CPU;Sound;Global;$(ProjOutDir)"/> 83 <IncludeFiles Value="$(ProjOutDir)"/>
82 <OtherUnitFiles Value="CPU;Sound;Global;Pascal-SDL-2-Headers"/> 84 <OtherUnitFiles Value="Pascal-SDL-2-Headers"/>
83 <UnitOutputDirectory Value="lib\Production\$(TargetCPU)-$(TargetOS)"/> 85 <UnitOutputDirectory Value="lib\Production\$(TargetCPU)-$(TargetOS)"/>
84 </SearchPaths> 86 </SearchPaths>
85 <Parsing> 87 <Parsing>
@@ -113,6 +115,8 @@
113 </Linking> 115 </Linking>
114 <Other> 116 <Other>
115 <Verbosity> 117 <Verbosity>
118 <ShowNotes Value="False"/>
119 <ShowHints Value="False"/>
116 <ShoLineNum Value="True"/> 120 <ShoLineNum Value="True"/>
117 </Verbosity> 121 </Verbosity>
118 <WriteFPCLogo Value="False"/> 122 <WriteFPCLogo Value="False"/>
@@ -131,9 +135,9 @@
131 <Filename Value="Release\hUGETracker"/> 135 <Filename Value="Release\hUGETracker"/>
132 </Target> 136 </Target>
133 <SearchPaths> 137 <SearchPaths>
134 <IncludeFiles Value="CPU;Sound;Global;$(ProjOutDir)"/> 138 <IncludeFiles Value="$(ProjOutDir)"/>
135 <Libraries Value="\usr\local\lib"/> 139 <Libraries Value="\usr\local\lib"/>
136 <OtherUnitFiles Value="CPU;Sound;Global;Pascal-SDL-2-Headers"/> 140 <OtherUnitFiles Value="Pascal-SDL-2-Headers"/>
137 <UnitOutputDirectory Value="lib\Production\$(TargetCPU)-$(TargetOS)"/> 141 <UnitOutputDirectory Value="lib\Production\$(TargetCPU)-$(TargetOS)"/>
138 </SearchPaths> 142 </SearchPaths>
139 <Parsing> 143 <Parsing>
@@ -165,6 +169,8 @@
165 </Linking> 169 </Linking>
166 <Other> 170 <Other>
167 <Verbosity> 171 <Verbosity>
172 <ShowNotes Value="False"/>
173 <ShowHints Value="False"/>
168 <ShoLineNum Value="True"/> 174 <ShoLineNum Value="True"/>
169 </Verbosity> 175 </Verbosity>
170 <WriteFPCLogo Value="False"/> 176 <WriteFPCLogo Value="False"/>
@@ -216,148 +222,147 @@
216 <IsPartOfProject Value="True"/> 222 <IsPartOfProject Value="True"/>
217 </Unit0> 223 </Unit0>
218 <Unit1> 224 <Unit1>
219 <Filename Value="CPU\machine.pas"/> 225 <Filename Value="mainloop.pas"/>
220 <IsPartOfProject Value="True"/> 226 <IsPartOfProject Value="True"/>
221 </Unit1> 227 </Unit1>
222 <Unit2> 228 <Unit2>
223 <Filename Value="CPU\z80cpu.pas"/>
224 <IsPartOfProject Value="True"/>
225 <UnitName Value="Z80CPU"/>
226 </Unit2>
227 <Unit3>
228 <Filename Value="Sound\sound.pas"/>
229 <IsPartOfProject Value="True"/>
230 </Unit3>
231 <Unit4>
232 <Filename Value="Global\vars.pas"/>
233 <IsPartOfProject Value="True"/>
234 </Unit4>
235 <Unit5>
236 <Filename Value="mainloop.pas"/>
237 <IsPartOfProject Value="True"/>
238 </Unit5>
239 <Unit6>
240 <Filename Value="tracker.pas"/> 229 <Filename Value="tracker.pas"/>
241 <IsPartOfProject Value="True"/> 230 <IsPartOfProject Value="True"/>
242 <ComponentName Value="frmTracker"/> 231 <ComponentName Value="frmTracker"/>
243 <HasResources Value="True"/> 232 <HasResources Value="True"/>
244 <ResourceBaseClass Value="Form"/> 233 <ResourceBaseClass Value="Form"/>
245 <UnitName Value="Tracker"/> 234 <UnitName Value="Tracker"/>
246 </Unit6> 235 </Unit2>
247 <Unit7> 236 <Unit3>
248 <Filename Value="instruments.pas"/> 237 <Filename Value="instruments.pas"/>
249 <IsPartOfProject Value="True"/> 238 <IsPartOfProject Value="True"/>
250 </Unit7> 239 </Unit3>
251 <Unit8> 240 <Unit4>
252 <Filename Value="song.pas"/> 241 <Filename Value="song.pas"/>
253 <IsPartOfProject Value="True"/> 242 <IsPartOfProject Value="True"/>
254 <UnitName Value="Song"/> 243 <UnitName Value="Song"/>
255 </Unit8> 244 </Unit4>
256 <Unit9> 245 <Unit5>
257 <Filename Value="utils.pas"/> 246 <Filename Value="utils.pas"/>
258 <IsPartOfProject Value="True"/> 247 <IsPartOfProject Value="True"/>
259 <UnitName Value="Utils"/> 248 <UnitName Value="Utils"/>
260 </Unit9> 249 </Unit5>
261 <Unit10> 250 <Unit6>
262 <Filename Value="constants.pas"/> 251 <Filename Value="constants.pas"/>
263 <IsPartOfProject Value="True"/> 252 <IsPartOfProject Value="True"/>
264 <UnitName Value="Constants"/> 253 <UnitName Value="Constants"/>
265 </Unit10> 254 </Unit6>
266 <Unit11> 255 <Unit7>
267 <Filename Value="about_hugetracker.pas"/> 256 <Filename Value="about_hugetracker.pas"/>
268 <IsPartOfProject Value="True"/> 257 <IsPartOfProject Value="True"/>
269 <ComponentName Value="frmAboutHugetracker"/> 258 <ComponentName Value="frmAboutHugetracker"/>
270 <HasResources Value="True"/> 259 <HasResources Value="True"/>
271 <ResourceBaseClass Value="Form"/> 260 <ResourceBaseClass Value="Form"/>
272 </Unit11> 261 </Unit7>
273 <Unit12> 262 <Unit8>
274 <Filename Value="trackergrid.pas"/> 263 <Filename Value="trackergrid.pas"/>
275 <IsPartOfProject Value="True"/> 264 <IsPartOfProject Value="True"/>
276 <UnitName Value="TrackerGrid"/> 265 <UnitName Value="TrackerGrid"/>
277 </Unit12> 266 </Unit8>
278 <Unit13> 267 <Unit9>
279 <Filename Value="clipboardutils.pas"/> 268 <Filename Value="clipboardutils.pas"/>
280 <IsPartOfProject Value="True"/> 269 <IsPartOfProject Value="True"/>
281 <UnitName Value="ClipboardUtils"/> 270 <UnitName Value="ClipboardUtils"/>
282 </Unit13> 271 </Unit9>
283 <Unit14> 272 <Unit10>
284 <Filename Value="hugedatatypes.pas"/> 273 <Filename Value="hugedatatypes.pas"/>
285 <IsPartOfProject Value="True"/> 274 <IsPartOfProject Value="True"/>
286 <UnitName Value="HugeDatatypes"/> 275 <UnitName Value="HugeDatatypes"/>
287 </Unit14> 276 </Unit10>
288 <Unit15> 277 <Unit11>
289 <Filename Value="codegen.pas"/> 278 <Filename Value="codegen.pas"/>
290 <IsPartOfProject Value="True"/> 279 <IsPartOfProject Value="True"/>
291 <UnitName Value="Codegen"/> 280 <UnitName Value="Codegen"/>
292 </Unit15> 281 </Unit11>
293 <Unit16> 282 <Unit12>
294 <Filename Value="symparser.pas"/> 283 <Filename Value="symparser.pas"/>
295 <IsPartOfProject Value="True"/> 284 <IsPartOfProject Value="True"/>
296 <UnitName Value="SymParser"/> 285 <UnitName Value="SymParser"/>
297 </Unit16> 286 </Unit12>
298 <Unit17> 287 <Unit13>
299 <Filename Value="effecteditor.pas"/> 288 <Filename Value="effecteditor.pas"/>
300 <IsPartOfProject Value="True"/> 289 <IsPartOfProject Value="True"/>
301 <ComponentName Value="frmEffectEditor"/> 290 <ComponentName Value="frmEffectEditor"/>
302 <HasResources Value="True"/> 291 <HasResources Value="True"/>
303 <ResourceBaseClass Value="Form"/> 292 <ResourceBaseClass Value="Form"/>
304 </Unit17> 293 </Unit13>
305 <Unit18> 294 <Unit14>
306 <Filename Value="options.pas"/> 295 <Filename Value="options.pas"/>
307 <IsPartOfProject Value="True"/> 296 <IsPartOfProject Value="True"/>
308 <ComponentName Value="frmOptions"/> 297 <ComponentName Value="frmOptions"/>
309 <HasResources Value="True"/> 298 <HasResources Value="True"/>
310 <ResourceBaseClass Value="Form"/> 299 <ResourceBaseClass Value="Form"/>
311 </Unit18> 300 </Unit14>
312 <Unit19> 301 <Unit15>
313 <Filename Value="rendertowave.pas"/> 302 <Filename Value="rendertowave.pas"/>
314 <IsPartOfProject Value="True"/> 303 <IsPartOfProject Value="True"/>
315 <ComponentName Value="frmRenderToWave"/> 304 <ComponentName Value="frmRenderToWave"/>
316 <HasResources Value="True"/> 305 <HasResources Value="True"/>
317 <ResourceBaseClass Value="Form"/> 306 <ResourceBaseClass Value="Form"/>
318 <UnitName Value="RenderToWave"/> 307 <UnitName Value="RenderToWave"/>
319 </Unit19> 308 </Unit15>
320 <Unit20> 309 <Unit16>
321 <Filename Value="modimport.pas"/> 310 <Filename Value="modimport.pas"/>
322 <IsPartOfProject Value="True"/> 311 <IsPartOfProject Value="True"/>
323 <UnitName Value="MODImport"/> 312 <UnitName Value="MODImport"/>
324 </Unit20> 313 </Unit16>
325 <Unit21> 314 <Unit17>
326 <Filename Value="keymap.pas"/> 315 <Filename Value="keymap.pas"/>
327 <IsPartOfProject Value="True"/> 316 <IsPartOfProject Value="True"/>
328 <UnitName Value="Keymap"/> 317 <UnitName Value="Keymap"/>
329 </Unit21> 318 </Unit17>
330 <Unit22> 319 <Unit18>
331 <Filename Value="hugesettings.pas"/> 320 <Filename Value="hugesettings.pas"/>
332 <IsPartOfProject Value="True"/> 321 <IsPartOfProject Value="True"/>
333 <UnitName Value="hUGESettings"/> 322 <UnitName Value="hUGESettings"/>
323 </Unit18>
324 <Unit19>
325 <Filename Value="vgm.pas"/>
326 <IsPartOfProject Value="True"/>
327 <UnitName Value="VGM"/>
328 </Unit19>
329 <Unit20>
330 <Filename Value="tbmimport.pas"/>
331 <IsPartOfProject Value="True"/>
332 <UnitName Value="TBMImport"/>
333 </Unit20>
334 <Unit21>
335 <Filename Value="instrumentpreview.pas"/>
336 <IsPartOfProject Value="True"/>
337 <UnitName Value="InstrumentPreview"/>
338 </Unit21>
339 <Unit22>
340 <Filename Value="findreplace.pas"/>
341 <IsPartOfProject Value="True"/>
342 <ComponentName Value="frmFindReplace"/>
343 <HasResources Value="True"/>
344 <ResourceBaseClass Value="Form"/>
334 </Unit22> 345 </Unit22>
335 <Unit23> 346 <Unit23>
336 <Filename Value="dmfimport.pas"/> 347 <Filename Value="z80cpu.pas"/>
337 <IsPartOfProject Value="True"/> 348 <IsPartOfProject Value="True"/>
338 <UnitName Value="DMFImport"/> 349 <UnitName Value="Z80CPU"/>
339 </Unit23> 350 </Unit23>
340 <Unit24> 351 <Unit24>
341 <Filename Value="vgm.pas"/> 352 <Filename Value="cpu_tables.pas"/>
342 <IsPartOfProject Value="True"/> 353 <IsPartOfProject Value="True"/>
343 <UnitName Value="VGM"/>
344 </Unit24> 354 </Unit24>
345 <Unit25> 355 <Unit25>
346 <Filename Value="tbmimport.pas"/> 356 <Filename Value="machine.pas"/>
347 <IsPartOfProject Value="True"/> 357 <IsPartOfProject Value="True"/>
348 <UnitName Value="TBMImport"/>
349 </Unit25> 358 </Unit25>
350 <Unit26> 359 <Unit26>
351 <Filename Value="instrumentpreview.pas"/> 360 <Filename Value="sound.pas"/>
352 <IsPartOfProject Value="True"/> 361 <IsPartOfProject Value="True"/>
353 <UnitName Value="InstrumentPreview"/>
354 </Unit26> 362 </Unit26>
355 <Unit27> 363 <Unit27>
356 <Filename Value="findreplace.pas"/> 364 <Filename Value="vars.pas"/>
357 <IsPartOfProject Value="True"/> 365 <IsPartOfProject Value="True"/>
358 <ComponentName Value="frmFindReplace"/>
359 <HasResources Value="True"/>
360 <ResourceBaseClass Value="Form"/>
361 </Unit27> 366 </Unit27>
362 </Units> 367 </Units>
363 </ProjectOptions> 368 </ProjectOptions>
@@ -365,8 +370,8 @@
365 <Version Value="11"/> 370 <Version Value="11"/>
366 <PathDelim Value="\"/> 371 <PathDelim Value="\"/>
367 <SearchPaths> 372 <SearchPaths>
368 <IncludeFiles Value="CPU;Sound;Global;$(ProjOutDir)"/> 373 <IncludeFiles Value="$(ProjOutDir)"/>
369 <OtherUnitFiles Value="CPU;Sound;Global;Pascal-SDL-2-Headers"/> 374 <OtherUnitFiles Value="Pascal-SDL-2-Headers"/>
370 <UnitOutputDirectory Value="lib\Development\$(TargetCPU)-$(TargetOS)"/> 375 <UnitOutputDirectory Value="lib\Development\$(TargetCPU)-$(TargetOS)"/>
371 </SearchPaths> 376 </SearchPaths>
372 <Parsing> 377 <Parsing>
RenamedhUGETracker.lpr → src/hUGETracker.lpr +2−5
@@ -20,11 +20,8 @@ uses
20 20
21 hUGESettings, 21 hUGESettings,
22 22
23 Tracker in 'Tracker.pas', 23 Tracker, EffectEditor, options, about_hugetracker, rendertowave, findreplace,
24 EffectEditor in 'effecteditor.pas', 24 machine, sound, vars, Z80CPU;
25 options in 'options.pas',
26 about_hugetracker in 'about_hugetracker.pas',
27 rendertowave in 'rendertowave.pas', findreplace;
28 25
29 {$R *.res} 26 {$R *.res}
30 27
RenamedhUGETracker.res → src/hUGETracker.res +0−0
File metadata changed without textual changes.
Renamedhalt.asm → src/halt.asm +0−0
File metadata changed without textual changes.
Renamedhugedatatypes.pas → src/hugedatatypes.pas +0−0
File metadata changed without textual changes.
Renamedhugesettings.pas → src/hugesettings.pas +0−0
File metadata changed without textual changes.
Renamedinstrumentpreview.pas → src/instrumentpreview.pas +0−0
File metadata changed without textual changes.
Renamedinstruments.pas → src/instruments.pas +0−0
File metadata changed without textual changes.
Renamedkeymap.pas → src/keymap.pas +0−0
File metadata changed without textual changes.
RenamedCPU/machine.pas → src/machine.pas +0−0
File metadata changed without textual changes.
Renamedmainloop.pas → src/mainloop.pas +0−0
File metadata changed without textual changes.
Renamedmodimport.pas → src/modimport.pas +0−0
File metadata changed without textual changes.
Renamedoptions.lfm → src/options.lfm +0−0
File metadata changed without textual changes.
Renamedoptions.pas → src/options.pas +0−0
File metadata changed without textual changes.
Renamedrackctls → src/rackctls +0−0
File metadata changed without textual changes.
Renamedrendertowave.lfm → src/rendertowave.lfm +0−0
File metadata changed without textual changes.
Renamedrendertowave.pas → src/rendertowave.pas +0−0
File metadata changed without textual changes.
Renamedsong.pas → src/song.pas +0−0
File metadata changed without textual changes.
RenamedSound/sound.pas → src/sound.pas +0−0
File metadata changed without textual changes.
Renamedsymparser.pas → src/symparser.pas +0−0
File metadata changed without textual changes.
Renamedtbmimport.pas → src/tbmimport.pas +0−0
File metadata changed without textual changes.
Renamedtracker.lfm → src/tracker.lfm +547−547
@@ -1,13 +1,12 @@
1 object frmTracker: TfrmTracker 1 object frmTracker: TfrmTracker
2 Left = 1258 2 Left = 1027
3 Height = 1171 3 Height = 819
4 Top = 279 4 Top = 223
5 Width = 1878 5 Width = 1301
6 AllowDropFiles = True 6 AllowDropFiles = True
7 Caption = 'hUGETracker' 7 Caption = 'hUGETracker'
8 ClientHeight = 1137 8 ClientHeight = 799
9 ClientWidth = 1878 9 ClientWidth = 1301
10 DesignTimePPI = 168
11 KeyPreview = True 10 KeyPreview = True
12 Menu = MainMenu1 11 Menu = MainMenu1
13 OnCloseQuery = FormCloseQuery 12 OnCloseQuery = FormCloseQuery
@@ -18,12 +17,12 @@ object frmTracker: TfrmTracker
18 OnShow = FormShow 17 OnShow = FormShow
19 Position = poDefault 18 Position = poDefault
20 ShowHint = True 19 ShowHint = True
21 LCLVersion = '2.2.3.0' 20 LCLVersion = '2.2.5.0'
22 object TreeView1: TTreeView 21 object TreeView1: TTreeView
23 Left = 0 22 Left = 0
24 Height = 941 23 Height = 687
25 Top = 153 24 Top = 89
26 Width = 338 25 Width = 193
27 Align = alLeft 26 Align = alLeft
28 ParentFont = False 27 ParentFont = False
29 ReadOnly = True 28 ReadOnly = True
@@ -42,27 +41,27 @@ object frmTracker: TfrmTracker
42 } 41 }
43 end 42 end
44 object Splitter1: TSplitter 43 object Splitter1: TSplitter
45 Left = 338 44 Left = 193
46 Height = 941 45 Height = 687
47 Top = 153 46 Top = 89
48 Width = 9 47 Width = 5
49 end 48 end
50 object Panel1: TPanel 49 object Panel1: TPanel
51 Left = 347 50 Left = 198
52 Height = 941 51 Height = 687
53 Top = 153 52 Top = 89
54 Width = 1531 53 Width = 1103
55 Align = alClient 54 Align = alClient
56 BevelOuter = bvNone 55 BevelOuter = bvNone
57 ClientHeight = 941 56 ClientHeight = 687
58 ClientWidth = 1531 57 ClientWidth = 1103
59 ParentFont = False 58 ParentFont = False
60 TabOrder = 2 59 TabOrder = 2
61 object PageControl1: TPageControl 60 object PageControl1: TPageControl
62 Left = 0 61 Left = 0
63 Height = 941 62 Height = 687
64 Top = 0 63 Top = 0
65 Width = 1531 64 Width = 1103
66 ActivePage = PatternTabSheet 65 ActivePage = PatternTabSheet
67 Align = alClient 66 Align = alClient
68 ParentFont = False 67 ParentFont = False
@@ -70,74 +69,74 @@ object frmTracker: TfrmTracker
70 TabOrder = 0 69 TabOrder = 0
71 object GeneralTabSheet: TTabSheet 70 object GeneralTabSheet: TTabSheet
72 Caption = 'General' 71 Caption = 'General'
73 ClientHeight = 898 72 ClientHeight = 659
74 ClientWidth = 1523 73 ClientWidth = 1095
75 ParentFont = False 74 ParentFont = False
76 object SongInformationGroupbox: TGroupBox 75 object SongInformationGroupbox: TGroupBox
77 Left = 14 76 Left = 8
78 Height = 336 77 Height = 192
79 Top = 14 78 Top = 8
80 Width = 520 79 Width = 297
81 Caption = 'Song information' 80 Caption = 'Song information'
82 ClientHeight = 301 81 ClientHeight = 172
83 ClientWidth = 516 82 ClientWidth = 293
84 ParentFont = False 83 ParentFont = False
85 TabOrder = 0 84 TabOrder = 0
86 object Label15: TLabel 85 object Label15: TLabel
87 Left = 14 86 Left = 8
88 Height = 30 87 Height = 15
89 Top = 28 88 Top = 16
90 Width = 47 89 Width = 27
91 Caption = 'Song' 90 Caption = 'Song'
92 ParentColor = False 91 ParentColor = False
93 ParentFont = False 92 ParentFont = False
94 end 93 end
95 object Label16: TLabel 94 object Label16: TLabel
96 Left = 12 95 Left = 7
97 Height = 30 96 Height = 15
98 Top = 84 97 Top = 48
99 Width = 49 98 Width = 28
100 Caption = 'Artist' 99 Caption = 'Artist'
101 ParentColor = False 100 ParentColor = False
102 ParentFont = False 101 ParentFont = False
103 end 102 end
104 object SongEdit: TEdit 103 object SongEdit: TEdit
105 Left = 98 104 Left = 56
106 Height = 38 105 Height = 23
107 Hint = 'The name of your composition' 106 Hint = 'The name of your composition'
108 Top = 14 107 Top = 8
109 Width = 378 108 Width = 216
110 MaxLength = 255 109 MaxLength = 255
111 OnChange = SongEditChange 110 OnChange = SongEditChange
112 ParentFont = False 111 ParentFont = False
113 TabOrder = 0 112 TabOrder = 0
114 end 113 end
115 object ArtistEdit: TEdit 114 object ArtistEdit: TEdit
116 Left = 98 115 Left = 56
117 Height = 38 116 Height = 23
118 Hint = 'Your name or handle' 117 Hint = 'Your name or handle'
119 Top = 70 118 Top = 40
120 Width = 378 119 Width = 216
121 MaxLength = 255 120 MaxLength = 255
122 OnChange = ArtistEditChange 121 OnChange = ArtistEditChange
123 ParentFont = False 122 ParentFont = False
124 TabOrder = 1 123 TabOrder = 1
125 end 124 end
126 object Label21: TLabel 125 object Label21: TLabel
127 Left = 14 126 Left = 8
128 Height = 30 127 Height = 15
129 Top = 136 128 Top = 78
130 Width = 197 129 Width = 114
131 Caption = 'Tempo (ticks per row)' 130 Caption = 'Tempo (ticks per row)'
132 ParentColor = False 131 ParentColor = False
133 ParentFont = False 132 ParentFont = False
134 end 133 end
135 object TicksPerRowSpinEdit: TSpinEdit 134 object TicksPerRowSpinEdit: TSpinEdit
136 Left = 233 135 Left = 133
137 Height = 38 136 Height = 23
138 Hint = 'How many ticks should happen before the row changes. Higher means slower.' 137 Hint = 'How many ticks should happen before the row changes. Higher means slower.'
139 Top = 126 138 Top = 72
140 Width = 88 139 Width = 50
141 MaxValue = 20 140 MaxValue = 20
142 MinValue = 1 141 MinValue = 1
143 OnChange = TicksPerRowSpinEditChange 142 OnChange = TicksPerRowSpinEditChange
@@ -146,40 +145,40 @@ object frmTracker: TfrmTracker
146 Value = 7 145 Value = 7
147 end 146 end
148 object TimerEnabledCheckBox: TCheckBox 147 object TimerEnabledCheckBox: TCheckBox
149 Left = 12 148 Left = 7
150 Height = 34 149 Height = 19
151 Hint = 'Enable the GB hardware timer. This allows for more fine-grained tempo control.' 150 Hint = 'Enable the GB hardware timer. This allows for more fine-grained tempo control.'
152 Top = 252 151 Top = 144
153 Width = 279 152 Width = 160
154 Caption = 'Enable timer-based tempo' 153 Caption = 'Enable timer-based tempo'
155 OnChange = TimerEnabledCheckBoxChange 154 OnChange = TimerEnabledCheckBoxChange
156 TabOrder = 3 155 TabOrder = 3
157 end 156 end
158 object TimerTempoLabel: TLabel 157 object TimerTempoLabel: TLabel
159 Left = 14 158 Left = 8
160 Height = 30 159 Height = 15
161 Top = 196 160 Top = 112
162 Width = 196 161 Width = 114
163 Caption = 'Tempo (timer divider)' 162 Caption = 'Tempo (timer divider)'
164 Enabled = False 163 Enabled = False
165 ParentColor = False 164 ParentColor = False
166 end 165 end
167 object TimerDividerSpinEdit: TSpinEdit 166 object TimerDividerSpinEdit: TSpinEdit
168 Left = 233 167 Left = 133
169 Height = 38 168 Height = 23
170 Hint = 'The "modulo" value for the GB hardware timer. Higher means faster.' 169 Hint = 'The "modulo" value for the GB hardware timer. Higher means faster.'
171 Top = 189 170 Top = 108
172 Width = 88 171 Width = 50
173 Enabled = False 172 Enabled = False
174 MaxValue = 255 173 MaxValue = 255
175 OnChange = TimerDividerSpinEditChange 174 OnChange = TimerDividerSpinEditChange
176 TabOrder = 4 175 TabOrder = 4
177 end 176 end
178 object TempoBPMLabel: TLabel 177 object TempoBPMLabel: TLabel
179 Left = 336 178 Left = 192
180 Height = 30 179 Height = 15
181 Top = 168 180 Top = 96
182 Width = 154 181 Width = 89
183 Caption = 'TempoBPMLabel' 182 Caption = 'TempoBPMLabel'
184 ParentColor = False 183 ParentColor = False
185 end 184 end
@@ -187,59 +186,59 @@ object frmTracker: TfrmTracker
187 end 186 end
188 object PatternTabSheet: TTabSheet 187 object PatternTabSheet: TTabSheet
189 Caption = 'Patterns' 188 Caption = 'Patterns'
190 ClientHeight = 898 189 ClientHeight = 659
191 ClientWidth = 1523 190 ClientWidth = 1095
192 ParentFont = False 191 ParentFont = False
193 object Panel3: TPanel 192 object Panel3: TPanel
194 Left = 392 193 Left = 224
195 Height = 898 194 Height = 659
196 Top = 0 195 Top = 0
197 Width = 1131 196 Width = 871
198 Align = alClient 197 Align = alClient
199 ClientHeight = 898 198 ClientHeight = 659
200 ClientWidth = 1131 199 ClientWidth = 871
201 ParentFont = False 200 ParentFont = False
202 TabOrder = 0 201 TabOrder = 0
203 object HeaderControl1: THeaderControl 202 object HeaderControl1: THeaderControl
204 Left = 1 203 Left = 1
205 Height = 52 204 Height = 30
206 Hint = 'Left click to mute, right click to solo' 205 Hint = 'Left click to mute, right click to solo'
207 Top = 1 206 Top = 1
208 Width = 1129 207 Width = 869
209 DragReorder = False 208 DragReorder = False
210 Images = ImageList2 209 Images = ImageList2
211 Sections = < 210 Sections = <
212 item 211 item
213 Alignment = taLeftJustify 212 Alignment = taLeftJustify
214 Width = 56 213 Width = 32
215 Visible = True 214 Visible = True
216 end 215 end
217 item 216 item
218 Alignment = taCenter 217 Alignment = taCenter
219 ImageIndex = 1 218 ImageIndex = 1
220 Text = 'Duty 1' 219 Text = 'Duty 1'
221 Width = 233 220 Width = 133
222 Visible = True 221 Visible = True
223 end 222 end
224 item 223 item
225 Alignment = taCenter 224 Alignment = taCenter
226 ImageIndex = 1 225 ImageIndex = 1
227 Text = 'Duty 2' 226 Text = 'Duty 2'
228 Width = 233 227 Width = 133
229 Visible = True 228 Visible = True
230 end 229 end
231 item 230 item
232 Alignment = taCenter 231 Alignment = taCenter
233 ImageIndex = 1 232 ImageIndex = 1
234 Text = 'Wave' 233 Text = 'Wave'
235 Width = 233 234 Width = 133
236 Visible = True 235 Visible = True
237 end 236 end
238 item 237 item
239 Alignment = taCenter 238 Alignment = taCenter
240 ImageIndex = 1 239 ImageIndex = 1
241 Text = 'Noise' 240 Text = 'Noise'
242 Width = 233 241 Width = 133
243 Visible = True 242 Visible = True
244 end> 243 end>
245 OnSectionClick = HeaderControl1SectionClick 244 OnSectionClick = HeaderControl1SectionClick
@@ -250,33 +249,34 @@ object frmTracker: TfrmTracker
250 end 249 end
251 object ScrollBox1: TScrollBox 250 object ScrollBox1: TScrollBox
252 Left = 1 251 Left = 1
253 Height = 844 252 Height = 627
254 Top = 53 253 Top = 31
255 Width = 1129 254 Width = 869
256 HorzScrollBar.Increment = 5 255 HorzScrollBar.Increment = 3
257 HorzScrollBar.Page = 56 256 HorzScrollBar.Page = 32
258 HorzScrollBar.Smooth = True 257 HorzScrollBar.Smooth = True
259 HorzScrollBar.Tracking = True 258 HorzScrollBar.Tracking = True
260 VertScrollBar.Page = 88 259 VertScrollBar.Increment = 5
260 VertScrollBar.Page = 50
261 VertScrollBar.Smooth = True 261 VertScrollBar.Smooth = True
262 VertScrollBar.Tracking = True 262 VertScrollBar.Tracking = True
263 Align = alClient 263 Align = alClient
264 BorderStyle = bsNone 264 BorderStyle = bsNone
265 ClientHeight = 844 265 ClientHeight = 627
266 ClientWidth = 1129 266 ClientWidth = 869
267 ParentFont = False 267 ParentFont = False
268 TabOrder = 1 268 TabOrder = 1
269 OnMouseWheelDown = ScrollBox1MouseWheelDown 269 OnMouseWheelDown = ScrollBox1MouseWheelDown
270 OnMouseWheelUp = ScrollBox1MouseWheelUp 270 OnMouseWheelUp = ScrollBox1MouseWheelUp
271 object RowNumberStringGrid: TStringGrid 271 object RowNumberStringGrid: TStringGrid
272 Left = 0 272 Left = 0
273 Height = 844 273 Height = 627
274 Top = 0 274 Top = 0
275 Width = 56 275 Width = 32
276 Align = alLeft 276 Align = alLeft
277 BorderStyle = bsNone 277 BorderStyle = bsNone
278 ColCount = 1 278 ColCount = 1
279 DefaultColWidth = 56 279 DefaultColWidth = 32
280 Enabled = False 280 Enabled = False
281 ParentFont = False 281 ParentFont = False
282 RowCount = 64 282 RowCount = 64
@@ -287,43 +287,43 @@ object frmTracker: TfrmTracker
287 end 287 end
288 object OrderEditStringGrid: TStringGrid 288 object OrderEditStringGrid: TStringGrid
289 Left = 0 289 Left = 0
290 Height = 898 290 Height = 659
291 Top = 0 291 Top = 0
292 Width = 392 292 Width = 224
293 Align = alLeft 293 Align = alLeft
294 AutoEdit = False 294 AutoEdit = False
295 AutoFillColumns = True 295 AutoFillColumns = True
296 Columns = < 296 Columns = <
297 item 297 item
298 Alignment = taCenter 298 Alignment = taCenter
299 MinSize = 58 299 MinSize = 33
300 MaxSize = 58 300 MaxSize = 33
301 Title.Caption = 'Dty1' 301 Title.Caption = 'Dty1'
302 Width = 61 302 Width = 34
303 end 303 end
304 item 304 item
305 Alignment = taCenter 305 Alignment = taCenter
306 MinSize = 58 306 MinSize = 33
307 MaxSize = 58 307 MaxSize = 33
308 Title.Caption = 'Dty2' 308 Title.Caption = 'Dty2'
309 Width = 61 309 Width = 34
310 end 310 end
311 item 311 item
312 Alignment = taCenter 312 Alignment = taCenter
313 MinSize = 58 313 MinSize = 33
314 MaxSize = 58 314 MaxSize = 33
315 Title.Caption = 'Wav' 315 Title.Caption = 'Wav'
316 Width = 61 316 Width = 34
317 end 317 end
318 item 318 item
319 Alignment = taCenter 319 Alignment = taCenter
320 MinSize = 58 320 MinSize = 33
321 MaxSize = 58 321 MaxSize = 33
322 Title.Caption = 'Nse' 322 Title.Caption = 'Nse'
323 Width = 63 323 Width = 37
324 end> 324 end>
325 DefaultColWidth = 30 325 DefaultColWidth = 17
326 DefaultRowHeight = 37 326 DefaultRowHeight = 21
327 ExtendedSelect = False 327 ExtendedSelect = False
328 Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goRangeSelect, goRowMoving, goEditing, goTabs, goSmoothScroll, goFixedRowNumbering, goRowHighlight] 328 Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goRangeSelect, goRowMoving, goEditing, goTabs, goSmoothScroll, goFixedRowNumbering, goRowHighlight]
329 ParentFont = False 329 ParentFont = False
@@ -342,24 +342,24 @@ object frmTracker: TfrmTracker
342 OnKeyDown = OrderEditStringGridKeyDown 342 OnKeyDown = OrderEditStringGridKeyDown
343 OnValidateEntry = OrderEditStringGridValidateEntry 343 OnValidateEntry = OrderEditStringGridValidateEntry
344 ColWidths = ( 344 ColWidths = (
345 112 345 64
346 61 346 34
347 61 347 34
348 61 348 34
349 63 349 37
350 ) 350 )
351 end 351 end
352 end 352 end
353 object InstrumentTabSheet: TTabSheet 353 object InstrumentTabSheet: TTabSheet
354 Caption = 'Instruments' 354 Caption = 'Instruments'
355 ClientHeight = 898 355 ClientHeight = 659
356 ClientWidth = 1523 356 ClientWidth = 1095
357 ParentFont = False 357 ParentFont = False
358 object FlowPanel1: TFlowPanel 358 object FlowPanel1: TFlowPanel
359 Left = 0 359 Left = 0
360 Height = 898 360 Height = 659
361 Top = 0 361 Top = 0
362 Width = 1243 362 Width = 935
363 Align = alClient 363 Align = alClient
364 AutoSize = True 364 AutoSize = True
365 BevelOuter = bvNone 365 BevelOuter = bvNone
@@ -394,26 +394,26 @@ object frmTracker: TfrmTracker
394 ParentFont = False 394 ParentFont = False
395 TabOrder = 0 395 TabOrder = 0
396 object InstrumentGroupBox: TGroupBox 396 object InstrumentGroupBox: TGroupBox
397 Left = 12 397 Left = 7
398 Height = 478 398 Height = 273
399 Top = 12 399 Top = 7
400 Width = 490 400 Width = 280
401 Anchors = [] 401 Anchors = []
402 BorderSpacing.Left = 12 402 BorderSpacing.Left = 7
403 BorderSpacing.Top = 12 403 BorderSpacing.Top = 7
404 BorderSpacing.Right = 12 404 BorderSpacing.Right = 7
405 BorderSpacing.Bottom = 12 405 BorderSpacing.Bottom = 7
406 Caption = 'Instrument' 406 Caption = 'Instrument'
407 ClientHeight = 443 407 ClientHeight = 253
408 ClientWidth = 486 408 ClientWidth = 276
409 ParentFont = False 409 ParentFont = False
410 TabOrder = 0 410 TabOrder = 0
411 object InstrumentNumberSpinner: TSpinEdit 411 object InstrumentNumberSpinner: TSpinEdit
412 Left = 140 412 Left = 80
413 Height = 38 413 Height = 23
414 Hint = 'What instrument to edit' 414 Hint = 'What instrument to edit'
415 Top = 66 415 Top = 38
416 Width = 327 416 Width = 187
417 MaxValue = 15 417 MaxValue = 15
418 MinValue = 1 418 MinValue = 1
419 OnChange = InstrumentNumberSpinnerChange 419 OnChange = InstrumentNumberSpinnerChange
@@ -422,51 +422,51 @@ object frmTracker: TfrmTracker
422 Value = 1 422 Value = 1
423 end 423 end
424 object Label1: TLabel 424 object Label1: TLabel
425 Left = 14 425 Left = 8
426 Height = 30 426 Height = 15
427 Top = 80 427 Top = 46
428 Width = 101 428 Width = 58
429 Caption = 'Instrument' 429 Caption = 'Instrument'
430 ParentColor = False 430 ParentColor = False
431 ParentFont = False 431 ParentFont = False
432 end 432 end
433 object Label2: TLabel 433 object Label2: TLabel
434 Left = 14 434 Left = 8
435 Height = 30 435 Height = 15
436 Top = 136 436 Top = 78
437 Width = 56 437 Width = 32
438 Caption = 'Name' 438 Caption = 'Name'
439 ParentColor = False 439 ParentColor = False
440 ParentFont = False 440 ParentFont = False
441 end 441 end
442 object InstrumentNameEdit: TEdit 442 object InstrumentNameEdit: TEdit
443 Left = 140 443 Left = 80
444 Height = 38 444 Height = 23
445 Hint = 'The name of the instrument' 445 Hint = 'The name of the instrument'
446 Top = 122 446 Top = 70
447 Width = 327 447 Width = 187
448 MaxLength = 255 448 MaxLength = 255
449 OnChange = InstrumentNameEditChange 449 OnChange = InstrumentNameEditChange
450 ParentFont = False 450 ParentFont = False
451 TabOrder = 1 451 TabOrder = 1
452 end 452 end
453 object Label3: TLabel 453 object Label3: TLabel
454 Left = 14 454 Left = 8
455 Height = 30 455 Height = 15
456 Top = 28 456 Top = 16
457 Width = 80 457 Width = 44
458 Caption = 'Channel' 458 Caption = 'Channel'
459 Font.Style = [fsBold] 459 Font.Style = [fsBold]
460 ParentColor = False 460 ParentColor = False
461 ParentFont = False 461 ParentFont = False
462 end 462 end
463 object InstrumentTypeCombobox: TComboBox 463 object InstrumentTypeCombobox: TComboBox
464 Left = 140 464 Left = 80
465 Height = 38 465 Height = 23
466 Hint = 'What type of channel this instrument will be played on' 466 Hint = 'What type of channel this instrument will be played on'
467 Top = 14 467 Top = 8
468 Width = 324 468 Width = 185
469 ItemHeight = 30 469 ItemHeight = 15
470 ItemIndex = 0 470 ItemIndex = 0
471 Items.Strings = ( 471 Items.Strings = (
472 'Square' 472 'Square'
@@ -480,33 +480,33 @@ object frmTracker: TfrmTracker
480 Text = 'Square' 480 Text = 'Square'
481 end 481 end
482 object LengthEnabledCheckbox: TCheckBox 482 object LengthEnabledCheckbox: TCheckBox
483 Left = 21 483 Left = 12
484 Height = 34 484 Height = 19
485 Hint = 'Cut the sound after a certain length of time' 485 Hint = 'Cut the sound after a certain length of time'
486 Top = 206 486 Top = 118
487 Width = 98 487 Width = 57
488 Caption = 'Length' 488 Caption = 'Length'
489 OnChange = LengthEnabledCheckboxChange 489 OnChange = LengthEnabledCheckboxChange
490 ParentFont = False 490 ParentFont = False
491 TabOrder = 3 491 TabOrder = 3
492 end 492 end
493 object InstrumentImportButton: TButton 493 object InstrumentImportButton: TButton
494 Left = 21 494 Left = 12
495 Height = 44 495 Height = 25
496 Hint = 'Import an instrument' 496 Hint = 'Import an instrument'
497 Top = 378 497 Top = 216
498 Width = 203 498 Width = 116
499 Caption = 'Import' 499 Caption = 'Import'
500 OnClick = InstrumentImportButtonClick 500 OnClick = InstrumentImportButtonClick
501 ParentFont = False 501 ParentFont = False
502 TabOrder = 4 502 TabOrder = 4
503 end 503 end
504 object InstrumentExportButton: TButton 504 object InstrumentExportButton: TButton
505 Left = 261 505 Left = 149
506 Height = 44 506 Height = 25
507 Hint = 'Export an instrument' 507 Hint = 'Export an instrument'
508 Top = 378 508 Top = 216
509 Width = 203 509 Width = 116
510 Caption = 'Export' 510 Caption = 'Export'
511 OnClick = InstrumentExportButtonClick 511 OnClick = InstrumentExportButtonClick
512 ParentFont = False 512 ParentFont = False
@@ -514,21 +514,21 @@ object frmTracker: TfrmTracker
514 end 514 end
515 object TestOctave5Button: TButton 515 object TestOctave5Button: TButton
516 Tag = 5 516 Tag = 5
517 Left = 248 517 Left = 142
518 Height = 44 518 Height = 25
519 Hint = 'Test out the instrument with a C-5 note' 519 Hint = 'Test out the instrument with a C-5 note'
520 Top = 256 520 Top = 146
521 Width = 47 521 Width = 27
522 Caption = '5' 522 Caption = '5'
523 OnClick = TestOctaveButtonClick 523 OnClick = TestOctaveButtonClick
524 ParentFont = False 524 ParentFont = False
525 TabOrder = 6 525 TabOrder = 6
526 end 526 end
527 object LengthTrackbar: TTrackBar 527 object LengthTrackbar: TTrackBar
528 Left = 133 528 Left = 76
529 Height = 44 529 Height = 25
530 Top = 196 530 Top = 112
531 Width = 331 531 Width = 189
532 Max = 63 532 Max = 63
533 OnChange = LengthSpinnerChange 533 OnChange = LengthSpinnerChange
534 Position = 0 534 Position = 0
@@ -537,21 +537,21 @@ object frmTracker: TfrmTracker
537 TabOrder = 7 537 TabOrder = 7
538 end 538 end
539 object Label14: TLabel 539 object Label14: TLabel
540 Left = 21 540 Left = 12
541 Height = 30 541 Height = 15
542 Top = 266 542 Top = 152
543 Width = 108 543 Width = 61
544 Caption = 'Test octave:' 544 Caption = 'Test octave:'
545 ParentColor = False 545 ParentColor = False
546 ParentFont = False 546 ParentFont = False
547 end 547 end
548 object TestOctave5Button1: TButton 548 object TestOctave5Button1: TButton
549 Tag = 4 549 Tag = 4
550 Left = 192 550 Left = 110
551 Height = 44 551 Height = 25
552 Hint = 'Test out the instrument with a C-4 note' 552 Hint = 'Test out the instrument with a C-4 note'
553 Top = 256 553 Top = 146
554 Width = 47 554 Width = 27
555 Caption = '4' 555 Caption = '4'
556 OnClick = TestOctaveButtonClick 556 OnClick = TestOctaveButtonClick
557 ParentFont = False 557 ParentFont = False
@@ -559,11 +559,11 @@ object frmTracker: TfrmTracker
559 end 559 end
560 object TestOctave5Button2: TButton 560 object TestOctave5Button2: TButton
561 Tag = 3 561 Tag = 3
562 Left = 136 562 Left = 78
563 Height = 44 563 Height = 25
564 Hint = 'Test out the instrument with a C-3 note' 564 Hint = 'Test out the instrument with a C-3 note'
565 Top = 256 565 Top = 146
566 Width = 47 566 Width = 27
567 Caption = '3' 567 Caption = '3'
568 OnClick = TestOctaveButtonClick 568 OnClick = TestOctaveButtonClick
569 ParentFont = False 569 ParentFont = False
@@ -571,11 +571,11 @@ object frmTracker: TfrmTracker
571 end 571 end
572 object TestOctave5Button3: TButton 572 object TestOctave5Button3: TButton
573 Tag = 6 573 Tag = 6
574 Left = 304 574 Left = 174
575 Height = 44 575 Height = 25
576 Hint = 'Test out the instrument with a C-6 note' 576 Hint = 'Test out the instrument with a C-6 note'
577 Top = 256 577 Top = 146
578 Width = 47 578 Width = 27
579 Caption = '6' 579 Caption = '6'
580 OnClick = TestOctaveButtonClick 580 OnClick = TestOctaveButtonClick
581 ParentFont = False 581 ParentFont = False
@@ -583,11 +583,11 @@ object frmTracker: TfrmTracker
583 end 583 end
584 object TestOctave5Button4: TButton 584 object TestOctave5Button4: TButton
585 Tag = 7 585 Tag = 7
586 Left = 360 586 Left = 206
587 Height = 44 587 Height = 25
588 Hint = 'Test out the instrument with a C-7 note' 588 Hint = 'Test out the instrument with a C-7 note'
589 Top = 256 589 Top = 146
590 Width = 47 590 Width = 27
591 Caption = '7' 591 Caption = '7'
592 OnClick = TestOctaveButtonClick 592 OnClick = TestOctaveButtonClick
593 ParentFont = False 593 ParentFont = False
@@ -595,66 +595,66 @@ object frmTracker: TfrmTracker
595 end 595 end
596 object TestOctave5Button5: TButton 596 object TestOctave5Button5: TButton
597 Tag = 8 597 Tag = 8
598 Left = 416 598 Left = 238
599 Height = 44 599 Height = 25
600 Hint = 'Test out the instrument with a C-8 note' 600 Hint = 'Test out the instrument with a C-8 note'
601 Top = 256 601 Top = 146
602 Width = 47 602 Width = 27
603 Caption = '8' 603 Caption = '8'
604 OnClick = TestOctaveButtonClick 604 OnClick = TestOctaveButtonClick
605 ParentFont = False 605 ParentFont = False
606 TabOrder = 12 606 TabOrder = 12
607 end 607 end
608 object EnableSubpatternCheckbox: TCheckBox 608 object EnableSubpatternCheckbox: TCheckBox
609 Left = 21 609 Left = 12
610 Height = 34 610 Height = 19
611 Top = 322 611 Top = 184
612 Width = 202 612 Width = 115
613 Caption = 'Enable subpattern' 613 Caption = 'Enable subpattern'
614 OnChange = EnableSubpatternCheckboxChange 614 OnChange = EnableSubpatternCheckboxChange
615 TabOrder = 13 615 TabOrder = 13
616 end 616 end
617 end 617 end
618 object EnvelopeGroupBox: TGroupBox 618 object EnvelopeGroupBox: TGroupBox
619 Left = 12 619 Left = 301
620 Height = 238 620 Height = 136
621 Top = 514 621 Top = 7
622 Width = 1018 622 Width = 582
623 Anchors = [] 623 Anchors = []
624 BorderSpacing.Left = 12 624 BorderSpacing.Left = 7
625 BorderSpacing.Top = 12 625 BorderSpacing.Top = 7
626 BorderSpacing.Right = 12 626 BorderSpacing.Right = 7
627 BorderSpacing.Bottom = 12 627 BorderSpacing.Bottom = 7
628 Caption = 'Envelope' 628 Caption = 'Envelope'
629 ClientHeight = 203 629 ClientHeight = 116
630 ClientWidth = 1014 630 ClientWidth = 578
631 ParentFont = False 631 ParentFont = False
632 TabOrder = 1 632 TabOrder = 1
633 object Label4: TLabel 633 object Label4: TLabel
634 Left = 14 634 Left = 8
635 Height = 30 635 Height = 15
636 Top = 28 636 Top = 16
637 Width = 80 637 Width = 46
638 Caption = 'Start vol.' 638 Caption = 'Start vol.'
639 ParentColor = False 639 ParentColor = False
640 ParentFont = False 640 ParentFont = False
641 end 641 end
642 object Label5: TLabel 642 object Label5: TLabel
643 Left = 14 643 Left = 8
644 Height = 30 644 Height = 15
645 Top = 94 645 Top = 54
646 Width = 84 646 Width = 48
647 Caption = 'Direction' 647 Caption = 'Direction'
648 ParentColor = False 648 ParentColor = False
649 ParentFont = False 649 ParentFont = False
650 end 650 end
651 object DirectionComboBox: TComboBox 651 object DirectionComboBox: TComboBox
652 Left = 144 652 Left = 82
653 Height = 38 653 Height = 23
654 Hint = 'Whether to fade the sound in or out' 654 Hint = 'Whether to fade the sound in or out'
655 Top = 80 655 Top = 46
656 Width = 346 656 Width = 198
657 ItemHeight = 30 657 ItemHeight = 15
658 ItemIndex = 1 658 ItemIndex = 1
659 Items.Strings = ( 659 Items.Strings = (
660 'Up' 660 'Up'
@@ -667,40 +667,40 @@ object frmTracker: TfrmTracker
667 Text = 'Down' 667 Text = 'Down'
668 end 668 end
669 object Label6: TLabel 669 object Label6: TLabel
670 Left = 14 670 Left = 8
671 Height = 30 671 Height = 15
672 Top = 158 672 Top = 90
673 Width = 71 673 Width = 41
674 Caption = 'Change' 674 Caption = 'Change'
675 ParentColor = False 675 ParentColor = False
676 ParentFont = False 676 ParentFont = False
677 end 677 end
678 object Panel5: TPanel 678 object Panel5: TPanel
679 Left = 525 679 Left = 300
680 Height = 182 680 Height = 104
681 Top = 0 681 Top = 0
682 Width = 472 682 Width = 270
683 BevelOuter = bvLowered 683 BevelOuter = bvLowered
684 ClientHeight = 182 684 ClientHeight = 104
685 ClientWidth = 472 685 ClientWidth = 270
686 ParentFont = False 686 ParentFont = False
687 TabOrder = 1 687 TabOrder = 1
688 object EnvelopePaintbox: TPaintBox 688 object EnvelopePaintbox: TPaintBox
689 Left = 1 689 Left = 1
690 Height = 180 690 Height = 102
691 Hint = 'Preview of the volume envelope' 691 Hint = 'Preview of the volume envelope'
692 Top = 1 692 Top = 1
693 Width = 470 693 Width = 268
694 Align = alClient 694 Align = alClient
695 ParentFont = False 695 ParentFont = False
696 OnPaint = EnvelopePaintboxPaint 696 OnPaint = EnvelopePaintboxPaint
697 end 697 end
698 end 698 end
699 object StartVolTrackbar: TTrackBar 699 object StartVolTrackbar: TTrackBar
700 Left = 144 700 Left = 82
701 Height = 44 701 Height = 25
702 Top = 14 702 Top = 8
703 Width = 343 703 Width = 196
704 Max = 15 704 Max = 15
705 OnChange = StartVolSpinnerChange 705 OnChange = StartVolSpinnerChange
706 Position = 0 706 Position = 0
@@ -708,10 +708,10 @@ object frmTracker: TfrmTracker
708 TabOrder = 2 708 TabOrder = 2
709 end 709 end
710 object EnvChangeTrackbar: TTrackBar 710 object EnvChangeTrackbar: TTrackBar
711 Left = 144 711 Left = 82
712 Height = 44 712 Height = 25
713 Top = 144 713 Top = 82
714 Width = 343 714 Width = 196
715 Max = 7 715 Max = 7
716 OnChange = EnvChangeSpinnerChange 716 OnChange = EnvChangeSpinnerChange
717 Position = 0 717 Position = 0
@@ -720,36 +720,36 @@ object frmTracker: TfrmTracker
720 end 720 end
721 end 721 end
722 object SquareGroupBox: TGroupBox 722 object SquareGroupBox: TGroupBox
723 Left = 12 723 Left = 7
724 Height = 296 724 Height = 169
725 Top = 776 725 Top = 294
726 Width = 558 726 Width = 319
727 Anchors = [] 727 Anchors = []
728 BorderSpacing.Left = 12 728 BorderSpacing.Left = 7
729 BorderSpacing.Top = 12 729 BorderSpacing.Top = 7
730 BorderSpacing.Right = 12 730 BorderSpacing.Right = 7
731 BorderSpacing.Bottom = 12 731 BorderSpacing.Bottom = 7
732 Caption = 'Square' 732 Caption = 'Square'
733 ClientHeight = 261 733 ClientHeight = 149
734 ClientWidth = 554 734 ClientWidth = 315
735 ParentFont = False 735 ParentFont = False
736 TabOrder = 2 736 TabOrder = 2
737 object Label7: TLabel 737 object Label7: TLabel
738 Left = 14 738 Left = 8
739 Height = 30 739 Height = 15
740 Top = 28 740 Top = 16
741 Width = 107 741 Width = 61
742 Caption = 'Sweep time' 742 Caption = 'Sweep time'
743 ParentColor = False 743 ParentColor = False
744 ParentFont = False 744 ParentFont = False
745 end 745 end
746 object SweepTimeCombobox: TComboBox 746 object SweepTimeCombobox: TComboBox
747 Left = 182 747 Left = 104
748 Height = 38 748 Height = 23
749 Hint = 'How long to sweep' 749 Hint = 'How long to sweep'
750 Top = 14 750 Top = 8
751 Width = 350 751 Width = 200
752 ItemHeight = 30 752 ItemHeight = 15
753 ItemIndex = 0 753 ItemIndex = 0
754 Items.Strings = ( 754 Items.Strings = (
755 'Off - no frequency change' 755 'Off - no frequency change'
@@ -770,12 +770,12 @@ object frmTracker: TfrmTracker
770 Text = 'Off - no frequency change' 770 Text = 'Off - no frequency change'
771 end 771 end
772 object SweepDirectionCombobox: TComboBox 772 object SweepDirectionCombobox: TComboBox
773 Left = 182 773 Left = 104
774 Height = 38 774 Height = 23
775 Hint = 'The direction of the sweep' 775 Hint = 'The direction of the sweep'
776 Top = 70 776 Top = 40
777 Width = 350 777 Width = 200
778 ItemHeight = 30 778 ItemHeight = 15
779 ItemIndex = 1 779 ItemIndex = 1
780 Items.Strings = ( 780 Items.Strings = (
781 'Up' 781 'Up'
@@ -790,39 +790,39 @@ object frmTracker: TfrmTracker
790 Text = 'Down' 790 Text = 'Down'
791 end 791 end
792 object Label8: TLabel 792 object Label8: TLabel
793 Left = 14 793 Left = 8
794 Height = 30 794 Height = 15
795 Top = 84 795 Top = 48
796 Width = 147 796 Width = 84
797 Caption = 'Sweep direction' 797 Caption = 'Sweep direction'
798 ParentColor = False 798 ParentColor = False
799 ParentFont = False 799 ParentFont = False
800 end 800 end
801 object Label9: TLabel 801 object Label9: TLabel
802 Left = 14 802 Left = 8
803 Height = 30 803 Height = 15
804 Top = 154 804 Top = 88
805 Width = 101 805 Width = 56
806 Caption = 'Sweep size' 806 Caption = 'Sweep size'
807 ParentColor = False 807 ParentColor = False
808 ParentFont = False 808 ParentFont = False
809 end 809 end
810 object Label10: TLabel 810 object Label10: TLabel
811 Left = 14 811 Left = 8
812 Height = 30 812 Height = 15
813 Top = 210 813 Top = 120
814 Width = 44 814 Width = 25
815 Caption = 'Duty' 815 Caption = 'Duty'
816 ParentColor = False 816 ParentColor = False
817 ParentFont = False 817 ParentFont = False
818 end 818 end
819 object DutyCombobox: TComboBox 819 object DutyCombobox: TComboBox
820 Left = 182 820 Left = 104
821 Height = 38 821 Height = 23
822 Hint = 'Which duty cycle to use (changes timbre of wave)' 822 Hint = 'Which duty cycle to use (changes timbre of wave)'
823 Top = 196 823 Top = 112
824 Width = 350 824 Width = 200
825 ItemHeight = 30 825 ItemHeight = 15
826 ItemIndex = 2 826 ItemIndex = 2
827 Items.Strings = ( 827 Items.Strings = (
828 '12.5%' 828 '12.5%'
@@ -839,10 +839,10 @@ object frmTracker: TfrmTracker
839 Text = '50% (square)' 839 Text = '50% (square)'
840 end 840 end
841 object SweepSizeTrackbar: TTrackBar 841 object SweepSizeTrackbar: TTrackBar
842 Left = 184 842 Left = 105
843 Height = 44 843 Height = 25
844 Top = 140 844 Top = 80
845 Width = 343 845 Width = 196
846 Max = 7 846 Max = 7
847 OnChange = SweepSizeSpinnerChange 847 OnChange = SweepSizeSpinnerChange
848 Position = 0 848 Position = 0
@@ -851,45 +851,45 @@ object frmTracker: TfrmTracker
851 end 851 end
852 end 852 end
853 object WaveGroupBox: TGroupBox 853 object WaveGroupBox: TGroupBox
854 Left = 594 854 Left = 340
855 Height = 296 855 Height = 169
856 Top = 776 856 Top = 294
857 Width = 520 857 Width = 297
858 Anchors = [] 858 Anchors = []
859 BorderSpacing.Left = 12 859 BorderSpacing.Left = 7
860 BorderSpacing.Top = 12 860 BorderSpacing.Top = 7
861 BorderSpacing.Right = 12 861 BorderSpacing.Right = 7
862 BorderSpacing.Bottom = 12 862 BorderSpacing.Bottom = 7
863 Caption = 'Wave' 863 Caption = 'Wave'
864 ClientHeight = 261 864 ClientHeight = 149
865 ClientWidth = 516 865 ClientWidth = 293
866 ParentFont = False 866 ParentFont = False
867 TabOrder = 3 867 TabOrder = 3
868 object Label11: TLabel 868 object Label11: TLabel
869 Left = 14 869 Left = 8
870 Height = 30 870 Height = 15
871 Top = 28 871 Top = 16
872 Width = 70 872 Width = 40
873 Caption = 'Volume' 873 Caption = 'Volume'
874 ParentColor = False 874 ParentColor = False
875 ParentFont = False 875 ParentFont = False
876 end 876 end
877 object Label12: TLabel 877 object Label12: TLabel
878 Left = 14 878 Left = 8
879 Height = 30 879 Height = 15
880 Top = 84 880 Top = 48
881 Width = 95 881 Width = 55
882 Caption = 'Waveform' 882 Caption = 'Waveform'
883 ParentColor = False 883 ParentColor = False
884 ParentFont = False 884 ParentFont = False
885 end 885 end
886 object WaveformCombobox: TComboBox 886 object WaveformCombobox: TComboBox
887 Left = 182 887 Left = 104
888 Height = 38 888 Height = 23
889 Hint = 'Which waveform is associated with this instrument' 889 Hint = 'Which waveform is associated with this instrument'
890 Top = 70 890 Top = 40
891 Width = 308 891 Width = 176
892 ItemHeight = 30 892 ItemHeight = 15
893 ItemIndex = 0 893 ItemIndex = 0
894 Items.Strings = ( 894 Items.Strings = (
895 'Wave #0' 895 'Wave #0'
@@ -916,21 +916,21 @@ object frmTracker: TfrmTracker
916 Text = 'Wave #0' 916 Text = 'Wave #0'
917 end 917 end
918 object Panel4: TPanel 918 object Panel4: TPanel
919 Left = 14 919 Left = 8
920 Height = 103 920 Height = 59
921 Top = 140 921 Top = 80
922 Width = 476 922 Width = 272
923 BevelOuter = bvLowered 923 BevelOuter = bvLowered
924 ClientHeight = 103 924 ClientHeight = 59
925 ClientWidth = 476 925 ClientWidth = 272
926 ParentFont = False 926 ParentFont = False
927 TabOrder = 1 927 TabOrder = 1
928 object WavePaintbox: TPaintBox 928 object WavePaintbox: TPaintBox
929 Left = 1 929 Left = 1
930 Height = 101 930 Height = 57
931 Hint = 'Preview of the waveform associated with this instrument' 931 Hint = 'Preview of the waveform associated with this instrument'
932 Top = 1 932 Top = 1
933 Width = 474 933 Width = 270
934 Align = alClient 934 Align = alClient
935 Color = clBlack 935 Color = clBlack
936 ParentColor = False 936 ParentColor = False
@@ -939,12 +939,12 @@ object frmTracker: TfrmTracker
939 end 939 end
940 end 940 end
941 object WaveVolumeCombobox: TComboBox 941 object WaveVolumeCombobox: TComboBox
942 Left = 182 942 Left = 104
943 Height = 38 943 Height = 23
944 Hint = 'The initial volume of the wave' 944 Hint = 'The initial volume of the wave'
945 Top = 14 945 Top = 8
946 Width = 308 946 Width = 176
947 ItemHeight = 30 947 ItemHeight = 15
948 ItemIndex = 1 948 ItemIndex = 1
949 Items.Strings = ( 949 Items.Strings = (
950 'Mute (No sound)' 950 'Mute (No sound)'
@@ -960,26 +960,26 @@ object frmTracker: TfrmTracker
960 end 960 end
961 end 961 end
962 object NoiseGroupBox: TGroupBox 962 object NoiseGroupBox: TGroupBox
963 Left = 12 963 Left = 651
964 Height = 103 964 Height = 59
965 Top = 1096 965 Top = 294
966 Width = 415 966 Width = 237
967 Anchors = [] 967 Anchors = []
968 BorderSpacing.Left = 12 968 BorderSpacing.Left = 7
969 BorderSpacing.Top = 12 969 BorderSpacing.Top = 7
970 BorderSpacing.Right = 12 970 BorderSpacing.Right = 7
971 BorderSpacing.Bottom = 12 971 BorderSpacing.Bottom = 7
972 Caption = 'Noise' 972 Caption = 'Noise'
973 ClientHeight = 68 973 ClientHeight = 39
974 ClientWidth = 411 974 ClientWidth = 233
975 ParentFont = False 975 ParentFont = False
976 TabOrder = 4 976 TabOrder = 4
977 object SevenBitCounterCheckbox: TCheckBox 977 object SevenBitCounterCheckbox: TCheckBox
978 Left = 14 978 Left = 8
979 Height = 34 979 Height = 19
980 Hint = 'Select LFSR width. When checked, output will sound like a tone rather than noise' 980 Hint = 'Select LFSR width. When checked, output will sound like a tone rather than noise'
981 Top = 14 981 Top = 8
982 Width = 373 982 Width = 215
983 Alignment = taLeftJustify 983 Alignment = taLeftJustify
984 Caption = '7 bit counter (more tone-like output)' 984 Caption = '7 bit counter (more tone-like output)'
985 OnChange = SevenBitCounterCheckboxChange 985 OnChange = SevenBitCounterCheckboxChange
@@ -989,45 +989,46 @@ object frmTracker: TfrmTracker
989 end 989 end
990 end 990 end
991 object SubpatternGroupBox: TGroupBox 991 object SubpatternGroupBox: TGroupBox
992 Left = 1243 992 Left = 935
993 Height = 886 993 Height = 652
994 Top = 12 994 Top = 7
995 Width = 280 995 Width = 160
996 Align = alRight 996 Align = alRight
997 Anchors = [] 997 Anchors = []
998 BorderSpacing.Top = 12 998 BorderSpacing.Top = 7
999 Caption = 'Subpattern' 999 Caption = 'Subpattern'
1000 ClientHeight = 851 1000 ClientHeight = 632
1001 ClientWidth = 276 1001 ClientWidth = 156
1002 TabOrder = 1 1002 TabOrder = 1
1003 object ScrollBox2: TScrollBox 1003 object ScrollBox2: TScrollBox
1004 Left = 0 1004 Left = 0
1005 Height = 851 1005 Height = 632
1006 Top = 0 1006 Top = 0
1007 Width = 276 1007 Width = 156
1008 HorzScrollBar.Increment = 5 1008 HorzScrollBar.Increment = 3
1009 HorzScrollBar.Page = 56 1009 HorzScrollBar.Page = 32
1010 HorzScrollBar.Smooth = True 1010 HorzScrollBar.Smooth = True
1011 HorzScrollBar.Tracking = True 1011 HorzScrollBar.Tracking = True
1012 VertScrollBar.Page = 88 1012 VertScrollBar.Increment = 5
1013 VertScrollBar.Page = 50
1013 VertScrollBar.Smooth = True 1014 VertScrollBar.Smooth = True
1014 VertScrollBar.Tracking = True 1015 VertScrollBar.Tracking = True
1015 Align = alClient 1016 Align = alClient
1016 BorderStyle = bsNone 1017 BorderStyle = bsNone
1017 ClientHeight = 851 1018 ClientHeight = 632
1018 ClientWidth = 276 1019 ClientWidth = 156
1019 TabOrder = 0 1020 TabOrder = 0
1020 OnMouseWheelDown = ScrollBox1MouseWheelDown 1021 OnMouseWheelDown = ScrollBox1MouseWheelDown
1021 OnMouseWheelUp = ScrollBox1MouseWheelUp 1022 OnMouseWheelUp = ScrollBox1MouseWheelUp
1022 object RowNumberStringGrid1: TStringGrid 1023 object RowNumberStringGrid1: TStringGrid
1023 Left = 220 1024 Left = 124
1024 Height = 851 1025 Height = 632
1025 Top = 0 1026 Top = 0
1026 Width = 56 1027 Width = 32
1027 Align = alRight 1028 Align = alRight
1028 BorderStyle = bsNone 1029 BorderStyle = bsNone
1029 ColCount = 1 1030 ColCount = 1
1030 DefaultColWidth = 56 1031 DefaultColWidth = 32
1031 Enabled = False 1032 Enabled = False
1032 ParentFont = False 1033 ParentFont = False
1033 RowCount = 32 1034 RowCount = 32
@@ -1039,19 +1040,19 @@ object frmTracker: TfrmTracker
1039 end 1040 end
1040 object WavesTabSheet: TTabSheet 1041 object WavesTabSheet: TTabSheet
1041 Caption = 'Waves' 1042 Caption = 'Waves'
1042 ClientHeight = 898 1043 ClientHeight = 659
1043 ClientWidth = 1523 1044 ClientWidth = 1095
1044 ParentFont = False 1045 ParentFont = False
1045 object WaveEditPaintBox: TPaintBox 1046 object WaveEditPaintBox: TPaintBox
1046 AnchorSideTop.Control = WaveEditGroupBox 1047 AnchorSideTop.Control = WaveEditGroupBox
1047 AnchorSideTop.Side = asrBottom 1048 AnchorSideTop.Side = asrBottom
1048 Left = 0 1049 Left = 0
1049 Height = 618 1050 Height = 499
1050 Top = 280 1051 Top = 160
1051 Width = 1523 1052 Width = 1095
1052 Align = alBottom 1053 Align = alBottom
1053 Anchors = [akTop, akLeft, akRight, akBottom] 1054 Anchors = [akTop, akLeft, akRight, akBottom]
1054 BorderSpacing.Top = 23 1055 BorderSpacing.Top = 13
1055 ParentFont = False 1056 ParentFont = False
1056 PopupMenu = WaveEditPopup 1057 PopupMenu = WaveEditPopup
1057 OnMouseDown = WaveEditPaintBoxMouseDown 1058 OnMouseDown = WaveEditPaintBoxMouseDown
@@ -1060,61 +1061,61 @@ object frmTracker: TfrmTracker
1060 OnPaint = WaveEditPaintBoxPaint 1061 OnPaint = WaveEditPaintBoxPaint
1061 end 1062 end
1062 object WaveEditGroupBox: TGroupBox 1063 object WaveEditGroupBox: TGroupBox
1063 Left = 14 1064 Left = 8
1064 Height = 243 1065 Height = 139
1065 Top = 14 1066 Top = 8
1066 Width = 994 1067 Width = 568
1067 Caption = 'Wave Editor' 1068 Caption = 'Wave Editor'
1068 ClientHeight = 208 1069 ClientHeight = 119
1069 ClientWidth = 990 1070 ClientWidth = 564
1070 ParentFont = False 1071 ParentFont = False
1071 TabOrder = 0 1072 TabOrder = 0
1072 object Label20: TLabel 1073 object Label20: TLabel
1073 Left = 28 1074 Left = 16
1074 Height = 30 1075 Height = 15
1075 Top = 28 1076 Top = 16
1076 Width = 51 1077 Width = 29
1077 Caption = 'Wave' 1078 Caption = 'Wave'
1078 ParentColor = False 1079 ParentColor = False
1079 ParentFont = False 1080 ParentFont = False
1080 end 1081 end
1081 object WaveEditNumberSpinner: TSpinEdit 1082 object WaveEditNumberSpinner: TSpinEdit
1082 Left = 112 1083 Left = 64
1083 Height = 38 1084 Height = 23
1084 Top = 14 1085 Top = 8
1085 Width = 140 1086 Width = 80
1086 MaxValue = 15 1087 MaxValue = 15
1087 OnChange = WaveEditNumberSpinnerChange 1088 OnChange = WaveEditNumberSpinnerChange
1088 ParentFont = False 1089 ParentFont = False
1089 TabOrder = 0 1090 TabOrder = 0
1090 end 1091 end
1091 object ImportWaveButton: TButton 1092 object ImportWaveButton: TButton
1092 Left = 28 1093 Left = 16
1093 Height = 44 1094 Height = 25
1094 Hint = 'Import a wave' 1095 Hint = 'Import a wave'
1095 Top = 84 1096 Top = 48
1096 Width = 257 1097 Width = 147
1097 Caption = 'Import' 1098 Caption = 'Import'
1098 OnClick = ImportWaveButtonClick 1099 OnClick = ImportWaveButtonClick
1099 ParentFont = False 1100 ParentFont = False
1100 TabOrder = 1 1101 TabOrder = 1
1101 end 1102 end
1102 object ExportWaveButton: TButton 1103 object ExportWaveButton: TButton
1103 Left = 28 1104 Left = 16
1104 Height = 44 1105 Height = 25
1105 Hint = 'Export a wave' 1106 Hint = 'Export a wave'
1106 Top = 140 1107 Top = 80
1107 Width = 257 1108 Width = 147
1108 Caption = 'Export' 1109 Caption = 'Export'
1109 OnClick = ExportWaveButtonClick 1110 OnClick = ExportWaveButtonClick
1110 ParentFont = False 1111 ParentFont = False
1111 TabOrder = 2 1112 TabOrder = 2
1112 end 1113 end
1113 object HexWaveEdit: TEdit 1114 object HexWaveEdit: TEdit
1114 Left = 504 1115 Left = 288
1115 Height = 38 1116 Height = 23
1116 Top = 14 1117 Top = 8
1117 Width = 462 1118 Width = 264
1118 MaxLength = 32 1119 MaxLength = 32
1119 OnChange = HexWaveEditEditingDone 1120 OnChange = HexWaveEditEditingDone
1120 OnEditingDone = HexWaveEditEditingDone 1121 OnEditingDone = HexWaveEditEditingDone
@@ -1122,19 +1123,19 @@ object frmTracker: TfrmTracker
1122 TabOrder = 3 1123 TabOrder = 3
1123 end 1124 end
1124 object Label13: TLabel 1125 object Label13: TLabel
1125 Left = 308 1126 Left = 176
1126 Height = 30 1127 Height = 15
1127 Top = 28 1128 Top = 16
1128 Width = 176 1129 Width = 100
1129 Caption = 'Hex representation' 1130 Caption = 'Hex representation'
1130 ParentColor = False 1131 ParentColor = False
1131 ParentFont = False 1132 ParentFont = False
1132 end 1133 end
1133 object PlayWaveWhileDrawingCheckbox: TCheckBox 1134 object PlayWaveWhileDrawingCheckbox: TCheckBox
1134 Left = 308 1135 Left = 176
1135 Height = 34 1136 Height = 19
1136 Top = 70 1137 Top = 40
1137 Width = 259 1138 Width = 149
1138 Caption = 'Play wave while drawing' 1139 Caption = 'Play wave while drawing'
1139 ParentFont = False 1140 ParentFont = False
1140 TabOrder = 4 1141 TabOrder = 4
@@ -1143,30 +1144,30 @@ object frmTracker: TfrmTracker
1143 end 1144 end
1144 object CommentsTabSheet: TTabSheet 1145 object CommentsTabSheet: TTabSheet
1145 Caption = 'Comments' 1146 Caption = 'Comments'
1146 ClientHeight = 898 1147 ClientHeight = 659
1147 ClientWidth = 1523 1148 ClientWidth = 1095
1148 ParentFont = False 1149 ParentFont = False
1149 object CommentMemo: TMemo 1150 object CommentMemo: TMemo
1150 AnchorSideTop.Control = Label17 1151 AnchorSideTop.Control = Label17
1151 AnchorSideTop.Side = asrBottom 1152 AnchorSideTop.Side = asrBottom
1152 Left = 0 1153 Left = 0
1153 Height = 831 1154 Height = 623
1154 Hint = 'The comments section for your song. Greetings/links/etc' 1155 Hint = 'The comments section for your song. Greetings/links/etc'
1155 Top = 67 1156 Top = 36
1156 Width = 1523 1157 Width = 1095
1157 Align = alBottom 1158 Align = alBottom
1158 Anchors = [akTop, akLeft, akRight, akBottom] 1159 Anchors = [akTop, akLeft, akRight, akBottom]
1159 BorderSpacing.Top = 23 1160 BorderSpacing.Top = 13
1160 MaxLength = 255 1161 MaxLength = 255
1161 OnChange = CommentMemoChange 1162 OnChange = CommentMemoChange
1162 ParentFont = False 1163 ParentFont = False
1163 TabOrder = 0 1164 TabOrder = 0
1164 end 1165 end
1165 object Label17: TLabel 1166 object Label17: TLabel
1166 Left = 14 1167 Left = 8
1167 Height = 30 1168 Height = 15
1168 Top = 14 1169 Top = 8
1169 Width = 587 1170 Width = 333
1170 Caption = 'This is an area to write comments for anyone editing your tune.' 1171 Caption = 'This is an area to write comments for anyone editing your tune.'
1171 ParentColor = False 1172 ParentColor = False
1172 ParentFont = False 1173 ParentFont = False
@@ -1174,27 +1175,27 @@ object frmTracker: TfrmTracker
1174 end 1175 end
1175 object RoutinesTabSheet: TTabSheet 1176 object RoutinesTabSheet: TTabSheet
1176 Caption = 'Routines' 1177 Caption = 'Routines'
1177 ClientHeight = 898 1178 ClientHeight = 659
1178 ClientWidth = 1523 1179 ClientWidth = 1095
1179 ParentFont = False 1180 ParentFont = False
1180 inline RoutineSynedit: TSynEdit 1181 inline RoutineSynedit: TSynEdit
1181 AnchorSideTop.Control = Label19 1182 AnchorSideTop.Control = Label19
1182 AnchorSideTop.Side = asrBottom 1183 AnchorSideTop.Side = asrBottom
1183 Left = 0 1184 Left = 0
1184 Height = 655 1185 Height = 531
1185 Top = 243 1186 Top = 128
1186 Width = 1523 1187 Width = 1095
1187 Align = alBottom 1188 Align = alBottom
1188 BorderSpacing.Top = 23 1189 BorderSpacing.Top = 13
1189 Anchors = [akTop, akLeft, akRight, akBottom] 1190 Anchors = [akTop, akLeft, akRight, akBottom]
1190 Font.Height = -23 1191 Font.Height = -13
1191 Font.Name = 'Courier New' 1192 Font.Name = 'Courier New'
1192 Font.Pitch = fpFixed 1193 Font.Pitch = fpFixed
1193 Font.Quality = fqNonAntialiased 1194 Font.Quality = fqNonAntialiased
1194 ParentColor = False 1195 ParentColor = False
1195 ParentFont = False 1196 ParentFont = False
1196 TabOrder = 0 1197 TabOrder = 0
1197 Gutter.Width = 100 1198 Gutter.Width = 57
1198 Gutter.MouseActions = <> 1199 Gutter.MouseActions = <>
1199 RightGutter.Width = 0 1200 RightGutter.Width = 0
1200 RightGutter.MouseActions = <> 1201 RightGutter.MouseActions = <>
@@ -1648,11 +1649,11 @@ object frmTracker: TfrmTracker
1648 OnChange = RoutineSyneditChange 1649 OnChange = RoutineSyneditChange
1649 inline SynLeftGutterPartList1: TSynGutterPartList 1650 inline SynLeftGutterPartList1: TSynGutterPartList
1650 object SynGutterMarks1: TSynGutterMarks 1651 object SynGutterMarks1: TSynGutterMarks
1651 Width = 42 1652 Width = 24
1652 MouseActions = <> 1653 MouseActions = <>
1653 end 1654 end
1654 object SynGutterLineNumber1: TSynGutterLineNumber 1655 object SynGutterLineNumber1: TSynGutterLineNumber
1655 Width = 29 1656 Width = 17
1656 MouseActions = <> 1657 MouseActions = <>
1657 MarkupInfo.Background = clBtnFace 1658 MarkupInfo.Background = clBtnFace
1658 MarkupInfo.Foreground = clNone 1659 MarkupInfo.Foreground = clNone
@@ -1662,19 +1663,18 @@ object frmTracker: TfrmTracker
1662 LeadingZeros = False 1663 LeadingZeros = False
1663 end 1664 end
1664 object SynGutterChanges1: TSynGutterChanges 1665 object SynGutterChanges1: TSynGutterChanges
1665 Width = 7 1666 Width = 4
1666 MouseActions = <> 1667 MouseActions = <>
1667 ModifiedColor = 59900 1668 ModifiedColor = 59900
1668 SavedColor = clGreen 1669 SavedColor = clGreen
1669 end 1670 end
1670 object SynGutterSeparator1: TSynGutterSeparator 1671 object SynGutterSeparator1: TSynGutterSeparator
1671 Width = 4 1672 Width = 2
1672 MouseActions = <> 1673 MouseActions = <>
1673 MarkupInfo.Background = clWhite 1674 MarkupInfo.Background = clWhite
1674 MarkupInfo.Foreground = clGray 1675 MarkupInfo.Foreground = clGray
1675 end 1676 end
1676 object SynGutterCodeFolding1: TSynGutterCodeFolding 1677 object SynGutterCodeFolding1: TSynGutterCodeFolding
1677 Width = 18
1678 MouseActions = <> 1678 MouseActions = <>
1679 MarkupInfo.Background = clNone 1679 MarkupInfo.Background = clNone
1680 MarkupInfo.Foreground = clGray 1680 MarkupInfo.Foreground = clGray
@@ -1684,19 +1684,19 @@ object frmTracker: TfrmTracker
1684 end 1684 end
1685 end 1685 end
1686 object Label18: TLabel 1686 object Label18: TLabel
1687 Left = 14 1687 Left = 8
1688 Height = 30 1688 Height = 15
1689 Top = 28 1689 Top = 16
1690 Width = 71 1690 Width = 41
1691 Caption = 'Routine' 1691 Caption = 'Routine'
1692 ParentColor = False 1692 ParentColor = False
1693 ParentFont = False 1693 ParentFont = False
1694 end 1694 end
1695 object RoutineNumberSpinner: TSpinEdit 1695 object RoutineNumberSpinner: TSpinEdit
1696 Left = 112 1696 Left = 64
1697 Height = 38 1697 Height = 23
1698 Top = 14 1698 Top = 8
1699 Width = 308 1699 Width = 176
1700 MaxValue = 15 1700 MaxValue = 15
1701 OnChange = RoutineNumberSpinnerChange 1701 OnChange = RoutineNumberSpinnerChange
1702 ParentFont = False 1702 ParentFont = False
@@ -1704,10 +1704,10 @@ object frmTracker: TfrmTracker
1704 Value = 1 1704 Value = 1
1705 end 1705 end
1706 object Label19: TLabel 1706 object Label19: TLabel
1707 Left = 14 1707 Left = 8
1708 Height = 150 1708 Height = 75
1709 Top = 70 1709 Top = 40
1710 Width = 891 1710 Width = 506
1711 Caption = 'Routines are an advanced feature of hUGETracker, and you likely won''t need them at all'#13#10'if you are only interested in composing music. If you want to create a custom effect, or interface'#13#10'with game code that you''re writing a soundtrack for, then routines will come in handy.'#13#10#13#10'Refer to the user manual for more information!' 1711 Caption = 'Routines are an advanced feature of hUGETracker, and you likely won''t need them at all'#13#10'if you are only interested in composing music. If you want to create a custom effect, or interface'#13#10'with game code that you''re writing a soundtrack for, then routines will come in handy.'#13#10#13#10'Refer to the user manual for more information!'
1712 ParentColor = False 1712 ParentColor = False
1713 ParentFont = False 1713 ParentFont = False
@@ -1717,21 +1717,21 @@ object frmTracker: TfrmTracker
1717 end 1717 end
1718 object ScopesPanel: TPanel 1718 object ScopesPanel: TPanel
1719 Left = 0 1719 Left = 0
1720 Height = 112 1720 Height = 64
1721 Top = 41 1721 Top = 25
1722 Width = 1878 1722 Width = 1301
1723 Align = alTop 1723 Align = alTop
1724 BevelOuter = bvNone 1724 BevelOuter = bvNone
1725 ClientHeight = 112 1725 ClientHeight = 64
1726 ClientWidth = 1878 1726 ClientWidth = 1301
1727 ParentFont = False 1727 ParentFont = False
1728 TabOrder = 3 1728 TabOrder = 3
1729 object LEDMeter1: TLEDMeter 1729 object LEDMeter1: TLEDMeter
1730 AnchorSideRight.Control = Duty1Visualizer 1730 AnchorSideRight.Control = Duty1Visualizer
1731 Left = 0 1731 Left = 0
1732 Height = 56 1732 Height = 32
1733 Top = 56 1733 Top = 32
1734 Width = 498 1734 Width = 513
1735 Anchors = [akTop, akLeft, akRight] 1735 Anchors = [akTop, akLeft, akRight]
1736 BevelStyle = bvLowered 1736 BevelStyle = bvLowered
1737 Colors.Border = 2168839 1737 Colors.Border = 2168839
@@ -1752,9 +1752,9 @@ object frmTracker: TfrmTracker
1752 object LEDMeter2: TLEDMeter 1752 object LEDMeter2: TLEDMeter
1753 AnchorSideRight.Control = Duty1Visualizer 1753 AnchorSideRight.Control = Duty1Visualizer
1754 Left = 0 1754 Left = 0
1755 Height = 56 1755 Height = 32
1756 Top = 0 1756 Top = 0
1757 Width = 498 1757 Width = 513
1758 Anchors = [akTop, akLeft, akRight] 1758 Anchors = [akTop, akLeft, akRight]
1759 BevelStyle = bvLowered 1759 BevelStyle = bvLowered
1760 Colors.Border = 2168839 1760 Colors.Border = 2168839
@@ -1773,40 +1773,40 @@ object frmTracker: TfrmTracker
1773 Section3Value = 48 1773 Section3Value = 48
1774 end 1774 end
1775 object Duty1Visualizer: TPaintBox 1775 object Duty1Visualizer: TPaintBox
1776 Left = 498 1776 Left = 513
1777 Height = 112 1777 Height = 64
1778 Top = 0 1778 Top = 0
1779 Width = 345 1779 Width = 197
1780 Align = alRight 1780 Align = alRight
1781 ParentFont = False 1781 ParentFont = False
1782 OnClick = Duty1VisualizerClick 1782 OnClick = Duty1VisualizerClick
1783 OnPaint = Duty1VisualizerPaint 1783 OnPaint = Duty1VisualizerPaint
1784 end 1784 end
1785 object Duty2Visualizer: TPaintBox 1785 object Duty2Visualizer: TPaintBox
1786 Left = 843 1786 Left = 710
1787 Height = 112 1787 Height = 64
1788 Top = 0 1788 Top = 0
1789 Width = 345 1789 Width = 197
1790 Align = alRight 1790 Align = alRight
1791 ParentFont = False 1791 ParentFont = False
1792 OnClick = Duty1VisualizerClick 1792 OnClick = Duty1VisualizerClick
1793 OnPaint = Duty2VisualizerPaint 1793 OnPaint = Duty2VisualizerPaint
1794 end 1794 end
1795 object WaveVisualizer: TPaintBox 1795 object WaveVisualizer: TPaintBox
1796 Left = 1188 1796 Left = 907
1797 Height = 112 1797 Height = 64
1798 Top = 0 1798 Top = 0
1799 Width = 345 1799 Width = 197
1800 Align = alRight 1800 Align = alRight
1801 ParentFont = False 1801 ParentFont = False
1802 OnClick = Duty1VisualizerClick 1802 OnClick = Duty1VisualizerClick
1803 OnPaint = WaveVisualizerPaint 1803 OnPaint = WaveVisualizerPaint
1804 end 1804 end
1805 object NoiseVisualizer: TPaintBox 1805 object NoiseVisualizer: TPaintBox
1806 Left = 1533 1806 Left = 1104
1807 Height = 112 1807 Height = 64
1808 Top = 0 1808 Top = 0
1809 Width = 345 1809 Width = 197
1810 Align = alRight 1810 Align = alRight
1811 ParentFont = False 1811 ParentFont = False
1812 OnClick = Duty1VisualizerClick 1812 OnClick = Duty1VisualizerClick
@@ -1815,19 +1815,19 @@ object frmTracker: TfrmTracker
1815 end 1815 end
1816 object StatusBar1: TStatusBar 1816 object StatusBar1: TStatusBar
1817 Left = 0 1817 Left = 0
1818 Height = 43 1818 Height = 23
1819 Top = 1094 1819 Top = 776
1820 Width = 1878 1820 Width = 1301
1821 AutoHint = True 1821 AutoHint = True
1822 Panels = < 1822 Panels = <
1823 item 1823 item
1824 Width = 817 1824 Width = 467
1825 end 1825 end
1826 item 1826 item
1827 Width = 350 1827 Width = 200
1828 end 1828 end
1829 item 1829 item
1830 Width = 350 1830 Width = 200
1831 end> 1831 end>
1832 ParentFont = False 1832 ParentFont = False
1833 ParentShowHint = False 1833 ParentShowHint = False
@@ -1836,9 +1836,9 @@ object frmTracker: TfrmTracker
1836 end 1836 end
1837 object ToolBar1: TToolBar 1837 object ToolBar1: TToolBar
1838 Left = 0 1838 Left = 0
1839 Height = 41 1839 Height = 25
1840 Top = 0 1840 Top = 0
1841 Width = 1878 1841 Width = 1301
1842 AutoSize = True 1842 AutoSize = True
1843 Caption = 'ToolBar1' 1843 Caption = 'ToolBar1'
1844 EdgeBorders = [ebBottom] 1844 EdgeBorders = [ebBottom]
@@ -1855,7 +1855,7 @@ object frmTracker: TfrmTracker
1855 ParentShowHint = False 1855 ParentShowHint = False
1856 end 1856 end
1857 object PanicToolButton: TToolButton 1857 object PanicToolButton: TToolButton
1858 Left = 706 1858 Left = 474
1859 Hint = 'Stops all sound output' 1859 Hint = 'Stops all sound output'
1860 Top = 0 1860 Top = 0
1861 AutoSize = True 1861 AutoSize = True
@@ -1866,17 +1866,17 @@ object frmTracker: TfrmTracker
1866 ShowHint = True 1866 ShowHint = True
1867 end 1867 end
1868 object ToolButton2: TToolButton 1868 object ToolButton2: TToolButton
1869 Left = 169 1869 Left = 114
1870 Top = 0 1870 Top = 0
1871 Action = PlayCursorAction 1871 Action = PlayCursorAction
1872 end 1872 end
1873 object ToolButton4: TToolButton 1873 object ToolButton4: TToolButton
1874 Left = 209 1874 Left = 143
1875 Top = 0 1875 Top = 0
1876 Action = StopAction 1876 Action = StopAction
1877 end 1877 end
1878 object ExportGBButton: TToolButton 1878 object ExportGBButton: TToolButton
1879 Left = 307 1879 Left = 207
1880 Hint = 'Export the song as a standalone ROM' 1880 Hint = 'Export the song as a standalone ROM'
1881 Top = 0 1881 Top = 0
1882 AutoSize = True 1882 AutoSize = True
@@ -1885,49 +1885,49 @@ object frmTracker: TfrmTracker
1885 OnClick = ExportGBButtonClick 1885 OnClick = ExportGBButtonClick
1886 end 1886 end
1887 object ToolButton8: TToolButton 1887 object ToolButton8: TToolButton
1888 Left = 120 1888 Left = 82
1889 Height = 39 1889 Height = 22
1890 Top = 0 1890 Top = 0
1891 Caption = 'ToolButton8' 1891 Caption = 'ToolButton8'
1892 Style = tbsDivider 1892 Style = tbsDivider
1893 end 1893 end
1894 object ToolButton6: TToolButton 1894 object ToolButton6: TToolButton
1895 Left = 249 1895 Left = 172
1896 Height = 39 1896 Height = 22
1897 Top = 0 1897 Top = 0
1898 Caption = 'ToolButton6' 1898 Caption = 'ToolButton6'
1899 Style = tbsDivider 1899 Style = tbsDivider
1900 end 1900 end
1901 object ToolButton7: TToolButton 1901 object ToolButton7: TToolButton
1902 Left = 1630 1902 Left = 1014
1903 Height = 39 1903 Height = 22
1904 Top = 0 1904 Top = 0
1905 Caption = 'ToolButton7' 1905 Caption = 'ToolButton7'
1906 Style = tbsSeparator 1906 Style = tbsSeparator
1907 end 1907 end
1908 object OctaveSpinEdit: TSpinEdit 1908 object OctaveSpinEdit: TSpinEdit
1909 Left = 871 1909 Left = 580
1910 Height = 38 1910 Height = 23
1911 Hint = 'The octave offset for entering new notes' 1911 Hint = 'The octave offset for entering new notes'
1912 Top = 0 1912 Top = 0
1913 Width = 114 1913 Width = 65
1914 MaxValue = 5 1914 MaxValue = 5
1915 OnChange = OctaveSpinEditChange 1915 OnChange = OctaveSpinEditChange
1916 ParentFont = False 1916 ParentFont = False
1917 TabOrder = 0 1917 TabOrder = 0
1918 end 1918 end
1919 object ToolButton9: TToolButton 1919 object ToolButton9: TToolButton
1920 Left = 782 1920 Left = 532
1921 Height = 39 1921 Height = 22
1922 Top = 0 1922 Top = 0
1923 Caption = 'ToolButton9' 1923 Caption = 'ToolButton9'
1924 Style = tbsSeparator 1924 Style = tbsSeparator
1925 end 1925 end
1926 object Label22: TLabel 1926 object Label22: TLabel
1927 Left = 796 1927 Left = 537
1928 Height = 39 1928 Height = 22
1929 Top = 0 1929 Top = 0
1930 Width = 75 1930 Width = 43
1931 AutoSize = False 1931 AutoSize = False
1932 Caption = 'Octave ' 1932 Caption = 'Octave '
1933 Layout = tlCenter 1933 Layout = tlCenter
@@ -1935,10 +1935,10 @@ object frmTracker: TfrmTracker
1935 ParentFont = False 1935 ParentFont = False
1936 end 1936 end
1937 object Label23: TLabel 1937 object Label23: TLabel
1938 Left = 985 1938 Left = 645
1939 Height = 39 1939 Height = 22
1940 Top = 0 1940 Top = 0
1941 Width = 122 1941 Width = 70
1942 AutoSize = False 1942 AutoSize = False
1943 Caption = ' Instrument ' 1943 Caption = ' Instrument '
1944 Layout = tlCenter 1944 Layout = tlCenter
@@ -1946,13 +1946,13 @@ object frmTracker: TfrmTracker
1946 ParentFont = False 1946 ParentFont = False
1947 end 1947 end
1948 object InstrumentComboBox: TComboBox 1948 object InstrumentComboBox: TComboBox
1949 Left = 1107 1949 Left = 715
1950 Height = 38 1950 Height = 23
1951 Hint = 'The selected instrument for new notes' 1951 Hint = 'The selected instrument for new notes'
1952 Top = 0 1952 Top = 0
1953 Width = 374 1953 Width = 214
1954 DropDownCount = 999 1954 DropDownCount = 999
1955 ItemHeight = 30 1955 ItemHeight = 15
1956 ItemIndex = 0 1956 ItemIndex = 0
1957 Items.Strings = ( 1957 Items.Strings = (
1958 '(no instrument)' 1958 '(no instrument)'
@@ -1964,10 +1964,10 @@ object frmTracker: TfrmTracker
1964 Text = '(no instrument)' 1964 Text = '(no instrument)'
1965 end 1965 end
1966 object Label24: TLabel 1966 object Label24: TLabel
1967 Left = 1481 1967 Left = 929
1968 Height = 39 1968 Height = 22
1969 Top = 0 1969 Top = 0
1970 Width = 61 1970 Width = 35
1971 AutoSize = False 1971 AutoSize = False
1972 Caption = ' Step ' 1972 Caption = ' Step '
1973 Layout = tlCenter 1973 Layout = tlCenter
@@ -1975,23 +1975,23 @@ object frmTracker: TfrmTracker
1975 ParentFont = False 1975 ParentFont = False
1976 end 1976 end
1977 object StepSpinEdit: TSpinEdit 1977 object StepSpinEdit: TSpinEdit
1978 Left = 1542 1978 Left = 964
1979 Height = 38 1979 Height = 23
1980 Hint = 'How many rows to step down after entering a new note' 1980 Hint = 'How many rows to step down after entering a new note'
1981 Top = 0 1981 Top = 0
1982 Width = 88 1982 Width = 50
1983 MaxValue = 63 1983 MaxValue = 63
1984 OnChange = StepSpinEditChange 1984 OnChange = StepSpinEditChange
1985 ParentFont = False 1985 ParentFont = False
1986 TabOrder = 2 1986 TabOrder = 2
1987 end 1987 end
1988 object ToolButton3: TToolButton 1988 object ToolButton3: TToolButton
1989 Left = 129 1989 Left = 85
1990 Top = 0 1990 Top = 0
1991 Action = PlayStartAction 1991 Action = PlayStartAction
1992 end 1992 end
1993 object ExportGBSButton: TToolButton 1993 object ExportGBSButton: TToolButton
1994 Left = 424 1994 Left = 288
1995 Hint = 'Export the song as a GBS soundtrack' 1995 Hint = 'Export the song as a GBS soundtrack'
1996 Top = 0 1996 Top = 0
1997 Caption = 'Export GBS' 1997 Caption = 'Export GBS'
@@ -1999,14 +1999,14 @@ object frmTracker: TfrmTracker
1999 OnClick = ExportGBSButtonClick 1999 OnClick = ExportGBSButtonClick
2000 end 2000 end
2001 object ToolButton5: TToolButton 2001 object ToolButton5: TToolButton
2002 Left = 697 2002 Left = 471
2003 Height = 39 2003 Height = 22
2004 Top = 0 2004 Top = 0
2005 Caption = 'ToolButton5' 2005 Caption = 'ToolButton5'
2006 Style = tbsDivider 2006 Style = tbsDivider
2007 end 2007 end
2008 object ToolButton10: TToolButton 2008 object ToolButton10: TToolButton
2009 Left = 552 2009 Left = 375
2010 Hint = 'Export the song as WAV or MP3' 2010 Hint = 'Export the song as WAV or MP3'
2011 Top = 0 2011 Top = 0
2012 Caption = 'Render Song' 2012 Caption = 'Render Song'
@@ -2014,14 +2014,14 @@ object frmTracker: TfrmTracker
2014 OnClick = ToolButton10Click 2014 OnClick = ToolButton10Click
2015 end 2015 end
2016 object ToolButton11: TToolButton 2016 object ToolButton11: TToolButton
2017 Left = 298 2017 Left = 204
2018 Height = 39 2018 Height = 22
2019 Top = 0 2019 Top = 0
2020 Caption = 'ToolButton11' 2020 Caption = 'ToolButton11'
2021 Style = tbsDivider 2021 Style = tbsDivider
2022 end 2022 end
2023 object LoopSongToolButton: TToolButton 2023 object LoopSongToolButton: TToolButton
2024 Left = 258 2024 Left = 175
2025 Top = 0 2025 Top = 0
2026 ImageIndex = 87 2026 ImageIndex = 87
2027 OnClick = LoopSongToolButtonClick 2027 OnClick = LoopSongToolButtonClick
@@ -2030,8 +2030,8 @@ object frmTracker: TfrmTracker
2030 end 2030 end
2031 object MainMenu1: TMainMenu 2031 object MainMenu1: TMainMenu
2032 Images = ImageList1 2032 Images = ImageList1
2033 Left = 70 2033 Left = 40
2034 Top = 56 2034 Top = 32
2035 object MenuItem1: TMenuItem 2035 object MenuItem1: TMenuItem
2036 Caption = 'File' 2036 Caption = 'File'
2037 object MenuItem33: TMenuItem 2037 object MenuItem33: TMenuItem
@@ -2197,8 +2197,8 @@ object frmTracker: TfrmTracker
2197 end 2197 end
2198 object MenuBarActionList: TActionList 2198 object MenuBarActionList: TActionList
2199 Images = ImageList1 2199 Images = ImageList1
2200 Left = 182 2200 Left = 104
2201 Top = 126 2201 Top = 72
2202 object FileOpen1: TFileOpen 2202 object FileOpen1: TFileOpen
2203 Category = 'File' 2203 Category = 'File'
2204 Caption = '&Open ...' 2204 Caption = '&Open ...'
@@ -2308,8 +2308,8 @@ object frmTracker: TfrmTracker
2308 end 2308 end
2309 end 2309 end
2310 object ImageList1: TImageList 2310 object ImageList1: TImageList
2311 Left = 266 2311 Left = 152
2312 Top = 56 2312 Top = 32
2313 Bitmap = { 2313 Bitmap = {
2314 4C7A5C0000001000000010000000132900000000000078DAED5D077C1545FE9F 2314 4C7A5C0000001000000010000000132900000000000078DAED5D077C1545FE9F
2315 24A89CA2A814B1DC5FEE3C3D15C1029E200A51BA078228081A44AAC22145448A 2315 24A89CA2A814B1DC5FEE3C3D15C1029E200A51BA078228081A44AAC22145448A
@@ -2645,17 +2645,17 @@ object frmTracker: TfrmTracker
2645 end 2645 end
2646 object OpenDialog1: TOpenDialog 2646 object OpenDialog1: TOpenDialog
2647 Filter = 'hUGETracker Instruments|*.ugi' 2647 Filter = 'hUGETracker Instruments|*.ugi'
2648 Left = 140 2648 Left = 80
2649 Top = 98 2649 Top = 56
2650 end 2650 end
2651 object InstrumentSaveDialog: TSaveDialog 2651 object InstrumentSaveDialog: TSaveDialog
2652 Filter = 'hUGETracker Instruments|*.ugi' 2652 Filter = 'hUGETracker Instruments|*.ugi'
2653 Left = 140 2653 Left = 80
2654 Top = 98 2654 Top = 56
2655 end 2655 end
2656 object OrderEditPopup: TPopupMenu 2656 object OrderEditPopup: TPopupMenu
2657 Left = 224 2657 Left = 128
2658 Top = 70 2658 Top = 40
2659 object MenuItem17: TMenuItem 2659 object MenuItem17: TMenuItem
2660 Caption = 'Insert new row' 2660 Caption = 'Insert new row'
2661 Hint = 'Insert a new row filled with brand new patterns' 2661 Hint = 'Insert a new row filled with brand new patterns'
@@ -2686,8 +2686,8 @@ object frmTracker: TfrmTracker
2686 object ImageList2: TImageList 2686 object ImageList2: TImageList
2687 Height = 32 2687 Height = 32
2688 Width = 32 2688 Width = 32
2689 Left = 84 2689 Left = 48
2690 Top = 151 2690 Top = 86
2691 Bitmap = { 2691 Bitmap = {
2692 4C7A020000002000000020000000400200000000000078DAED98818EC3200886 2692 4C7A020000002000000020000000400200000000000078DAED98818EC3200886
2693 7DF4BED9F666DE6CA54504048BBDE572246659B7F503A4C8BF94662CE77EAD34 2693 7DF4BED9F666DE6CA54504048BBDE572246659B7F503A4C8BF94662CE77EAD34
@@ -2714,33 +2714,33 @@ object frmTracker: TfrmTracker
2714 Enabled = False 2714 Enabled = False
2715 Interval = 200 2715 Interval = 200
2716 OnTimer = OscilloscopeUpdateTimerTimer 2716 OnTimer = OscilloscopeUpdateTimerTimer
2717 Left = 154 2717 Left = 88
2718 Top = 84 2718 Top = 48
2719 end 2719 end
2720 object GBSSaveDialog: TSaveDialog 2720 object GBSSaveDialog: TSaveDialog
2721 Filter = 'Gameboy Soundtrack|*.gbs' 2721 Filter = 'Gameboy Soundtrack|*.gbs'
2722 Left = 504 2722 Left = 288
2723 Top = 42 2723 Top = 24
2724 end 2724 end
2725 object WaveSaveDialog: TSaveDialog 2725 object WaveSaveDialog: TSaveDialog
2726 Filter = 'hUGETracker Waves|*.ugw' 2726 Filter = 'hUGETracker Waves|*.ugw'
2727 Left = 644 2727 Left = 368
2728 Top = 42 2728 Top = 24
2729 end 2729 end
2730 object GBSaveDialog: TSaveDialog 2730 object GBSaveDialog: TSaveDialog
2731 Filter = 'Gameboy ROM|*.gb' 2731 Filter = 'Gameboy ROM|*.gb'
2732 Left = 574 2732 Left = 328
2733 Top = 42 2733 Top = 24
2734 end 2734 end
2735 object NoteHaltTimer: TTimer 2735 object NoteHaltTimer: TTimer
2736 Enabled = False 2736 Enabled = False
2737 OnTimer = NoteHaltTimerTimer 2737 OnTimer = NoteHaltTimerTimer
2738 Left = 140 2738 Left = 80
2739 Top = 151 2739 Top = 86
2740 end 2740 end
2741 object TrackerGridPopup: TPopupMenu 2741 object TrackerGridPopup: TPopupMenu
2742 Left = 168 2742 Left = 96
2743 Top = 42 2743 Top = 24
2744 object TrackerPopupEditEffect: TMenuItem 2744 object TrackerPopupEditEffect: TMenuItem
2745 Caption = 'Edit effect ...' 2745 Caption = 'Edit effect ...'
2746 OnClick = TrackerPopupEditEffectClick 2746 OnClick = TrackerPopupEditEffectClick
@@ -2892,8 +2892,8 @@ object frmTracker: TfrmTracker
2892 object WavSaveDialog: TSaveDialog 2892 object WavSaveDialog: TSaveDialog
2893 DefaultExt = '.wav' 2893 DefaultExt = '.wav'
2894 Filter = 'Wave files|*.wav' 2894 Filter = 'Wave files|*.wav'
2895 Left = 714 2895 Left = 408
2896 Top = 42 2896 Top = 24
2897 end 2897 end
2898 object SynAnySyn1: TSynAnySyn 2898 object SynAnySyn1: TSynAnySyn
2899 Enabled = False 2899 Enabled = False
@@ -3017,18 +3017,18 @@ object frmTracker: TfrmTracker
3017 Entity = False 3017 Entity = False
3018 DollarVariables = False 3018 DollarVariables = False
3019 ActiveDot = False 3019 ActiveDot = False
3020 Left = 14 3020 Left = 8
3021 Top = 151 3021 Top = 86
3022 end 3022 end
3023 object MODOpenDialog: TOpenDialog 3023 object MODOpenDialog: TOpenDialog
3024 DefaultExt = '.mod' 3024 DefaultExt = '.mod'
3025 Filter = 'GBT Player MOD files|*.mod' 3025 Filter = 'GBT Player MOD files|*.mod'
3026 Left = 826 3026 Left = 472
3027 Top = 42 3027 Top = 24
3028 end 3028 end
3029 object WaveEditPopup: TPopupMenu 3029 object WaveEditPopup: TPopupMenu
3030 Left = 14 3030 Left = 8
3031 Top = 56 3031 Top = 32
3032 object MenuItem37: TMenuItem 3032 object MenuItem37: TMenuItem
3033 Caption = 'Copy' 3033 Caption = 'Copy'
3034 OnClick = MenuItem37Click 3034 OnClick = MenuItem37Click
@@ -3040,8 +3040,8 @@ object frmTracker: TfrmTracker
3040 end 3040 end
3041 object ShortcutsActionList: TActionList 3041 object ShortcutsActionList: TActionList
3042 Images = ImageList1 3042 Images = ImageList1
3043 Left = 364 3043 Left = 208
3044 Top = 56 3044 Top = 32
3045 object PlayStartAction: TAction 3045 object PlayStartAction: TAction
3046 DisableIfNoHandler = False 3046 DisableIfNoHandler = False
3047 Hint = 'Play song from start' 3047 Hint = 'Play song from start'
@@ -3166,23 +3166,23 @@ object frmTracker: TfrmTracker
3166 end 3166 end
3167 object GBDKCSaveDialog: TSaveDialog 3167 object GBDKCSaveDialog: TSaveDialog
3168 Filter = 'GBDK C File|*.c' 3168 Filter = 'GBDK C File|*.c'
3169 Left = 434 3169 Left = 248
3170 Top = 42 3170 Top = 24
3171 end 3171 end
3172 object RGBDSAsmSaveDialog: TSaveDialog 3172 object RGBDSAsmSaveDialog: TSaveDialog
3173 Filter = 'RGBDS Assembly|*.asm' 3173 Filter = 'RGBDS Assembly|*.asm'
3174 Left = 476 3174 Left = 272
3175 Top = 84 3175 Top = 48
3176 end 3176 end
3177 object VGMSaveDialog: TSaveDialog 3177 object VGMSaveDialog: TSaveDialog
3178 Filter = 'VGM Rip|*.vgm' 3178 Filter = 'VGM Rip|*.vgm'
3179 Left = 623 3179 Left = 356
3180 Top = 91 3180 Top = 52
3181 end 3181 end
3182 object TBMOpenDialog: TOpenDialog 3182 object TBMOpenDialog: TOpenDialog
3183 DefaultExt = '.tbm' 3183 DefaultExt = '.tbm'
3184 Filter = 'TrackerBoy TBM files|*.tbm' 3184 Filter = 'TrackerBoy TBM files|*.tbm'
3185 Left = 826 3185 Left = 472
3186 Top = 112 3186 Top = 64
3187 end 3187 end
3188 end 3188 end
Renamedtracker.pas → src/tracker.pas +1−2
@@ -1425,7 +1425,6 @@ var
1425 SampleSongs: TStringList; 1425 SampleSongs: TStringList;
1426 S: String; 1426 S: String;
1427 MenuItem: TMenuItem; 1427 MenuItem: TMenuItem;
1428 I: Integer;
1429 begin 1428 begin
1430 if (not FileExists('PixeliteTTF.ttf')) 1429 if (not FileExists('PixeliteTTF.ttf'))
1431 or (not FileExists('halt.gb')) 1430 or (not FileExists('halt.gb'))
@@ -1436,7 +1435,7 @@ begin
1436 'the tracker. This likely means that you haven''t extracted the program ' + 1435 'the tracker. This likely means that you haven''t extracted the program ' +
1437 'before running it. Please do so, and relaunch. Thanks!', 1436 'before running it. Please do so, and relaunch. Thanks!',
1438 mtError, [mbOk], 0); 1437 mtError, [mbOk], 0);
1439 Application.Terminate; 1438 Halt;
1440 end; 1439 end;
1441 1440
1442 {$ifdef PRODUCTION} 1441 {$ifdef PRODUCTION}
Renamedtrackergrid.pas → src/trackergrid.pas +0−0
File metadata changed without textual changes.
Renameduge2source/uge2source.lpi → src/uge2source/uge2source.lpi +0−0
File metadata changed without textual changes.
Renameduge2source/uge2source.lpr → src/uge2source/uge2source.lpr +0−0
File metadata changed without textual changes.
Renamedutils.pas → src/utils.pas +1−1
@@ -134,7 +134,7 @@ var
134 begin 134 begin
135 for I := 0 to 31 do begin 135 for I := 0 to 31 do begin
136 with Pat[I] do begin 136 with Pat[I] do begin
137 DN(Note, IfThen(I = 31, 1, Volume), (EffectCode shl 8) or EffectParams.Value, B1, B2, B3); 137 DN(Note, IfThen((Volume = 0) and (I = 31), 1, Volume), (EffectCode shl 8) or EffectParams.Value, B1, B2, B3);
138 Result[(I*3) + 0] := B1; 138 Result[(I*3) + 0] := B1;
139 Result[(I*3) + 1] := B2; 139 Result[(I*3) + 1] := B2;
140 Result[(I*3) + 2] := B3; 140 Result[(I*3) + 2] := B3;
RenamedGlobal/vars.pas → src/vars.pas +0−0
File metadata changed without textual changes.
Renamedvgm.pas → src/vgm.pas +0−0
File metadata changed without textual changes.
RenamedCPU/z80cpu.pas → src/z80cpu.pas +214−4
@@ -11,14 +11,12 @@ unit Z80CPU;
11 11
12 interface 12 interface
13 13
14 {$include tables.inc}
15
16 var 14 var
17 z80: array[0..511] of function: byte; 15 z80: array[0..511] of function: byte;
18 16
19 implementation 17 implementation
20 18
21 uses vars, machine; 19 uses vars, machine, cpu_tables;
22 20
23 // temporary variables 21 // temporary variables
24 var 22 var
@@ -28,7 +26,219 @@ var
28 w1, w2: word; 26 w1, w2: word;
29 27
30 {$push}{$R-} 28 {$push}{$R-}
31 {$include procs.inc} 29 procedure add16(Var first:Word;second:Word);
30 begin
31 qtemp.Q:=longint(first)+longint(second);
32 first:=qtemp.w1;
33 af.l:=(af.l and $C4) OR (qtemp.b2 and $38);
34 if qtemp.b3=0 then af.l:=af.l and 254 (* reset Cf *) else
35 af.l:=af.l or 1;(* set Cf *)
36 end;
37
38 procedure adc16(first,second:Word);
39 begin
40 qtemp.Q:=longint(first)+longint(second)+(af.l and 1);
41 af.l:=(qtemp.b2 and $B8);
42 if qtemp.b3=0 then af.l:=af.l and 254 (* reset Cf *) else af.l:=af.l or 1;(* set Cf *)
43 if qtemp.w1>0 then af.l:=af.l and 191 (* reset Zf *) else af.l:=af.l or 64;(* set Zf *)
44 if ((first XOR qtemp.w1) SHR 15>0) and
45 ((first XOR second) SHR 15=0) then af.l:=af.l or 4 (* set Pf *) else
46 af.l:=af.l and 251;(* reset Pf *)
47 hl.W:=qtemp.w1;
48 end;
49
50 procedure sbc16(first,second:Word);
51 begin
52 qtemp.Q:=longint(first)-longint(second)-(af.l and 1);
53 af.l:=(qtemp.b2 and $B8) OR 2;
54 if qtemp.b4=0 then af.l:=af.l and 254 (* reset Cf *) else af.l:=af.l or 1;(* set Cf *)
55 if qtemp.w1>0 then af.l:=af.l and 191 (* reset Zf *) else af.l:=af.l or 64;(* set Zf *)
56 if ((first XOR qtemp.w1) SHR 15>0) and
57 ((second XOR qtemp.w1) SHR 15=0) then af.l:=af.l or 4 (* set Pf *) else
58 af.l:=af.l and 251 ;(* reset Pf *)
59 hl.W:=qtemp.w1;
60 end;
61
62 procedure add8(Lo,Pls:Byte);
63 begin
64 ptemp.W:=Lo+Pls;
65 if ptemp.h=0 then
66 begin
67 ptemp.h:=ptemp.l;
68 ptemp.l:=ptemp.l and 254; (* reset Cf *)
69 end
70 else
71 begin
72 ptemp.h:=ptemp.l;
73 ptemp.l:=ptemp.l or 1;(* set Cf *)
74 end;
75 ptemp.l:=ptemp.l and 253;(* reset Nf *)
76 if ptemp.h>0 then
77 ptemp.l:=ptemp.l and 191 (* reset Zf *)
78 else
79 ptemp.l:=ptemp.l or 64;(* set Zf *)
80 if ((Lo XOR Pls XOR ptemp.h) and 16>0) then
81 ptemp.l:=ptemp.l or 16 (* set Hf *)
82 else
83 ptemp.l:=ptemp.l and 239;(* reset Hf *)
84 if ((Lo XOR ptemp.h) SHR 7>0) and ((Lo XOR Pls) SHR 7=0) then
85 ptemp.l:=ptemp.l or 4 (* set Pf *)
86 else
87 ptemp.l:=ptemp.l and 251;(* reset Pf *)
88 af.W:=ptemp.W;
89 end;
90
91 procedure sub8(Lo,Mns:Byte);
92 begin
93 ptemp.W:=Lo-Mns;
94 if ptemp.h=0 then
95 begin
96 ptemp.h:=ptemp.l;
97 ptemp.l:=ptemp.l and 254; (* reset Cf *)
98 end
99 else
100 begin
101 ptemp.h:=ptemp.l;
102 ptemp.l:=ptemp.l or 1;(* set Cf *)
103 end;
104 ptemp.l:=ptemp.l or 2; (* set Nf *)
105 if ptemp.h>0 then
106 ptemp.l:=ptemp.l and 191 (* reset Zf *)
107 else
108 ptemp.l:=ptemp.l or 64;(* set Zf *)
109 if (Lo XOR Mns XOR ptemp.h) and 16>0 then
110 ptemp.l:=ptemp.l or 16 (* set Hf *)
111 else
112 ptemp.l:=ptemp.l and 239;(* reset Hf *)
113 if ((Lo XOR ptemp.h) SHR 7>0) and ((Mns XOR ptemp.h) SHR 7=0)
114 then ptemp.l:=ptemp.l or 4 (* set Pf *)
115 else ptemp.l:=ptemp.l and 251;(* reset Pf *)
116 af.W:=ptemp.W;
117 end;
118
119 procedure adc8(Lo,Pls:Byte);
120 begin
121 ptemp.W:=Lo+Pls+(af.l and 1);
122 if ptemp.h=0 then
123 begin
124 ptemp.h:=ptemp.l;
125 ptemp.l:=ptemp.l and 254; (* reset Cf *)
126 end
127 else
128 begin
129 ptemp.h:=ptemp.l;
130 ptemp.l:=ptemp.l or 1;(* set Cf *)
131 end;
132 ptemp.l:=ptemp.l and 253;(* reset Nf *)
133 if ptemp.h>0 then
134 ptemp.l:=ptemp.l and 191(* reset Zf *)
135 else
136 ptemp.l:=ptemp.l or 64;(* set Zf *)
137 if (Lo XOR Pls XOR ptemp.h) and 16>0 then
138 ptemp.l:=ptemp.l or 16 (* set Hf *)
139 else
140 ptemp.l:=ptemp.l and 239;(* reset Hf *)
141 if ((Lo XOR ptemp.h) SHR 7>0) and ((Lo XOR Pls) SHR 7=0) then
142 ptemp.l:=ptemp.l or 4 (* set Pf *)
143 else ptemp.l:=ptemp.l and 251;(* reset Pf *)
144 af.W:=ptemp.W;
145 end;
146
147 procedure sbc8(Lo,Mns:Byte);
148 begin
149 ptemp.W:=Lo-Mns-(af.l and 1);
150 if ptemp.h=0 then
151 begin
152 ptemp.h:=ptemp.l;
153 ptemp.l:=ptemp.l and 254; (* reset Cf *)
154 end
155 else
156 begin
157 ptemp.h:=ptemp.l;
158 ptemp.l:=ptemp.l or 1;(* set Cf *)
159 end;
160 ptemp.l:=ptemp.l or 2; (* set Nf *)
161 if ptemp.h>0 then
162 ptemp.l:=ptemp.l and 191 (* reset Zf *)
163 else
164 ptemp.l:=ptemp.l or 64;(* set Zf *)
165 if (Lo XOR Mns XOR ptemp.h) and 16>0 then
166 ptemp.l:=ptemp.l or 16 (* set Hf *)
167 else
168 ptemp.l:=ptemp.l and 239;(* reset Hf *)
169 if ((Lo XOR ptemp.h) SHR 7>0) and ((Mns XOR ptemp.h) SHR 7=0)
170 then
171 ptemp.l:=ptemp.l or 4 (* set Pf *)
172 else ptemp.l:=ptemp.l and 251;(* reset Pf *)
173 af.W:=ptemp.W;
174 end;
175
176 procedure cp_sub8(Lo,Mns:Byte);
177 begin
178 ptemp.W:=Lo-Mns;
179 af.l:=(Mns and 40) OR (ptemp.l and 215) OR 2;
180 if ptemp.l>0 then af.l:=af.l and 191 (* reset Zf *) else af.l:=af.l or 64;(* set Zf *)
181 if ptemp.h=0 then af.l:=af.l and 254 (* reset Cf *) else af.l:=af.l or 1;(* set Cf *)
182 if (Lo XOR Mns XOR ptemp.l) and 16>0 then
183 af.l:=af.l or 16 (* set Hf *)
184 else
185 af.l:=af.l and 239;(* reset Hf *)
186
187 if ((Lo XOR ptemp.l) SHR 7>0) and ((Mns XOR ptemp.l) SHR 7=0) then
188 af.l:=af.l or 4 (* set Pf *) else
189 af.l:=af.l and 251 ;(* reset Pf *)
190 end;
191
192 procedure swap(var bval: Byte);
193 var
194 h: Byte;
195 begin
196 h := hi(bval);
197 bval := (bval shl 4) or h;
198
199 if bval = 0 then
200 af.l := 64
201 else
202 af.l := 0;
203 end;
204
205 procedure anda(bval:Byte);
206 begin
207 af.h:=af.h and bval;
208 af.l:=16 or (af.h and 236) or parity[af.h];
209 if af.h=0 then af.l:=af.l or 64 else af.l:=af.l and 191;
210 end;
211
212 procedure ora(bval:byte);
213 begin
214 af.h:=af.h or bval;
215 af.l:=(af.h and 236) or parity[af.h];
216 if af.h=0 then af.l:=af.l or 64 else af.l:=af.l and 191;
217 end;
218
219 procedure xora(bval:byte);
220 begin
221 af.h:=af.h xor bval;
222 af.l:=(af.h and 236) or parity[af.h];
223 if af.h=0 then af.l:=af.l or 64 else af.l:=af.l and 191;
224 end;
225
226 procedure copy_b53(btemp:Word);
227 Begin
228 af.l:=(af.l and 215) or (btemp and 40);
229 end;
230
231 procedure pop(var wpval:Word);
232 Begin
233 wpval:=wordpeek(sp_.W);
234 inc(sp_.W,2);
235 end;
236
237 procedure push(wpval:Word);
238 Begin
239 dec(sp_.W,2);
240 wordpoke(sp_.W,wpval);
241 end;
32 242
33 function nop: byte; 243 function nop: byte;
34 begin 244 begin