Commit f543a20

Nick Faro committed on
Codegen subpatterns
commit f543a20b825b7ca8ccd59c9647e0bb89366571e5 parent 9173625
5 changed files +38−12
Modifiedcodegen.pas +23−8
@@ -269,23 +269,22 @@ begin
269 if Instruments[I].CounterStep = swSeven then 269 if Instruments[I].CounterStep = swSeven then
270 HighMask := HighMask or %10000000; 270 HighMask := HighMask or %10000000;
271 SL.Add(IntToStr(HighMask)); 271 SL.Add(IntToStr(HighMask));
272
273 for J := Low(TNoiseMacro) to High(TNoiseMacro) do
274 SL.Add(IntToStr(0));
275 end 272 end
276 else begin 273 else begin
277 for J := Low(AsmInstrument) to High(AsmInstrument) do 274 for J := Low(AsmInstrument) to High(AsmInstrument) do
278 SL.Add(IntToStr(AsmInstrument[J])); 275 SL.Add(IntToStr(AsmInstrument[J]));
279 SL.Add('0');
280 SL.Add('0');
281 SL.Add('0');
282 SL.Add('0');
283 end; 276 end;
284 277
285 WriteStr(TypePrefix, Instruments[I].Type_); 278 WriteStr(TypePrefix, Instruments[I].Type_);
286 ResultSL.Add(Format('%s%s: db %s', [TypePrefix, 'inst' + IntToStr(I), 279 ResultSL.Add(Format('%s%s:'+LineEnding+'db %s', [TypePrefix, 'inst' + IntToStr(I),
287 SL.DelimitedText])); 280 SL.DelimitedText]));
288 SL.Free; 281 SL.Free;
282
283 if Instruments[I].SubpatternEnabled then
284 ResultSL.Add(Format('dw %sSP%d', [TypePrefix, I]))
285 else
286 ResultSL.Add('dw 0');
287 ResultSL.Add('ds '+IfThen(Instruments[I].Type_ = itNoise, '4', '2'));
289 end; 288 end;
290 289
291 Result := ResultSL.Text; 290 Result := ResultSL.Text;
@@ -452,6 +451,7 @@ procedure AssembleSong(Song: TSong; Filename: string; Mode: TExportMode);
452 var 451 var
453 OutFile: Text; 452 OutFile: Text;
454 I: integer; 453 I: integer;
454 TypePrefix: String;
455 Proc: TProcess; 455 Proc: TProcess;
456 FilePath: string; 456 FilePath: string;
457 RenameSucceeded: Boolean; 457 RenameSucceeded: Boolean;
@@ -555,6 +555,21 @@ begin
555 555
556 CloseFile(OutFile); 556 CloseFile(OutFile);
557 557
558 AssignFile(OutFile, 'render/subpattern.htt');
559 Rewrite(OutFile);
560
561 // TODO: Are keys and data defined to be aligned? Seems like they are but
562 // should probably find out if that's just an implementation detail...
563 for I := Low(Song.Instruments.All) to High(Song.Instruments.All) do
564 with Song.Instruments.All[I] do begin
565 if SubpatternEnabled then begin
566 WriteStr(TypePrefix, Type_);
567 Write(OutFile, RenderPattern(TypePrefix+'SP' + IntToStr(I), Subpattern));
568 end;
569 end;
570
571 CloseFile(OutFile);
572
558 // Build the file 573 // Build the file
559 Proc := TProcess.Create(nil); 574 Proc := TProcess.Create(nil);
560 Proc.Options := Proc.Options + [poWaitOnExit, poUsePipes, poStdErrToOutput, poNoConsole]; 575 Proc.Options := Proc.Options + [poWaitOnExit, poUsePipes, poStdErrToOutput, poNoConsole];
Modifiedhugedatatypes.pas +1−0
@@ -168,6 +168,7 @@ type
168 // itNoise 168 // itNoise
169 // NR42 169 // NR42
170 CounterStep: TStepWidth; 170 CounterStep: TStepWidth;
171 SubpatternEnabled: Boolean;
171 Subpattern: TPattern; 172 Subpattern: TPattern;
172 end; 173 end;
173 174
Modifiedsong.pas +2−0
@@ -767,8 +767,10 @@ begin
767 SV6.Instruments.All[I].OutputLevel := S.Instruments.All[I].OutputLevel; 767 SV6.Instruments.All[I].OutputLevel := S.Instruments.All[I].OutputLevel;
768 SV6.Instruments.All[I].Waveform := S.Instruments.All[I].Waveform; 768 SV6.Instruments.All[I].Waveform := S.Instruments.All[I].Waveform;
769 SV6.Instruments.All[I].CounterStep := S.Instruments.All[I].CounterStep; 769 SV6.Instruments.All[I].CounterStep := S.Instruments.All[I].CounterStep;
770 SV6.Instruments.All[I].SubpatternEnabled := False;
770 BlankPattern(@SV6.Instruments.All[I].Subpattern); 771 BlankPattern(@SV6.Instruments.All[I].Subpattern);
771 end; 772 end;
773 // TODO: Port over noise macro
772 774
773 SV6.Waves := S.Waves; 775 SV6.Waves := S.Waves;
774 776
Modifiedtracker.lfm +4−3
@@ -61,10 +61,10 @@ object frmTracker: TfrmTracker
61 Height = 725 61 Height = 725
62 Top = 0 62 Top = 0
63 Width = 1120 63 Width = 1120
64 ActivePage = PatternTabSheet 64 ActivePage = InstrumentTabSheet
65 Align = alClient 65 Align = alClient
66 ParentFont = False 66 ParentFont = False
67 TabIndex = 1 67 TabIndex = 2
68 TabOrder = 0 68 TabOrder = 0
69 object GeneralTabSheet: TTabSheet 69 object GeneralTabSheet: TTabSheet
70 Caption = 'General' 70 Caption = 'General'
@@ -556,12 +556,13 @@ object frmTracker: TfrmTracker
556 ParentFont = False 556 ParentFont = False
557 TabOrder = 12 557 TabOrder = 12
558 end 558 end
559 object CheckBox1: TCheckBox 559 object EnableSubpatternCheckbox: TCheckBox
560 Left = 12 560 Left = 12
561 Height = 19 561 Height = 19
562 Top = 184 562 Top = 184
563 Width = 115 563 Width = 115
564 Caption = 'Enable subpattern' 564 Caption = 'Enable subpattern'
565 OnChange = EnableSubpatternCheckboxChange
565 TabOrder = 13 566 TabOrder = 13
566 end 567 end
567 end 568 end
Modifiedtracker.pas +8−1
@@ -25,7 +25,7 @@ type
25 { TfrmTracker } 25 { TfrmTracker }
26 26
27 TfrmTracker = class(TForm) 27 TfrmTracker = class(TForm)
28 CheckBox1: TCheckBox; 28 EnableSubpatternCheckbox: TCheckBox;
29 DecreaseOctaveAction: TAction; 29 DecreaseOctaveAction: TAction;
30 GroupBox1: TGroupBox; 30 GroupBox1: TGroupBox;
31 RowNumberStringGrid1: TStringGrid; 31 RowNumberStringGrid1: TStringGrid;
@@ -265,6 +265,7 @@ type
265 TreeView1: TTreeView; 265 TreeView1: TTreeView;
266 TrackerGrid: TTrackerGrid; 266 TrackerGrid: TTrackerGrid;
267 TableGrid: TTableGrid; 267 TableGrid: TTableGrid;
268 procedure EnableSubpatternCheckboxChange(Sender: TObject);
268 procedure FormShow(Sender: TObject); 269 procedure FormShow(Sender: TObject);
269 procedure TestOctaveButtonClick(Sender: TObject); 270 procedure TestOctaveButtonClick(Sender: TObject);
270 procedure DebugButtonClick(Sender: TObject); 271 procedure DebugButtonClick(Sender: TObject);
@@ -1174,6 +1175,7 @@ begin
1174 InstrumentNameEdit.Text := CI^.Name; 1175 InstrumentNameEdit.Text := CI^.Name;
1175 LengthEnabledCheckbox.Checked := CI^.LengthEnabled; 1176 LengthEnabledCheckbox.Checked := CI^.LengthEnabled;
1176 LengthTrackbar.Position := CI^.Length; 1177 LengthTrackbar.Position := CI^.Length;
1178 EnableSubpatternCheckbox.Checked := CI^.SubpatternEnabled;
1177 1179
1178 case CI^.Type_ of 1180 case CI^.Type_ of
1179 itSquare: begin 1181 itSquare: begin
@@ -1930,6 +1932,11 @@ begin
1930 LoadInstrument(itSquare, 1) // Load default pattern for tablegrid 1932 LoadInstrument(itSquare, 1) // Load default pattern for tablegrid
1931 end; 1933 end;
1932 1934
1935 procedure TfrmTracker.EnableSubpatternCheckboxChange(Sender: TObject);
1936 begin
1937 CurrentInstrument^.SubpatternEnabled := EnableSubpatternCheckbox.Checked;
1938 end;
1939
1933 procedure TfrmTracker.DebugButtonClick(Sender: TObject); 1940 procedure TfrmTracker.DebugButtonClick(Sender: TObject);
1934 begin 1941 begin
1935 end; 1942 end;