diff --git a/TakoTako.sln.DotSettings b/TakoTako.sln.DotSettings
new file mode 100644
index 0000000..8d2bd36
--- /dev/null
+++ b/TakoTako.sln.DotSettings
@@ -0,0 +1,2 @@
+
+ True
\ No newline at end of file
diff --git a/TakoTakoScripts/TJAConvert/Program.cs b/TakoTakoScripts/TJAConvert/Program.cs
index 46a349a..ca5a74e 100644
--- a/TakoTakoScripts/TJAConvert/Program.cs
+++ b/TakoTakoScripts/TJAConvert/Program.cs
@@ -264,49 +264,91 @@ namespace TJAConvert
foreach (var course in metadata.Courses)
{
+ var isDouble = course.PlayStyle == TJAMetadata.PlayStyle.Double;
+ var shinuti = EstimateScoreBasedOnNotes(course);
+
//todo figure out the best score?
switch (course.CourseType)
{
case CourseType.Easy:
musicInfo.starEasy = course.Level;
- musicInfo.shinutiEasy = 10170;
- musicInfo.shinutiEasyDuet = 10170;
- musicInfo.scoreEasy = 360090;
- musicInfo.branchEasy = course.IsBranching;
+ musicInfo.scoreEasy = 1000000;
+ musicInfo.branchEasy = musicInfo.branchEasy || course.IsBranching;
+ if (isDouble)
+ musicInfo.shinutiEasyDuet = shinuti;
+ else
+ musicInfo.shinutiEasy = shinuti;
break;
case CourseType.Normal:
musicInfo.starNormal = course.Level;
- musicInfo.shinutiNormal = 6010;
- musicInfo.shinutiNormalDuet = 6010;
- musicInfo.scoreNormal = 650150;
- musicInfo.branchNormal = course.IsBranching;
+ musicInfo.scoreNormal = 1000000;
+ musicInfo.branchNormal = musicInfo.branchNormal || course.IsBranching;
+ if (isDouble)
+ musicInfo.shinutiNormalDuet = shinuti;
+ else
+ musicInfo.shinutiNormal = shinuti;
break;
case CourseType.Hard:
musicInfo.starHard = course.Level;
- musicInfo.shinutiHard = 3010;
- musicInfo.shinutiHardDuet = 3010;
- musicInfo.scoreHard = 800210;
- musicInfo.branchHard = course.IsBranching;
+ musicInfo.scoreHard = 1000000;
+ musicInfo.branchHard = musicInfo.branchHard || course.IsBranching;
+ if (isDouble)
+ musicInfo.shinutiHardDuet = shinuti;
+ else
+ musicInfo.shinutiHard = shinuti;
break;
case CourseType.Oni:
musicInfo.starMania = course.Level;
- musicInfo.shinutiMania = 1000;
- musicInfo.shinutiManiaDuet = 1000;
- musicInfo.scoreMania = 10000;
- musicInfo.branchMania = course.IsBranching;
+ musicInfo.scoreMania = 1000000;
+ musicInfo.branchMania = musicInfo.branchMania || course.IsBranching;
+ if (isDouble)
+ musicInfo.shinutiManiaDuet = shinuti;
+ else
+ musicInfo.shinutiMania = shinuti;
break;
case CourseType.UraOni:
musicInfo.starUra = course.Level;
- musicInfo.shinutiUra = 1000;
- musicInfo.shinutiUraDuet = 1000;
- musicInfo.scoreUra = 10000;
- musicInfo.branchUra = course.IsBranching;
+ musicInfo.scoreUra = 1000000;
+ musicInfo.branchUra = musicInfo.branchUra || course.IsBranching;
+ if (isDouble)
+ musicInfo.shinutiUraDuet = shinuti;
+ else
+ musicInfo.shinutiUra = shinuti;
break;
default:
throw new ArgumentOutOfRangeException();
}
}
+
+ // make sure each course as a score
+ if (musicInfo.shinutiEasy == 0)
+ musicInfo.shinutiEasy = musicInfo.shinutiEasyDuet != 0 ? musicInfo.shinutiEasyDuet : 7352;
+ if (musicInfo.shinutiNormal == 0)
+ musicInfo.shinutiNormal = musicInfo.shinutiNormalDuet != 0 ? musicInfo.shinutiNormalDuet : 4830;
+ if (musicInfo.shinutiHard == 0)
+ musicInfo.shinutiHard = musicInfo.shinutiHardDuet != 0 ? musicInfo.shinutiHardDuet : 3144;
+ if (musicInfo.shinutiMania == 0)
+ musicInfo.shinutiMania = musicInfo.shinutiManiaDuet != 0 ? musicInfo.shinutiManiaDuet : 2169;
+ if (musicInfo.shinutiUra == 0)
+ musicInfo.shinutiUra = musicInfo.shinutiUraDuet != 0 ? musicInfo.shinutiUraDuet : 1420;
+
+ if (musicInfo.shinutiEasyDuet == 0)
+ musicInfo.shinutiEasyDuet = musicInfo.shinutiEasy;
+ if (musicInfo.shinutiNormalDuet == 0)
+ musicInfo.shinutiNormalDuet = musicInfo.shinutiNormal;
+ if (musicInfo.shinutiHardDuet == 0)
+ musicInfo.shinutiHardDuet = musicInfo.shinutiHard;
+ if (musicInfo.shinutiManiaDuet == 0)
+ musicInfo.shinutiManiaDuet = musicInfo.shinutiMania;
+ if (musicInfo.shinutiUraDuet == 0)
+ musicInfo.shinutiUraDuet = musicInfo.shinutiUra;
+
+ int EstimateScoreBasedOnNotes(TJAMetadata.Course course)
+ {
+ return Math.Max(1, 1000000 / course.EstimatedNotes);
+ }
+
var json = JsonConvert.SerializeObject(musicInfo, Formatting.Indented);
File.WriteAllText($"{outputPath}/data.json", json);
return true;
@@ -1138,4 +1180,4 @@ namespace TJAConvert
return 3;
}
}
-}
\ No newline at end of file
+}
diff --git a/TakoTakoScripts/TJAConvert/TJAMetaData.cs b/TakoTakoScripts/TJAConvert/TJAMetaData.cs
index 6825afc..b5d775d 100644
--- a/TakoTakoScripts/TJAConvert/TJAMetaData.cs
+++ b/TakoTakoScripts/TJAConvert/TJAMetaData.cs
@@ -160,9 +160,7 @@ internal class TJAMetadata
currentCourse.SongDataIndexEnd = courseStartIndex;
- if (newContent)
- Courses.Add(currentCourse);
-
+ // is this branching?
for (int i = currentCourse.SongDataIndexStart; i < currentCourse.SongDataIndexEnd; i++)
{
var line = lines[i];
@@ -173,6 +171,52 @@ internal class TJAMetadata
}
}
+ // calculate roughly the amount of song notes in this course
+ int noteCount = 0;
+ int branchNoteCount = 0;
+ int branches = 0;
+ bool inBranch = false;
+ for (int i = currentCourse.SongDataIndexStart; i < currentCourse.SongDataIndexEnd; i++)
+ {
+ var line = lines[i].Trim();
+
+ if (line.Equals("#N", StringComparison.InvariantCultureIgnoreCase)
+ || line.Equals("#E", StringComparison.InvariantCultureIgnoreCase)
+ || line.Equals("#M", StringComparison.InvariantCultureIgnoreCase))
+ branches++;
+
+ var branchStart = line.StartsWith("#BRANCHSTART", StringComparison.InvariantCultureIgnoreCase);
+ if (inBranch && (branchStart || line.StartsWith("#BRANCHEND", StringComparison.InvariantCultureIgnoreCase)))
+ {
+ noteCount += branchNoteCount / Math.Max(1, branches);
+ inBranch = false;
+ }
+
+ if (!inBranch && branchStart)
+ {
+ inBranch = true;
+ branchNoteCount = 0;
+ branches = 0;
+ }
+
+ if (!line.EndsWith(","))
+ continue;
+
+ var notes = line.Count(x => x is '1' or '2' or '3' or '4');
+ if (inBranch)
+ branchNoteCount += notes;
+ else
+ noteCount += notes;
+ }
+
+ if (currentCourse.PlayStyle == PlayStyle.Double)
+ currentCourse.EstimatedNotes = noteCount / 2;
+ else
+ currentCourse.EstimatedNotes = noteCount;
+
+ if (newContent)
+ Courses.Add(currentCourse);
+
// duplicate the existing course
currentCourse = new Course(currentCourse);
// find the next start
@@ -241,8 +285,6 @@ internal class TJAMetadata
return CourseType.UraOni;
}
-
-
}
public const string TJAFieldRegexTemplate = "^{0}:\\s*(?.*?)\\s*$";
@@ -290,6 +332,8 @@ internal class TJAMetadata
public int SongDataIndexStart;
public int SongDataIndexEnd;
+ public int EstimatedNotes = 0;
+
public Course()
{
}