Commit a000d8b

Nick Faro committed on
WIP towards not relying on working directory
commit a000d8b655b826414f008d5f6bc6744b16cddf73 parent e86202a
10 changed files +88−97
Modifiedsrc/codegen.pas +53−62
@@ -584,8 +584,8 @@ var
584 begin 584 begin
585 Proc.Executable := 'rgbasm'; 585 Proc.Executable := 'rgbasm';
586 Proc.Parameters.Clear; 586 Proc.Parameters.Clear;
587 Proc.Parameters.Add('-i' + 'render'); 587 Proc.Parameters.Add('-i' + ConcatPaths([CacheDir, 'render']));
588 Proc.Parameters.Add('-i' + 'hUGEDriver'); 588 Proc.Parameters.Add('-i' + ConcatPaths([RuntimeDir, 'hUGEDriver']));
589 Proc.Parameters.Add('-o' + OutFile); 589 Proc.Parameters.Add('-o' + OutFile);
590 for Define in Defines do 590 for Define in Defines do
591 // HACK: This just removes all instances of double quotes to avoid a bug 591 // HACK: This just removes all instances of double quotes to avoid a bug
@@ -630,21 +630,21 @@ var
630 begin 630 begin
631 Song := OptimizeSong(Song); 631 Song := OptimizeSong(Song);
632 632
633 if not DirectoryExists('render') then 633 if not DirectoryExists(ConcatPaths([CacheDir, 'render'])) then
634 CreateDir('render'); 634 CreateDir(ConcatPaths([CacheDir, 'render']));
635 635
636 FilePath := Filename; 636 FilePath := Filename;
637 Filename := 'render/' + ExtractFileNameWithoutExt(ExtractFileNameOnly(Filename)); 637 Filename := ConcatPaths([CacheDir, 'render', ExtractFileNameWithoutExt(ExtractFileNameOnly(Filename))]);
638 638
639 WriteHTT('render/wave.htt', RenderWaveforms(Song.Waves)); 639 WriteHTT(ConcatPaths([CacheDir, 'render', 'wave.htt']), RenderWaveforms(Song.Waves));
640 WriteHTT('render/order.htt', RenderOrderTable(Song.OrderMatrix)); 640 WriteHTT(ConcatPaths([CacheDir, 'render', 'order.htt']), RenderOrderTable(Song.OrderMatrix));
641 WriteHTT('render/duty_instrument.htt', RenderInstruments(Song.Instruments.Duty)); 641 WriteHTT(ConcatPaths([CacheDir, 'render', 'duty_instrument.htt']), RenderInstruments(Song.Instruments.Duty));
642 WriteHTT('render/wave_instrument.htt', RenderInstruments(Song.Instruments.Wave)); 642 WriteHTT(ConcatPaths([CacheDir, 'render', 'wave_instrument.htt']), RenderInstruments(Song.Instruments.Wave));
643 WriteHTT('render/noise_instrument.htt', RenderInstruments(Song.Instruments.Noise)); 643 WriteHTT(ConcatPaths([CacheDir, 'render', 'noise_instrument.htt']), RenderInstruments(Song.Instruments.Noise));
644 for I := Low(TRoutineBank) to High(TRoutineBank) do 644 for I := Low(TRoutineBank) to High(TRoutineBank) do
645 WriteHTT('render/routine'+IntToStr(I)+'.htt', Song.Routines[I]); 645 WriteHTT(ConcatPaths([CacheDir, 'render', 'routine'+IntToStr(I)+'.htt']), Song.Routines[I]);
646 646
647 AssignFile(OutFile, 'render/pattern.htt'); 647 AssignFile(OutFile, ConcatPaths([CacheDir, 'render', 'pattern.htt']));
648 Rewrite(OutFile); 648 Rewrite(OutFile);
649 649
650 for I := 0 to Song.Patterns.Count - 1 do 650 for I := 0 to Song.Patterns.Count - 1 do
@@ -654,7 +654,7 @@ begin
654 654
655 CloseFile(OutFile); 655 CloseFile(OutFile);
656 656
657 AssignFile(OutFile, 'render/subpattern.htt'); 657 AssignFile(OutFile, ConcatPaths([CacheDir, 'render', 'subpattern.htt']));
658 Rewrite(OutFile); 658 Rewrite(OutFile);
659 659
660 for I := Low(Song.Instruments.All) to High(Song.Instruments.All) do 660 for I := Low(Song.Instruments.All) to High(Song.Instruments.All) do
@@ -675,64 +675,55 @@ begin
675 // Assemble 675 // Assemble
676 if Mode = emPreview then 676 if Mode = emPreview then
677 begin 677 begin
678 if Assemble(Filename + '_driver.obj', 'hUGEDriver/hUGEDriver.asm', ['PREVIEW_MODE']) <> 0 then 678 if Assemble(ConcatPaths([CacheDir, Filename + '_driver.obj']),
679 Die; 679 ConcatPaths([RuntimeDir, 'hUGEDriver', 'hUGEDriver.asm']),
680 ['PREVIEW_MODE']) <> 0 then Die;
680 end 681 end
681 else 682 else if Assemble(Filename + '_driver.obj', 'hUGEDriver/hUGEDriver.asm', []) <> 0 then Die;
682 begin
683 if Assemble(Filename + '_driver.obj', 'hUGEDriver/hUGEDriver.asm', []) <> 0 then
684 Die;
685 end;
686 683
687 if Assemble(Filename + '_song.obj', 684 if Assemble(ConcatPaths([CacheDir, Filename + '_song.obj']),
688 'hUGEDriver/song.asm', 685 ConcatPaths([RuntimeDir, 'hUGEDriver', 'song.asm']),
689 ['SONG_DESCRIPTOR=song', 'TICKS='+IntToStr(Song.TicksPerRow)]) <> 0 then 686 ['SONG_DESCRIPTOR=song', 'TICKS='+IntToStr(Song.TicksPerRow)]) <> 0 then Die;
690 Die;
691 687
692 if Mode = emGBS then 688 if Mode = emGBS then
693 begin 689 begin
694 if Assemble( 690 if Assemble(ConcatPaths([CacheDir, Filename + '_gbs.obj']),
695 Filename + '_gbs.obj', 'hUGEDriver/gbs.asm', 691 ConcatPaths([RuntimeDir, 'hUGEDriver', 'gbs.asm']),
696 ['SONG_DESCRIPTOR=song', 692 ['SONG_DESCRIPTOR=song',
697 'GBS_TITLE="'+PadRight(LeftStr(Song.Name, 32), 32)+'"', 693 'GBS_TITLE="'+PadRight(LeftStr(Song.Name, 32), 32)+'"',
698 'GBS_AUTHOR="'+PadRight(LeftStr(Song.Artist, 32), 32)+'"', 694 'GBS_AUTHOR="'+PadRight(LeftStr(Song.Artist, 32), 32)+'"',
699 'GBS_COPYRIGHT="'+PadRight(IntToStr(CurrentYear), 32)+'"'] 695 'GBS_COPYRIGHT="'+PadRight(IntToStr(CurrentYear), 32)+'"']) <> 0 then Die;
700 ) <> 0 then Die;
701 end 696 end
702 else 697 else if Assemble(ConcatPaths([CacheDir, Filename + '_player.obj']),
703 begin 698 ConcatPaths([RuntimeDir, 'hUGEDriver', 'player.asm']),
704 if Assemble(Filename + '_player.obj', 699 ['SONG_DESCRIPTOR=song',
705 'hUGEDriver/player.asm', 700 IfThen(Song.TimerEnabled, 'USE_TIMER=1', ''),
706 ['SONG_DESCRIPTOR=song', 701 'TIMER_MODULO='+IntToStr(Song.TimerDivider)]) <> 0 then Die;
707 IfThen(Song.TimerEnabled, 'USE_TIMER=1', ''),
708 'TIMER_MODULO='+IntToStr(Song.TimerDivider)]) <> 0 then
709 Die;
710 end;
711 702
712 // Link 703 // Link
713 if Mode = emGBS then 704 if Mode = emGBS then
714 begin 705 begin
715 if Link(Filename + '.gbs', 706 if Link(ConcatPaths([CacheDir, Filename + '.gbs']),
716 [Filename + '_driver.obj', 707 [ConcatPaths([CacheDir, Filename + '_driver.obj']),
717 Filename + '_song.obj', 708 ConcatPaths([CacheDir, Filename + '_song.obj']),
718 Filename + '_gbs.obj']) <> 0 then Die; 709 ConcatPaths([CacheDir, Filename + '_gbs.obj'])]) <> 0 then Die;
719 end 710 end
720 else 711 else
721 begin 712 begin
722 if Link(Filename + '.gb', 713 if Link(ConcatPaths([CacheDir, Filename + '.gb']),
723 [Filename + '_driver.obj', 714 [ConcatPaths([CacheDir, Filename + '_driver.obj']),
724 Filename + '_song.obj', 715 ConcatPaths([CacheDir, Filename + '_song.obj']),
725 Filename + '_player.obj'], 716 ConcatPaths([CacheDir, Filename + '_player.obj'])],
726 Filename + '.map', 717 ConcatPaths([CacheDir, Filename + '.map']),
727 Filename + '.sym') <> 0 then Die; 718 ConcatPaths([CacheDir, Filename + '.sym'])) <> 0 then Die;
728 end; 719 end;
729 720
730 // Fix 721 // Fix
731 if Mode = emGBS then 722 if Mode = emGBS then
732 RectifyGBSFile(Filename + '.gbs') 723 RectifyGBSFile(ConcatPaths([CacheDir, Filename + '.gbs']))
733 else 724 else
734 begin 725 begin
735 if (Fix(Filename + '.gb') <> 0) then 726 if (Fix(ConcatPaths([CacheDir, Filename + '.gb'])) <> 0) then
736 Die; 727 Die;
737 end; 728 end;
738 729
@@ -743,26 +734,26 @@ begin
743 DeleteFile(FilePath); 734 DeleteFile(FilePath);
744 735
745 case Mode of 736 case Mode of
746 emGBS: RenameSucceeded := RenameFile(Filename + '.gbs', FilePath); 737 emGBS: RenameSucceeded := RenameFile(ConcatPaths([CacheDir, Filename + '.gbs']), FilePath);
747 else RenameSucceeded := RenameFile(Filename + '.gb', FilePath); 738 else RenameSucceeded := RenameFile(ConcatPaths([CacheDir, Filename + '.gb']), FilePath);
748 end; 739 end;
749 740
750 if not RenameSucceeded then 741 if not RenameSucceeded then
751 raise ECodegenRenameException.Create(FilePath); 742 raise ECodegenRenameException.Create(FilePath);
752 743
753 {$ifdef DEVELOPMENT} 744 {$ifdef DEVELOPMENT}
754 RenameFile(Filename + '.sym', FilePath + '.sym'); 745 RenameFile(ConcatPaths([CacheDir, Filename + '.sym']), FilePath + '.sym');
755 RenameFile(Filename + '.map', FilePath + '.map'); 746 RenameFile(ConcatPaths([CacheDir, Filename + '.map']), FilePath + '.map');
756 {$endif} 747 {$endif}
757 {$ifdef PRODUCTION} 748 {$ifdef PRODUCTION}
758 DeleteFile(Filename + '.sym'); 749 DeleteFile(ConcatPaths([CacheDir, Filename + '.sym']));
759 DeleteFile(Filename + '.map'); 750 DeleteFile(ConcatPaths([CacheDir, Filename + '.map']));
760 {$endif} 751 {$endif}
761 752
762 DeleteFile(Filename + '_driver.obj'); 753 DeleteFile(ConcatPaths([CacheDir, Filename + '_driver.obj']));
763 DeleteFile(Filename + '_song.obj'); 754 DeleteFile(ConcatPaths([CacheDir, Filename + '_song.obj']));
764 DeleteFile(Filename + '_player.obj'); 755 DeleteFile(ConcatPaths([CacheDir, Filename + '_player.obj']));
765 DeleteFile(Filename + '_gbs.obj'); 756 DeleteFile(ConcatPaths([CacheDir, Filename + '_gbs.obj']));
766 end; 757 end;
767 finally 758 finally
768 Proc.Free; 759 Proc.Free;
Modifiedsrc/constants.pas +4−1
@@ -144,6 +144,10 @@ var
144 NoteToCodeMap: TNoteToCodeMap; 144 NoteToCodeMap: TNoteToCodeMap;
145 Ch4FreqToNoteCodeMap: TIntToIntMap; 145 Ch4FreqToNoteCodeMap: TIntToIntMap;
146 146
147 ConfDir: String = '.'; // Directory for configuration (options.ini)
148 CacheDir: String = '.'; // Directory for crash backups
149 RuntimeDir: String = '.'; // Directory for runtime files (fonts, halt.gb, hUGEDriver)
150
147 function NoteCodeToString(NoteCode: Integer): String; 151 function NoteCodeToString(NoteCode: Integer): String;
148 152
149 implementation 153 implementation
@@ -605,5 +609,4 @@ begin
605 Ch4FreqToNoteCodeMap.Add(2, 1); 609 Ch4FreqToNoteCodeMap.Add(2, 1);
606 Ch4FreqToNoteCodeMap.Add(2, 0); 610 Ch4FreqToNoteCodeMap.Add(2, 0);
607 {%EndRegion} 611 {%EndRegion}
608
609 end. 612 end.
Modifiedsrc/hUGETracker.lpi +1−1
@@ -136,7 +136,7 @@
136 </Target> 136 </Target>
137 <SearchPaths> 137 <SearchPaths>
138 <IncludeFiles Value="$(ProjOutDir)"/> 138 <IncludeFiles Value="$(ProjOutDir)"/>
139 <Libraries Value="\usr\local\lib"/> 139 <Libraries Value="\usr\local\lib\"/>
140 <OtherUnitFiles Value="Pascal-SDL-2-Headers"/> 140 <OtherUnitFiles Value="Pascal-SDL-2-Headers"/>
141 <UnitOutputDirectory Value="lib\Production\$(TargetCPU)-$(TargetOS)"/> 141 <UnitOutputDirectory Value="lib\Production\$(TargetCPU)-$(TargetOS)"/>
142 </SearchPaths> 142 </SearchPaths>
Modifiedsrc/hUGETracker.lpr +4−7
@@ -19,9 +19,9 @@ uses
19 Interfaces, 19 Interfaces,
20 LazLogger, 20 LazLogger,
21 hUGESettings, 21 hUGESettings,
22 22 Constants,
23 Tracker, EffectEditor, options, about_hugetracker, rendertowave, findreplace, 23 Tracker, EffectEditor, options, about_hugetracker, rendertowave, findreplace,
24 machine, sound, vars, Z80CPU; 24 utils;
25 25
26 {$R *.res} 26 {$R *.res}
27 27
@@ -39,9 +39,6 @@ procedure PangoFcFontMapConfigChanged(FcFontMap: Pointer); cdecl; External 'libp
39 begin 39 begin
40 ReturnNilIfGrowHeapFails := False; 40 ReturnNilIfGrowHeapFails := False;
41 41
42 // Change working directory to the tracker directory
43 ChDir(ExtractFileDir(ParamStr(0)));
44
45 InitializeTrackerSettings; 42 InitializeTrackerSettings;
46 43
47 {$if declared(useHeapTrace)} 44 {$if declared(useHeapTrace)}
@@ -58,13 +55,13 @@ begin
58 55
59 {$ifdef MSWINDOWS} 56 {$ifdef MSWINDOWS}
60 // $10 is FR_PRIVATE which uninstalls the font when the process ends 57 // $10 is FR_PRIVATE which uninstalls the font when the process ends
61 if not AddFontResourceExA(PChar('PixeliteTTF.ttf'), $10) then 58 if not AddFontResourceExA(PChar(ConcatPaths([RuntimeDir, 'PixeliteTTF.ttf'])), $10) then
62 DebugLn('[ERROR] Couldn''t load Pixelite!!!'); 59 DebugLn('[ERROR] Couldn''t load Pixelite!!!');
63 {$endif} 60 {$endif}
64 61
65 {$if defined(LINUX) or defined(FREEBSD) or defined(OPENBSD)} 62 {$if defined(LINUX) or defined(FREEBSD) or defined(OPENBSD)}
66 // https://gitlab.gnome.org/GNOME/gtk/-/issues/3886 63 // https://gitlab.gnome.org/GNOME/gtk/-/issues/3886
67 if FcConfigAppFontAddFile(nil, PChar('PixeliteTTF.ttf')) = 0 then 64 if FcConfigAppFontAddFile(nil, PChar(ConcatPaths([RuntimeDir, 'PixeliteTTF.ttf']))) = 0 then
68 DebugLn('[ERROR] Couldn''t load Pixelite!!!'); 65 DebugLn('[ERROR] Couldn''t load Pixelite!!!');
69 66
70 PangoFcFontMapConfigChanged(PangoCairoFontMapGetDefault); 67 PangoFcFontMapConfigChanged(PangoCairoFontMapGetDefault);
Modifiedsrc/hugesettings.pas +2−2
@@ -5,7 +5,7 @@ unit hUGESettings;
5 interface 5 interface
6 6
7 uses 7 uses
8 Classes, SysUtils, INIFiles; 8 Classes, SysUtils, INIFiles, Constants;
9 9
10 type 10 type
11 11
@@ -99,7 +99,7 @@ end;
99 99
100 constructor TTrackerSettings.Create; 100 constructor TTrackerSettings.Create;
101 begin 101 begin
102 SettingsFile := TINIFile.Create('options.ini'); 102 SettingsFile := TINIFile.Create(ConcatPaths([ConfDir, 'options.ini']));
103 103
104 FPatternEditorFontSize := SettingsFile.ReadInteger('hUGETracker', 'fontsize', 12); 104 FPatternEditorFontSize := SettingsFile.ReadInteger('hUGETracker', 'fontsize', 12);
105 FUseScopes := SettingsFile.ReadBool('hUGETracker', 'ScopesOn', False); 105 FUseScopes := SettingsFile.ReadBool('hUGETracker', 'ScopesOn', False);
Modifiedsrc/options.pas +6−6
@@ -174,8 +174,8 @@ end;
174 174
175 procedure TfrmOptions.FormClose(Sender: TObject; var CloseAction: TCloseAction); 175 procedure TfrmOptions.FormClose(Sender: TObject; var CloseAction: TCloseAction);
176 begin 176 begin
177 KeyMapStringGrid.SaveToFile('custom_keymap.km'); 177 KeyMapStringGrid.SaveToFile(ConcatPaths([ConfDir, 'custom_keymap.km']));
178 SaveColorsToFile('color_scheme.col'); 178 SaveColorsToFile(ConcatPaths([ConfDir, 'color_scheme.col']));
179 179
180 TrackerSettings.PatternEditorFontSize := FontSizeSpinner.Value; 180 TrackerSettings.PatternEditorFontSize := FontSizeSpinner.Value;
181 TrackerSettings.UseScopes := CheckListBox1.Checked[0]; 181 TrackerSettings.UseScopes := CheckListBox1.Checked[0];
@@ -194,11 +194,11 @@ begin
194 OptionsPageControl.TabIndex := 0; 194 OptionsPageControl.TabIndex := 0;
195 KeyMapStringGrid.SaveOptions := soAll; 195 KeyMapStringGrid.SaveOptions := soAll;
196 196
197 if FileExists('custom_keymap.km') then 197 if FileExists(ConcatPaths([ConfDir, 'custom_keymap.km'])) then
198 KeyMapStringGrid.LoadFromFile('custom_keymap.km'); 198 KeyMapStringGrid.LoadFromFile(ConcatPaths([ConfDir, 'custom_keymap.km']));
199 199
200 if FileExists('color_scheme.col') then 200 if FileExists(ConcatPaths([ConfDir, 'color_scheme.col'])) then
201 LoadColorsFromFile('color_scheme.col'); 201 LoadColorsFromFile(ConcatPaths([ConfDir, 'color_scheme.col']));
202 202
203 FontSizeSpinner.Value := TrackerSettings.PatternEditorFontSize; 203 FontSizeSpinner.Value := TrackerSettings.PatternEditorFontSize;
204 CheckListBox1.Checked[0] := TrackerSettings.UseScopes; 204 CheckListBox1.Checked[0] := TrackerSettings.UseScopes;
Modifiedsrc/rendertowave.pas +1−1
@@ -139,7 +139,7 @@ begin
139 enablesound; 139 enablesound;
140 140
141 FCCallback := nil; 141 FCCallback := nil;
142 load('render/preview.gb'); 142 load(ConcatPaths([CacheDir, 'render', 'preview.gb']));
143 143
144 Proc := TProcess.Create(nil); 144 Proc := TProcess.Create(nil);
145 Proc.Executable := 'ffmpeg'; 145 Proc.Executable := 'ffmpeg';
Modifiedsrc/tracker.pas +15−15
@@ -1044,7 +1044,7 @@ end;
1044 1044
1045 function TfrmTracker.RenderPreviewROM: Boolean; 1045 function TfrmTracker.RenderPreviewROM: Boolean;
1046 begin 1046 begin
1047 Result := RenderSongToFile('preview.gb', emPreview); 1047 Result := RenderSongToFile(ConcatPaths([CacheDir, 'preview.gb']), emPreview);
1048 end; 1048 end;
1049 1049
1050 function TfrmTracker.RenderSongToFile(Filename: String; Mode: TExportMode = emNormal): Boolean; 1050 function TfrmTracker.RenderSongToFile(Filename: String; Mode: TExportMode = emNormal): Boolean;
@@ -1089,10 +1089,10 @@ begin
1089 LockPlayback; 1089 LockPlayback;
1090 1090
1091 // Load the new symbol table 1091 // Load the new symbol table
1092 ParseSymFile('render/preview.sym'); 1092 ParseSymFile(ConcatPaths([CacheDir, 'render', 'preview.sym']));
1093 1093
1094 // Start emulation on the rendered preview binary 1094 // Start emulation on the rendered preview binary
1095 GetROMReady('render/preview.gb'); 1095 GetROMReady(ConcatPaths([CacheDir, 'render', 'preview.gb']));
1096 1096
1097 for I := 1 to 4 do 1097 for I := 1 to 4 do
1098 snd[I].ChannelOFF := HeaderControl1.Sections[I].ImageIndex = 0; 1098 snd[I].ChannelOFF := HeaderControl1.Sections[I].ImageIndex = 0;
@@ -1117,8 +1117,8 @@ procedure TfrmTracker.HaltPlayback;
1117 begin 1117 begin
1118 LockPlayback; 1118 LockPlayback;
1119 Application.ProcessMessages; // flush out any FD messages 1119 Application.ProcessMessages; // flush out any FD messages
1120 GetROMReady('halt.gb'); 1120 GetROMReady(ConcatPaths([RuntimeDir, 'halt.gb']));
1121 ParseSymFile('halt.sym'); 1121 ParseSymFile(ConcatPaths([RuntimeDir, 'halt.sym']));
1122 UnlockPlayback; 1122 UnlockPlayback;
1123 1123
1124 Playing := False; 1124 Playing := False;
@@ -1141,7 +1141,7 @@ end;
1141 1141
1142 procedure TfrmTracker.OnSampleSongMenuItemClicked(Sender: TObject); 1142 procedure TfrmTracker.OnSampleSongMenuItemClicked(Sender: TObject);
1143 begin 1143 begin
1144 LoadSong('Sample Songs/'+TMenuItem(Sender).Caption); 1144 LoadSong(ConcatPaths([RuntimeDir, 'Sample Songs', TMenuItem(Sender).Caption]));
1145 end; 1145 end;
1146 1146
1147 procedure TfrmTracker.CreateKeymap; 1147 procedure TfrmTracker.CreateKeymap;
@@ -1154,7 +1154,7 @@ begin
1154 StringGrid := TStringGrid.Create(nil); // UGH! 1154 StringGrid := TStringGrid.Create(nil); // UGH!
1155 try 1155 try
1156 StringGrid.SaveOptions := soAll; 1156 StringGrid.SaveOptions := soAll;
1157 StringGrid.LoadFromFile('custom_keymap.km'); 1157 StringGrid.LoadFromFile(ConcatPaths([ConfDir, 'custom_keymap.km']));
1158 LoadCustomKeybindings(StringGrid); 1158 LoadCustomKeybindings(StringGrid);
1159 finally 1159 finally
1160 StringGrid.Free; 1160 StringGrid.Free;
@@ -1341,7 +1341,7 @@ var
1341 OutName: String; 1341 OutName: String;
1342 begin 1342 begin
1343 CreateGuid(G); 1343 CreateGuid(G);
1344 OutName := 'BACKUP_'+GUIDToString(G)+'.uge'; 1344 OutName := ConcatPaths([CacheDir, 'BACKUP_'+GUIDToString(G)+'.uge']);
1345 1345
1346 stream := TFileStream.Create(OutName, fmCreate); 1346 stream := TFileStream.Create(OutName, fmCreate);
1347 try 1347 try
@@ -1425,10 +1425,10 @@ var
1425 S: String; 1425 S: String;
1426 MenuItem: TMenuItem; 1426 MenuItem: TMenuItem;
1427 begin 1427 begin
1428 if (not FileExists('PixeliteTTF.ttf')) 1428 if (not FileExists(ConcatPaths([RuntimeDir, 'PixeliteTTF.ttf'])))
1429 or (not FileExists('halt.gb')) 1429 or (not FileExists(ConcatPaths([RuntimeDir, 'halt.gb'])))
1430 or (not FileExists('halt.sym')) 1430 or (not FileExists(ConcatPaths([RuntimeDir, 'halt.sym'])))
1431 or (not DirectoryExists('hUGEDriver')) then begin 1431 or (not DirectoryExists(ConcatPaths([RuntimeDir, 'hUGEDriver']))) then begin
1432 MessageDlg('Error', 1432 MessageDlg('Error',
1433 'hUGETracker can''t load a required file which comes with '+ 1433 'hUGETracker can''t load a required file which comes with '+
1434 'the tracker. This likely means that you haven''t extracted the program ' + 1434 'the tracker. This likely means that you haven''t extracted the program ' +
@@ -1507,7 +1507,7 @@ begin
1507 {$endif} 1507 {$endif}
1508 1508
1509 // Load sample songs list 1509 // Load sample songs list
1510 SampleSongs := FindAllFiles('./Sample Songs/', '*.uge', False); 1510 SampleSongs := FindAllFiles(ConcatPaths([RuntimeDir, 'Sample Songs/']), '*.uge', False);
1511 if SampleSongs.Count > 0 then 1511 if SampleSongs.Count > 0 then
1512 for S in SampleSongs do begin 1512 for S in SampleSongs do begin
1513 MenuItem := TMenuItem.Create(MainMenu1); 1513 MenuItem := TMenuItem.Create(MainMenu1);
@@ -2012,7 +2012,7 @@ procedure TfrmTracker.MenuItem10Click(Sender: TObject);
2012 begin 2012 begin
2013 if RenderPreviewROM and VGMSaveDialog.Execute then begin 2013 if RenderPreviewROM and VGMSaveDialog.Execute then begin
2014 StopPlayback; 2014 StopPlayback;
2015 ParseSymFile('render/preview.sym'); 2015 ParseSymFile(ConcatPaths([CacheDir, 'render/preview.sym']));
2016 2016
2017 ExportVGMFile(VGMSaveDialog.FileName, Song.Name, Song.Artist, Song.Comment); 2017 ExportVGMFile(VGMSaveDialog.FileName, Song.Name, Song.Artist, Song.Comment);
2018 2018
@@ -2572,7 +2572,7 @@ procedure TfrmTracker.ToolButton10Click(Sender: TObject);
2572 begin 2572 begin
2573 if RenderPreviewROM then begin 2573 if RenderPreviewROM then begin
2574 StopPlayback; 2574 StopPlayback;
2575 ParseSymFile('render/preview.sym'); 2575 ParseSymFile(ConcatPaths([CacheDir, 'render/preview.sym']));
2576 frmRenderToWave.ShowModal; 2576 frmRenderToWave.ShowModal;
2577 StartPlayback; 2577 StartPlayback;
2578 HaltPlayback; 2578 HaltPlayback;
Modifiedsrc/utils.pas +1−1
@@ -5,7 +5,7 @@ unit Utils;
5 interface 5 interface
6 6
7 uses 7 uses
8 Classes, SysUtils, Song, HugeDatatypes, Constants, gHashSet, fgl, instruments, math; 8 Classes, SysUtils, HugeDatatypes, Constants, math;
9 9
10 type 10 type
11 TSubpatternBytes = array[0..((3*32)-1)] of Byte; 11 TSubpatternBytes = array[0..((3*32)-1)] of Byte;
Modifiedsrc/vgm.pas +1−1
@@ -134,7 +134,7 @@ begin
134 z80_reset; 134 z80_reset;
135 ResetSound; 135 ResetSound;
136 enablesound; 136 enablesound;
137 load('render/preview.gb'); 137 load(ConcatPaths([CacheDir, 'render/preview.gb']));
138 138
139 SetLength(SeenOrders, PeekSymbol(SYM_ORDER_COUNT) div 2); 139 SetLength(SeenOrders, PeekSymbol(SYM_ORDER_COUNT) div 2);
140 StartOfSong := -1; 140 StartOfSong := -1;