birthday gift for Spartan! very playable! (use no-fail)
yt-dlp -f 140 https://www.youtube.com/watch?v=FtutLA63Cp8
yt-dlp -f 251 https://www.youtube.com/watch?v=FtutLA63Cp8
ffmpeg -i badapple.mp4 -s 7x48 -sws_flags neighbor small.webm
mkdir images
ffmpeg -r 1 -i small.webm -r 1 "images/$filename%03d.png"
Requires Emik.Morsels.
#r "nuget: SixLabors.ImageSharp.Drawing"
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Drawing.Processing;
using SixLabors.ImageSharp.Processing;
Directory
.EnumerateFiles("/home/emik/Documents/bad_apple_chart/images")
.Select(File.ReadAllBytes)
.Select(x => SixLabors.ImageSharp.Image.Load<SixLabors.ImageSharp.PixelFormats.Rgba32>(x))
.Index()
.Where(x => x.Index % 5 is 0)
.Select(x => x.Item)
.Select((x, k) => x.Height.For().Where(x => x % 4 is 0).Select(i => x.Width.For(j => x[j, i].R + x[j, i].G + x[j, i].B > 128 * 3 ? $@"- StartTime: {(int)(((x.Height + 7.548) * k + (x.Height - i - 4)) * 3)}
Lane: {j + 1}
KeySounds: []{(i is 0 ? "\n EditorLayer: 2" : i == x.Height - 4 ? "\n EditorLayer: 1" : "")}
" : "")))
.Flatten3()
.Concat()
.Peek(x => SetText(x));
StringBuilder sb = new();
for (var d = 0; ; d++)
{
var mapped = (int)((48 + 7.548) * d * 3);
if (mapped >= 216970)
break;
sb.Append(@$"- StartTime: {mapped - 1}
Multiplier: 100000
");
for (var i = 0; i < 48; i += 4)
{
sb.Append(@$"- StartTime: {mapped + i * 3 - 1 / 64.0}
Multiplier: {(i + 12) * 340}
- StartTime: {mapped + i * 3}
Multiplier: {(i + 12) * -340}
- StartTime: {mapped + i * 3 + 1 / 64.0}
Multiplier: 0
");
}
}
SetText(sb.ToString());
# | Grade | Player | Perf. Rating | Accuracy | Max Combo | Marvelous | Perfect | Great | Good | Okay | Miss | Mods | Date |
---|