@@ -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; |