98 lines
5.7 KiB
C#
98 lines
5.7 KiB
C#
using System.Collections.Generic;
|
|
using System.Text.RegularExpressions;
|
|
using JD.Serialization;
|
|
using JDSongConverter.Tasks;
|
|
using TeaBox.Macros;
|
|
|
|
namespace JDSongConverter.Converters
|
|
{
|
|
public partial class Jd2016ToJd5Downgrader : Converter
|
|
{
|
|
private readonly ConvertDtapeToTimelineTask _convertDtapeToCreatedTimeline = new ConvertDtapeToTimelineTask();
|
|
private readonly ConvertKtapeToTimelineTask _convertKtapeToTimeline = new ConvertKtapeToTimelineTask();
|
|
private readonly CopyDirectoryTask _copyDirectoryTask = new CopyDirectoryTask();
|
|
private readonly ReplaceInDirectoryFiles _replaceInDirectoryFiles = new ReplaceInDirectoryFiles();
|
|
private readonly ConvertTo2015SongDesc _convertToOldSongDesc = new ConvertTo2015SongDesc();
|
|
private readonly ExtractPreviewAndVolumeFromTrkTask _extractTask = new ExtractPreviewAndVolumeFromTrkTask();
|
|
private readonly Tasks.Jd2016ToJd5Downgrader.ConvertFilesForJd5 _convertFilesForJd5 = new Tasks.Jd2016ToJd5Downgrader.ConvertFilesForJd5();
|
|
|
|
public Jd2016ToJd5Downgrader()
|
|
{
|
|
Tasks.Add(_copyDirectoryTask);
|
|
Tasks.Add(_convertDtapeToCreatedTimeline);
|
|
Tasks.Add(_convertKtapeToTimeline);
|
|
Tasks.Add(_convertToOldSongDesc);
|
|
Tasks.Add(_extractTask);
|
|
Tasks.Add(_convertFilesForJd5);
|
|
Tasks.Add(_replaceInDirectoryFiles);
|
|
}
|
|
|
|
public override void Process(JDSong song, string outputDir, string mapPathRelative, IExecutionContext logger)
|
|
{
|
|
var dtapeFile = AppDefinitions.Default.AbsoluteMapPath(MapPathType.DanceTapeFile,song);
|
|
var tplFile = AppDefinitions.Default.AbsoluteMapPath(MapPathType.TimelineTpl, outputDir, song.Name, JDSongVersion.JD5, JDFolderLayout.Engine);
|
|
var ktapeFile = GetKtapeFilePath(song);
|
|
|
|
var replaceEntries = CreateReplaceEntires();
|
|
SpecifyFIlesToModifyForJd5(song, outputDir);
|
|
|
|
_copyDirectoryTask.Init(song.RootPath, outputDir, replacerelativePathInFiles: false);
|
|
_convertDtapeToCreatedTimeline.Init(tplFile,dtapeFile);
|
|
_convertKtapeToTimeline.Init(tplFile, ktapeFile);
|
|
_replaceInDirectoryFiles.Init(replaceEntries);
|
|
|
|
base.Process(song, outputDir, mapPathRelative, logger);
|
|
}
|
|
|
|
private string GetKtapeFilePath(JDSong song)
|
|
{
|
|
if (Regex.IsMatch(song.Name, @"ALT$"))
|
|
{
|
|
var songName = song.Name;
|
|
var songRootPath = song.RootPath;
|
|
|
|
songName = songName.Replace("ALT", "");
|
|
songRootPath = songRootPath.Replace("ALT", "");
|
|
return AppDefinitions.Default.AbsoluteMapPath(MapPathType.KaraokeTapeFile, songRootPath, songName, JDSongVersion.JD2016, JDFolderLayout.Engine);
|
|
}
|
|
else
|
|
{
|
|
return AppDefinitions.Default.AbsoluteMapPath(MapPathType.KaraokeTapeFile, song);
|
|
}
|
|
}
|
|
|
|
private void SpecifyFIlesToModifyForJd5(JDSong song, string outputDir)
|
|
{
|
|
_convertFilesForJd5.AudioSceneFilePath = new Path(outputDir + @"/Audio/" + song.Name + "_AUDIO.isc");
|
|
_convertFilesForJd5.TimelineSceneFilePath = new Path(outputDir + @"/Timeline/" + song.Name + "_TML.isc");
|
|
_convertFilesForJd5.CinematicTplFilePath = new Path(outputDir + @"/Cinematics/" + song.Name + "_MainSequence.tpl");
|
|
_convertFilesForJd5.SequenceTapeFilePath = new Path(outputDir + @"/Cinematics/" + song.Name + "_MainSequence.tape");
|
|
}
|
|
|
|
private List<ReplaceEntry> CreateReplaceEntires()
|
|
{
|
|
List<ReplaceEntry> replaceEntries = new List<ReplaceEntry>();
|
|
replaceEntries.Add(new ReplaceEntry { Pattern = @"world/maps/", Replacement = @"world/JD5/", RegexOptions = RegexOptions.IgnoreCase });
|
|
replaceEntries.Add(new ReplaceEntry { Pattern = @"world/ui/materials/", Replacement = @"World/JD5/_Common/MatShader/", RegexOptions = RegexOptions.IgnoreCase });
|
|
replaceEntries.Add(new ReplaceEntry { Pattern = @"world/_common/", Replacement = @"world/JD5/_common/", RegexOptions = RegexOptions.IgnoreCase });
|
|
replaceEntries.Add(new ReplaceEntry { Pattern = @"JDVersion = 2016", Replacement = @"JDVersion = 5", RegexOptions = RegexOptions.IgnoreCase });
|
|
replaceEntries.Add(new ReplaceEntry { Pattern = @"TapeCase_Component", Replacement = @"JD_Timeline_Component", RegexOptions = RegexOptions.IgnoreCase });
|
|
replaceEntries.Add(new ReplaceEntry { Pattern = @"world/ui/textures/", Replacement = @"world/JD5/_UI/UI_COMMON/Textures/", RegexOptions = RegexOptions.IgnoreCase });
|
|
replaceEntries.Add(new ReplaceEntry { Pattern = @"alpha_mul_b.msh", Replacement = @"MultiTexture_1Layer.msh", RegexOptions = RegexOptions.IgnoreCase });
|
|
replaceEntries.Add(new ReplaceEntry { Pattern = @"alpha.msh", Replacement = @"MultiTexture_1Layer.msh", RegexOptions = RegexOptions.IgnoreCase });
|
|
replaceEntries.Add(new ReplaceEntry { Pattern = @"<ParentBind />", Replacement = @"", RegexOptions = RegexOptions.IgnoreCase });
|
|
replaceEntries.Add(new ReplaceEntry { Pattern = @"AnimatedFramePath = ""invalid path""", Replacement = @"AnimatedFramePath = ""world/jd5/_ui/ui_menu/ui_menu_pag_recapautodance/animatedframes/JDJPN4_Frame.webm""", RegexOptions = RegexOptions.IgnoreCase });
|
|
replaceEntries.Add(new ReplaceEntry
|
|
{
|
|
Pattern = @"Mode = 0, -- SongGameMode_Classic",
|
|
Replacement = @"mode = GameMode.Classic,
|
|
flags = GameModeFlags.None,
|
|
status = GameModeStatus.Available,",
|
|
RegexOptions = RegexOptions.IgnoreCase
|
|
});
|
|
|
|
|
|
return replaceEntries;
|
|
}
|
|
}
|
|
}
|