diff --git a/BAKKA-Sharp/BAKKA-Sharp.csproj b/BAKKA-Sharp/BAKKA-Sharp.csproj
new file mode 100644
index 0000000..c701fb8
--- /dev/null
+++ b/BAKKA-Sharp/BAKKA-Sharp.csproj
@@ -0,0 +1,45 @@
+
+
+
+ WinExe
+ net6.0-windows
+ BAKKA_Sharp
+ enable
+ true
+ enable
+ $(VersionPrefix)1.0.0-rc8
+ 1.0.0.0
+ 1.0.0-rc8
+ VeroxZik
+ 2022
+ BAKKA_Sharp.Program
+
+ true
+
+
+
+
+
+
+
+
+ ..\lib\irrKlang.NET4.dll
+
+
+
+
+
+ True
+ True
+ Resources.resx
+
+
+
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+
+
+
+
\ No newline at end of file
diff --git a/BAKKA-Sharp/BAKKA-Sharp.csproj.user b/BAKKA-Sharp/BAKKA-Sharp.csproj.user
new file mode 100644
index 0000000..0082a09
--- /dev/null
+++ b/BAKKA-Sharp/BAKKA-Sharp.csproj.user
@@ -0,0 +1,15 @@
+
+
+
+
+
+ Form
+
+
+ Form
+
+
+ Form
+
+
+
\ No newline at end of file
diff --git a/BAKKA-Sharp/Chart.cs b/BAKKA-Sharp/Chart.cs
new file mode 100644
index 0000000..af6ded3
--- /dev/null
+++ b/BAKKA-Sharp/Chart.cs
@@ -0,0 +1,293 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BAKKA_Sharp
+{
+ internal class Chart
+ {
+ public List Notes { get; set; }
+ public List Gimmicks { get; set; }
+ ///
+ /// Offset in seconds.
+ ///
+ public double Offset { get; set; }
+ ///
+ /// Movie offset in seconds
+ ///
+ public double MovieOffset { get; set; }
+ String SongFileName { get; set; }
+ List TimeEvents { get; set; }
+ public bool HasInitEvents
+ {
+ get
+ {
+ return TimeEvents != null &&
+ TimeEvents.Count > 0 &&
+ Gimmicks.Count(x => x.Measure == 0 && x.GimmickType == GimmickType.BpmChange) >= 1 &&
+ Gimmicks.Count(x => x.Measure == 0 && x.GimmickType == GimmickType.TimeSignatureChange) >= 1;
+ }
+ }
+ public bool IsSaved { get; set; }
+
+ public Chart()
+ {
+ Notes = new();
+ Gimmicks = new();
+ Offset = 0;
+ MovieOffset = 0;
+ SongFileName = "";
+ IsSaved = true;
+ }
+
+ public bool ParseFile(string filename)
+ {
+ var file = File.ReadAllLines(filename);
+
+ int index = 0;
+
+ do
+ {
+ var line = file[index];
+
+ var path = Utils.GetTag(line, "#MUSIC_FILE_PATH ");
+ if (path != null)
+ SongFileName = path;
+
+ var offset = Utils.GetTag(line, "#OFFSET");
+ if (offset != null)
+ Offset = Convert.ToDouble(offset);
+
+ offset = Utils.GetTag(line, "#MOVIEOFFSET");
+ if (offset != null)
+ MovieOffset = Convert.ToDouble(offset);
+
+
+ if (line.Contains("#BODY"))
+ {
+ index++;
+ break;
+ }
+
+ } while(++index < file.Length);
+
+ int lineNum;
+ Gimmick gimmickTemp;
+ Note noteTemp;
+ Dictionary notesByLine = new();
+ Dictionary refByLine = new();
+ for (int i = index; i < file.Length; i++)
+ {
+ var parsed = file[i].Split(new string[] {" "}, StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
+ NoteBase temp = new();
+ temp.BeatInfo = new BeatInfo(Convert.ToInt32(parsed[0]), Convert.ToInt32(parsed[1]));
+ temp.GimmickType = (GimmickType)Convert.ToInt32(parsed[2]);
+
+ switch (temp.GimmickType)
+ {
+ case GimmickType.NoGimmick:
+ noteTemp = new Note(temp.BeatInfo);
+ noteTemp.NoteType = (NoteType)Convert.ToInt32(parsed[3]);
+ lineNum = Convert.ToInt32(parsed[4]);
+ noteTemp.Position = Convert.ToInt32(parsed[5]);
+ noteTemp.Size = Convert.ToInt32(parsed[6]);
+ noteTemp.HoldChange = Convert.ToBoolean(Convert.ToInt32(parsed[7]));
+ if (noteTemp.NoteType == NoteType.MaskAdd || noteTemp.NoteType == NoteType.MaskRemove)
+ {
+ noteTemp.MaskFill = (MaskType)Convert.ToInt32(parsed[8]);
+ }
+ else if (noteTemp.NoteType == NoteType.HoldStartNoBonus ||
+ noteTemp.NoteType == NoteType.HoldJoint ||
+ noteTemp.NoteType == NoteType.HoldStartBonusFlair)
+ {
+ refByLine[lineNum] = Convert.ToInt32(parsed[8]);
+ }
+ Notes.Add(noteTemp);
+ notesByLine[lineNum] = Notes.Last();
+ break;
+ case GimmickType.BpmChange:
+ gimmickTemp = new Gimmick(temp.BeatInfo, temp.GimmickType);
+ gimmickTemp.BPM = Convert.ToDouble(parsed[3]);
+ Gimmicks.Add(gimmickTemp);
+ break;
+ case GimmickType.TimeSignatureChange:
+ gimmickTemp = new Gimmick(temp.BeatInfo, temp.GimmickType);
+ gimmickTemp.TimeSig = new TimeSignature() { Upper = Convert.ToInt32(parsed[3]), Lower = Convert.ToInt32(parsed[4]) };
+ Gimmicks.Add(gimmickTemp);
+ break;
+ case GimmickType.HiSpeedChange:
+ gimmickTemp = new Gimmick(temp.BeatInfo, temp.GimmickType);
+ gimmickTemp.HiSpeed = Convert.ToDouble(parsed[3]);
+ Gimmicks.Add(gimmickTemp);
+ break;
+ case GimmickType.ReverseStart:
+ case GimmickType.ReverseMiddle:
+ case GimmickType.ReverseEnd:
+ case GimmickType.StopStart:
+ case GimmickType.StopEnd:
+ default:
+ Gimmicks.Add(new Gimmick(temp.BeatInfo, temp.GimmickType));
+ break;
+ }
+
+ }
+
+ // Generate hold references
+ for (int i = 0; i < Notes.Count; i++)
+ {
+ if (refByLine.ContainsKey(i))
+ {
+ Notes[i].NextNote = notesByLine[refByLine[i]];
+ Notes[i].NextNote.PrevNote = Notes[i];
+ }
+ }
+
+ RecalcTime();
+
+ IsSaved = true;
+ return true;
+ }
+
+ public bool WriteFile(string filename, bool setSave = true)
+ {
+ using (StreamWriter sw = new StreamWriter(new FileStream(filename, FileMode.Create), new UTF8Encoding(false)))
+ {
+ // LF line ending
+ sw.NewLine = "\n";
+
+ sw.WriteLine("#MUSIC_SCORE_ID 0");
+ sw.WriteLine("#MUSIC_SCORE_VERSION 0");
+ sw.WriteLine("#GAME_VERSION ");
+ sw.WriteLine($"#MUSIC_FILE_PATH {SongFileName}");
+ sw.WriteLine($"#OFFSET {Offset:F6}");
+ sw.WriteLine($"#MOVIEOFFSET {MovieOffset:F6}");
+ sw.WriteLine("#BODY");
+
+ foreach (var gimmick in Gimmicks)
+ {
+ sw.Write($"{gimmick.BeatInfo.Measure,4:F0}{gimmick.BeatInfo.Beat,5:F0}{((int)gimmick.GimmickType),5:F0}");
+ switch (gimmick.GimmickType)
+ {
+ case GimmickType.BpmChange:
+ sw.WriteLine($" {gimmick.BPM:F6}");
+ break;
+ case GimmickType.TimeSignatureChange:
+ sw.WriteLine($"{gimmick.TimeSig.Upper,5:F0}{gimmick.TimeSig.Lower,5:F0}");
+ break;
+ case GimmickType.HiSpeedChange:
+ sw.WriteLine($" {gimmick.HiSpeed:F6}");
+ break;
+ default:
+ sw.WriteLine("");
+ break;
+ }
+ }
+
+ foreach (var note in Notes)
+ {
+ sw.Write($"{note.BeatInfo.Measure,4:F0}{note.BeatInfo.Beat,5:F0}{((int)note.GimmickType),5:F0}{(int)note.NoteType,5:F0}");
+ sw.Write($"{Notes.IndexOf(note),5:F0}{note.Position,5:F0}{note.Size,5:F0}{Convert.ToInt32(note.HoldChange),5:F0}");
+ if (note.IsMask)
+ sw.Write($"{(int)note.MaskFill,5:F0}");
+ if (note.NextNote != null)
+ sw.Write($"{Notes.IndexOf(note.NextNote),5:F0}");
+ sw.WriteLine("");
+ }
+ }
+
+ IsSaved = setSave;
+ return true;
+ }
+
+ public void RecalcTime()
+ {
+ Gimmicks = Gimmicks.OrderBy(x => x.Measure).ToList();
+ var timeSig = Gimmicks.FirstOrDefault(x => x.GimmickType == GimmickType.TimeSignatureChange && x.Measure == 0.0f);
+ var bpm = Gimmicks.FirstOrDefault(x => x.GimmickType == GimmickType.BpmChange && x.Measure == 0.0f);
+ if (timeSig == null || bpm == null)
+ return; // Cannot calculate times without either starting value
+
+ TimeEvents = new();
+ for (int i = 0; i < Gimmicks.Count; i++)
+ {
+ var evt = TimeEvents.FirstOrDefault(x => x.BeatInfo.MeasureDecimal == Gimmicks[i].BeatInfo.MeasureDecimal);
+
+ if (Gimmicks[i].GimmickType == GimmickType.BpmChange)
+ {
+ if (evt == null)
+ {
+ TimeEvents.Add(new Gimmick()
+ {
+ BeatInfo = new BeatInfo(Gimmicks[i].BeatInfo),
+ BPM = Gimmicks[i].BPM,
+ TimeSig = new TimeSignature(timeSig.TimeSig)
+ });
+ }
+ else
+ {
+ evt.BPM = Gimmicks[i].BPM;
+ }
+ bpm = Gimmicks[i];
+ }
+ if (Gimmicks[i].GimmickType == GimmickType.TimeSignatureChange)
+ {
+ if (evt == null)
+ {
+ TimeEvents.Add(new Gimmick()
+ {
+ BeatInfo = new BeatInfo(Gimmicks[i].BeatInfo),
+ BPM = bpm.BPM,
+ TimeSig = new TimeSignature(Gimmicks[i].TimeSig)
+ });
+ }
+ else
+ {
+ evt.TimeSig = new TimeSignature(Gimmicks[i].TimeSig);
+ }
+ timeSig = Gimmicks[i];
+ }
+ }
+
+ // Run through all time events and generate valid start times
+ TimeEvents[0].StartTime = Offset * 1000.0;
+ for (int i = 1; i < TimeEvents.Count; i++)
+ {
+ TimeEvents[i].StartTime = ((TimeEvents[i].Measure - TimeEvents[i - 1].Measure) * 4 * TimeEvents[i - 1].TimeSig.Ratio * 60000.0 / TimeEvents[i].BPM) + TimeEvents[i - 1].StartTime;
+ }
+ }
+
+ ///
+ /// Translate clock time to beats
+ ///
+ /// Current timestamp in ms
+ ///
+ public BeatInfo GetBeat(float time)
+ {
+ if (TimeEvents == null || TimeEvents.Count == 0)
+ return new BeatInfo(-1, 0);
+
+ var evt = TimeEvents.Where(x => time >= x.StartTime).LastOrDefault();
+ if (evt == null)
+ evt = TimeEvents[0];
+ return new BeatInfo((float)(evt.BPM * (time - evt.StartTime) / (60000.0f * evt.TimeSig.Ratio * 4)) + evt.Measure);
+ }
+
+ ///
+ /// Translate measures into clock time
+ ///
+ ///
+ ///
+ public int GetTime(BeatInfo beat)
+ {
+ if (TimeEvents == null || TimeEvents.Count == 0)
+ return 0;
+
+ var evt = TimeEvents.Where(x => beat.MeasureDecimal >= x.Measure).LastOrDefault();
+ if (evt == null)
+ evt = TimeEvents[0];
+ return (int)((60000.0 * 4.0 * evt.TimeSig.Ratio / evt.BPM) * (beat.MeasureDecimal - evt.Measure) + evt.StartTime);
+ }
+ }
+}
diff --git a/BAKKA-Sharp/CircleView.cs b/BAKKA-Sharp/CircleView.cs
new file mode 100644
index 0000000..60eca08
--- /dev/null
+++ b/BAKKA-Sharp/CircleView.cs
@@ -0,0 +1,110 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BAKKA_Sharp
+{
+ internal class CircleView
+ {
+ public SizeF PanelSize { get; private set; }
+ public RectangleF DrawRect { get; private set; }
+ public PointF TopCorner { get; private set; }
+ public PointF CenterPoint { get; private set; }
+ public float Radius { get; private set; }
+ public float CurrentMeasure { get; set; }
+ ///
+ /// Number of measures in the future that are visible
+ ///
+ public float TotalMeasureShowNotes { get; set; } = 0.5f;
+
+ // Pens and Brushes
+ public Pen BasePen { get; set; }
+ public Pen BeatPen { get; set; }
+ public Pen TickMinorPen { get; set; }
+ public Pen TickMediumPen { get; set; }
+ public Pen TickMajorPen { get; set; }
+ public SolidBrush HoldBrush { get; set; } = new SolidBrush(Color.FromArgb(170, Color.Yellow));
+ public SolidBrush MaskBrush { get; set; } = new SolidBrush(Color.DimGray);
+ public Pen HighlightPen { get; set; }
+ public Pen FlairPen { get; set; }
+ private int CursorTransparency = 110;
+ private int SelectTransparency = 110;
+ private int FlairTransparency = 75;
+
+ public CircleView(SizeF size)
+ {
+ Update(size);
+ }
+
+ public void Update(SizeF size)
+ {
+ PanelSize = size;
+ float basePenWidth = PanelSize.Width * 4.0f / 600.0f;
+ TopCorner = new PointF(basePenWidth * 4, basePenWidth * 4);
+ DrawRect = new RectangleF(
+ TopCorner.X,
+ TopCorner.Y,
+ PanelSize.Width - basePenWidth * 8,
+ PanelSize.Height - basePenWidth * 8);
+ Radius = DrawRect.Width / 2.0f;
+ CenterPoint = new PointF(TopCorner.X + Radius, TopCorner.Y + Radius);
+
+ // Pens
+ BasePen = new Pen(Color.Black, basePenWidth);
+ BeatPen = new Pen(Color.White, PanelSize.Width * 1.0f / 600.0f);
+ TickMinorPen = new Pen(Color.Black, PanelSize.Width * 2.0f / 600.0f);
+ TickMediumPen = new Pen(Color.Black, PanelSize.Width * 4.0f / 600.0f);
+ TickMajorPen = new Pen(Color.Black, PanelSize.Width * 7.0f / 600.0f);
+ HighlightPen = new Pen(Color.FromArgb(SelectTransparency, Color.LightPink), PanelSize.Width * 8.0f / 600.0f);
+ FlairPen = new Pen(Color.FromArgb(FlairTransparency, Color.Yellow), PanelSize.Width * 8.0f / 600.0f);
+ }
+
+ public ArcInfo GetScaledRect(float objectTime)
+ {
+ ArcInfo info = new();
+ float notescaleInit = 1 - ((objectTime - CurrentMeasure) * (1 / TotalMeasureShowNotes)); // Scale from 0-1
+ info.NoteScale = (float)Math.Pow(10.0f, notescaleInit) / 10.0f;
+ float scaledRectSize = DrawRect.Width * info.NoteScale;
+ float scaledRadius = scaledRectSize / 2.0f;
+ info.Rect = new RectangleF(
+ new PointF(
+ CenterPoint.X - scaledRadius,
+ CenterPoint.Y - scaledRadius),
+ new SizeF(scaledRectSize, scaledRectSize));
+ return info;
+ }
+
+ public ArcInfo GetArcInfo(Note note)
+ {
+ ArcInfo info = GetScaledRect(note.Measure);
+ info.StartAngle = -note.Position * 6;
+ info.ArcLength = -note.Size * 6;
+ if(info.ArcLength != -360)
+ {
+ info.StartAngle -= 2;
+ info.ArcLength += 4;
+ }
+ return info;
+ }
+
+ public Pen GetPen(Note note, float noteScale = 1.0f)
+ {
+ return new Pen(note.Color, PanelSize.Width * 8.0f * noteScale / 600.0f);
+ }
+
+ public Pen GetPen(NoteType noteType)
+ {
+ return new Pen(Color.FromArgb(CursorTransparency, Utils.NoteTypeToColor(noteType)), PanelSize.Width * 24.0f / 600.0f);
+ }
+ }
+
+ internal struct ArcInfo
+ {
+ public float StartAngle;
+ public float ArcLength;
+ public RectangleF Rect;
+ public float NoteScale;
+ }
+}
diff --git a/BAKKA-Sharp/Enums.cs b/BAKKA-Sharp/Enums.cs
new file mode 100644
index 0000000..65ee7ec
--- /dev/null
+++ b/BAKKA-Sharp/Enums.cs
@@ -0,0 +1,66 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BAKKA_Sharp
+{
+ internal enum NoteType
+ {
+ TouchNoBonus = 1,
+ TouchBonus = 2,
+ SnapRedNoBonus = 3,
+ SnapBlueNoBonus = 4,
+ SlideOrangeNoBonus = 5,
+ SlideOrangeBonus = 6,
+ SlideGreenNoBonus = 7,
+ SlideGreenBonus = 8,
+ HoldStartNoBonus = 9,
+ HoldJoint = 10,
+ HoldEnd = 11,
+ MaskAdd = 12,
+ MaskRemove = 13,
+ EndOfChart = 14,
+ // MaskSameTime = 15,
+ Chain = 16,
+ // MaskLane = 17,
+ // TutorialTag = 18,
+ // BarLine = 19,
+ TouchBonusFlair = 20,
+ SnapRedBonusFlair = 21,
+ SnapBlueBonusFlair = 22,
+ SlideOrangeBonusFlair = 23,
+ SlideGreenBonusFlair = 24,
+ HoldStartBonusFlair = 25,
+ ChainBonusFlair = 26,
+ }
+
+ internal enum GimmickType
+ {
+ NoGimmick = 1,
+ BpmChange = 2,
+ TimeSignatureChange = 3,
+ // Stop = 4,
+ HiSpeedChange = 5,
+ ReverseStart = 6,
+ ReverseMiddle = 7,
+ ReverseEnd = 8,
+ StopStart = 9,
+ StopEnd = 10,
+ };
+
+ internal enum MaskType
+ {
+ Clockwise = 0,
+ CounterClockwise = 1,
+ Center = 2
+ }
+
+ internal enum BonusType
+ {
+ NoBonus = 0,
+ Bonus = 1,
+ Flair = 2
+ }
+}
diff --git a/BAKKA-Sharp/GimmickForm.Designer.cs b/BAKKA-Sharp/GimmickForm.Designer.cs
new file mode 100644
index 0000000..d7ca10d
--- /dev/null
+++ b/BAKKA-Sharp/GimmickForm.Designer.cs
@@ -0,0 +1,585 @@
+namespace BAKKA_Sharp
+{
+ partial class GimmickForm
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.revEnd2Beat2Numeric = new System.Windows.Forms.NumericUpDown();
+ this.label18 = new System.Windows.Forms.Label();
+ this.revEnd2Beat1Numeric = new System.Windows.Forms.NumericUpDown();
+ this.revEnd2MeasureNumeric = new System.Windows.Forms.NumericUpDown();
+ this.label19 = new System.Windows.Forms.Label();
+ this.revEnd1Beat2Numeric = new System.Windows.Forms.NumericUpDown();
+ this.label16 = new System.Windows.Forms.Label();
+ this.revEnd1Beat1Numeric = new System.Windows.Forms.NumericUpDown();
+ this.revEnd1MeasureNumeric = new System.Windows.Forms.NumericUpDown();
+ this.label17 = new System.Windows.Forms.Label();
+ this.stopEndBeat2Numeric = new System.Windows.Forms.NumericUpDown();
+ this.label10 = new System.Windows.Forms.Label();
+ this.stopEndBeat1Numeric = new System.Windows.Forms.NumericUpDown();
+ this.stopEndMeasureNumeric = new System.Windows.Forms.NumericUpDown();
+ this.label11 = new System.Windows.Forms.Label();
+ this.hiSpeedNumeric = new System.Windows.Forms.NumericUpDown();
+ this.label12 = new System.Windows.Forms.Label();
+ this.label13 = new System.Windows.Forms.Label();
+ this.label14 = new System.Windows.Forms.Label();
+ this.timeSig2Numeric = new System.Windows.Forms.NumericUpDown();
+ this.timeSig1Numeric = new System.Windows.Forms.NumericUpDown();
+ this.gimmickBpmNumeric = new System.Windows.Forms.NumericUpDown();
+ this.label15 = new System.Windows.Forms.Label();
+ this.insertGimmickButton = new System.Windows.Forms.Button();
+ this.startBeat2Numeric = new System.Windows.Forms.NumericUpDown();
+ this.label1 = new System.Windows.Forms.Label();
+ this.startBeat1Numeric = new System.Windows.Forms.NumericUpDown();
+ this.startMeasureNumeric = new System.Windows.Forms.NumericUpDown();
+ this.label2 = new System.Windows.Forms.Label();
+ ((System.ComponentModel.ISupportInitialize)(this.revEnd2Beat2Numeric)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.revEnd2Beat1Numeric)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.revEnd2MeasureNumeric)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.revEnd1Beat2Numeric)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.revEnd1Beat1Numeric)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.revEnd1MeasureNumeric)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.stopEndBeat2Numeric)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.stopEndBeat1Numeric)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.stopEndMeasureNumeric)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.hiSpeedNumeric)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.timeSig2Numeric)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.timeSig1Numeric)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.gimmickBpmNumeric)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.startBeat2Numeric)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.startBeat1Numeric)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.startMeasureNumeric)).BeginInit();
+ this.SuspendLayout();
+ //
+ // revEnd2Beat2Numeric
+ //
+ this.revEnd2Beat2Numeric.Location = new System.Drawing.Point(219, 206);
+ this.revEnd2Beat2Numeric.Maximum = new decimal(new int[] {
+ 1920,
+ 0,
+ 0,
+ 0});
+ this.revEnd2Beat2Numeric.Minimum = new decimal(new int[] {
+ 1,
+ 0,
+ 0,
+ 0});
+ this.revEnd2Beat2Numeric.Name = "revEnd2Beat2Numeric";
+ this.revEnd2Beat2Numeric.Size = new System.Drawing.Size(42, 23);
+ this.revEnd2Beat2Numeric.TabIndex = 38;
+ this.revEnd2Beat2Numeric.Value = new decimal(new int[] {
+ 16,
+ 0,
+ 0,
+ 0});
+ //
+ // label18
+ //
+ this.label18.AutoSize = true;
+ this.label18.Location = new System.Drawing.Point(8, 208);
+ this.label18.Name = "label18";
+ this.label18.Size = new System.Drawing.Size(61, 15);
+ this.label18.TabIndex = 40;
+ this.label18.Text = "Rev End 2:";
+ //
+ // revEnd2Beat1Numeric
+ //
+ this.revEnd2Beat1Numeric.Location = new System.Drawing.Point(168, 206);
+ this.revEnd2Beat1Numeric.Maximum = new decimal(new int[] {
+ 1920,
+ 0,
+ 0,
+ 0});
+ this.revEnd2Beat1Numeric.Minimum = new decimal(new int[] {
+ 1,
+ 0,
+ 0,
+ -2147483648});
+ this.revEnd2Beat1Numeric.Name = "revEnd2Beat1Numeric";
+ this.revEnd2Beat1Numeric.Size = new System.Drawing.Size(38, 23);
+ this.revEnd2Beat1Numeric.TabIndex = 37;
+ this.revEnd2Beat1Numeric.ValueChanged += new System.EventHandler(this.revEnd2Beat1Numeric_ValueChanged);
+ //
+ // revEnd2MeasureNumeric
+ //
+ this.revEnd2MeasureNumeric.Location = new System.Drawing.Point(75, 206);
+ this.revEnd2MeasureNumeric.Maximum = new decimal(new int[] {
+ 9999,
+ 0,
+ 0,
+ 0});
+ this.revEnd2MeasureNumeric.Name = "revEnd2MeasureNumeric";
+ this.revEnd2MeasureNumeric.Size = new System.Drawing.Size(87, 23);
+ this.revEnd2MeasureNumeric.TabIndex = 36;
+ this.revEnd2MeasureNumeric.ValueChanged += new System.EventHandler(this.revEnd2MeasureNumeric_ValueChanged);
+ //
+ // label19
+ //
+ this.label19.AutoSize = true;
+ this.label19.Location = new System.Drawing.Point(207, 208);
+ this.label19.Name = "label19";
+ this.label19.Size = new System.Drawing.Size(12, 15);
+ this.label19.TabIndex = 39;
+ this.label19.Text = "/";
+ //
+ // revEnd1Beat2Numeric
+ //
+ this.revEnd1Beat2Numeric.Location = new System.Drawing.Point(219, 177);
+ this.revEnd1Beat2Numeric.Maximum = new decimal(new int[] {
+ 1920,
+ 0,
+ 0,
+ 0});
+ this.revEnd1Beat2Numeric.Minimum = new decimal(new int[] {
+ 1,
+ 0,
+ 0,
+ 0});
+ this.revEnd1Beat2Numeric.Name = "revEnd1Beat2Numeric";
+ this.revEnd1Beat2Numeric.Size = new System.Drawing.Size(42, 23);
+ this.revEnd1Beat2Numeric.TabIndex = 33;
+ this.revEnd1Beat2Numeric.Value = new decimal(new int[] {
+ 16,
+ 0,
+ 0,
+ 0});
+ //
+ // label16
+ //
+ this.label16.AutoSize = true;
+ this.label16.Location = new System.Drawing.Point(8, 179);
+ this.label16.Name = "label16";
+ this.label16.Size = new System.Drawing.Size(61, 15);
+ this.label16.TabIndex = 35;
+ this.label16.Text = "Rev End 1:";
+ //
+ // revEnd1Beat1Numeric
+ //
+ this.revEnd1Beat1Numeric.Location = new System.Drawing.Point(168, 177);
+ this.revEnd1Beat1Numeric.Maximum = new decimal(new int[] {
+ 1920,
+ 0,
+ 0,
+ 0});
+ this.revEnd1Beat1Numeric.Minimum = new decimal(new int[] {
+ 1,
+ 0,
+ 0,
+ -2147483648});
+ this.revEnd1Beat1Numeric.Name = "revEnd1Beat1Numeric";
+ this.revEnd1Beat1Numeric.Size = new System.Drawing.Size(38, 23);
+ this.revEnd1Beat1Numeric.TabIndex = 32;
+ this.revEnd1Beat1Numeric.ValueChanged += new System.EventHandler(this.revEnd1Beat1Numeric_ValueChanged);
+ //
+ // revEnd1MeasureNumeric
+ //
+ this.revEnd1MeasureNumeric.Location = new System.Drawing.Point(75, 177);
+ this.revEnd1MeasureNumeric.Maximum = new decimal(new int[] {
+ 9999,
+ 0,
+ 0,
+ 0});
+ this.revEnd1MeasureNumeric.Name = "revEnd1MeasureNumeric";
+ this.revEnd1MeasureNumeric.Size = new System.Drawing.Size(87, 23);
+ this.revEnd1MeasureNumeric.TabIndex = 31;
+ this.revEnd1MeasureNumeric.ValueChanged += new System.EventHandler(this.revEnd1MeasureNumeric_ValueChanged);
+ //
+ // label17
+ //
+ this.label17.AutoSize = true;
+ this.label17.Location = new System.Drawing.Point(207, 179);
+ this.label17.Name = "label17";
+ this.label17.Size = new System.Drawing.Size(12, 15);
+ this.label17.TabIndex = 34;
+ this.label17.Text = "/";
+ //
+ // stopEndBeat2Numeric
+ //
+ this.stopEndBeat2Numeric.Location = new System.Drawing.Point(219, 148);
+ this.stopEndBeat2Numeric.Maximum = new decimal(new int[] {
+ 1920,
+ 0,
+ 0,
+ 0});
+ this.stopEndBeat2Numeric.Minimum = new decimal(new int[] {
+ 1,
+ 0,
+ 0,
+ 0});
+ this.stopEndBeat2Numeric.Name = "stopEndBeat2Numeric";
+ this.stopEndBeat2Numeric.Size = new System.Drawing.Size(42, 23);
+ this.stopEndBeat2Numeric.TabIndex = 13;
+ this.stopEndBeat2Numeric.Value = new decimal(new int[] {
+ 16,
+ 0,
+ 0,
+ 0});
+ //
+ // label10
+ //
+ this.label10.AutoSize = true;
+ this.label10.Location = new System.Drawing.Point(12, 150);
+ this.label10.Name = "label10";
+ this.label10.Size = new System.Drawing.Size(57, 15);
+ this.label10.TabIndex = 29;
+ this.label10.Text = "Stop End:";
+ //
+ // stopEndBeat1Numeric
+ //
+ this.stopEndBeat1Numeric.Location = new System.Drawing.Point(168, 148);
+ this.stopEndBeat1Numeric.Maximum = new decimal(new int[] {
+ 1920,
+ 0,
+ 0,
+ 0});
+ this.stopEndBeat1Numeric.Minimum = new decimal(new int[] {
+ 1,
+ 0,
+ 0,
+ -2147483648});
+ this.stopEndBeat1Numeric.Name = "stopEndBeat1Numeric";
+ this.stopEndBeat1Numeric.Size = new System.Drawing.Size(38, 23);
+ this.stopEndBeat1Numeric.TabIndex = 12;
+ this.stopEndBeat1Numeric.ValueChanged += new System.EventHandler(this.stopEndBeat1Numeric_ValueChanged);
+ //
+ // stopEndMeasureNumeric
+ //
+ this.stopEndMeasureNumeric.Location = new System.Drawing.Point(75, 148);
+ this.stopEndMeasureNumeric.Maximum = new decimal(new int[] {
+ 9999,
+ 0,
+ 0,
+ 0});
+ this.stopEndMeasureNumeric.Name = "stopEndMeasureNumeric";
+ this.stopEndMeasureNumeric.Size = new System.Drawing.Size(87, 23);
+ this.stopEndMeasureNumeric.TabIndex = 11;
+ this.stopEndMeasureNumeric.ValueChanged += new System.EventHandler(this.stopEndMeasureNumeric_ValueChanged);
+ //
+ // label11
+ //
+ this.label11.AutoSize = true;
+ this.label11.Location = new System.Drawing.Point(10, 121);
+ this.label11.Name = "label11";
+ this.label11.Size = new System.Drawing.Size(59, 15);
+ this.label11.TabIndex = 27;
+ this.label11.Text = "Hi-Speed:";
+ //
+ // hiSpeedNumeric
+ //
+ this.hiSpeedNumeric.DecimalPlaces = 6;
+ this.hiSpeedNumeric.Location = new System.Drawing.Point(75, 119);
+ this.hiSpeedNumeric.Minimum = new decimal(new int[] {
+ 100,
+ 0,
+ 0,
+ -2147483648});
+ this.hiSpeedNumeric.Name = "hiSpeedNumeric";
+ this.hiSpeedNumeric.Size = new System.Drawing.Size(186, 23);
+ this.hiSpeedNumeric.TabIndex = 26;
+ this.hiSpeedNumeric.Value = new decimal(new int[] {
+ 1,
+ 0,
+ 0,
+ 0});
+ //
+ // label12
+ //
+ this.label12.AutoSize = true;
+ this.label12.Location = new System.Drawing.Point(14, 92);
+ this.label12.Name = "label12";
+ this.label12.Size = new System.Drawing.Size(55, 15);
+ this.label12.TabIndex = 25;
+ this.label12.Text = "Time Sig:";
+ //
+ // label13
+ //
+ this.label13.AutoSize = true;
+ this.label13.Location = new System.Drawing.Point(140, 92);
+ this.label13.Name = "label13";
+ this.label13.Size = new System.Drawing.Size(12, 15);
+ this.label13.TabIndex = 13;
+ this.label13.Text = "/";
+ //
+ // label14
+ //
+ this.label14.AutoSize = true;
+ this.label14.Location = new System.Drawing.Point(34, 63);
+ this.label14.Name = "label14";
+ this.label14.Size = new System.Drawing.Size(35, 15);
+ this.label14.TabIndex = 24;
+ this.label14.Text = "BPM:";
+ //
+ // timeSig2Numeric
+ //
+ this.timeSig2Numeric.Location = new System.Drawing.Point(158, 90);
+ this.timeSig2Numeric.Maximum = new decimal(new int[] {
+ 1920,
+ 0,
+ 0,
+ 0});
+ this.timeSig2Numeric.Minimum = new decimal(new int[] {
+ 1,
+ 0,
+ 0,
+ 0});
+ this.timeSig2Numeric.Name = "timeSig2Numeric";
+ this.timeSig2Numeric.Size = new System.Drawing.Size(103, 23);
+ this.timeSig2Numeric.TabIndex = 12;
+ this.timeSig2Numeric.Value = new decimal(new int[] {
+ 4,
+ 0,
+ 0,
+ 0});
+ //
+ // timeSig1Numeric
+ //
+ this.timeSig1Numeric.Location = new System.Drawing.Point(75, 90);
+ this.timeSig1Numeric.Maximum = new decimal(new int[] {
+ 191,
+ 0,
+ 0,
+ 0});
+ this.timeSig1Numeric.Minimum = new decimal(new int[] {
+ 1,
+ 0,
+ 0,
+ 0});
+ this.timeSig1Numeric.Name = "timeSig1Numeric";
+ this.timeSig1Numeric.Size = new System.Drawing.Size(59, 23);
+ this.timeSig1Numeric.TabIndex = 11;
+ this.timeSig1Numeric.Value = new decimal(new int[] {
+ 4,
+ 0,
+ 0,
+ 0});
+ //
+ // gimmickBpmNumeric
+ //
+ this.gimmickBpmNumeric.DecimalPlaces = 6;
+ this.gimmickBpmNumeric.Location = new System.Drawing.Point(75, 61);
+ this.gimmickBpmNumeric.Maximum = new decimal(new int[] {
+ 9999,
+ 0,
+ 0,
+ 0});
+ this.gimmickBpmNumeric.Minimum = new decimal(new int[] {
+ 1,
+ 0,
+ 0,
+ 0});
+ this.gimmickBpmNumeric.Name = "gimmickBpmNumeric";
+ this.gimmickBpmNumeric.Size = new System.Drawing.Size(186, 23);
+ this.gimmickBpmNumeric.TabIndex = 23;
+ this.gimmickBpmNumeric.Value = new decimal(new int[] {
+ 120,
+ 0,
+ 0,
+ 0});
+ //
+ // label15
+ //
+ this.label15.AutoSize = true;
+ this.label15.Location = new System.Drawing.Point(207, 150);
+ this.label15.Name = "label15";
+ this.label15.Size = new System.Drawing.Size(12, 15);
+ this.label15.TabIndex = 14;
+ this.label15.Text = "/";
+ //
+ // insertGimmickButton
+ //
+ this.insertGimmickButton.Font = new System.Drawing.Font("Segoe UI", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+ this.insertGimmickButton.Location = new System.Drawing.Point(12, 248);
+ this.insertGimmickButton.Name = "insertGimmickButton";
+ this.insertGimmickButton.Size = new System.Drawing.Size(253, 40);
+ this.insertGimmickButton.TabIndex = 33;
+ this.insertGimmickButton.Text = "Insert Gimmick";
+ this.insertGimmickButton.UseVisualStyleBackColor = true;
+ this.insertGimmickButton.Click += new System.EventHandler(this.insertGimmickButton_Click);
+ //
+ // startBeat2Numeric
+ //
+ this.startBeat2Numeric.Location = new System.Drawing.Point(219, 12);
+ this.startBeat2Numeric.Maximum = new decimal(new int[] {
+ 1920,
+ 0,
+ 0,
+ 0});
+ this.startBeat2Numeric.Minimum = new decimal(new int[] {
+ 1,
+ 0,
+ 0,
+ 0});
+ this.startBeat2Numeric.Name = "startBeat2Numeric";
+ this.startBeat2Numeric.Size = new System.Drawing.Size(42, 23);
+ this.startBeat2Numeric.TabIndex = 43;
+ this.startBeat2Numeric.Value = new decimal(new int[] {
+ 16,
+ 0,
+ 0,
+ 0});
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(34, 14);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(34, 15);
+ this.label1.TabIndex = 45;
+ this.label1.Text = "Start:";
+ //
+ // startBeat1Numeric
+ //
+ this.startBeat1Numeric.Location = new System.Drawing.Point(168, 12);
+ this.startBeat1Numeric.Maximum = new decimal(new int[] {
+ 1920,
+ 0,
+ 0,
+ 0});
+ this.startBeat1Numeric.Minimum = new decimal(new int[] {
+ 1,
+ 0,
+ 0,
+ -2147483648});
+ this.startBeat1Numeric.Name = "startBeat1Numeric";
+ this.startBeat1Numeric.Size = new System.Drawing.Size(38, 23);
+ this.startBeat1Numeric.TabIndex = 42;
+ this.startBeat1Numeric.ValueChanged += new System.EventHandler(this.startBeat1Numeric_ValueChanged);
+ //
+ // startMeasureNumeric
+ //
+ this.startMeasureNumeric.Location = new System.Drawing.Point(75, 12);
+ this.startMeasureNumeric.Maximum = new decimal(new int[] {
+ 9999,
+ 0,
+ 0,
+ 0});
+ this.startMeasureNumeric.Name = "startMeasureNumeric";
+ this.startMeasureNumeric.Size = new System.Drawing.Size(87, 23);
+ this.startMeasureNumeric.TabIndex = 41;
+ this.startMeasureNumeric.ValueChanged += new System.EventHandler(this.startMeasureNumeric_ValueChanged);
+ //
+ // label2
+ //
+ this.label2.AutoSize = true;
+ this.label2.Location = new System.Drawing.Point(207, 14);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(12, 15);
+ this.label2.TabIndex = 44;
+ this.label2.Text = "/";
+ //
+ // GimmickForm
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(281, 303);
+ this.Controls.Add(this.startBeat2Numeric);
+ this.Controls.Add(this.label1);
+ this.Controls.Add(this.startBeat1Numeric);
+ this.Controls.Add(this.startMeasureNumeric);
+ this.Controls.Add(this.label2);
+ this.Controls.Add(this.revEnd2Beat2Numeric);
+ this.Controls.Add(this.insertGimmickButton);
+ this.Controls.Add(this.label18);
+ this.Controls.Add(this.revEnd2Beat1Numeric);
+ this.Controls.Add(this.gimmickBpmNumeric);
+ this.Controls.Add(this.revEnd2MeasureNumeric);
+ this.Controls.Add(this.label15);
+ this.Controls.Add(this.label19);
+ this.Controls.Add(this.timeSig1Numeric);
+ this.Controls.Add(this.revEnd1Beat2Numeric);
+ this.Controls.Add(this.timeSig2Numeric);
+ this.Controls.Add(this.label16);
+ this.Controls.Add(this.label14);
+ this.Controls.Add(this.revEnd1Beat1Numeric);
+ this.Controls.Add(this.label13);
+ this.Controls.Add(this.revEnd1MeasureNumeric);
+ this.Controls.Add(this.label12);
+ this.Controls.Add(this.label17);
+ this.Controls.Add(this.hiSpeedNumeric);
+ this.Controls.Add(this.stopEndBeat2Numeric);
+ this.Controls.Add(this.label11);
+ this.Controls.Add(this.label10);
+ this.Controls.Add(this.stopEndMeasureNumeric);
+ this.Controls.Add(this.stopEndBeat1Numeric);
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
+ this.Name = "GimmickForm";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+ this.Text = "Gimmick Settings";
+ this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.GimmickForm_FormClosing);
+ ((System.ComponentModel.ISupportInitialize)(this.revEnd2Beat2Numeric)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.revEnd2Beat1Numeric)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.revEnd2MeasureNumeric)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.revEnd1Beat2Numeric)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.revEnd1Beat1Numeric)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.revEnd1MeasureNumeric)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.stopEndBeat2Numeric)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.stopEndBeat1Numeric)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.stopEndMeasureNumeric)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.hiSpeedNumeric)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.timeSig2Numeric)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.timeSig1Numeric)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.gimmickBpmNumeric)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.startBeat2Numeric)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.startBeat1Numeric)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.startMeasureNumeric)).EndInit();
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+ private NumericUpDown revEnd2Beat2Numeric;
+ private Label label18;
+ private NumericUpDown revEnd2Beat1Numeric;
+ private NumericUpDown revEnd2MeasureNumeric;
+ private Label label19;
+ private NumericUpDown revEnd1Beat2Numeric;
+ private Label label16;
+ private NumericUpDown revEnd1Beat1Numeric;
+ private NumericUpDown revEnd1MeasureNumeric;
+ private Label label17;
+ private NumericUpDown stopEndBeat2Numeric;
+ private Label label10;
+ private NumericUpDown stopEndBeat1Numeric;
+ private NumericUpDown stopEndMeasureNumeric;
+ private Label label11;
+ private NumericUpDown hiSpeedNumeric;
+ private Label label12;
+ private Label label13;
+ private Label label14;
+ private NumericUpDown timeSig2Numeric;
+ private NumericUpDown timeSig1Numeric;
+ private NumericUpDown gimmickBpmNumeric;
+ private Label label15;
+ private Button insertGimmickButton;
+ private NumericUpDown startBeat2Numeric;
+ private Label label1;
+ private NumericUpDown startBeat1Numeric;
+ private NumericUpDown startMeasureNumeric;
+ private Label label2;
+ }
+}
\ No newline at end of file
diff --git a/BAKKA-Sharp/GimmickForm.cs b/BAKKA-Sharp/GimmickForm.cs
new file mode 100644
index 0000000..67a59a5
--- /dev/null
+++ b/BAKKA-Sharp/GimmickForm.cs
@@ -0,0 +1,394 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace BAKKA_Sharp
+{
+ public partial class GimmickForm : Form
+ {
+ private Gimmick gimmick;
+ public bool InsertGimmick { get; private set; }
+ internal List Gimmicks { get; private set; }
+
+ float StartMeasure { get { return (float)startMeasureNumeric.Value + (float)startBeat1Numeric.Value / (float)startBeat2Numeric.Value; } }
+ float StopEndMeasure { get { return (float)stopEndMeasureNumeric.Value + (float)stopEndBeat1Numeric.Value / (float)stopEndBeat2Numeric.Value; } }
+ float RevEnd1Measure { get { return (float)revEnd1MeasureNumeric.Value + (float)revEnd1Beat1Numeric.Value / (float)revEnd1Beat2Numeric.Value; } }
+ float RevEnd2Measure { get { return (float)revEnd2MeasureNumeric.Value + (float)revEnd2Beat1Numeric.Value / (float)revEnd2Beat2Numeric.Value; } }
+
+
+ public enum FormReason
+ {
+ New,
+ Edit
+ };
+
+ public GimmickForm()
+ {
+ InitializeComponent();
+ }
+
+ internal DialogResult Show(
+ Gimmick baseGimmick, FormReason reason, Gimmick? gim1 = null, Gimmick? gim2 = null)
+ {
+ var quant = Utils.GetQuantization(baseGimmick.BeatInfo.Beat, 16);
+
+ gimmick = new Gimmick();
+ gimmick.BeatInfo = new BeatInfo(baseGimmick.BeatInfo);
+ gimmick.GimmickType = baseGimmick.GimmickType;
+
+ switch (gimmick.GimmickType)
+ {
+ case GimmickType.BpmChange:
+ startMeasureNumeric.Value = gimmick.BeatInfo.Measure;
+ startBeat1Numeric.Value = quant.Item1;
+ startBeat2Numeric.Value = quant.Item2;
+ if (reason == FormReason.Edit)
+ gimmickBpmNumeric.Value = (decimal)baseGimmick.BPM;
+ break;
+ case GimmickType.TimeSignatureChange:
+ startMeasureNumeric.Value = gimmick.BeatInfo.Measure;
+ startBeat1Numeric.Value = quant.Item1;
+ startBeat2Numeric.Value = quant.Item2;
+ if (reason == FormReason.Edit)
+ {
+ timeSig1Numeric.Value = baseGimmick.TimeSig.Upper;
+ timeSig2Numeric.Value = baseGimmick.TimeSig.Lower;
+ }
+ break;
+ case GimmickType.HiSpeedChange:
+ startMeasureNumeric.Value = gimmick.BeatInfo.Measure;
+ startBeat1Numeric.Value = quant.Item1;
+ startBeat2Numeric.Value = quant.Item2;
+ if (reason == FormReason.Edit)
+ hiSpeedNumeric.Value = (decimal)baseGimmick.HiSpeed;
+ break;
+ case GimmickType.ReverseStart:
+ startMeasureNumeric.Value = gimmick.BeatInfo.Measure;
+ startBeat1Numeric.Value = quant.Item1;
+ startBeat2Numeric.Value = quant.Item2;
+ if (reason == FormReason.Edit && gim1 != null && gim2 != null)
+ {
+ var quantMid1 = Utils.GetQuantization(gim1.BeatInfo.Beat, 16);
+ var quantEnd1 = Utils.GetQuantization(gim2.BeatInfo.Beat, 16);
+ revEnd1MeasureNumeric.Value = gim1.BeatInfo.Measure;
+ revEnd1Beat1Numeric.Value = quantMid1.Item1;
+ revEnd1Beat2Numeric.Value = quantMid1.Item2;
+ revEnd2MeasureNumeric.Value = gim2.BeatInfo.Measure;
+ revEnd2Beat1Numeric.Value = quantEnd1.Item1;
+ revEnd2Beat2Numeric.Value = quantEnd1.Item2;
+ }
+ break;
+ case GimmickType.ReverseMiddle:
+ var quantStart2 = Utils.GetQuantization(gim1.BeatInfo.Beat, 16);
+ var quantEnd2 = Utils.GetQuantization(gim2.BeatInfo.Beat, 16);
+ startMeasureNumeric.Value = gim1.BeatInfo.Measure;
+ startBeat1Numeric.Value = quantStart2.Item1;
+ startBeat2Numeric.Value = quantStart2.Item2;
+ revEnd1MeasureNumeric.Value = gimmick.BeatInfo.Measure;
+ revEnd1Beat1Numeric.Value = quant.Item1;
+ revEnd1Beat2Numeric.Value = quant.Item2;
+ revEnd2MeasureNumeric.Value = gim2.BeatInfo.Measure;
+ revEnd2Beat1Numeric.Value = quantEnd2.Item1;
+ revEnd2Beat2Numeric.Value = quantEnd2.Item2;
+ break;
+ case GimmickType.ReverseEnd:
+ var quantStart3 = Utils.GetQuantization(gim1.BeatInfo.Beat, 16);
+ var quantMid3 = Utils.GetQuantization(gim2.BeatInfo.Beat, 16);
+ startMeasureNumeric.Value = gim1.BeatInfo.Measure;
+ startBeat1Numeric.Value = quantStart3.Item1;
+ startBeat2Numeric.Value = quantStart3.Item2;
+ revEnd1MeasureNumeric.Value = gim2.BeatInfo.Measure;
+ revEnd1Beat1Numeric.Value = quantMid3.Item1;
+ revEnd1Beat2Numeric.Value = quantMid3.Item2;
+ revEnd2MeasureNumeric.Value = gimmick.BeatInfo.Measure;
+ revEnd2Beat1Numeric.Value = quant.Item1;
+ revEnd2Beat2Numeric.Value = quant.Item2;
+ break;
+ case GimmickType.StopStart:
+ startMeasureNumeric.Value = gimmick.BeatInfo.Measure;
+ startBeat1Numeric.Value = quant.Item1;
+ startBeat2Numeric.Value = quant.Item2;
+ if (reason == FormReason.Edit)
+ {
+ var stopEnd = Utils.GetQuantization(gim1.BeatInfo.Beat, 16);
+ stopEndMeasureNumeric.Value = gim1.BeatInfo.Measure;
+ stopEndBeat1Numeric.Value = stopEnd.Item1;
+ stopEndBeat2Numeric.Value = stopEnd.Item2;
+ }
+ break;
+ case GimmickType.StopEnd:
+ var stopStart = Utils.GetQuantization(gim1.BeatInfo.Beat, 16);
+ startMeasureNumeric.Value = gim1.BeatInfo.Measure;
+ startBeat1Numeric.Value = stopStart.Item1;
+ startBeat2Numeric.Value = stopStart.Item2;
+ stopEndMeasureNumeric.Value = gimmick.BeatInfo.Measure;
+ stopEndBeat1Numeric.Value = quant.Item1;
+ stopEndBeat2Numeric.Value = quant.Item2;
+ break;
+ default:
+ break;
+ }
+
+ gimmickBpmNumeric.Enabled = gimmick.GimmickType == GimmickType.BpmChange;
+
+ timeSig1Numeric.Enabled = gimmick.GimmickType == GimmickType.TimeSignatureChange;
+ timeSig2Numeric.Enabled = gimmick.GimmickType == GimmickType.TimeSignatureChange;
+
+ hiSpeedNumeric.Enabled = gimmick.GimmickType == GimmickType.HiSpeedChange;
+
+ stopEndMeasureNumeric.Enabled = gimmick.IsStop;
+ stopEndBeat1Numeric.Enabled = gimmick.IsStop;
+ stopEndBeat2Numeric.Enabled = gimmick.IsStop;
+
+ revEnd1MeasureNumeric.Enabled = gimmick.IsReverse;
+ revEnd1Beat1Numeric.Enabled = gimmick.IsReverse;
+ revEnd1Beat2Numeric.Enabled = gimmick.IsReverse;
+ revEnd2MeasureNumeric.Enabled = gimmick.IsReverse;
+ revEnd2Beat1Numeric.Enabled = gimmick.IsReverse;
+ revEnd2Beat2Numeric.Enabled = gimmick.IsReverse;
+
+ Gimmicks = new List();
+
+ InsertGimmick = false;
+
+ switch (reason)
+ {
+ case FormReason.New:
+ insertGimmickButton.Text = "Insert Gimmick";
+ break;
+ case FormReason.Edit:
+ insertGimmickButton.Text = "Edit Gimmick";
+ break;
+ default:
+ break;
+ }
+ return ShowDialog();
+ }
+
+ private void GimmickForm_FormClosing(object sender, FormClosingEventArgs e)
+ {
+ }
+
+ private void insertGimmickButton_Click(object sender, EventArgs e)
+ {
+ switch (gimmick.GimmickType)
+ {
+ case GimmickType.BpmChange:
+ gimmick.BeatInfo = new BeatInfo((int)startMeasureNumeric.Value, (int)startBeat1Numeric.Value * 1920 / (int)startBeat2Numeric.Value);
+ gimmick.BPM = (double)gimmickBpmNumeric.Value;
+ Gimmicks.Add(gimmick);
+ break;
+ case GimmickType.TimeSignatureChange:
+ gimmick.BeatInfo = new BeatInfo((int)startMeasureNumeric.Value, (int)startBeat1Numeric.Value * 1920 / (int)startBeat2Numeric.Value);
+ gimmick.TimeSig.Upper = (int)timeSig1Numeric.Value;
+ gimmick.TimeSig.Lower = (int)timeSig2Numeric.Value;
+ Gimmicks.Add(gimmick);
+ break;
+ case GimmickType.HiSpeedChange:
+ gimmick.BeatInfo = new BeatInfo((int)startMeasureNumeric.Value, (int)startBeat1Numeric.Value * 1920 / (int)startBeat2Numeric.Value);
+ gimmick.HiSpeed = (double)hiSpeedNumeric.Value;
+ Gimmicks.Add(gimmick);
+ break;
+ case GimmickType.ReverseStart:
+ case GimmickType.ReverseMiddle:
+ case GimmickType.ReverseEnd:
+ Gimmicks.Add(new Gimmick()
+ {
+ BeatInfo = new BeatInfo((int)startMeasureNumeric.Value, (int)startBeat1Numeric.Value * 1920 / (int)startBeat2Numeric.Value),
+ GimmickType = GimmickType.ReverseStart
+ });
+ Gimmicks.Add(new Gimmick()
+ {
+ BeatInfo = new BeatInfo((int)revEnd1MeasureNumeric.Value, (int)revEnd1Beat1Numeric.Value * 1920 / (int)revEnd1Beat2Numeric.Value),
+ GimmickType = GimmickType.ReverseMiddle
+ });
+ Gimmicks.Add(new Gimmick()
+ {
+ BeatInfo = new BeatInfo((int)revEnd2MeasureNumeric.Value, (int)revEnd2Beat1Numeric.Value * 1920 / (int)revEnd2Beat2Numeric.Value),
+ GimmickType = GimmickType.ReverseEnd
+ });
+ break;
+ case GimmickType.StopStart:
+ case GimmickType.StopEnd:
+ Gimmicks.Add(new Gimmick()
+ {
+ BeatInfo = new BeatInfo((int)startMeasureNumeric.Value, (int)startBeat1Numeric.Value * 1920 / (int)startBeat2Numeric.Value),
+ GimmickType = GimmickType.StopStart
+ });
+ Gimmicks.Add(new Gimmick()
+ {
+ BeatInfo = new BeatInfo((int)stopEndMeasureNumeric.Value, (int)stopEndBeat1Numeric.Value * 1920 / (int)stopEndBeat2Numeric.Value),
+ GimmickType = GimmickType.StopEnd
+ });
+ break;
+ default:
+ break;
+ }
+ DialogResult = DialogResult.OK;
+ }
+
+ private void startMeasureNumeric_ValueChanged(object sender, EventArgs e)
+ {
+ if (stopEndMeasureNumeric.Enabled && StopEndMeasure < StartMeasure)
+ {
+ stopEndMeasureNumeric.Value = startMeasureNumeric.Value + 1;
+ }
+ if (revEnd1MeasureNumeric.Enabled && RevEnd1Measure < StartMeasure)
+ {
+ revEnd1MeasureNumeric.Value = startMeasureNumeric.Value + 1;
+ }
+ }
+
+ private void startBeat1Numeric_ValueChanged(object sender, EventArgs e)
+ {
+ if (startBeat1Numeric.Value >= startBeat2Numeric.Value)
+ {
+ startMeasureNumeric.Value++;
+ startBeat1Numeric.Value = 0;
+ }
+ else if (startBeat1Numeric.Value < 0)
+ {
+ if (startMeasureNumeric.Value > 0)
+ {
+ startMeasureNumeric.Value--;
+ startBeat1Numeric.Value = startBeat2Numeric.Value - 1;
+ }
+ else if (startMeasureNumeric.Value == 0)
+ {
+ startBeat1Numeric.Value = 0;
+ }
+ }
+ }
+
+ private void stopEndMeasureNumeric_ValueChanged(object sender, EventArgs e)
+ {
+ if (StopEndMeasure < StartMeasure)
+ {
+ stopEndMeasureNumeric.Value = startMeasureNumeric.Value;
+ stopEndBeat1Numeric.Value = startBeat1Numeric.Value;
+ stopEndBeat2Numeric.Value = startBeat2Numeric.Value;
+ return;
+ }
+ }
+
+ private void stopEndBeat1Numeric_ValueChanged(object sender, EventArgs e)
+ {
+ if (StopEndMeasure < StartMeasure)
+ {
+ stopEndMeasureNumeric.Value = startMeasureNumeric.Value;
+ stopEndBeat1Numeric.Value = startBeat1Numeric.Value;
+ stopEndBeat2Numeric.Value = startBeat2Numeric.Value;
+ return;
+ }
+
+ if (stopEndBeat1Numeric.Value >= stopEndBeat2Numeric.Value)
+ {
+ stopEndMeasureNumeric.Value++;
+ stopEndBeat1Numeric.Value = 0;
+ }
+ else if (stopEndBeat1Numeric.Value < 0)
+ {
+ if (stopEndMeasureNumeric.Value > 0)
+ {
+ stopEndMeasureNumeric.Value--;
+ stopEndBeat1Numeric.Value = stopEndBeat2Numeric.Value - 1;
+ }
+ else if (stopEndMeasureNumeric.Value == 0)
+ {
+ stopEndBeat1Numeric.Value = 0;
+ }
+ }
+ }
+
+ private void revEnd1MeasureNumeric_ValueChanged(object sender, EventArgs e)
+ {
+ if (RevEnd1Measure < StartMeasure)
+ {
+ revEnd1MeasureNumeric.Value = startMeasureNumeric.Value;
+ revEnd1Beat1Numeric.Value = startBeat1Numeric.Value;
+ revEnd1Beat2Numeric.Value = startBeat2Numeric.Value;
+ }
+ if (RevEnd2Measure < RevEnd1Measure)
+ {
+ revEnd2MeasureNumeric.Value = revEnd1MeasureNumeric.Value;
+ revEnd2Beat1Numeric.Value = revEnd1Beat1Numeric.Value;
+ revEnd2Beat2Numeric.Value = revEnd1Beat2Numeric.Value;
+ }
+ }
+
+ private void revEnd1Beat1Numeric_ValueChanged(object sender, EventArgs e)
+ {
+ if (RevEnd1Measure < StartMeasure)
+ {
+ revEnd1MeasureNumeric.Value = startMeasureNumeric.Value;
+ revEnd1Beat1Numeric.Value = startBeat1Numeric.Value;
+ revEnd1Beat2Numeric.Value = startBeat2Numeric.Value;
+ return;
+ }
+
+ if (revEnd1Beat1Numeric.Value >= revEnd1Beat2Numeric.Value)
+ {
+ revEnd1MeasureNumeric.Value++;
+ revEnd1Beat1Numeric.Value = 0;
+ }
+ else if (revEnd1Beat1Numeric.Value < 0)
+ {
+ if (revEnd1MeasureNumeric.Value > 0)
+ {
+ revEnd1MeasureNumeric.Value--;
+ revEnd1Beat1Numeric.Value = revEnd1Beat2Numeric.Value - 1;
+ }
+ else if (revEnd1MeasureNumeric.Value == 0)
+ {
+ revEnd1Beat1Numeric.Value = 0;
+ }
+ }
+ }
+
+ private void revEnd2MeasureNumeric_ValueChanged(object sender, EventArgs e)
+ {
+ if (RevEnd2Measure < RevEnd1Measure)
+ {
+ revEnd2MeasureNumeric.Value = revEnd1MeasureNumeric.Value;
+ revEnd2Beat1Numeric.Value = revEnd1Beat1Numeric.Value;
+ revEnd2Beat2Numeric.Value = revEnd1Beat2Numeric.Value;
+ return;
+ }
+ }
+
+ private void revEnd2Beat1Numeric_ValueChanged(object sender, EventArgs e)
+ {
+ if (RevEnd2Measure < RevEnd1Measure)
+ {
+ revEnd2MeasureNumeric.Value = revEnd1MeasureNumeric.Value;
+ revEnd2Beat1Numeric.Value = revEnd1Beat1Numeric.Value;
+ revEnd2Beat2Numeric.Value = revEnd1Beat2Numeric.Value;
+ return;
+ }
+
+ if (revEnd2Beat1Numeric.Value >= revEnd2Beat2Numeric.Value)
+ {
+ revEnd2MeasureNumeric.Value++;
+ revEnd2Beat1Numeric.Value = 0;
+ }
+ else if (revEnd2Beat1Numeric.Value < 0)
+ {
+ if (revEnd2MeasureNumeric.Value > 0)
+ {
+ revEnd2MeasureNumeric.Value--;
+ revEnd2Beat1Numeric.Value = revEnd2Beat2Numeric.Value - 1;
+ }
+ else if (revEnd2MeasureNumeric.Value == 0)
+ {
+ revEnd2Beat1Numeric.Value = 0;
+ }
+ }
+ }
+ }
+}
diff --git a/BAKKA-Sharp/GimmickForm.resx b/BAKKA-Sharp/GimmickForm.resx
new file mode 100644
index 0000000..b5ae26c
--- /dev/null
+++ b/BAKKA-Sharp/GimmickForm.resx
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/BAKKA-Sharp/InitChartSettingsForm.Designer.cs b/BAKKA-Sharp/InitChartSettingsForm.Designer.cs
new file mode 100644
index 0000000..93f4f43
--- /dev/null
+++ b/BAKKA-Sharp/InitChartSettingsForm.Designer.cs
@@ -0,0 +1,241 @@
+namespace BAKKA_Sharp
+{
+ partial class InitChartSettingsForm
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.initSaveSettingsButton = new System.Windows.Forms.Button();
+ this.label9 = new System.Windows.Forms.Label();
+ this.initMovieOffsetNumeric = new System.Windows.Forms.NumericUpDown();
+ this.label8 = new System.Windows.Forms.Label();
+ this.initOffsetNumeric = new System.Windows.Forms.NumericUpDown();
+ this.label7 = new System.Windows.Forms.Label();
+ this.label6 = new System.Windows.Forms.Label();
+ this.label5 = new System.Windows.Forms.Label();
+ this.initTimeSig2Numeric = new System.Windows.Forms.NumericUpDown();
+ this.initTimeSig1Numeric = new System.Windows.Forms.NumericUpDown();
+ this.initBpmNumeric = new System.Windows.Forms.NumericUpDown();
+ ((System.ComponentModel.ISupportInitialize)(this.initMovieOffsetNumeric)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.initOffsetNumeric)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.initTimeSig2Numeric)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.initTimeSig1Numeric)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.initBpmNumeric)).BeginInit();
+ this.SuspendLayout();
+ //
+ // initSaveSettingsButton
+ //
+ this.initSaveSettingsButton.Location = new System.Drawing.Point(12, 128);
+ this.initSaveSettingsButton.Name = "initSaveSettingsButton";
+ this.initSaveSettingsButton.Size = new System.Drawing.Size(218, 23);
+ this.initSaveSettingsButton.TabIndex = 30;
+ this.initSaveSettingsButton.Text = "Save Settings";
+ this.initSaveSettingsButton.UseVisualStyleBackColor = true;
+ this.initSaveSettingsButton.Click += new System.EventHandler(this.initSaveSettingsButton_Click);
+ //
+ // label9
+ //
+ this.label9.AutoSize = true;
+ this.label9.Location = new System.Drawing.Point(46, 101);
+ this.label9.Name = "label9";
+ this.label9.Size = new System.Drawing.Size(78, 15);
+ this.label9.TabIndex = 29;
+ this.label9.Text = "Movie Offset:";
+ //
+ // initMovieOffsetNumeric
+ //
+ this.initMovieOffsetNumeric.DecimalPlaces = 6;
+ this.initMovieOffsetNumeric.Location = new System.Drawing.Point(130, 99);
+ this.initMovieOffsetNumeric.Maximum = new decimal(new int[] {
+ 9999,
+ 0,
+ 0,
+ 0});
+ this.initMovieOffsetNumeric.Name = "initMovieOffsetNumeric";
+ this.initMovieOffsetNumeric.Size = new System.Drawing.Size(100, 23);
+ this.initMovieOffsetNumeric.TabIndex = 28;
+ //
+ // label8
+ //
+ this.label8.AutoSize = true;
+ this.label8.Location = new System.Drawing.Point(82, 74);
+ this.label8.Name = "label8";
+ this.label8.Size = new System.Drawing.Size(42, 15);
+ this.label8.TabIndex = 27;
+ this.label8.Text = "Offset:";
+ //
+ // initOffsetNumeric
+ //
+ this.initOffsetNumeric.DecimalPlaces = 6;
+ this.initOffsetNumeric.Location = new System.Drawing.Point(130, 70);
+ this.initOffsetNumeric.Maximum = new decimal(new int[] {
+ 9999,
+ 0,
+ 0,
+ 0});
+ this.initOffsetNumeric.Name = "initOffsetNumeric";
+ this.initOffsetNumeric.Size = new System.Drawing.Size(100, 23);
+ this.initOffsetNumeric.TabIndex = 26;
+ //
+ // label7
+ //
+ this.label7.AutoSize = true;
+ this.label7.Location = new System.Drawing.Point(35, 43);
+ this.label7.Name = "label7";
+ this.label7.Size = new System.Drawing.Size(89, 15);
+ this.label7.TabIndex = 25;
+ this.label7.Text = "Time Signature:";
+ //
+ // label6
+ //
+ this.label6.AutoSize = true;
+ this.label6.Location = new System.Drawing.Point(174, 43);
+ this.label6.Name = "label6";
+ this.label6.Size = new System.Drawing.Size(12, 15);
+ this.label6.TabIndex = 13;
+ this.label6.Text = "/";
+ //
+ // label5
+ //
+ this.label5.AutoSize = true;
+ this.label5.Location = new System.Drawing.Point(89, 14);
+ this.label5.Name = "label5";
+ this.label5.Size = new System.Drawing.Size(35, 15);
+ this.label5.TabIndex = 24;
+ this.label5.Text = "BPM:";
+ //
+ // initTimeSig2Numeric
+ //
+ this.initTimeSig2Numeric.Location = new System.Drawing.Point(192, 41);
+ this.initTimeSig2Numeric.Maximum = new decimal(new int[] {
+ 1920,
+ 0,
+ 0,
+ 0});
+ this.initTimeSig2Numeric.Minimum = new decimal(new int[] {
+ 1,
+ 0,
+ 0,
+ 0});
+ this.initTimeSig2Numeric.Name = "initTimeSig2Numeric";
+ this.initTimeSig2Numeric.Size = new System.Drawing.Size(38, 23);
+ this.initTimeSig2Numeric.TabIndex = 12;
+ this.initTimeSig2Numeric.Value = new decimal(new int[] {
+ 4,
+ 0,
+ 0,
+ 0});
+ //
+ // initTimeSig1Numeric
+ //
+ this.initTimeSig1Numeric.Location = new System.Drawing.Point(130, 41);
+ this.initTimeSig1Numeric.Maximum = new decimal(new int[] {
+ 191,
+ 0,
+ 0,
+ 0});
+ this.initTimeSig1Numeric.Minimum = new decimal(new int[] {
+ 1,
+ 0,
+ 0,
+ 0});
+ this.initTimeSig1Numeric.Name = "initTimeSig1Numeric";
+ this.initTimeSig1Numeric.Size = new System.Drawing.Size(38, 23);
+ this.initTimeSig1Numeric.TabIndex = 11;
+ this.initTimeSig1Numeric.Value = new decimal(new int[] {
+ 4,
+ 0,
+ 0,
+ 0});
+ //
+ // initBpmNumeric
+ //
+ this.initBpmNumeric.DecimalPlaces = 6;
+ this.initBpmNumeric.Location = new System.Drawing.Point(130, 12);
+ this.initBpmNumeric.Maximum = new decimal(new int[] {
+ 9999,
+ 0,
+ 0,
+ 0});
+ this.initBpmNumeric.Minimum = new decimal(new int[] {
+ 1,
+ 0,
+ 0,
+ 0});
+ this.initBpmNumeric.Name = "initBpmNumeric";
+ this.initBpmNumeric.Size = new System.Drawing.Size(100, 23);
+ this.initBpmNumeric.TabIndex = 23;
+ this.initBpmNumeric.Value = new decimal(new int[] {
+ 120,
+ 0,
+ 0,
+ 0});
+ //
+ // InitChartSettingsForm
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(242, 164);
+ this.Controls.Add(this.initSaveSettingsButton);
+ this.Controls.Add(this.label9);
+ this.Controls.Add(this.initBpmNumeric);
+ this.Controls.Add(this.initMovieOffsetNumeric);
+ this.Controls.Add(this.initTimeSig1Numeric);
+ this.Controls.Add(this.label8);
+ this.Controls.Add(this.initTimeSig2Numeric);
+ this.Controls.Add(this.initOffsetNumeric);
+ this.Controls.Add(this.label5);
+ this.Controls.Add(this.label7);
+ this.Controls.Add(this.label6);
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
+ this.Name = "InitChartSettingsForm";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+ this.Text = "Initial Chart Settings";
+ ((System.ComponentModel.ISupportInitialize)(this.initMovieOffsetNumeric)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.initOffsetNumeric)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.initTimeSig2Numeric)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.initTimeSig1Numeric)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.initBpmNumeric)).EndInit();
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private Button initSaveSettingsButton;
+ private Label label9;
+ private NumericUpDown initMovieOffsetNumeric;
+ private Label label8;
+ private NumericUpDown initOffsetNumeric;
+ private Label label7;
+ private Label label6;
+ private Label label5;
+ private NumericUpDown initTimeSig2Numeric;
+ private NumericUpDown initTimeSig1Numeric;
+ private NumericUpDown initBpmNumeric;
+ }
+}
\ No newline at end of file
diff --git a/BAKKA-Sharp/InitChartSettingsForm.cs b/BAKKA-Sharp/InitChartSettingsForm.cs
new file mode 100644
index 0000000..6633af0
--- /dev/null
+++ b/BAKKA-Sharp/InitChartSettingsForm.cs
@@ -0,0 +1,40 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace BAKKA_Sharp
+{
+ public partial class InitChartSettingsForm : Form
+ {
+ public double Bpm { get { return (double)initBpmNumeric.Value; } }
+ public int TimeSigUpper { get { return (int)initTimeSig1Numeric.Value; } }
+ public int TimeSigLower { get { return (int)initTimeSig2Numeric.Value; } }
+ public double Offset { get { return (double)initOffsetNumeric.Value; } }
+ public double MovieOffset { get { return (double)initMovieOffsetNumeric.Value; } }
+
+ public InitChartSettingsForm()
+ {
+ InitializeComponent();
+ }
+
+ public void SetValues(double bpm, int timeSigUpper, int timeSigLower, double offset, double movieOffset)
+ {
+ initBpmNumeric.Value = (decimal)bpm;
+ initTimeSig1Numeric.Value = timeSigUpper;
+ initTimeSig2Numeric.Value = timeSigLower;
+ initOffsetNumeric.Value = (decimal)offset;
+ initMovieOffsetNumeric.Value = (decimal)movieOffset;
+ }
+
+ private void initSaveSettingsButton_Click(object sender, EventArgs e)
+ {
+ DialogResult = DialogResult.OK;
+ }
+ }
+}
diff --git a/BAKKA-Sharp/InitChartSettingsForm.resx b/BAKKA-Sharp/InitChartSettingsForm.resx
new file mode 100644
index 0000000..b5ae26c
--- /dev/null
+++ b/BAKKA-Sharp/InitChartSettingsForm.resx
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/BAKKA-Sharp/MainForm.Designer.cs b/BAKKA-Sharp/MainForm.Designer.cs
new file mode 100644
index 0000000..7a6bcc6
--- /dev/null
+++ b/BAKKA-Sharp/MainForm.Designer.cs
@@ -0,0 +1,1479 @@
+namespace BAKKA_Sharp
+{
+ partial class MainForm
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.components = new System.ComponentModel.Container();
+ this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
+ this.saveFileDialog = new System.Windows.Forms.SaveFileDialog();
+ this.circlePanel = new System.Windows.Forms.Panel();
+ this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.label4 = new System.Windows.Forms.Label();
+ this.beat2Numeric = new System.Windows.Forms.NumericUpDown();
+ this.beat1Numeric = new System.Windows.Forms.NumericUpDown();
+ this.measureNumeric = new System.Windows.Forms.NumericUpDown();
+ this.label3 = new System.Windows.Forms.Label();
+ this.sizeTrackBar = new System.Windows.Forms.TrackBar();
+ this.sizeNumeric = new System.Windows.Forms.NumericUpDown();
+ this.label2 = new System.Windows.Forms.Label();
+ this.positionTrackBar = new System.Windows.Forms.TrackBar();
+ this.positionNumeric = new System.Windows.Forms.NumericUpDown();
+ this.label1 = new System.Windows.Forms.Label();
+ this.groupBox2 = new System.Windows.Forms.GroupBox();
+ this.flairRadio = new System.Windows.Forms.RadioButton();
+ this.bonusRadio = new System.Windows.Forms.RadioButton();
+ this.noBonusRadio = new System.Windows.Forms.RadioButton();
+ this.endHoldCheck = new System.Windows.Forms.CheckBox();
+ this.endChartButton = new System.Windows.Forms.Button();
+ this.holdButton = new System.Windows.Forms.Button();
+ this.chainButton = new System.Windows.Forms.Button();
+ this.blueButton = new System.Windows.Forms.Button();
+ this.redButton = new System.Windows.Forms.Button();
+ this.greenButton = new System.Windows.Forms.Button();
+ this.orangeButton = new System.Windows.Forms.Button();
+ this.tapButton = new System.Windows.Forms.Button();
+ this.gimmickTypeGroupBox = new System.Windows.Forms.GroupBox();
+ this.removeMaskRadio = new System.Windows.Forms.RadioButton();
+ this.reverseButton = new System.Windows.Forms.Button();
+ this.addMaskRadio = new System.Windows.Forms.RadioButton();
+ this.stopButton = new System.Windows.Forms.Button();
+ this.hiSpeedButton = new System.Windows.Forms.Button();
+ this.timeSigButton = new System.Windows.Forms.Button();
+ this.bpmChangeButton = new System.Windows.Forms.Button();
+ this.maskButton = new System.Windows.Forms.Button();
+ this.groupBox4 = new System.Windows.Forms.GroupBox();
+ this.centerMaskRadio = new System.Windows.Forms.RadioButton();
+ this.clockwiseMaskRadio = new System.Windows.Forms.RadioButton();
+ this.cClockwiseMaskRadio = new System.Windows.Forms.RadioButton();
+ this.groupBox5 = new System.Windows.Forms.GroupBox();
+ this.currentSelectionLabel = new System.Windows.Forms.Label();
+ this.playbackGroupBox = new System.Windows.Forms.GroupBox();
+ this.songFileLabel = new System.Windows.Forms.Label();
+ this.label20 = new System.Windows.Forms.Label();
+ this.songTrackBar = new System.Windows.Forms.TrackBar();
+ this.selectSongButton = new System.Windows.Forms.Button();
+ this.playButton = new System.Windows.Forms.Button();
+ this.openSongDialog = new System.Windows.Forms.OpenFileDialog();
+ this.updateTimer = new System.Windows.Forms.Timer(this.components);
+ this.groupBox9 = new System.Windows.Forms.GroupBox();
+ this.label21 = new System.Windows.Forms.Label();
+ this.visualHispeedNumeric = new System.Windows.Forms.NumericUpDown();
+ this.insertButton = new System.Windows.Forms.Button();
+ this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.newToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.saveAsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.showCursorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.showCursorDuringPlaybackToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.highlightViewedNoteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.chartToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.initialChartSettingsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.menuStrip = new System.Windows.Forms.MenuStrip();
+ this.editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.undoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.redoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.groupBox6 = new System.Windows.Forms.GroupBox();
+ this.gimmickDeleteButton = new System.Windows.Forms.Button();
+ this.gimmickEditButton = new System.Windows.Forms.Button();
+ this.gimmickBeatLabel = new System.Windows.Forms.Label();
+ this.gimmickValueLabel = new System.Windows.Forms.Label();
+ this.gimmickTypeLabel = new System.Windows.Forms.Label();
+ this.gimmickMeasureLabel = new System.Windows.Forms.Label();
+ this.label8 = new System.Windows.Forms.Label();
+ this.label7 = new System.Windows.Forms.Label();
+ this.label6 = new System.Windows.Forms.Label();
+ this.label5 = new System.Windows.Forms.Label();
+ this.gimmickNextButton = new System.Windows.Forms.Button();
+ this.gimmickPrevButton = new System.Windows.Forms.Button();
+ this.noteViewGroupBox = new System.Windows.Forms.GroupBox();
+ this.noteMaskLabel = new System.Windows.Forms.Label();
+ this.label9 = new System.Windows.Forms.Label();
+ this.noteSizeLabel = new System.Windows.Forms.Label();
+ this.label17 = new System.Windows.Forms.Label();
+ this.noteNextMeasureButton = new System.Windows.Forms.Button();
+ this.notePrevMeasureButton = new System.Windows.Forms.Button();
+ this.noteDeleteSelectedButton = new System.Windows.Forms.Button();
+ this.noteEditSelectedButton = new System.Windows.Forms.Button();
+ this.noteBeatLabel = new System.Windows.Forms.Label();
+ this.notePositionLabel = new System.Windows.Forms.Label();
+ this.noteTypeLabel = new System.Windows.Forms.Label();
+ this.noteMeasureLabel = new System.Windows.Forms.Label();
+ this.label13 = new System.Windows.Forms.Label();
+ this.label14 = new System.Windows.Forms.Label();
+ this.label15 = new System.Windows.Forms.Label();
+ this.label16 = new System.Windows.Forms.Label();
+ this.noteNextButton = new System.Windows.Forms.Button();
+ this.notePrevButton = new System.Windows.Forms.Button();
+ this.autoSaveTimer = new System.Windows.Forms.Timer(this.components);
+ this.groupBox1.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.beat2Numeric)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.beat1Numeric)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.measureNumeric)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.sizeTrackBar)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.sizeNumeric)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.positionTrackBar)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.positionNumeric)).BeginInit();
+ this.groupBox2.SuspendLayout();
+ this.gimmickTypeGroupBox.SuspendLayout();
+ this.groupBox4.SuspendLayout();
+ this.groupBox5.SuspendLayout();
+ this.playbackGroupBox.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.songTrackBar)).BeginInit();
+ this.groupBox9.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.visualHispeedNumeric)).BeginInit();
+ this.menuStrip.SuspendLayout();
+ this.groupBox6.SuspendLayout();
+ this.noteViewGroupBox.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // openFileDialog
+ //
+ this.openFileDialog.FileName = "openFileDialog";
+ this.openFileDialog.Filter = "MER files|*.mer";
+ this.openFileDialog.Title = "Select Chart File to Open";
+ //
+ // saveFileDialog
+ //
+ this.saveFileDialog.DefaultExt = "*.mer";
+ this.saveFileDialog.Filter = "MER files|*.mer";
+ //
+ // circlePanel
+ //
+ this.circlePanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)));
+ this.circlePanel.Location = new System.Drawing.Point(257, 40);
+ this.circlePanel.Name = "circlePanel";
+ this.circlePanel.Size = new System.Drawing.Size(611, 611);
+ this.circlePanel.TabIndex = 2;
+ this.circlePanel.Paint += new System.Windows.Forms.PaintEventHandler(this.circlePanel_Paint);
+ this.circlePanel.MouseDown += new System.Windows.Forms.MouseEventHandler(this.circlePanel_MouseDown);
+ this.circlePanel.MouseMove += new System.Windows.Forms.MouseEventHandler(this.circlePanel_MouseMove);
+ this.circlePanel.MouseUp += new System.Windows.Forms.MouseEventHandler(this.circlePanel_MouseUp);
+ //
+ // groupBox1
+ //
+ this.groupBox1.Controls.Add(this.label4);
+ this.groupBox1.Controls.Add(this.beat2Numeric);
+ this.groupBox1.Controls.Add(this.beat1Numeric);
+ this.groupBox1.Controls.Add(this.measureNumeric);
+ this.groupBox1.Controls.Add(this.label3);
+ this.groupBox1.Controls.Add(this.sizeTrackBar);
+ this.groupBox1.Controls.Add(this.sizeNumeric);
+ this.groupBox1.Controls.Add(this.label2);
+ this.groupBox1.Controls.Add(this.positionTrackBar);
+ this.groupBox1.Controls.Add(this.positionNumeric);
+ this.groupBox1.Controls.Add(this.label1);
+ this.groupBox1.Location = new System.Drawing.Point(12, 446);
+ this.groupBox1.Name = "groupBox1";
+ this.groupBox1.Size = new System.Drawing.Size(239, 160);
+ this.groupBox1.TabIndex = 3;
+ this.groupBox1.TabStop = false;
+ this.groupBox1.Text = "Current Note Settings";
+ //
+ // label4
+ //
+ this.label4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.label4.AutoSize = true;
+ this.label4.Location = new System.Drawing.Point(175, 131);
+ this.label4.Name = "label4";
+ this.label4.Size = new System.Drawing.Size(12, 15);
+ this.label4.TabIndex = 10;
+ this.label4.Text = "/";
+ //
+ // beat2Numeric
+ //
+ this.beat2Numeric.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.beat2Numeric.Location = new System.Drawing.Point(193, 129);
+ this.beat2Numeric.Maximum = new decimal(new int[] {
+ 1920,
+ 0,
+ 0,
+ 0});
+ this.beat2Numeric.Minimum = new decimal(new int[] {
+ 1,
+ 0,
+ 0,
+ 0});
+ this.beat2Numeric.Name = "beat2Numeric";
+ this.beat2Numeric.Size = new System.Drawing.Size(38, 23);
+ this.beat2Numeric.TabIndex = 9;
+ this.beat2Numeric.Value = new decimal(new int[] {
+ 16,
+ 0,
+ 0,
+ 0});
+ this.beat2Numeric.ValueChanged += new System.EventHandler(this.beat2Numeric_ValueChanged);
+ //
+ // beat1Numeric
+ //
+ this.beat1Numeric.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.beat1Numeric.Location = new System.Drawing.Point(131, 129);
+ this.beat1Numeric.Maximum = new decimal(new int[] {
+ 1920,
+ 0,
+ 0,
+ 0});
+ this.beat1Numeric.Minimum = new decimal(new int[] {
+ 1,
+ 0,
+ 0,
+ -2147483648});
+ this.beat1Numeric.Name = "beat1Numeric";
+ this.beat1Numeric.Size = new System.Drawing.Size(38, 23);
+ this.beat1Numeric.TabIndex = 8;
+ this.beat1Numeric.ValueChanged += new System.EventHandler(this.beat1Numeric_ValueChanged);
+ //
+ // measureNumeric
+ //
+ this.measureNumeric.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.measureNumeric.Location = new System.Drawing.Point(6, 129);
+ this.measureNumeric.Maximum = new decimal(new int[] {
+ 9999,
+ 0,
+ 0,
+ 0});
+ this.measureNumeric.Name = "measureNumeric";
+ this.measureNumeric.Size = new System.Drawing.Size(119, 23);
+ this.measureNumeric.TabIndex = 7;
+ this.measureNumeric.ValueChanged += new System.EventHandler(this.measureNumeric_ValueChanged);
+ //
+ // label3
+ //
+ this.label3.AutoSize = true;
+ this.label3.Location = new System.Drawing.Point(6, 111);
+ this.label3.Name = "label3";
+ this.label3.Size = new System.Drawing.Size(55, 15);
+ this.label3.TabIndex = 6;
+ this.label3.Text = "Measure:";
+ //
+ // sizeTrackBar
+ //
+ this.sizeTrackBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.sizeTrackBar.Location = new System.Drawing.Point(50, 81);
+ this.sizeTrackBar.Maximum = 60;
+ this.sizeTrackBar.Minimum = 1;
+ this.sizeTrackBar.Name = "sizeTrackBar";
+ this.sizeTrackBar.Size = new System.Drawing.Size(183, 45);
+ this.sizeTrackBar.TabIndex = 5;
+ this.sizeTrackBar.TickStyle = System.Windows.Forms.TickStyle.None;
+ this.sizeTrackBar.Value = 1;
+ this.sizeTrackBar.ValueChanged += new System.EventHandler(this.sizeTrackBar_ValueChanged);
+ //
+ // sizeNumeric
+ //
+ this.sizeNumeric.Location = new System.Drawing.Point(6, 81);
+ this.sizeNumeric.Maximum = new decimal(new int[] {
+ 60,
+ 0,
+ 0,
+ 0});
+ this.sizeNumeric.Minimum = new decimal(new int[] {
+ 1,
+ 0,
+ 0,
+ 0});
+ this.sizeNumeric.Name = "sizeNumeric";
+ this.sizeNumeric.Size = new System.Drawing.Size(38, 23);
+ this.sizeNumeric.TabIndex = 4;
+ this.sizeNumeric.Value = new decimal(new int[] {
+ 1,
+ 0,
+ 0,
+ 0});
+ //
+ // label2
+ //
+ this.label2.AutoSize = true;
+ this.label2.Location = new System.Drawing.Point(6, 63);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(30, 15);
+ this.label2.TabIndex = 3;
+ this.label2.Text = "Size:";
+ //
+ // positionTrackBar
+ //
+ this.positionTrackBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.positionTrackBar.Location = new System.Drawing.Point(50, 37);
+ this.positionTrackBar.Maximum = 59;
+ this.positionTrackBar.Name = "positionTrackBar";
+ this.positionTrackBar.Size = new System.Drawing.Size(183, 45);
+ this.positionTrackBar.TabIndex = 2;
+ this.positionTrackBar.TickStyle = System.Windows.Forms.TickStyle.None;
+ this.positionTrackBar.ValueChanged += new System.EventHandler(this.positionTrackBar_ValueChanged);
+ //
+ // positionNumeric
+ //
+ this.positionNumeric.Location = new System.Drawing.Point(6, 37);
+ this.positionNumeric.Maximum = new decimal(new int[] {
+ 59,
+ 0,
+ 0,
+ 0});
+ this.positionNumeric.Name = "positionNumeric";
+ this.positionNumeric.Size = new System.Drawing.Size(38, 23);
+ this.positionNumeric.TabIndex = 1;
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(6, 19);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(53, 15);
+ this.label1.TabIndex = 0;
+ this.label1.Text = "Position:";
+ //
+ // groupBox2
+ //
+ this.groupBox2.Controls.Add(this.flairRadio);
+ this.groupBox2.Controls.Add(this.bonusRadio);
+ this.groupBox2.Controls.Add(this.noBonusRadio);
+ this.groupBox2.Controls.Add(this.endHoldCheck);
+ this.groupBox2.Controls.Add(this.endChartButton);
+ this.groupBox2.Controls.Add(this.holdButton);
+ this.groupBox2.Controls.Add(this.chainButton);
+ this.groupBox2.Controls.Add(this.blueButton);
+ this.groupBox2.Controls.Add(this.redButton);
+ this.groupBox2.Controls.Add(this.greenButton);
+ this.groupBox2.Controls.Add(this.orangeButton);
+ this.groupBox2.Controls.Add(this.tapButton);
+ this.groupBox2.Location = new System.Drawing.Point(12, 27);
+ this.groupBox2.Name = "groupBox2";
+ this.groupBox2.Size = new System.Drawing.Size(109, 358);
+ this.groupBox2.TabIndex = 4;
+ this.groupBox2.TabStop = false;
+ this.groupBox2.Text = "Note Types";
+ //
+ // flairRadio
+ //
+ this.flairRadio.AutoSize = true;
+ this.flairRadio.Location = new System.Drawing.Point(6, 329);
+ this.flairRadio.Name = "flairRadio";
+ this.flairRadio.Size = new System.Drawing.Size(94, 19);
+ this.flairRadio.TabIndex = 16;
+ this.flairRadio.Text = "R Note (Flair)";
+ this.flairRadio.UseVisualStyleBackColor = true;
+ this.flairRadio.CheckedChanged += new System.EventHandler(this.BonusRadioCheck);
+ //
+ // bonusRadio
+ //
+ this.bonusRadio.AutoSize = true;
+ this.bonusRadio.Location = new System.Drawing.Point(6, 304);
+ this.bonusRadio.Name = "bonusRadio";
+ this.bonusRadio.Size = new System.Drawing.Size(79, 19);
+ this.bonusRadio.TabIndex = 15;
+ this.bonusRadio.Text = "Bonus Get";
+ this.bonusRadio.UseVisualStyleBackColor = true;
+ this.bonusRadio.CheckedChanged += new System.EventHandler(this.BonusRadioCheck);
+ //
+ // noBonusRadio
+ //
+ this.noBonusRadio.AutoSize = true;
+ this.noBonusRadio.Checked = true;
+ this.noBonusRadio.Location = new System.Drawing.Point(6, 279);
+ this.noBonusRadio.Name = "noBonusRadio";
+ this.noBonusRadio.Size = new System.Drawing.Size(77, 19);
+ this.noBonusRadio.TabIndex = 14;
+ this.noBonusRadio.TabStop = true;
+ this.noBonusRadio.Text = "No Bonus";
+ this.noBonusRadio.UseVisualStyleBackColor = true;
+ this.noBonusRadio.CheckedChanged += new System.EventHandler(this.BonusRadioCheck);
+ //
+ // endHoldCheck
+ //
+ this.endHoldCheck.AutoSize = true;
+ this.endHoldCheck.Location = new System.Drawing.Point(6, 254);
+ this.endHoldCheck.Name = "endHoldCheck";
+ this.endHoldCheck.Size = new System.Drawing.Size(75, 19);
+ this.endHoldCheck.TabIndex = 13;
+ this.endHoldCheck.Text = "End Hold";
+ this.endHoldCheck.UseVisualStyleBackColor = true;
+ this.endHoldCheck.CheckedChanged += new System.EventHandler(this.endHoldCheck_CheckedChanged);
+ //
+ // endChartButton
+ //
+ this.endChartButton.Location = new System.Drawing.Point(6, 225);
+ this.endChartButton.Name = "endChartButton";
+ this.endChartButton.Size = new System.Drawing.Size(86, 23);
+ this.endChartButton.TabIndex = 12;
+ this.endChartButton.Text = "End of Chart";
+ this.endChartButton.UseVisualStyleBackColor = true;
+ this.endChartButton.Click += new System.EventHandler(this.endChartButton_Click);
+ //
+ // holdButton
+ //
+ this.holdButton.BackColor = System.Drawing.Color.Yellow;
+ this.holdButton.Location = new System.Drawing.Point(6, 196);
+ this.holdButton.Name = "holdButton";
+ this.holdButton.Size = new System.Drawing.Size(86, 23);
+ this.holdButton.TabIndex = 11;
+ this.holdButton.Text = "Hold (H)";
+ this.holdButton.UseVisualStyleBackColor = false;
+ this.holdButton.Click += new System.EventHandler(this.holdButton_Click);
+ //
+ // chainButton
+ //
+ this.chainButton.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(204)))), ((int)(((byte)(190)))), ((int)(((byte)(45)))));
+ this.chainButton.Location = new System.Drawing.Point(6, 167);
+ this.chainButton.Name = "chainButton";
+ this.chainButton.Size = new System.Drawing.Size(86, 23);
+ this.chainButton.TabIndex = 10;
+ this.chainButton.Text = "Chain (Y)";
+ this.chainButton.UseVisualStyleBackColor = false;
+ this.chainButton.Click += new System.EventHandler(this.chainButton_Click);
+ //
+ // blueButton
+ //
+ this.blueButton.BackColor = System.Drawing.Color.Cyan;
+ this.blueButton.ForeColor = System.Drawing.SystemColors.ControlText;
+ this.blueButton.Location = new System.Drawing.Point(6, 138);
+ this.blueButton.Name = "blueButton";
+ this.blueButton.Size = new System.Drawing.Size(86, 23);
+ this.blueButton.TabIndex = 9;
+ this.blueButton.Text = "↓ Snap (B)";
+ this.blueButton.UseVisualStyleBackColor = false;
+ this.blueButton.Click += new System.EventHandler(this.blueButton_Click);
+ //
+ // redButton
+ //
+ this.redButton.BackColor = System.Drawing.Color.Red;
+ this.redButton.ForeColor = System.Drawing.Color.White;
+ this.redButton.Location = new System.Drawing.Point(6, 109);
+ this.redButton.Name = "redButton";
+ this.redButton.Size = new System.Drawing.Size(86, 23);
+ this.redButton.TabIndex = 8;
+ this.redButton.Text = "↑ Snap (R)";
+ this.redButton.UseVisualStyleBackColor = false;
+ this.redButton.Click += new System.EventHandler(this.redButton_Click);
+ //
+ // greenButton
+ //
+ this.greenButton.BackColor = System.Drawing.Color.Lime;
+ this.greenButton.Location = new System.Drawing.Point(6, 80);
+ this.greenButton.Name = "greenButton";
+ this.greenButton.Size = new System.Drawing.Size(86, 23);
+ this.greenButton.TabIndex = 7;
+ this.greenButton.Text = "→ Slide (G)";
+ this.greenButton.UseVisualStyleBackColor = false;
+ this.greenButton.Click += new System.EventHandler(this.greenButton_Click);
+ //
+ // orangeButton
+ //
+ this.orangeButton.BackColor = System.Drawing.Color.Orange;
+ this.orangeButton.Location = new System.Drawing.Point(6, 51);
+ this.orangeButton.Name = "orangeButton";
+ this.orangeButton.Size = new System.Drawing.Size(86, 23);
+ this.orangeButton.TabIndex = 6;
+ this.orangeButton.Text = "← Slide (O)";
+ this.orangeButton.UseVisualStyleBackColor = false;
+ this.orangeButton.Click += new System.EventHandler(this.orangeButton_Click);
+ //
+ // tapButton
+ //
+ this.tapButton.BackColor = System.Drawing.Color.Fuchsia;
+ this.tapButton.Location = new System.Drawing.Point(6, 22);
+ this.tapButton.Name = "tapButton";
+ this.tapButton.Size = new System.Drawing.Size(86, 23);
+ this.tapButton.TabIndex = 5;
+ this.tapButton.Text = "Touch (T)";
+ this.tapButton.UseVisualStyleBackColor = false;
+ this.tapButton.Click += new System.EventHandler(this.tapButton_Click);
+ //
+ // gimmickTypeGroupBox
+ //
+ this.gimmickTypeGroupBox.Controls.Add(this.removeMaskRadio);
+ this.gimmickTypeGroupBox.Controls.Add(this.reverseButton);
+ this.gimmickTypeGroupBox.Controls.Add(this.addMaskRadio);
+ this.gimmickTypeGroupBox.Controls.Add(this.stopButton);
+ this.gimmickTypeGroupBox.Controls.Add(this.hiSpeedButton);
+ this.gimmickTypeGroupBox.Controls.Add(this.timeSigButton);
+ this.gimmickTypeGroupBox.Controls.Add(this.bpmChangeButton);
+ this.gimmickTypeGroupBox.Controls.Add(this.maskButton);
+ this.gimmickTypeGroupBox.Location = new System.Drawing.Point(127, 30);
+ this.gimmickTypeGroupBox.Name = "gimmickTypeGroupBox";
+ this.gimmickTypeGroupBox.Size = new System.Drawing.Size(124, 249);
+ this.gimmickTypeGroupBox.TabIndex = 5;
+ this.gimmickTypeGroupBox.TabStop = false;
+ this.gimmickTypeGroupBox.Text = "Gimmick Types";
+ //
+ // removeMaskRadio
+ //
+ this.removeMaskRadio.AutoSize = true;
+ this.removeMaskRadio.Location = new System.Drawing.Point(6, 222);
+ this.removeMaskRadio.Name = "removeMaskRadio";
+ this.removeMaskRadio.Size = new System.Drawing.Size(99, 19);
+ this.removeMaskRadio.TabIndex = 18;
+ this.removeMaskRadio.Text = "Remove Mask";
+ this.removeMaskRadio.UseVisualStyleBackColor = true;
+ this.removeMaskRadio.CheckedChanged += new System.EventHandler(this.maskRatio_CheckChanged);
+ //
+ // reverseButton
+ //
+ this.reverseButton.Location = new System.Drawing.Point(6, 167);
+ this.reverseButton.Name = "reverseButton";
+ this.reverseButton.Size = new System.Drawing.Size(112, 23);
+ this.reverseButton.TabIndex = 5;
+ this.reverseButton.Text = "Reverse";
+ this.reverseButton.UseVisualStyleBackColor = true;
+ this.reverseButton.Click += new System.EventHandler(this.reverseButton_Click);
+ //
+ // addMaskRadio
+ //
+ this.addMaskRadio.AutoSize = true;
+ this.addMaskRadio.Checked = true;
+ this.addMaskRadio.Location = new System.Drawing.Point(6, 197);
+ this.addMaskRadio.Name = "addMaskRadio";
+ this.addMaskRadio.Size = new System.Drawing.Size(78, 19);
+ this.addMaskRadio.TabIndex = 17;
+ this.addMaskRadio.TabStop = true;
+ this.addMaskRadio.Text = "Add Mask";
+ this.addMaskRadio.UseVisualStyleBackColor = true;
+ this.addMaskRadio.CheckedChanged += new System.EventHandler(this.maskRatio_CheckChanged);
+ //
+ // stopButton
+ //
+ this.stopButton.Location = new System.Drawing.Point(6, 138);
+ this.stopButton.Name = "stopButton";
+ this.stopButton.Size = new System.Drawing.Size(112, 23);
+ this.stopButton.TabIndex = 4;
+ this.stopButton.Text = "Stop";
+ this.stopButton.UseVisualStyleBackColor = true;
+ this.stopButton.Click += new System.EventHandler(this.stopButton_Click);
+ //
+ // hiSpeedButton
+ //
+ this.hiSpeedButton.Location = new System.Drawing.Point(6, 109);
+ this.hiSpeedButton.Name = "hiSpeedButton";
+ this.hiSpeedButton.Size = new System.Drawing.Size(112, 23);
+ this.hiSpeedButton.TabIndex = 3;
+ this.hiSpeedButton.Text = "Hi-Speed";
+ this.hiSpeedButton.UseVisualStyleBackColor = true;
+ this.hiSpeedButton.Click += new System.EventHandler(this.hiSpeedButton_Click);
+ //
+ // timeSigButton
+ //
+ this.timeSigButton.Location = new System.Drawing.Point(6, 80);
+ this.timeSigButton.Name = "timeSigButton";
+ this.timeSigButton.Size = new System.Drawing.Size(112, 23);
+ this.timeSigButton.TabIndex = 2;
+ this.timeSigButton.Text = "Time Signature";
+ this.timeSigButton.UseVisualStyleBackColor = true;
+ this.timeSigButton.Click += new System.EventHandler(this.timeSigButton_Click);
+ //
+ // bpmChangeButton
+ //
+ this.bpmChangeButton.Location = new System.Drawing.Point(6, 51);
+ this.bpmChangeButton.Name = "bpmChangeButton";
+ this.bpmChangeButton.Size = new System.Drawing.Size(112, 23);
+ this.bpmChangeButton.TabIndex = 1;
+ this.bpmChangeButton.Text = "BPM Change";
+ this.bpmChangeButton.UseVisualStyleBackColor = true;
+ this.bpmChangeButton.Click += new System.EventHandler(this.bpmChangeButton_Click);
+ //
+ // maskButton
+ //
+ this.maskButton.Location = new System.Drawing.Point(6, 22);
+ this.maskButton.Name = "maskButton";
+ this.maskButton.Size = new System.Drawing.Size(112, 23);
+ this.maskButton.TabIndex = 0;
+ this.maskButton.Text = "Mask";
+ this.maskButton.UseVisualStyleBackColor = true;
+ this.maskButton.Click += new System.EventHandler(this.maskButton_Click);
+ //
+ // groupBox4
+ //
+ this.groupBox4.Controls.Add(this.centerMaskRadio);
+ this.groupBox4.Controls.Add(this.clockwiseMaskRadio);
+ this.groupBox4.Controls.Add(this.cClockwiseMaskRadio);
+ this.groupBox4.Location = new System.Drawing.Point(127, 285);
+ this.groupBox4.Name = "groupBox4";
+ this.groupBox4.Size = new System.Drawing.Size(124, 100);
+ this.groupBox4.TabIndex = 19;
+ this.groupBox4.TabStop = false;
+ this.groupBox4.Text = "Mask Setting";
+ //
+ // centerMaskRadio
+ //
+ this.centerMaskRadio.AutoSize = true;
+ this.centerMaskRadio.Location = new System.Drawing.Point(6, 72);
+ this.centerMaskRadio.Name = "centerMaskRadio";
+ this.centerMaskRadio.Size = new System.Drawing.Size(91, 19);
+ this.centerMaskRadio.TabIndex = 19;
+ this.centerMaskRadio.Text = "From Center";
+ this.centerMaskRadio.UseVisualStyleBackColor = true;
+ this.centerMaskRadio.CheckedChanged += new System.EventHandler(this.maskRatio_CheckChanged);
+ //
+ // clockwiseMaskRadio
+ //
+ this.clockwiseMaskRadio.AutoSize = true;
+ this.clockwiseMaskRadio.Checked = true;
+ this.clockwiseMaskRadio.Location = new System.Drawing.Point(6, 22);
+ this.clockwiseMaskRadio.Name = "clockwiseMaskRadio";
+ this.clockwiseMaskRadio.Size = new System.Drawing.Size(78, 19);
+ this.clockwiseMaskRadio.TabIndex = 17;
+ this.clockwiseMaskRadio.TabStop = true;
+ this.clockwiseMaskRadio.Text = "Clockwise";
+ this.clockwiseMaskRadio.UseVisualStyleBackColor = true;
+ this.clockwiseMaskRadio.CheckedChanged += new System.EventHandler(this.maskRatio_CheckChanged);
+ //
+ // cClockwiseMaskRadio
+ //
+ this.cClockwiseMaskRadio.AutoSize = true;
+ this.cClockwiseMaskRadio.Location = new System.Drawing.Point(6, 47);
+ this.cClockwiseMaskRadio.Name = "cClockwiseMaskRadio";
+ this.cClockwiseMaskRadio.Size = new System.Drawing.Size(91, 19);
+ this.cClockwiseMaskRadio.TabIndex = 18;
+ this.cClockwiseMaskRadio.Text = "C-Clockwise";
+ this.cClockwiseMaskRadio.UseVisualStyleBackColor = true;
+ this.cClockwiseMaskRadio.CheckedChanged += new System.EventHandler(this.maskRatio_CheckChanged);
+ //
+ // groupBox5
+ //
+ this.groupBox5.Controls.Add(this.currentSelectionLabel);
+ this.groupBox5.Location = new System.Drawing.Point(12, 392);
+ this.groupBox5.Name = "groupBox5";
+ this.groupBox5.Size = new System.Drawing.Size(239, 48);
+ this.groupBox5.TabIndex = 20;
+ this.groupBox5.TabStop = false;
+ this.groupBox5.Text = "Current Selection";
+ //
+ // currentSelectionLabel
+ //
+ this.currentSelectionLabel.AutoSize = true;
+ this.currentSelectionLabel.Font = new System.Drawing.Font("Segoe UI", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+ this.currentSelectionLabel.Location = new System.Drawing.Point(6, 19);
+ this.currentSelectionLabel.Name = "currentSelectionLabel";
+ this.currentSelectionLabel.Size = new System.Drawing.Size(48, 20);
+ this.currentSelectionLabel.TabIndex = 21;
+ this.currentSelectionLabel.Text = "Touch";
+ //
+ // playbackGroupBox
+ //
+ this.playbackGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.playbackGroupBox.Controls.Add(this.songFileLabel);
+ this.playbackGroupBox.Controls.Add(this.label20);
+ this.playbackGroupBox.Controls.Add(this.songTrackBar);
+ this.playbackGroupBox.Controls.Add(this.selectSongButton);
+ this.playbackGroupBox.Controls.Add(this.playButton);
+ this.playbackGroupBox.Location = new System.Drawing.Point(12, 657);
+ this.playbackGroupBox.Name = "playbackGroupBox";
+ this.playbackGroupBox.Size = new System.Drawing.Size(736, 118);
+ this.playbackGroupBox.TabIndex = 32;
+ this.playbackGroupBox.TabStop = false;
+ this.playbackGroupBox.Text = "Playback";
+ //
+ // songFileLabel
+ //
+ this.songFileLabel.AutoSize = true;
+ this.songFileLabel.Location = new System.Drawing.Point(98, 81);
+ this.songFileLabel.Name = "songFileLabel";
+ this.songFileLabel.Size = new System.Drawing.Size(99, 15);
+ this.songFileLabel.TabIndex = 33;
+ this.songFileLabel.Text = "Select File (*.ogg)";
+ //
+ // label20
+ //
+ this.label20.AutoSize = true;
+ this.label20.Font = new System.Drawing.Font("Segoe UI", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+ this.label20.Location = new System.Drawing.Point(6, 77);
+ this.label20.Name = "label20";
+ this.label20.Size = new System.Drawing.Size(73, 20);
+ this.label20.TabIndex = 33;
+ this.label20.Text = "Song File:";
+ //
+ // songTrackBar
+ //
+ this.songTrackBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.songTrackBar.Location = new System.Drawing.Point(98, 22);
+ this.songTrackBar.Name = "songTrackBar";
+ this.songTrackBar.Size = new System.Drawing.Size(632, 45);
+ this.songTrackBar.TabIndex = 2;
+ this.songTrackBar.ValueChanged += new System.EventHandler(this.songTrackBar_ValueChanged);
+ //
+ // selectSongButton
+ //
+ this.selectSongButton.Location = new System.Drawing.Point(6, 51);
+ this.selectSongButton.Name = "selectSongButton";
+ this.selectSongButton.Size = new System.Drawing.Size(86, 23);
+ this.selectSongButton.TabIndex = 1;
+ this.selectSongButton.Text = "Select Song";
+ this.selectSongButton.UseVisualStyleBackColor = true;
+ this.selectSongButton.Click += new System.EventHandler(this.selectSongButton_Click);
+ //
+ // playButton
+ //
+ this.playButton.Location = new System.Drawing.Point(6, 22);
+ this.playButton.Name = "playButton";
+ this.playButton.Size = new System.Drawing.Size(86, 23);
+ this.playButton.TabIndex = 0;
+ this.playButton.Text = "Play (P)";
+ this.playButton.UseVisualStyleBackColor = true;
+ this.playButton.Click += new System.EventHandler(this.playButton_Click);
+ //
+ // openSongDialog
+ //
+ this.openSongDialog.Filter = "Audio Files (*.ogg;*.mod;*.it;*.xm;*.it;*.s3d)|*.ogg;*.mod;*.it;*.xm;*.it;*.s3d";
+ //
+ // updateTimer
+ //
+ this.updateTimer.Interval = 20;
+ this.updateTimer.Tick += new System.EventHandler(this.updateTimer_Tick);
+ //
+ // groupBox9
+ //
+ this.groupBox9.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.groupBox9.Controls.Add(this.label21);
+ this.groupBox9.Controls.Add(this.visualHispeedNumeric);
+ this.groupBox9.Location = new System.Drawing.Point(754, 657);
+ this.groupBox9.Name = "groupBox9";
+ this.groupBox9.Size = new System.Drawing.Size(114, 118);
+ this.groupBox9.TabIndex = 0;
+ this.groupBox9.TabStop = false;
+ this.groupBox9.Text = "Visual Settings";
+ //
+ // label21
+ //
+ this.label21.AutoSize = true;
+ this.label21.Location = new System.Drawing.Point(6, 19);
+ this.label21.Name = "label21";
+ this.label21.Size = new System.Drawing.Size(59, 15);
+ this.label21.TabIndex = 11;
+ this.label21.Text = "Hi-Speed:";
+ //
+ // visualHispeedNumeric
+ //
+ this.visualHispeedNumeric.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.visualHispeedNumeric.DecimalPlaces = 2;
+ this.visualHispeedNumeric.Increment = new decimal(new int[] {
+ 5,
+ 0,
+ 0,
+ 65536});
+ this.visualHispeedNumeric.Location = new System.Drawing.Point(6, 37);
+ this.visualHispeedNumeric.Maximum = new decimal(new int[] {
+ 500,
+ 0,
+ 0,
+ 0});
+ this.visualHispeedNumeric.Minimum = new decimal(new int[] {
+ 1,
+ 0,
+ 0,
+ 196608});
+ this.visualHispeedNumeric.Name = "visualHispeedNumeric";
+ this.visualHispeedNumeric.Size = new System.Drawing.Size(102, 23);
+ this.visualHispeedNumeric.TabIndex = 11;
+ this.visualHispeedNumeric.Value = new decimal(new int[] {
+ 5,
+ 0,
+ 0,
+ 65536});
+ this.visualHispeedNumeric.ValueChanged += new System.EventHandler(this.visualHispeedNumeric_ValueChanged);
+ //
+ // insertButton
+ //
+ this.insertButton.Font = new System.Drawing.Font("Segoe UI", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+ this.insertButton.Location = new System.Drawing.Point(12, 612);
+ this.insertButton.Name = "insertButton";
+ this.insertButton.Size = new System.Drawing.Size(239, 39);
+ this.insertButton.TabIndex = 12;
+ this.insertButton.Text = "Insert Object (I)";
+ this.insertButton.UseVisualStyleBackColor = true;
+ this.insertButton.Click += new System.EventHandler(this.insertButton_Click);
+ //
+ // fileToolStripMenuItem
+ //
+ this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.newToolStripMenuItem,
+ this.openToolStripMenuItem,
+ this.saveToolStripMenuItem,
+ this.saveAsToolStripMenuItem,
+ this.exitToolStripMenuItem});
+ this.fileToolStripMenuItem.Name = "fileToolStripMenuItem";
+ this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20);
+ this.fileToolStripMenuItem.Text = "File";
+ //
+ // newToolStripMenuItem
+ //
+ this.newToolStripMenuItem.Name = "newToolStripMenuItem";
+ this.newToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.N)));
+ this.newToolStripMenuItem.Size = new System.Drawing.Size(186, 22);
+ this.newToolStripMenuItem.Text = "New";
+ this.newToolStripMenuItem.Click += new System.EventHandler(this.newToolStripMenuItem_Click);
+ //
+ // openToolStripMenuItem
+ //
+ this.openToolStripMenuItem.Name = "openToolStripMenuItem";
+ this.openToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O)));
+ this.openToolStripMenuItem.Size = new System.Drawing.Size(186, 22);
+ this.openToolStripMenuItem.Text = "Open";
+ this.openToolStripMenuItem.Click += new System.EventHandler(this.openToolStripMenuItem_Click);
+ //
+ // saveToolStripMenuItem
+ //
+ this.saveToolStripMenuItem.Name = "saveToolStripMenuItem";
+ this.saveToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S)));
+ this.saveToolStripMenuItem.Size = new System.Drawing.Size(186, 22);
+ this.saveToolStripMenuItem.Text = "Save";
+ this.saveToolStripMenuItem.Click += new System.EventHandler(this.saveToolStripMenuItem_Click);
+ //
+ // saveAsToolStripMenuItem
+ //
+ this.saveAsToolStripMenuItem.Name = "saveAsToolStripMenuItem";
+ this.saveAsToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift)
+ | System.Windows.Forms.Keys.S)));
+ this.saveAsToolStripMenuItem.Size = new System.Drawing.Size(186, 22);
+ this.saveAsToolStripMenuItem.Text = "Save As";
+ this.saveAsToolStripMenuItem.Click += new System.EventHandler(this.saveAsToolStripMenuItem_Click);
+ //
+ // exitToolStripMenuItem
+ //
+ this.exitToolStripMenuItem.Name = "exitToolStripMenuItem";
+ this.exitToolStripMenuItem.Size = new System.Drawing.Size(186, 22);
+ this.exitToolStripMenuItem.Text = "Exit";
+ this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click);
+ //
+ // viewToolStripMenuItem
+ //
+ this.viewToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.showCursorToolStripMenuItem,
+ this.showCursorDuringPlaybackToolStripMenuItem,
+ this.highlightViewedNoteToolStripMenuItem});
+ this.viewToolStripMenuItem.Name = "viewToolStripMenuItem";
+ this.viewToolStripMenuItem.Size = new System.Drawing.Size(44, 20);
+ this.viewToolStripMenuItem.Text = "View";
+ //
+ // showCursorToolStripMenuItem
+ //
+ this.showCursorToolStripMenuItem.Checked = true;
+ this.showCursorToolStripMenuItem.CheckOnClick = true;
+ this.showCursorToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked;
+ this.showCursorToolStripMenuItem.Name = "showCursorToolStripMenuItem";
+ this.showCursorToolStripMenuItem.Size = new System.Drawing.Size(230, 22);
+ this.showCursorToolStripMenuItem.Text = "Show Cursor";
+ this.showCursorToolStripMenuItem.Click += new System.EventHandler(this.showCursorToolStripMenuItem_Click);
+ //
+ // showCursorDuringPlaybackToolStripMenuItem
+ //
+ this.showCursorDuringPlaybackToolStripMenuItem.Name = "showCursorDuringPlaybackToolStripMenuItem";
+ this.showCursorDuringPlaybackToolStripMenuItem.Size = new System.Drawing.Size(230, 22);
+ this.showCursorDuringPlaybackToolStripMenuItem.Text = "Show Cursor During Playback";
+ //
+ // highlightViewedNoteToolStripMenuItem
+ //
+ this.highlightViewedNoteToolStripMenuItem.Checked = true;
+ this.highlightViewedNoteToolStripMenuItem.CheckOnClick = true;
+ this.highlightViewedNoteToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked;
+ this.highlightViewedNoteToolStripMenuItem.Name = "highlightViewedNoteToolStripMenuItem";
+ this.highlightViewedNoteToolStripMenuItem.Size = new System.Drawing.Size(230, 22);
+ this.highlightViewedNoteToolStripMenuItem.Text = "Highlight Viewed Note";
+ //
+ // chartToolStripMenuItem
+ //
+ this.chartToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.initialChartSettingsToolStripMenuItem});
+ this.chartToolStripMenuItem.Name = "chartToolStripMenuItem";
+ this.chartToolStripMenuItem.Size = new System.Drawing.Size(48, 20);
+ this.chartToolStripMenuItem.Text = "Chart";
+ //
+ // initialChartSettingsToolStripMenuItem
+ //
+ this.initialChartSettingsToolStripMenuItem.Name = "initialChartSettingsToolStripMenuItem";
+ this.initialChartSettingsToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
+ this.initialChartSettingsToolStripMenuItem.Text = "Initial Chart Settings";
+ this.initialChartSettingsToolStripMenuItem.Click += new System.EventHandler(this.initialChartSettingsToolStripMenuItem_Click);
+ //
+ // aboutToolStripMenuItem
+ //
+ this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem";
+ this.aboutToolStripMenuItem.Size = new System.Drawing.Size(52, 20);
+ this.aboutToolStripMenuItem.Text = "About";
+ this.aboutToolStripMenuItem.Click += new System.EventHandler(this.aboutToolStripMenuItem_Click);
+ //
+ // menuStrip
+ //
+ this.menuStrip.BackColor = System.Drawing.SystemColors.ControlDark;
+ this.menuStrip.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+ this.menuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.fileToolStripMenuItem,
+ this.editToolStripMenuItem,
+ this.viewToolStripMenuItem,
+ this.chartToolStripMenuItem,
+ this.aboutToolStripMenuItem});
+ this.menuStrip.Location = new System.Drawing.Point(0, 0);
+ this.menuStrip.Name = "menuStrip";
+ this.menuStrip.Size = new System.Drawing.Size(1142, 24);
+ this.menuStrip.TabIndex = 0;
+ this.menuStrip.Text = "menuStrip1";
+ //
+ // editToolStripMenuItem
+ //
+ this.editToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.undoToolStripMenuItem,
+ this.redoToolStripMenuItem});
+ this.editToolStripMenuItem.Name = "editToolStripMenuItem";
+ this.editToolStripMenuItem.Size = new System.Drawing.Size(39, 20);
+ this.editToolStripMenuItem.Text = "Edit";
+ //
+ // undoToolStripMenuItem
+ //
+ this.undoToolStripMenuItem.Name = "undoToolStripMenuItem";
+ this.undoToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Z)));
+ this.undoToolStripMenuItem.Size = new System.Drawing.Size(144, 22);
+ this.undoToolStripMenuItem.Text = "Undo";
+ this.undoToolStripMenuItem.Click += new System.EventHandler(this.undoToolStripMenuItem_Click);
+ //
+ // redoToolStripMenuItem
+ //
+ this.redoToolStripMenuItem.Name = "redoToolStripMenuItem";
+ this.redoToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Y)));
+ this.redoToolStripMenuItem.Size = new System.Drawing.Size(144, 22);
+ this.redoToolStripMenuItem.Text = "Redo";
+ this.redoToolStripMenuItem.Click += new System.EventHandler(this.redoToolStripMenuItem_Click);
+ //
+ // groupBox6
+ //
+ this.groupBox6.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.groupBox6.Controls.Add(this.gimmickDeleteButton);
+ this.groupBox6.Controls.Add(this.gimmickEditButton);
+ this.groupBox6.Controls.Add(this.gimmickBeatLabel);
+ this.groupBox6.Controls.Add(this.gimmickValueLabel);
+ this.groupBox6.Controls.Add(this.gimmickTypeLabel);
+ this.groupBox6.Controls.Add(this.gimmickMeasureLabel);
+ this.groupBox6.Controls.Add(this.label8);
+ this.groupBox6.Controls.Add(this.label7);
+ this.groupBox6.Controls.Add(this.label6);
+ this.groupBox6.Controls.Add(this.label5);
+ this.groupBox6.Controls.Add(this.gimmickNextButton);
+ this.groupBox6.Controls.Add(this.gimmickPrevButton);
+ this.groupBox6.Location = new System.Drawing.Point(874, 633);
+ this.groupBox6.Name = "groupBox6";
+ this.groupBox6.Size = new System.Drawing.Size(256, 142);
+ this.groupBox6.TabIndex = 33;
+ this.groupBox6.TabStop = false;
+ this.groupBox6.Text = "Gimmick View";
+ //
+ // gimmickDeleteButton
+ //
+ this.gimmickDeleteButton.ForeColor = System.Drawing.Color.Red;
+ this.gimmickDeleteButton.Location = new System.Drawing.Point(134, 109);
+ this.gimmickDeleteButton.Name = "gimmickDeleteButton";
+ this.gimmickDeleteButton.Size = new System.Drawing.Size(113, 23);
+ this.gimmickDeleteButton.TabIndex = 11;
+ this.gimmickDeleteButton.Text = "Delete Gimmick";
+ this.gimmickDeleteButton.UseVisualStyleBackColor = true;
+ this.gimmickDeleteButton.Click += new System.EventHandler(this.gimmickDeleteButton_Click);
+ //
+ // gimmickEditButton
+ //
+ this.gimmickEditButton.Location = new System.Drawing.Point(6, 109);
+ this.gimmickEditButton.Name = "gimmickEditButton";
+ this.gimmickEditButton.Size = new System.Drawing.Size(113, 23);
+ this.gimmickEditButton.TabIndex = 10;
+ this.gimmickEditButton.Text = "Edit Gimmick";
+ this.gimmickEditButton.UseVisualStyleBackColor = true;
+ this.gimmickEditButton.Click += new System.EventHandler(this.gimmickEditButton_Click);
+ //
+ // gimmickBeatLabel
+ //
+ this.gimmickBeatLabel.AutoSize = true;
+ this.gimmickBeatLabel.Location = new System.Drawing.Point(173, 47);
+ this.gimmickBeatLabel.Name = "gimmickBeatLabel";
+ this.gimmickBeatLabel.Size = new System.Drawing.Size(36, 15);
+ this.gimmickBeatLabel.TabIndex = 9;
+ this.gimmickBeatLabel.Text = "None";
+ //
+ // gimmickValueLabel
+ //
+ this.gimmickValueLabel.AutoSize = true;
+ this.gimmickValueLabel.Location = new System.Drawing.Point(76, 89);
+ this.gimmickValueLabel.Name = "gimmickValueLabel";
+ this.gimmickValueLabel.Size = new System.Drawing.Size(36, 15);
+ this.gimmickValueLabel.TabIndex = 8;
+ this.gimmickValueLabel.Text = "None";
+ //
+ // gimmickTypeLabel
+ //
+ this.gimmickTypeLabel.AutoSize = true;
+ this.gimmickTypeLabel.Location = new System.Drawing.Point(76, 68);
+ this.gimmickTypeLabel.Name = "gimmickTypeLabel";
+ this.gimmickTypeLabel.Size = new System.Drawing.Size(36, 15);
+ this.gimmickTypeLabel.TabIndex = 7;
+ this.gimmickTypeLabel.Text = "None";
+ //
+ // gimmickMeasureLabel
+ //
+ this.gimmickMeasureLabel.AutoSize = true;
+ this.gimmickMeasureLabel.Location = new System.Drawing.Point(76, 47);
+ this.gimmickMeasureLabel.Name = "gimmickMeasureLabel";
+ this.gimmickMeasureLabel.Size = new System.Drawing.Size(36, 15);
+ this.gimmickMeasureLabel.TabIndex = 6;
+ this.gimmickMeasureLabel.Text = "None";
+ //
+ // label8
+ //
+ this.label8.AutoSize = true;
+ this.label8.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point);
+ this.label8.Location = new System.Drawing.Point(128, 45);
+ this.label8.Name = "label8";
+ this.label8.Size = new System.Drawing.Size(39, 17);
+ this.label8.TabIndex = 5;
+ this.label8.Text = "Beat:";
+ //
+ // label7
+ //
+ this.label7.AutoSize = true;
+ this.label7.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point);
+ this.label7.Location = new System.Drawing.Point(24, 87);
+ this.label7.Name = "label7";
+ this.label7.Size = new System.Drawing.Size(46, 17);
+ this.label7.TabIndex = 4;
+ this.label7.Text = "Value:";
+ //
+ // label6
+ //
+ this.label6.AutoSize = true;
+ this.label6.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point);
+ this.label6.Location = new System.Drawing.Point(29, 66);
+ this.label6.Name = "label6";
+ this.label6.Size = new System.Drawing.Size(41, 17);
+ this.label6.TabIndex = 3;
+ this.label6.Text = "Type:";
+ //
+ // label5
+ //
+ this.label5.AutoSize = true;
+ this.label5.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point);
+ this.label5.Location = new System.Drawing.Point(6, 45);
+ this.label5.Name = "label5";
+ this.label5.Size = new System.Drawing.Size(64, 17);
+ this.label5.TabIndex = 2;
+ this.label5.Text = "Measure:";
+ //
+ // gimmickNextButton
+ //
+ this.gimmickNextButton.Location = new System.Drawing.Point(134, 19);
+ this.gimmickNextButton.Name = "gimmickNextButton";
+ this.gimmickNextButton.Size = new System.Drawing.Size(116, 23);
+ this.gimmickNextButton.TabIndex = 1;
+ this.gimmickNextButton.Text = "Next Gimmick";
+ this.gimmickNextButton.UseVisualStyleBackColor = true;
+ this.gimmickNextButton.Click += new System.EventHandler(this.gimmickNextButton_Click);
+ //
+ // gimmickPrevButton
+ //
+ this.gimmickPrevButton.Location = new System.Drawing.Point(6, 19);
+ this.gimmickPrevButton.Name = "gimmickPrevButton";
+ this.gimmickPrevButton.Size = new System.Drawing.Size(116, 23);
+ this.gimmickPrevButton.TabIndex = 0;
+ this.gimmickPrevButton.Text = "Previous Gimmick";
+ this.gimmickPrevButton.UseVisualStyleBackColor = true;
+ this.gimmickPrevButton.Click += new System.EventHandler(this.gimmickPrevButton_Click);
+ //
+ // noteViewGroupBox
+ //
+ this.noteViewGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.noteViewGroupBox.Controls.Add(this.noteMaskLabel);
+ this.noteViewGroupBox.Controls.Add(this.label9);
+ this.noteViewGroupBox.Controls.Add(this.noteSizeLabel);
+ this.noteViewGroupBox.Controls.Add(this.label17);
+ this.noteViewGroupBox.Controls.Add(this.noteNextMeasureButton);
+ this.noteViewGroupBox.Controls.Add(this.notePrevMeasureButton);
+ this.noteViewGroupBox.Controls.Add(this.noteDeleteSelectedButton);
+ this.noteViewGroupBox.Controls.Add(this.noteEditSelectedButton);
+ this.noteViewGroupBox.Controls.Add(this.noteBeatLabel);
+ this.noteViewGroupBox.Controls.Add(this.notePositionLabel);
+ this.noteViewGroupBox.Controls.Add(this.noteTypeLabel);
+ this.noteViewGroupBox.Controls.Add(this.noteMeasureLabel);
+ this.noteViewGroupBox.Controls.Add(this.label13);
+ this.noteViewGroupBox.Controls.Add(this.label14);
+ this.noteViewGroupBox.Controls.Add(this.label15);
+ this.noteViewGroupBox.Controls.Add(this.label16);
+ this.noteViewGroupBox.Controls.Add(this.noteNextButton);
+ this.noteViewGroupBox.Controls.Add(this.notePrevButton);
+ this.noteViewGroupBox.Location = new System.Drawing.Point(874, 420);
+ this.noteViewGroupBox.Name = "noteViewGroupBox";
+ this.noteViewGroupBox.Size = new System.Drawing.Size(256, 207);
+ this.noteViewGroupBox.TabIndex = 34;
+ this.noteViewGroupBox.TabStop = false;
+ this.noteViewGroupBox.Text = "Note View";
+ //
+ // noteMaskLabel
+ //
+ this.noteMaskLabel.AutoSize = true;
+ this.noteMaskLabel.Location = new System.Drawing.Point(173, 139);
+ this.noteMaskLabel.Name = "noteMaskLabel";
+ this.noteMaskLabel.Size = new System.Drawing.Size(29, 15);
+ this.noteMaskLabel.TabIndex = 17;
+ this.noteMaskLabel.Text = "N/A";
+ //
+ // label9
+ //
+ this.label9.AutoSize = true;
+ this.label9.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point);
+ this.label9.Location = new System.Drawing.Point(85, 137);
+ this.label9.Name = "label9";
+ this.label9.Size = new System.Drawing.Size(82, 17);
+ this.label9.TabIndex = 16;
+ this.label9.Text = "Mask Value:";
+ //
+ // noteSizeLabel
+ //
+ this.noteSizeLabel.AutoSize = true;
+ this.noteSizeLabel.Location = new System.Drawing.Point(173, 118);
+ this.noteSizeLabel.Name = "noteSizeLabel";
+ this.noteSizeLabel.Size = new System.Drawing.Size(36, 15);
+ this.noteSizeLabel.TabIndex = 15;
+ this.noteSizeLabel.Text = "None";
+ //
+ // label17
+ //
+ this.label17.AutoSize = true;
+ this.label17.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point);
+ this.label17.Location = new System.Drawing.Point(131, 116);
+ this.label17.Name = "label17";
+ this.label17.Size = new System.Drawing.Size(36, 17);
+ this.label17.TabIndex = 14;
+ this.label17.Text = "Size:";
+ //
+ // noteNextMeasureButton
+ //
+ this.noteNextMeasureButton.Location = new System.Drawing.Point(134, 48);
+ this.noteNextMeasureButton.Name = "noteNextMeasureButton";
+ this.noteNextMeasureButton.Size = new System.Drawing.Size(116, 23);
+ this.noteNextMeasureButton.TabIndex = 13;
+ this.noteNextMeasureButton.Text = "Next Measure >>";
+ this.noteNextMeasureButton.UseVisualStyleBackColor = true;
+ this.noteNextMeasureButton.Click += new System.EventHandler(this.noteNextMeasureButton_Click);
+ //
+ // notePrevMeasureButton
+ //
+ this.notePrevMeasureButton.Location = new System.Drawing.Point(6, 48);
+ this.notePrevMeasureButton.Name = "notePrevMeasureButton";
+ this.notePrevMeasureButton.Size = new System.Drawing.Size(116, 23);
+ this.notePrevMeasureButton.TabIndex = 12;
+ this.notePrevMeasureButton.Text = "<< Prev Measure";
+ this.notePrevMeasureButton.UseVisualStyleBackColor = true;
+ this.notePrevMeasureButton.Click += new System.EventHandler(this.notePrevMeasureButton_Click);
+ //
+ // noteDeleteSelectedButton
+ //
+ this.noteDeleteSelectedButton.ForeColor = System.Drawing.Color.Red;
+ this.noteDeleteSelectedButton.Location = new System.Drawing.Point(134, 157);
+ this.noteDeleteSelectedButton.Name = "noteDeleteSelectedButton";
+ this.noteDeleteSelectedButton.Size = new System.Drawing.Size(113, 43);
+ this.noteDeleteSelectedButton.TabIndex = 11;
+ this.noteDeleteSelectedButton.Text = "Delete Selected Note";
+ this.noteDeleteSelectedButton.UseVisualStyleBackColor = true;
+ this.noteDeleteSelectedButton.Click += new System.EventHandler(this.noteDeleteSelectedButton_Click);
+ //
+ // noteEditSelectedButton
+ //
+ this.noteEditSelectedButton.Location = new System.Drawing.Point(6, 157);
+ this.noteEditSelectedButton.Name = "noteEditSelectedButton";
+ this.noteEditSelectedButton.Size = new System.Drawing.Size(113, 43);
+ this.noteEditSelectedButton.TabIndex = 10;
+ this.noteEditSelectedButton.Text = "Edit Selected Note";
+ this.noteEditSelectedButton.UseVisualStyleBackColor = true;
+ this.noteEditSelectedButton.Click += new System.EventHandler(this.noteEditSelectedButton_Click);
+ //
+ // noteBeatLabel
+ //
+ this.noteBeatLabel.AutoSize = true;
+ this.noteBeatLabel.Location = new System.Drawing.Point(173, 76);
+ this.noteBeatLabel.Name = "noteBeatLabel";
+ this.noteBeatLabel.Size = new System.Drawing.Size(36, 15);
+ this.noteBeatLabel.TabIndex = 9;
+ this.noteBeatLabel.Text = "None";
+ //
+ // notePositionLabel
+ //
+ this.notePositionLabel.AutoSize = true;
+ this.notePositionLabel.Location = new System.Drawing.Point(76, 118);
+ this.notePositionLabel.Name = "notePositionLabel";
+ this.notePositionLabel.Size = new System.Drawing.Size(36, 15);
+ this.notePositionLabel.TabIndex = 8;
+ this.notePositionLabel.Text = "None";
+ //
+ // noteTypeLabel
+ //
+ this.noteTypeLabel.AutoSize = true;
+ this.noteTypeLabel.Location = new System.Drawing.Point(76, 97);
+ this.noteTypeLabel.Name = "noteTypeLabel";
+ this.noteTypeLabel.Size = new System.Drawing.Size(36, 15);
+ this.noteTypeLabel.TabIndex = 7;
+ this.noteTypeLabel.Text = "None";
+ //
+ // noteMeasureLabel
+ //
+ this.noteMeasureLabel.AutoSize = true;
+ this.noteMeasureLabel.Location = new System.Drawing.Point(76, 76);
+ this.noteMeasureLabel.Name = "noteMeasureLabel";
+ this.noteMeasureLabel.Size = new System.Drawing.Size(36, 15);
+ this.noteMeasureLabel.TabIndex = 6;
+ this.noteMeasureLabel.Text = "None";
+ //
+ // label13
+ //
+ this.label13.AutoSize = true;
+ this.label13.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point);
+ this.label13.Location = new System.Drawing.Point(128, 74);
+ this.label13.Name = "label13";
+ this.label13.Size = new System.Drawing.Size(39, 17);
+ this.label13.TabIndex = 5;
+ this.label13.Text = "Beat:";
+ //
+ // label14
+ //
+ this.label14.AutoSize = true;
+ this.label14.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point);
+ this.label14.Location = new System.Drawing.Point(7, 116);
+ this.label14.Name = "label14";
+ this.label14.Size = new System.Drawing.Size(63, 17);
+ this.label14.TabIndex = 4;
+ this.label14.Text = "Position:";
+ //
+ // label15
+ //
+ this.label15.AutoSize = true;
+ this.label15.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point);
+ this.label15.Location = new System.Drawing.Point(29, 95);
+ this.label15.Name = "label15";
+ this.label15.Size = new System.Drawing.Size(41, 17);
+ this.label15.TabIndex = 3;
+ this.label15.Text = "Type:";
+ //
+ // label16
+ //
+ this.label16.AutoSize = true;
+ this.label16.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point);
+ this.label16.Location = new System.Drawing.Point(6, 74);
+ this.label16.Name = "label16";
+ this.label16.Size = new System.Drawing.Size(64, 17);
+ this.label16.TabIndex = 2;
+ this.label16.Text = "Measure:";
+ //
+ // noteNextButton
+ //
+ this.noteNextButton.Location = new System.Drawing.Point(134, 19);
+ this.noteNextButton.Name = "noteNextButton";
+ this.noteNextButton.Size = new System.Drawing.Size(116, 23);
+ this.noteNextButton.TabIndex = 1;
+ this.noteNextButton.Text = "Next Note >";
+ this.noteNextButton.UseVisualStyleBackColor = true;
+ this.noteNextButton.Click += new System.EventHandler(this.noteNextButton_Click);
+ //
+ // notePrevButton
+ //
+ this.notePrevButton.Location = new System.Drawing.Point(6, 19);
+ this.notePrevButton.Name = "notePrevButton";
+ this.notePrevButton.Size = new System.Drawing.Size(116, 23);
+ this.notePrevButton.TabIndex = 0;
+ this.notePrevButton.Text = "< Previous Note";
+ this.notePrevButton.UseVisualStyleBackColor = true;
+ this.notePrevButton.Click += new System.EventHandler(this.notePrevButton_Click);
+ //
+ // autoSaveTimer
+ //
+ this.autoSaveTimer.Tick += new System.EventHandler(this.autoSaveTimer_Tick);
+ //
+ // MainForm
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.BackColor = System.Drawing.SystemColors.ControlDark;
+ this.ClientSize = new System.Drawing.Size(1142, 787);
+ this.Controls.Add(this.noteViewGroupBox);
+ this.Controls.Add(this.groupBox6);
+ this.Controls.Add(this.insertButton);
+ this.Controls.Add(this.groupBox9);
+ this.Controls.Add(this.playbackGroupBox);
+ this.Controls.Add(this.groupBox5);
+ this.Controls.Add(this.groupBox4);
+ this.Controls.Add(this.gimmickTypeGroupBox);
+ this.Controls.Add(this.groupBox2);
+ this.Controls.Add(this.groupBox1);
+ this.Controls.Add(this.circlePanel);
+ this.Controls.Add(this.menuStrip);
+ this.MainMenuStrip = this.menuStrip;
+ this.MinimumSize = new System.Drawing.Size(1158, 826);
+ this.Name = "MainForm";
+ this.Text = "BAKKA Sharp - [New File]";
+ this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainForm_FormClosing);
+ this.Resize += new System.EventHandler(this.MainForm_Resize);
+ this.groupBox1.ResumeLayout(false);
+ this.groupBox1.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.beat2Numeric)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.beat1Numeric)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.measureNumeric)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.sizeTrackBar)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.sizeNumeric)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.positionTrackBar)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.positionNumeric)).EndInit();
+ this.groupBox2.ResumeLayout(false);
+ this.groupBox2.PerformLayout();
+ this.gimmickTypeGroupBox.ResumeLayout(false);
+ this.gimmickTypeGroupBox.PerformLayout();
+ this.groupBox4.ResumeLayout(false);
+ this.groupBox4.PerformLayout();
+ this.groupBox5.ResumeLayout(false);
+ this.groupBox5.PerformLayout();
+ this.playbackGroupBox.ResumeLayout(false);
+ this.playbackGroupBox.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.songTrackBar)).EndInit();
+ this.groupBox9.ResumeLayout(false);
+ this.groupBox9.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.visualHispeedNumeric)).EndInit();
+ this.menuStrip.ResumeLayout(false);
+ this.menuStrip.PerformLayout();
+ this.groupBox6.ResumeLayout(false);
+ this.groupBox6.PerformLayout();
+ this.noteViewGroupBox.ResumeLayout(false);
+ this.noteViewGroupBox.PerformLayout();
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+ private OpenFileDialog openFileDialog;
+ private SaveFileDialog saveFileDialog;
+ private Panel circlePanel;
+ private GroupBox groupBox1;
+ private Label label4;
+ private NumericUpDown beat2Numeric;
+ private NumericUpDown beat1Numeric;
+ private NumericUpDown measureNumeric;
+ private Label label3;
+ private TrackBar sizeTrackBar;
+ private NumericUpDown sizeNumeric;
+ private Label label2;
+ private TrackBar positionTrackBar;
+ private NumericUpDown positionNumeric;
+ private Label label1;
+ private GroupBox groupBox2;
+ private RadioButton flairRadio;
+ private RadioButton bonusRadio;
+ private RadioButton noBonusRadio;
+ private CheckBox endHoldCheck;
+ private Button endChartButton;
+ private Button holdButton;
+ private Button chainButton;
+ private Button blueButton;
+ private Button redButton;
+ private Button greenButton;
+ private Button orangeButton;
+ private Button tapButton;
+ private GroupBox gimmickTypeGroupBox;
+ private RadioButton removeMaskRadio;
+ private Button reverseButton;
+ private RadioButton addMaskRadio;
+ private Button stopButton;
+ private Button hiSpeedButton;
+ private Button timeSigButton;
+ private Button bpmChangeButton;
+ private Button maskButton;
+ private GroupBox groupBox4;
+ private RadioButton centerMaskRadio;
+ private RadioButton clockwiseMaskRadio;
+ private RadioButton cClockwiseMaskRadio;
+ private GroupBox groupBox5;
+ private Label currentSelectionLabel;
+ private GroupBox playbackGroupBox;
+ private Label songFileLabel;
+ private Label label20;
+ private TrackBar songTrackBar;
+ private Button selectSongButton;
+ private Button playButton;
+ private OpenFileDialog openSongDialog;
+ private System.Windows.Forms.Timer updateTimer;
+ private GroupBox groupBox9;
+ private Label label21;
+ private NumericUpDown visualHispeedNumeric;
+ private Button insertButton;
+ private ToolStripMenuItem fileToolStripMenuItem;
+ private ToolStripMenuItem newToolStripMenuItem;
+ private ToolStripMenuItem openToolStripMenuItem;
+ private ToolStripMenuItem saveToolStripMenuItem;
+ private ToolStripMenuItem saveAsToolStripMenuItem;
+ private ToolStripMenuItem exitToolStripMenuItem;
+ private ToolStripMenuItem viewToolStripMenuItem;
+ private ToolStripMenuItem showCursorToolStripMenuItem;
+ private ToolStripMenuItem showCursorDuringPlaybackToolStripMenuItem;
+ private ToolStripMenuItem highlightViewedNoteToolStripMenuItem;
+ private ToolStripMenuItem chartToolStripMenuItem;
+ private ToolStripMenuItem initialChartSettingsToolStripMenuItem;
+ private ToolStripMenuItem aboutToolStripMenuItem;
+ private MenuStrip menuStrip;
+ private GroupBox groupBox6;
+ private Button gimmickDeleteButton;
+ private Button gimmickEditButton;
+ private Label gimmickBeatLabel;
+ private Label gimmickValueLabel;
+ private Label gimmickTypeLabel;
+ private Label gimmickMeasureLabel;
+ private Label label8;
+ private Label label7;
+ private Label label6;
+ private Label label5;
+ private Button gimmickNextButton;
+ private Button gimmickPrevButton;
+ private GroupBox noteViewGroupBox;
+ private Label noteMaskLabel;
+ private Label label9;
+ private Label noteSizeLabel;
+ private Label label17;
+ private Button noteNextMeasureButton;
+ private Button notePrevMeasureButton;
+ private Button noteDeleteSelectedButton;
+ private Button noteEditSelectedButton;
+ private Label noteBeatLabel;
+ private Label notePositionLabel;
+ private Label noteTypeLabel;
+ private Label noteMeasureLabel;
+ private Label label13;
+ private Label label14;
+ private Label label15;
+ private Label label16;
+ private Button noteNextButton;
+ private Button notePrevButton;
+ private ToolStripMenuItem editToolStripMenuItem;
+ private ToolStripMenuItem undoToolStripMenuItem;
+ private ToolStripMenuItem redoToolStripMenuItem;
+ private System.Windows.Forms.Timer autoSaveTimer;
+ }
+}
\ No newline at end of file
diff --git a/BAKKA-Sharp/MainForm.cs b/BAKKA-Sharp/MainForm.cs
new file mode 100644
index 0000000..97ebe9f
--- /dev/null
+++ b/BAKKA-Sharp/MainForm.cs
@@ -0,0 +1,1930 @@
+using System.Drawing.Drawing2D;
+using System.Reflection;
+using IrrKlang;
+using BAKKA_Sharp.Operations;
+using Tomlyn;
+
+namespace BAKKA_Sharp
+{
+ public partial class MainForm : Form
+ {
+ // Chart
+ Chart chart = new();
+ string songFilePath = "";
+ bool isNewFile = true;
+ bool isRecoveredFile = false;
+
+ // Operations
+ OperationManager opManager = new OperationManager();
+
+ // Graphics
+ BufferedGraphicsContext gfxContext;
+ BufferedGraphics bufGraphics;
+ CircleView circleView;
+
+ // Note Selection
+ NoteType currentNoteType = NoteType.TouchNoBonus;
+ GimmickType currentGimmickType = GimmickType.NoGimmick;
+ BonusType currentBonusType = BonusType.NoBonus;
+ int selectedGimmickIndex = -1;
+ int selectedNoteIndex = -1;
+ Note lastNote;
+
+ // Mouse
+ int mouseDownPos = -1;
+ Point mouseDownPt;
+ int lastMousePos = -1;
+ bool rolloverPos = false;
+ bool rolloverNeg = false;
+
+ // Music
+ ISoundEngine soundEngine = new ISoundEngine();
+ ISound currentSong;
+
+ // Control updates
+ enum EventSource
+ {
+ None,
+ MouseWheel,
+ SongPlaying,
+ TrackBar
+ };
+ EventSource valueTriggerEvent = EventSource.None;
+
+ // Tool Forms
+ GimmickForm gimmickForm;
+ InitChartSettingsForm initSettingsForm;
+
+ // Program info
+ string fileVersion = "";
+ UserSettings userSettings;
+ string tempFilePath = "";
+ string tempStatusPath = "";
+ string autosaveFile = "";
+
+ public MainForm()
+ {
+ InitializeComponent();
+
+ // Extra Forms stuff
+ circlePanel.MouseWheel += circlePanel_MouseWheel;
+
+ // Setup graphics
+ gfxContext = BufferedGraphicsManager.Current;
+ SetBufferedGraphicsContext();
+ circleView = new CircleView(circlePanel.Size);
+
+ // Force double buffering on circlePanel
+ Type controlType = circlePanel.GetType();
+ PropertyInfo pi = controlType.GetProperty("DoubleBuffered", BindingFlags.Instance | BindingFlags.NonPublic);
+ pi.SetValue(circlePanel, true);
+
+ // Tool Forms
+ gimmickForm = new GimmickForm();
+ initSettingsForm = new InitChartSettingsForm();
+
+ // Operation Manager
+ opManager.OperationHistoryChanged += (s, e) =>
+ {
+ chart.Notes = chart.Notes.OrderBy(x => x.Measure).ToList();
+ chart.Gimmicks = chart.Gimmicks.OrderBy(x => x.Measure).ToList();
+ if (selectedNoteIndex >= chart.Notes.Count)
+ selectedNoteIndex = chart.Notes.Count - 1;
+ else if (selectedNoteIndex == -1 && chart.Notes.Count > 0)
+ selectedNoteIndex = 0;
+ UpdateNoteLabels();
+ if (selectedGimmickIndex >= chart.Gimmicks.Count)
+ selectedGimmickIndex = chart.Gimmicks.Count - 1;
+ else if (selectedGimmickIndex == -1 && chart.Gimmicks.Count > 0)
+ selectedGimmickIndex = 0;
+ UpdateGimmickLabels();
+ SetText();
+ circlePanel.Invalidate();
+ };
+
+ // Program info
+ var asm = Assembly.GetExecutingAssembly();
+ var fvi = System.Diagnostics.FileVersionInfo.GetVersionInfo(asm.Location);
+ if (fvi.FileVersion != null)
+ {
+ fileVersion = fvi.FileVersion;
+ SetText();
+ }
+
+ // Look for user settings
+ if (File.Exists("settings.toml"))
+ userSettings = Toml.ToModel(File.ReadAllText("settings.toml"));
+ else
+ {
+ userSettings = new UserSettings();
+ File.WriteAllText("settings.toml", Toml.FromModel(userSettings));
+ }
+ // Apply settings
+ showCursorToolStripMenuItem.Checked = userSettings.ViewSettings.ShowCursor;
+ showCursorDuringPlaybackToolStripMenuItem.Checked = userSettings.ViewSettings.ShowCursorDuringPlayback;
+ highlightViewedNoteToolStripMenuItem.Checked = userSettings.ViewSettings.HighlightViewedNote;
+ autoSaveTimer.Interval = userSettings.SaveSettings.AutoSaveInterval * 60000;
+ autoSaveTimer.Enabled = true;
+
+ // Look for temp files from previous runs
+ var tempFile = Directory.GetFiles(Path.GetTempPath(), "*.bakka");
+ var oldAutosave = Directory.GetFiles(Path.GetTempPath(), "*.mer");
+ if (tempFile.Length > 0)
+ {
+ tempStatusPath = tempFile[0];
+ var statusLines = File.ReadAllLines(tempStatusPath);
+ if (statusLines.Length > 0)
+ {
+ bool checkAutosave = false;
+ bool.TryParse(statusLines[0], out checkAutosave);
+ if (checkAutosave)
+ {
+ string autosaveTime = ".";
+ if (statusLines.Length > 1)
+ autosaveTime = " from " + statusLines[1] + ".";
+ if (oldAutosave.Length > 0)
+ {
+ autosaveFile = oldAutosave[0];
+ var result = MessageBox.Show($"Auto-save data found{autosaveTime}\n\nLoad?", "Load Auto-Save Data?", MessageBoxButtons.YesNo);
+ if (result == DialogResult.Yes)
+ {
+ openFileDialog.FileName = autosaveFile;
+ isRecoveredFile = true;
+ OpenFile();
+ }
+ }
+ }
+ if (!isRecoveredFile)
+ {
+ DeleteAutosaves();
+ }
+ }
+ }
+ else
+ {
+ tempStatusPath = Path.GetTempFileName().Replace(".tmp", ".bakka");
+ File.WriteAllText(tempStatusPath, "false");
+ }
+ }
+
+ private void SetText()
+ {
+ string save = chart.IsSaved ? "" : "*";
+ string name = isRecoveredFile ? "Auto-Save Recover" : (isNewFile ? "New File" : saveFileDialog.FileName);
+ Text = $"{save}BAKKA Sharp {fileVersion} - [{name}]";
+ }
+
+ private void SetBufferedGraphicsContext()
+ {
+ gfxContext.MaximumBuffer = new Size(circlePanel.Width + 1, circlePanel.Height + 1);
+ bufGraphics = gfxContext.Allocate(circlePanel.CreateGraphics(),
+ new Rectangle(0, 0, circlePanel.Width, circlePanel.Height));
+ }
+
+ ///
+ /// Prompts for a save if the chart is not currently saved.
+ ///
+ /// TRUE if the calling method should continue, or FALSE if the calling method should return
+ private bool PromptSave()
+ {
+ var result = chart.IsSaved
+ ? DialogResult.No
+ : MessageBox.Show("Current chart is unsaved. Do you wish to save your changes?", "Save Changes", MessageBoxButtons.YesNoCancel);
+
+ switch (result)
+ {
+ case DialogResult.Cancel:
+ return false;
+ case DialogResult.Yes:
+ if (SaveFile() == DialogResult.Cancel)
+ return false;
+ break;
+ }
+ return true;
+ }
+
+ private void newToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ if (!PromptSave())
+ return;
+
+ chart = new();
+ isNewFile = true;
+ isRecoveredFile = false;
+ DeleteAutosaves();
+ UpdateNoteLabels(-1);
+ UpdateGimmickLabels(-1);
+ SetText();
+ opManager.Clear();
+ circlePanel.Invalidate();
+ }
+
+ private void openToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ if (!PromptSave())
+ return;
+
+ if (openFileDialog.ShowDialog() == DialogResult.Cancel)
+ return;
+
+ if (openFileDialog.FileName == "")
+ {
+ MessageBox.Show("No file selected.");
+ return;
+ }
+
+ OpenFile();
+ }
+
+ private void OpenFile()
+ {
+ chart = new();
+ if (!chart.ParseFile(openFileDialog.FileName))
+ {
+ MessageBox.Show("Failed to parse file. Ensure it is not corrupted.");
+ chart = new();
+ }
+ else
+ {
+ // Successful parse
+ var initGimmicks = chart.Gimmicks.Where(x => x.StartTime == 0);
+ var initBpm = initGimmicks.FirstOrDefault(x => x.GimmickType == GimmickType.BpmChange);
+ double bpm = initBpm != null ? initBpm.BPM : 120.0;
+ var initTimeSig = initGimmicks.FirstOrDefault(x => x.GimmickType == GimmickType.TimeSignatureChange);
+ int timeSigUpper = initTimeSig != null ? initTimeSig.TimeSig.Upper : 4;
+ int timeSigLower = initTimeSig != null ? initTimeSig.TimeSig.Lower : 4;
+ initSettingsForm.SetValues(bpm, timeSigUpper, timeSigLower, chart.Offset, chart.MovieOffset);
+ UpdateNoteLabels(chart.Notes.Count > 0 ? 0 : -1);
+ UpdateGimmickLabels(chart.Gimmicks.Count > 0 ? 0 : -1);
+ saveFileDialog.FileName = openFileDialog.FileName;
+ chart.IsSaved = true;
+ isNewFile = false;
+ SetText();
+ }
+ circlePanel.Invalidate();
+ }
+
+ private void saveToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ SaveFile(isNewFile || isRecoveredFile);
+ }
+
+ private DialogResult SaveFile(bool prompt = true)
+ {
+ var result = prompt ? saveFileDialog.ShowDialog() : DialogResult.OK;
+
+ if (result == DialogResult.OK)
+ {
+ chart.WriteFile(saveFileDialog.FileName);
+ isNewFile = false;
+ if (isRecoveredFile)
+ {
+ DeleteAutosaves();
+ autosaveFile = "";
+ }
+ isRecoveredFile = false;
+ File.WriteAllText(tempStatusPath, "false");
+ SetText();
+ }
+ return result;
+ }
+
+ private void saveAsToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ SaveFile(true);
+ }
+
+ private void exitToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ if (!PromptSave())
+ return;
+
+ Application.Exit();
+ }
+
+ private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
+ {
+ var result = chart.IsSaved
+ ? DialogResult.No
+ : MessageBox.Show("Current chart is unsaved. Do you wish to save your changes?", "Save Changes", MessageBoxButtons.YesNoCancel);
+
+ switch (result)
+ {
+ case DialogResult.Cancel:
+ e.Cancel = true;
+ return;
+ case DialogResult.Yes:
+ if (SaveFile() == DialogResult.Cancel)
+ {
+ e.Cancel = true;
+ return;
+ }
+ break;
+ case DialogResult.No:
+ break;
+ default:
+ break;
+ }
+ if (tempStatusPath != "")
+ File.Delete(tempStatusPath);
+ if (tempFilePath != "")
+ File.Delete(tempFilePath);
+ }
+
+ private void SetSelectedObject(NoteType type)
+ {
+ currentNoteType = type;
+ switch (type)
+ {
+ case NoteType.TouchNoBonus:
+ updateLabel("Touch");
+ break;
+ case NoteType.TouchBonus:
+ updateLabel("Touch [Bonus]");
+ break;
+ case NoteType.SnapRedNoBonus:
+ updateLabel("Snap (R)");
+ break;
+ case NoteType.SnapBlueNoBonus:
+ updateLabel("Snap (B)");
+ break;
+ case NoteType.SlideOrangeNoBonus:
+ updateLabel("Slide (O)");
+ break;
+ case NoteType.SlideOrangeBonus:
+ updateLabel("Slide (O) [Bonus]");
+ break;
+ case NoteType.SlideGreenNoBonus:
+ updateLabel("Slide (G)");
+ break;
+ case NoteType.SlideGreenBonus:
+ updateLabel("Slide (G) [Bonus]");
+ break;
+ case NoteType.HoldStartNoBonus:
+ updateLabel("Hold Start");
+ break;
+ case NoteType.HoldJoint:
+ if (endHoldCheck.Checked)
+ updateLabel("Hold End");
+ else
+ updateLabel("Hold Middle");
+ break;
+ case NoteType.HoldEnd:
+ updateLabel("Hold End");
+ break;
+ case NoteType.MaskAdd:
+ if (clockwiseMaskRadio.Checked)
+ updateLabel("Mask Add (Clockwise)");
+ else if (cClockwiseMaskRadio.Checked)
+ updateLabel("Mask Add (Counter-Clockwise)");
+ else
+ updateLabel("Mask Add (From Center)");
+ break;
+ case NoteType.MaskRemove:
+ if (clockwiseMaskRadio.Checked)
+ updateLabel("Mask Remove (Clockwise)");
+ else if (cClockwiseMaskRadio.Checked)
+ updateLabel("Mask Remove (Counter-Clockwise)");
+ else
+ updateLabel("Mask Remove (From Center)");
+ break;
+ case NoteType.EndOfChart:
+ updateLabel("End of Chart");
+ break;
+ case NoteType.Chain:
+ updateLabel("Chain");
+ break;
+ case NoteType.TouchBonusFlair:
+ updateLabel("Touch [R Note]");
+ break;
+ case NoteType.SnapRedBonusFlair:
+ updateLabel("Snap (R) [R Note]");
+ break;
+ case NoteType.SnapBlueBonusFlair:
+ updateLabel("Snap (B) [R Note]");
+ break;
+ case NoteType.SlideOrangeBonusFlair:
+ updateLabel("Slide (O) [R Note]");
+ break;
+ case NoteType.SlideGreenBonusFlair:
+ updateLabel("Slide (G) [R Note]");
+ break;
+ case NoteType.HoldStartBonusFlair:
+ updateLabel("Hold Start [R Note]");
+ break;
+ case NoteType.ChainBonusFlair:
+ updateLabel("Chain [R Note]");
+ break;
+ default:
+ updateLabel("None Selected");
+ break;
+ }
+ circlePanel.Invalidate();
+ }
+
+ private void SetSelectedObject(GimmickType gimmick)
+ {
+ currentGimmickType = gimmick;
+ updateLabel(gimmick.ToLabel());
+ }
+
+ void updateLabel(string text)
+ {
+ currentSelectionLabel.InvokeIfRequired(() => { currentSelectionLabel.Text = text; });
+ }
+
+ private void touchToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ SetSelectedObject(NoteType.TouchNoBonus);
+ }
+
+ private void touchBonusToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ SetSelectedObject(NoteType.TouchBonus);
+ }
+
+ private void touchFlairToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ SetSelectedObject(NoteType.TouchBonusFlair);
+ }
+
+ private void circlePanel_MouseWheel(object? sender, MouseEventArgs e)
+ {
+ if (Control.ModifierKeys == Keys.Alt)
+ {
+ // Shift beat division by standard musical quantization
+ // TODO: Take time signature into account?
+ if (beat2Numeric.Value < 2)
+ {
+ if (e.Delta > 0)
+ beat2Numeric.Value = 2;
+ return;
+ }
+ else if (beat2Numeric.Value == 2 && e.Delta < 0)
+ {
+ beat2Numeric.Value = 1;
+ return;
+ }
+ int low = 0;
+ int high = 1;
+ while (!(beat2Numeric.Value >= (1 << low) && beat2Numeric.Value <= (1 << high)))
+ {
+ low++;
+ high++;
+ }
+ if (e.Delta < 0)
+ beat2Numeric.Value = (1 << low);
+ else
+ {
+ if (high < 10)
+ beat2Numeric.Value = (1 << (high + 1));
+ }
+ }
+ else if (Control.ModifierKeys == Keys.Shift)
+ {
+
+ }
+ else if (Control.ModifierKeys == Keys.Control)
+ {
+
+ }
+ else
+ {
+ valueTriggerEvent = EventSource.MouseWheel;
+ if (e.Delta > 0)
+ beat1Numeric.Value++;
+ else
+ beat1Numeric.Value--;
+
+ circlePanel.Invalidate();
+ }
+ }
+
+ private void circlePanel_Paint(object sender, PaintEventArgs e)
+ {
+ Rectangle panelRect = new Rectangle(0, 0, circlePanel.Width, circlePanel.Height);
+
+ // Set drawing mode
+ bufGraphics.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighSpeed;
+
+ // Draw background
+ bufGraphics.Graphics.FillRectangle(new SolidBrush(this.BackColor), panelRect);
+
+ // Set hi-speed
+
+ // Draw masks
+ var masks = chart.Notes.Where(
+ x => x.Measure <= circleView.CurrentMeasure
+ && x.IsMask).ToList();
+ foreach (var mask in masks)
+ {
+ if (mask.NoteType == NoteType.MaskAdd)
+ {
+ // Check if there's a MaskRemove that counters the MaskAdd (unless the MaskAdd is later)
+ var rem = masks.FirstOrDefault(x => x.NoteType == NoteType.MaskRemove && x.Position == mask.Position && x.Size == mask.Size);
+ if (rem == null || rem.Measure < mask.Measure)
+ bufGraphics.Graphics.FillPie(circleView.MaskBrush, circleView.DrawRect.ToInt(), -mask.Position * 6.0f, -mask.Size * 6.0f);
+ }
+ }
+
+ // Draw selected mask
+
+ // Switch drawing modes
+ bufGraphics.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
+
+ // Draw measure circle
+ for (float meas = (float)Math.Ceiling(circleView.CurrentMeasure); (meas - circleView.CurrentMeasure) < circleView.TotalMeasureShowNotes; meas += 1.0f)
+ {
+ var info = circleView.GetScaledRect(meas);
+ if (info.Rect.Width >= 1)
+ {
+ bufGraphics.Graphics.DrawEllipse(circleView.BeatPen, info.Rect);
+ }
+ }
+
+ // Draw base circle
+ bufGraphics.Graphics.DrawEllipse(circleView.TickMediumPen, circleView.DrawRect);
+
+ // Draw degree lines
+ for (int i = 0; i < 360; i += 6)
+ {
+ PointF startPoint = new PointF(
+ (float)(circleView.Radius * Math.Cos(Utils.DegToRad(i))) + circleView.CenterPoint.X,
+ (float)(circleView.Radius * Math.Sin(Utils.DegToRad(i))) + circleView.CenterPoint.Y);
+ float tickLength = circleView.PanelSize.Width * 10.0f / 285.0f;
+ float innerRad = circleView.Radius - tickLength;
+ Pen activePen;
+ if (i % 90 == 0)
+ {
+ innerRad = circleView.Radius - (tickLength * 3.5f);
+ activePen = circleView.TickMajorPen;
+ }
+ else if (i % 30 == 0)
+ {
+ innerRad = circleView.Radius - (tickLength * 2.5f);
+ activePen = circleView.TickMediumPen;
+ }
+ else
+ {
+ activePen = circleView.TickMinorPen;
+ }
+ PointF endPoint = new PointF(
+ (float)(innerRad * Math.Cos(Utils.DegToRad(i))) + circleView.CenterPoint.X,
+ (float)(innerRad * Math.Sin(Utils.DegToRad(i))) + circleView.CenterPoint.Y);
+
+ bufGraphics.Graphics.DrawLine(activePen, startPoint, endPoint);
+ }
+
+ // Some variables for use later
+ ArcInfo currentInfo = circleView.GetScaledRect(circleView.CurrentMeasure);
+ ArcInfo endInfo = circleView.GetScaledRect(circleView.CurrentMeasure + circleView.TotalMeasureShowNotes);
+
+ // Draw holds
+ // First, draw holes that start before the viewpoint and have nodes that end after
+ List holdNotes = chart.Notes.Where(
+ x => x.Measure < circleView.CurrentMeasure
+ && x.NextNote != null
+ && x.NextNote.Measure > (circleView.CurrentMeasure + circleView.TotalMeasureShowNotes)
+ && x.IsHold).ToList();
+ foreach (var note in holdNotes)
+ {
+ ArcInfo info = circleView.GetArcInfo(note);
+ ArcInfo nextInfo = circleView.GetArcInfo((Note)note.NextNote);
+ //GraphicsPath path = new GraphicsPath();
+ //path.AddArc(endInfo.Rect, info.StartAngle, info.ArcLength);
+ //path.AddArc(currentInfo.Rect, info.StartAngle + info.ArcLength, -info.ArcLength);
+ //bufGraphics.Graphics.FillPath(circleView.HoldBrush, path);
+
+ float ratio = (currentInfo.Rect.Width - nextInfo.Rect.Width) / (info.Rect.Width - nextInfo.Rect.Width);
+ float startNoteAngle = nextInfo.StartAngle;
+ float endNoteAngle = info.StartAngle;
+ if (nextInfo.StartAngle > info.StartAngle && (Math.Abs(nextInfo.StartAngle - info.StartAngle) > 180))
+ {
+ startNoteAngle -= 360;
+ }
+ else if (info.StartAngle > nextInfo.StartAngle && (Math.Abs(nextInfo.StartAngle - info.StartAngle) > 180))
+ {
+ endNoteAngle -= 360;
+ }
+ float startAngle = ratio * (endNoteAngle - startNoteAngle) + startNoteAngle;
+ float endAngle = ratio * ((endNoteAngle - info.ArcLength) - (startNoteAngle - nextInfo.ArcLength)) +
+ (startNoteAngle - nextInfo.ArcLength);
+ float arcLength = startAngle - endAngle;
+
+ float ratio2 = (endInfo.Rect.Width - nextInfo.Rect.Width) / (info.Rect.Width - nextInfo.Rect.Width);
+ float startNoteAngle2 = nextInfo.StartAngle;
+ float endNoteAngle2 = info.StartAngle;
+ if (nextInfo.StartAngle > info.StartAngle && (Math.Abs(nextInfo.StartAngle - info.StartAngle) > 180))
+ {
+ startNoteAngle2 -= 360;
+ }
+ else if (info.StartAngle > nextInfo.StartAngle && (Math.Abs(nextInfo.StartAngle - info.StartAngle) > 180))
+ {
+ endNoteAngle2 -= 360;
+ }
+ float startAngle2 = ratio2 * (endNoteAngle2 - startNoteAngle2) + startNoteAngle2;
+ float endAngle2 = ratio2 * ((endNoteAngle2 - info.ArcLength) - (startNoteAngle2 - nextInfo.ArcLength)) +
+ (startNoteAngle2 - nextInfo.ArcLength);
+ float arcLength2 = startAngle2 - endAngle2;
+
+ GraphicsPath path = new GraphicsPath();
+ path.AddArc(currentInfo.Rect, startAngle, arcLength);
+ path.AddArc(endInfo.Rect, startAngle2 + arcLength2, -arcLength2);
+ bufGraphics.Graphics.FillPath(circleView.HoldBrush, path);
+ }
+ // Second, draw all the notes on-screen
+ holdNotes = chart.Notes.Where(
+ x => x.Measure >= circleView.CurrentMeasure
+ && x.Measure <= (circleView.CurrentMeasure + circleView.TotalMeasureShowNotes)
+ && x.IsHold).ToList();
+ foreach (var note in holdNotes)
+ {
+ ArcInfo info = circleView.GetArcInfo(note);
+
+ // If the previous note is off-screen, this case handles that
+ if (note.PrevNote != null && note.PrevNote.Measure < circleView.CurrentMeasure)
+ {
+ ArcInfo prevInfo = circleView.GetArcInfo((Note)note.PrevNote);
+ float ratio = (currentInfo.Rect.Width - info.Rect.Width) / (prevInfo.Rect.Width - info.Rect.Width);
+ float startNoteAngle = info.StartAngle;
+ float endNoteAngle = prevInfo.StartAngle;
+ if (info.StartAngle > prevInfo.StartAngle && (Math.Abs(info.StartAngle - prevInfo.StartAngle) > 180))
+ {
+ startNoteAngle -= 360;
+ }
+ else if (prevInfo.StartAngle > info.StartAngle && (Math.Abs(info.StartAngle - prevInfo.StartAngle) > 180))
+ {
+ endNoteAngle -= 360;
+ }
+ float startAngle = ratio * (endNoteAngle - startNoteAngle) + startNoteAngle;
+ float endAngle = ratio * ((endNoteAngle - prevInfo.ArcLength) - (startNoteAngle - info.ArcLength)) +
+ (startNoteAngle - info.ArcLength);
+ float arcLength = startAngle - endAngle;
+
+ GraphicsPath path = new GraphicsPath();
+ path.AddArc(info.Rect, info.StartAngle, info.ArcLength);
+ path.AddArc(currentInfo.Rect, startAngle + arcLength, -arcLength);
+ bufGraphics.Graphics.FillPath(circleView.HoldBrush, path);
+ }
+
+ // If the next note is on-screen, this case handles that
+ if (note.NextNote != null && note.NextNote.Measure <= (circleView.CurrentMeasure + circleView.TotalMeasureShowNotes))
+ {
+ ArcInfo nextInfo = circleView.GetArcInfo((Note)note.NextNote);
+ GraphicsPath path = new GraphicsPath();
+ path.AddArc(info.Rect, info.StartAngle, info.ArcLength);
+ path.AddArc(nextInfo.Rect, nextInfo.StartAngle + nextInfo.ArcLength, -nextInfo.ArcLength);
+ bufGraphics.Graphics.FillPath(circleView.HoldBrush, path);
+ }
+
+ // If the next note is off-screen, this case handles that
+ if (note.NextNote != null && note.NextNote.Measure > (circleView.CurrentMeasure + circleView.TotalMeasureShowNotes))
+ {
+ ArcInfo nextInfo = circleView.GetArcInfo((Note)note.NextNote);
+ float ratio = (endInfo.Rect.Width - nextInfo.Rect.Width) / (info.Rect.Width - nextInfo.Rect.Width);
+ float startNoteAngle = nextInfo.StartAngle;
+ float endNoteAngle = info.StartAngle;
+ if (nextInfo.StartAngle > info.StartAngle && (Math.Abs(nextInfo.StartAngle - info.StartAngle) > 180))
+ {
+ startNoteAngle -= 360;
+ }
+ else if (info.StartAngle > nextInfo.StartAngle && (Math.Abs(nextInfo.StartAngle - info.StartAngle) > 180))
+ {
+ endNoteAngle -= 360;
+ }
+ float startAngle = ratio * (endNoteAngle - startNoteAngle) + startNoteAngle;
+ float endAngle = ratio * ((endNoteAngle - info.ArcLength) - (startNoteAngle - nextInfo.ArcLength)) +
+ (startNoteAngle - nextInfo.ArcLength);
+ float arcLength = startAngle - endAngle;
+
+ GraphicsPath path = new GraphicsPath();
+ path.AddArc(endInfo.Rect, startAngle, arcLength);
+ path.AddArc(info.Rect, info.StartAngle + info.ArcLength, -info.ArcLength);
+ bufGraphics.Graphics.FillPath(circleView.HoldBrush, path);
+ }
+
+ // Draw note
+ if (info.Rect.Width >= 1)
+ {
+ bufGraphics.Graphics.DrawArc(circleView.GetPen(note), info.Rect, info.StartAngle, info.ArcLength);
+
+ // Draw bonus
+ if (note.IsFlair)
+ bufGraphics.Graphics.DrawArc(circleView.HighlightPen, info.Rect, info.StartAngle + 2, info.ArcLength - 4);
+
+ // Plot highlighted
+ if (highlightViewedNoteToolStripMenuItem.Checked)
+ {
+ if (selectedNoteIndex != -1 && note == chart.Notes[selectedNoteIndex])
+ {
+ bufGraphics.Graphics.DrawArc(circleView.HighlightPen, info.Rect, info.StartAngle + 2, info.ArcLength - 4);
+ }
+ }
+ }
+ }
+
+ // Draw notes
+ List drawNotes = chart.Notes.Where(
+ x => x.Measure >= circleView.CurrentMeasure
+ && x.Measure <= (circleView.CurrentMeasure + circleView.TotalMeasureShowNotes)
+ && !x.IsHold && !x.IsMask).ToList();
+ foreach (var note in drawNotes)
+ {
+ ArcInfo info = circleView.GetArcInfo(note);
+
+ if (info.Rect.Width >= 1)
+ {
+ bufGraphics.Graphics.DrawArc(circleView.GetPen(note, info.NoteScale), info.Rect, info.StartAngle, info.ArcLength);
+ if (note.IsFlair)
+ {
+ bufGraphics.Graphics.DrawArc(circleView.FlairPen, info.Rect, info.StartAngle + 2, info.ArcLength - 4);
+ }
+ // Plot highlighted
+ if (highlightViewedNoteToolStripMenuItem.Checked)
+ {
+ if (selectedNoteIndex != -1 && note == chart.Notes[selectedNoteIndex])
+ {
+ bufGraphics.Graphics.DrawArc(circleView.HighlightPen, info.Rect, info.StartAngle + 2, info.ArcLength - 4);
+ }
+ }
+ }
+ }
+
+ // Determine if cursor should be showing
+ bool showCursor = showCursorToolStripMenuItem.Checked || mouseDownPos != -1;
+ if (currentSong != null && !currentSong.Paused)
+ {
+ showCursor = showCursorDuringPlaybackToolStripMenuItem.Checked;
+ }
+
+ // Draw cursor
+ if (showCursor)
+ {
+ bufGraphics.Graphics.DrawArc(
+ circleView.GetPen(currentNoteType),
+ circleView.DrawRect,
+ -(float)positionNumeric.Value * 6.0f,
+ -(float)sizeNumeric.Value * 6.0f);
+ }
+
+ bufGraphics.Render(e.Graphics);
+ }
+
+ private void measureNumeric_ValueChanged(object sender, EventArgs e)
+ {
+ updateTime();
+ }
+
+ private void beat1Numeric_ValueChanged(object sender, EventArgs e)
+ {
+ if (beat1Numeric.Value >= beat2Numeric.Value)
+ {
+ measureNumeric.Value++;
+ beat1Numeric.Value = 0;
+ }
+ else if (beat1Numeric.Value < 0)
+ {
+ if (measureNumeric.Value > 0)
+ {
+ measureNumeric.Value--;
+ beat1Numeric.Value = beat2Numeric.Value - 1;
+ }
+ else if (measureNumeric.Value == 0)
+ {
+ beat1Numeric.Value = 0;
+ }
+ }
+ updateTime();
+ if (currentSong != null && !IsSongPlaying() && valueTriggerEvent != EventSource.TrackBar)
+ songTrackBar.Value = chart.GetTime(new BeatInfo((int)measureNumeric.Value, (int)beat1Numeric.Value * 1920 / (int)beat2Numeric.Value));
+
+ valueTriggerEvent = EventSource.None;
+ }
+
+ private void beat2Numeric_ValueChanged(object sender, EventArgs e)
+ {
+
+ }
+
+ private void updateTime()
+ {
+ if (currentSong == null || (currentSong != null && currentSong.Paused))
+ {
+ circleView.CurrentMeasure = (float)measureNumeric.Value + ((float)beat1Numeric.Value / (float)beat2Numeric.Value);
+ circlePanel.Invalidate();
+ }
+ }
+
+ private void positionTrackBar_ValueChanged(object sender, EventArgs e)
+ {
+ positionNumeric.Value = positionTrackBar.Value;
+ circlePanel.Invalidate();
+ }
+
+ private void sizeTrackBar_ValueChanged(object sender, EventArgs e)
+ {
+ sizeNumeric.Value = sizeTrackBar.Value;
+ circlePanel.Invalidate();
+ }
+
+ private void tapButton_Click(object sender, EventArgs e)
+ {
+ if (noBonusRadio.Checked)
+ SetSelectedObject(NoteType.TouchNoBonus);
+ else if (bonusRadio.Checked)
+ SetSelectedObject(NoteType.TouchBonus);
+ else if (flairRadio.Checked)
+ SetSelectedObject(NoteType.TouchBonusFlair);
+
+ currentGimmickType = GimmickType.NoGimmick;
+ }
+
+ private void orangeButton_Click(object sender, EventArgs e)
+ {
+ if (noBonusRadio.Checked)
+ SetSelectedObject(NoteType.SlideOrangeNoBonus);
+ else if (bonusRadio.Checked)
+ SetSelectedObject(NoteType.SlideOrangeBonus);
+ else if (flairRadio.Checked)
+ SetSelectedObject(NoteType.SlideOrangeBonusFlair);
+
+ currentGimmickType = GimmickType.NoGimmick;
+ }
+
+ private void greenButton_Click(object sender, EventArgs e)
+ {
+ if (noBonusRadio.Checked)
+ SetSelectedObject(NoteType.SlideGreenNoBonus);
+ else if (bonusRadio.Checked)
+ SetSelectedObject(NoteType.SlideGreenBonus);
+ else if (flairRadio.Checked)
+ SetSelectedObject(NoteType.SlideGreenBonusFlair);
+
+ currentGimmickType = GimmickType.NoGimmick;
+ }
+
+ private void redButton_Click(object sender, EventArgs e)
+ {
+ if (noBonusRadio.Checked)
+ SetSelectedObject(NoteType.SnapRedNoBonus);
+ else if (bonusRadio.Checked)
+ {
+ flairRadio.InvokeIfRequired(() => { flairRadio.Checked = true; });
+ SetSelectedObject(NoteType.SnapRedBonusFlair);
+ }
+ else if (flairRadio.Checked)
+ SetSelectedObject(NoteType.SnapRedBonusFlair);
+
+ currentGimmickType = GimmickType.NoGimmick;
+ }
+
+ private void blueButton_Click(object sender, EventArgs e)
+ {
+ if (noBonusRadio.Checked)
+ SetSelectedObject(NoteType.SnapBlueNoBonus);
+ else if (bonusRadio.Checked)
+ {
+ flairRadio.InvokeIfRequired(() => { flairRadio.Checked = true; });
+ SetSelectedObject(NoteType.SnapBlueBonusFlair);
+ }
+ else if (flairRadio.Checked)
+ SetSelectedObject(NoteType.SnapBlueBonusFlair);
+
+ currentGimmickType = GimmickType.NoGimmick;
+ }
+
+ private void chainButton_Click(object sender, EventArgs e)
+ {
+ if (noBonusRadio.Checked)
+ SetSelectedObject(NoteType.Chain);
+ else if (bonusRadio.Checked)
+ {
+ flairRadio.InvokeIfRequired(() => { flairRadio.Checked = true; });
+ SetSelectedObject(NoteType.ChainBonusFlair);
+ }
+ else if (flairRadio.Checked)
+ SetSelectedObject(NoteType.ChainBonusFlair);
+
+ currentGimmickType = GimmickType.NoGimmick;
+ }
+
+ private void holdButton_Click(object sender, EventArgs e)
+ {
+ if (noBonusRadio.Checked)
+ SetSelectedObject(NoteType.HoldStartNoBonus);
+ else if (bonusRadio.Checked)
+ {
+ flairRadio.InvokeIfRequired(() => { flairRadio.Checked = true; });
+ SetSelectedObject(NoteType.HoldStartBonusFlair);
+ }
+ else if (flairRadio.Checked)
+ SetSelectedObject(NoteType.HoldStartBonusFlair);
+
+ currentGimmickType = GimmickType.NoGimmick;
+ }
+
+ private void endChartButton_Click(object sender, EventArgs e)
+ {
+ SetSelectedObject(NoteType.EndOfChart);
+ currentGimmickType = GimmickType.NoGimmick;
+ }
+
+ private void endHoldCheck_CheckedChanged(object sender, EventArgs e)
+ {
+
+ }
+
+ private void BonusRadioCheck(object sender, EventArgs e)
+ {
+ if (noBonusRadio.Checked)
+ currentBonusType = BonusType.NoBonus;
+ else if (bonusRadio.Checked)
+ currentBonusType = BonusType.Bonus;
+ else
+ currentBonusType = BonusType.Flair;
+ UpdateSelectedNote();
+ }
+
+ private void UpdateSelectedNote()
+ {
+ switch (currentNoteType)
+ {
+ case NoteType.TouchNoBonus:
+ case NoteType.TouchBonus:
+ case NoteType.TouchBonusFlair:
+ switch (currentBonusType)
+ {
+ case BonusType.NoBonus:
+ SetSelectedObject(NoteType.TouchNoBonus);
+ break;
+ case BonusType.Bonus:
+ SetSelectedObject(NoteType.TouchBonus);
+ break;
+ case BonusType.Flair:
+ SetSelectedObject(NoteType.TouchBonusFlair);
+ break;
+ default:
+ break;
+ }
+ break;
+ case NoteType.SnapRedNoBonus:
+ case NoteType.SnapRedBonusFlair:
+ switch (currentBonusType)
+ {
+ case BonusType.NoBonus:
+ SetSelectedObject(NoteType.SnapRedNoBonus);
+ break;
+ case BonusType.Bonus:
+ flairRadio.Checked = true;
+ SetSelectedObject(NoteType.SnapRedBonusFlair);
+ break;
+ case BonusType.Flair:
+ SetSelectedObject(NoteType.SnapRedBonusFlair);
+ break;
+ default:
+ break;
+ }
+ break;
+ case NoteType.SnapBlueNoBonus:
+ case NoteType.SnapBlueBonusFlair:
+ switch (currentBonusType)
+ {
+ case BonusType.NoBonus:
+ SetSelectedObject(NoteType.SnapBlueNoBonus);
+ break;
+ case BonusType.Bonus:
+ flairRadio.Checked = true;
+ SetSelectedObject(NoteType.SnapBlueBonusFlair);
+ break;
+ case BonusType.Flair:
+ SetSelectedObject(NoteType.SnapBlueBonusFlair);
+ break;
+ default:
+ break;
+ }
+ break;
+ case NoteType.SlideOrangeNoBonus:
+ case NoteType.SlideOrangeBonus:
+ case NoteType.SlideOrangeBonusFlair:
+ switch (currentBonusType)
+ {
+ case BonusType.NoBonus:
+ SetSelectedObject(NoteType.SlideOrangeNoBonus);
+ break;
+ case BonusType.Bonus:
+ SetSelectedObject(NoteType.SlideOrangeBonus);
+ break;
+ case BonusType.Flair:
+ SetSelectedObject(NoteType.SlideOrangeBonusFlair);
+ break;
+ default:
+ break;
+ }
+ break;
+ case NoteType.SlideGreenNoBonus:
+ case NoteType.SlideGreenBonus:
+ case NoteType.SlideGreenBonusFlair:
+ switch (currentBonusType)
+ {
+ case BonusType.NoBonus:
+ SetSelectedObject(NoteType.SlideGreenNoBonus);
+ break;
+ case BonusType.Bonus:
+ SetSelectedObject(NoteType.SlideGreenBonus);
+ break;
+ case BonusType.Flair:
+ SetSelectedObject(NoteType.SlideGreenBonusFlair);
+ break;
+ default:
+ break;
+ }
+ break;
+ case NoteType.HoldStartNoBonus:
+ case NoteType.HoldStartBonusFlair:
+ switch (currentBonusType)
+ {
+ case BonusType.NoBonus:
+ SetSelectedObject(NoteType.HoldStartNoBonus);
+ break;
+ case BonusType.Bonus:
+ flairRadio.Checked = true;
+ SetSelectedObject(NoteType.HoldStartBonusFlair);
+ break;
+ case BonusType.Flair:
+ SetSelectedObject(NoteType.HoldStartBonusFlair);
+ break;
+ default:
+ break;
+ }
+ break;
+ case NoteType.HoldJoint:
+ break;
+ case NoteType.HoldEnd:
+ break;
+ case NoteType.MaskAdd:
+ break;
+ case NoteType.MaskRemove:
+ break;
+ case NoteType.EndOfChart:
+ break;
+ case NoteType.Chain:
+ case NoteType.ChainBonusFlair:
+ switch (currentBonusType)
+ {
+ case BonusType.NoBonus:
+ SetSelectedObject(NoteType.Chain);
+ break;
+ case BonusType.Bonus:
+ flairRadio.Checked = true;
+ SetSelectedObject(NoteType.ChainBonusFlair);
+ break;
+ case BonusType.Flair:
+ SetSelectedObject(NoteType.ChainBonusFlair);
+ break;
+ default:
+ break;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+ private void selectSongButton_Click(object sender, EventArgs e)
+ {
+ if (openSongDialog.ShowDialog() != DialogResult.Cancel)
+ {
+ songFilePath = openSongDialog.FileName;
+ songFileLabel.Text = songFilePath;
+ currentSong = soundEngine.Play2D(songFilePath, true, true);
+ songTrackBar.Value = 0;
+ songTrackBar.Maximum = (int)currentSong.PlayLength;
+ }
+ }
+
+ private void playButton_Click(object sender, EventArgs e)
+ {
+ if (currentSong != null)
+ {
+ if (!chart.HasInitEvents)
+ {
+ MessageBox.Show("Set Initial Chart Settings (from Chart Menu).", "Warning!");
+ return;
+ }
+
+ currentSong.PlayPosition = (uint)songTrackBar.Value;
+ currentSong.Paused = !currentSong.Paused;
+ if (currentSong.Paused)
+ {
+ playButton.Text = "Play (P)";
+ updateTimer.Enabled = false;
+ }
+ else
+ {
+ playButton.Text = "Pause (P)";
+ updateTimer.Enabled = true;
+ }
+ }
+ }
+
+ private bool IsSongPlaying()
+ {
+ if (currentSong != null && !currentSong.Paused)
+ return true;
+ else
+ return false;
+ }
+
+ private void updateTimer_Tick(object sender, EventArgs e)
+ {
+ songTrackBar.Value = (int)currentSong.PlayPosition;
+ var info = chart.GetBeat(currentSong.PlayPosition);
+ if (info != null && info.Measure != -1)
+ {
+ measureNumeric.Value = info.Measure;
+ beat1Numeric.Value = (int)((float)info.Beat / 1920.0f * (float)beat2Numeric.Value);
+ circleView.CurrentMeasure = info.MeasureDecimal;
+
+ // TODO Fix hi-speed (it needs to be able to display multiple hi-speeds in the circle view at once)
+ //// Change hi-speed, if applicable
+ //var hispeed = chart.Gimmicks.Where(x => x.Measure <= info.Measure && x.GimmickType == GimmickType.HiSpeedChange).LastOrDefault();
+ //if (hispeed != null && hispeed.HiSpeed != circleView.TotalMeasureShowNotes)
+ //{
+ // visualHispeedNumeric.Value = (decimal)hispeed.HiSpeed;
+ //}
+ }
+ circlePanel.Invalidate();
+ }
+
+ private void songTrackBar_ValueChanged(object sender, EventArgs e)
+ {
+ if (IsSongPlaying())
+ return;
+
+ currentSong.PlayPosition = (uint)songTrackBar.Value;
+ var info = chart.GetBeat(currentSong.PlayPosition);
+ if (info != null && info.Measure != -1 && valueTriggerEvent != EventSource.MouseWheel)
+ {
+ valueTriggerEvent = EventSource.TrackBar;
+ measureNumeric.Value = info.Measure;
+ beat1Numeric.Value = (int)((float)info.Beat / 1920.0f * (float)beat2Numeric.Value);
+ circleView.CurrentMeasure = info.MeasureDecimal;
+ }
+ circlePanel.Invalidate();
+ valueTriggerEvent = EventSource.None;
+ }
+
+ private void circlePanel_MouseDown(object sender, MouseEventArgs e)
+ {
+ // Determine the location of mouse click inside the circle
+ // X and Y are relative to the upper left of the panel
+ float xCen = e.X - (circlePanel.Width / 2);
+ float yCen = -(e.Y - (circlePanel.Height / 2));
+ float theta = (float)(Math.Atan2(yCen, xCen) * 180.0f / Math.PI);
+ if (theta < 0)
+ theta += 360.0f;
+ // Left click moves the cursor
+ if (e.Button == MouseButtons.Left)
+ {
+ positionNumeric.Value = (int)(theta / 6.0f);
+ mouseDownPos = (int)positionNumeric.Value;
+ mouseDownPt = e.Location;
+ lastMousePos = -1;
+ rolloverPos = false;
+ rolloverNeg = false;
+ circlePanel.Invalidate();
+ }
+ }
+
+ private void circlePanel_MouseUp(object sender, MouseEventArgs e)
+ {
+ if (e.Button == MouseButtons.Left && mouseDownPos > -1)
+ {
+ var dist = Utils.GetDist(e.Location, mouseDownPt);
+ if (dist > 5.0f)
+ InsertObject();
+ mouseDownPos = -1;
+ mouseDownPt = new Point();
+ circlePanel.Invalidate();
+ }
+ }
+
+ private void circlePanel_MouseMove(object sender, MouseEventArgs e)
+ {
+ // Determine the location of mouse click inside the circle
+ // X and Y are relative to the upper left of the panel
+ float xCen = e.X - (circlePanel.Width / 2);
+ float yCen = -(e.Y - (circlePanel.Height / 2));
+ float thetaCalc = (float)(Math.Atan2(yCen, xCen) * 180.0f / Math.PI);
+ if (thetaCalc < 0)
+ thetaCalc += 360.0f;
+ int theta = (int)(thetaCalc / 6.0f);
+ // Left click will alter the note width and possibly position depending on which direction we move
+ if (e.Button == MouseButtons.Left && mouseDownPos != -1)
+ {
+ int delta = theta - lastMousePos;
+ // Handle rollover
+ if (delta == -59)
+ {
+ if (rolloverNeg)
+ rolloverNeg = false;
+ else
+ rolloverPos = true;
+ }
+ else if (delta == 59)
+ {
+ if (rolloverPos)
+ rolloverPos = false;
+ else
+ rolloverNeg = true;
+ }
+ if (theta == mouseDownPos)
+ {
+ positionNumeric.Value = mouseDownPos;
+ sizeNumeric.Value = 1;
+ }
+ else if ((theta > mouseDownPos || rolloverPos) && !rolloverNeg)
+ {
+ positionNumeric.Value = mouseDownPos;
+ if (rolloverPos)
+ sizeNumeric.Value = (int)Math.Min(theta + 60 - mouseDownPos + 1, 60);
+ else
+ sizeNumeric.Value = theta - mouseDownPos + 1;
+ }
+ else if (theta < mouseDownPos || rolloverNeg)
+ {
+ positionNumeric.Value = theta;
+ if (rolloverNeg)
+ sizeNumeric.Value = (int)Math.Min(mouseDownPos + 60 - theta + 1, 60);
+ else
+ sizeNumeric.Value = mouseDownPos - theta + 1;
+ }
+ lastMousePos = theta;
+ circlePanel.Invalidate();
+ }
+ }
+
+ private void visualHispeedNumeric_ValueChanged(object sender, EventArgs e)
+ {
+ circleView.TotalMeasureShowNotes = (float)visualHispeedNumeric.Value;
+ }
+
+ private void insertButton_Click(object sender, EventArgs e)
+ {
+ InsertObject();
+ }
+
+ private void InsertObject()
+ {
+ var currentBeat = new BeatInfo((int)measureNumeric.Value, (int)beat1Numeric.Value * 1920 / (int)beat2Numeric.Value);
+
+ if (currentGimmickType == GimmickType.NoGimmick)
+ {
+ Note tempNote = new Note()
+ {
+ BeatInfo = currentBeat,
+ NoteType = currentNoteType,
+ Position = (int)positionNumeric.Value,
+ Size = (int)sizeNumeric.Value,
+ HoldChange = true
+ };
+ switch (currentNoteType)
+ {
+ case NoteType.HoldStartNoBonus:
+ case NoteType.HoldStartBonusFlair:
+ SetSelectedObject(NoteType.HoldJoint);
+ lastNote = tempNote;
+ break;
+ case NoteType.HoldJoint:
+ case NoteType.HoldEnd:
+ tempNote.PrevNote = lastNote;
+ tempNote.PrevNote.NextNote = tempNote;
+ if (endHoldCheck.Checked)
+ tempNote.NoteType = NoteType.HoldEnd;
+ else
+ lastNote = tempNote;
+ break;
+ case NoteType.MaskAdd:
+ case NoteType.MaskRemove:
+ if (clockwiseMaskRadio.Checked)
+ tempNote.MaskFill = MaskType.Clockwise;
+ else if (cClockwiseMaskRadio.Checked)
+ tempNote.MaskFill = MaskType.CounterClockwise;
+ else
+ tempNote.MaskFill = MaskType.Center;
+ break;
+ default:
+ break;
+ }
+ chart.Notes.Add(tempNote);
+ chart.IsSaved = false;
+ opManager.Push(new InsertNote(chart, tempNote));
+ }
+ }
+
+ private void maskButton_Click(object sender, EventArgs e)
+ {
+ if (addMaskRadio.Checked)
+ SetSelectedObject(NoteType.MaskAdd);
+ else
+ SetSelectedObject(NoteType.MaskRemove);
+ SetSelectedObject(GimmickType.NoGimmick);
+ }
+
+ private void bpmChangeButton_Click(object sender, EventArgs e)
+ {
+ var result = gimmickForm.Show(
+ new Gimmick()
+ {
+ BeatInfo = new BeatInfo((int)measureNumeric.Value, (int)beat1Numeric.Value * 1920 / (int)beat2Numeric.Value),
+ GimmickType = GimmickType.BpmChange
+ }, GimmickForm.FormReason.New);
+ if (result == DialogResult.OK)
+ {
+ InsertGimmick(gimmickForm.Gimmicks);
+ }
+ }
+
+ private void timeSigButton_Click(object sender, EventArgs e)
+ {
+ var result = gimmickForm.Show(
+ new Gimmick()
+ {
+ BeatInfo = new BeatInfo((int)measureNumeric.Value, (int)beat1Numeric.Value * 1920 / (int)beat2Numeric.Value),
+ GimmickType = GimmickType.TimeSignatureChange
+ }, GimmickForm.FormReason.New);
+ if (result == DialogResult.OK)
+ {
+ InsertGimmick(gimmickForm.Gimmicks);
+ }
+ }
+
+ private void hiSpeedButton_Click(object sender, EventArgs e)
+ {
+ var result = gimmickForm.Show(
+ new Gimmick()
+ {
+ BeatInfo = new BeatInfo((int)measureNumeric.Value, (int)beat1Numeric.Value * 1920 / (int)beat2Numeric.Value),
+ GimmickType = GimmickType.HiSpeedChange
+ }, GimmickForm.FormReason.New);
+ if (result == DialogResult.OK)
+ {
+ InsertGimmick(gimmickForm.Gimmicks);
+ }
+ }
+
+ private void stopButton_Click(object sender, EventArgs e)
+ {
+ var result = gimmickForm.Show(
+ new Gimmick()
+ {
+ BeatInfo = new BeatInfo((int)measureNumeric.Value, (int)beat1Numeric.Value * 1920 / (int)beat2Numeric.Value),
+ GimmickType = GimmickType.StopStart
+ }, GimmickForm.FormReason.New);
+ if (result == DialogResult.OK)
+ {
+ InsertGimmick(gimmickForm.Gimmicks);
+ }
+ }
+
+ private void reverseButton_Click(object sender, EventArgs e)
+ {
+ var result = gimmickForm.Show(
+ new Gimmick()
+ {
+ BeatInfo = new BeatInfo((int)measureNumeric.Value, (int)beat1Numeric.Value * 1920 / (int)beat2Numeric.Value),
+ GimmickType = GimmickType.ReverseStart
+ }, GimmickForm.FormReason.New);
+ if (result == DialogResult.OK)
+ {
+ InsertGimmick(gimmickForm.Gimmicks);
+ }
+ }
+
+ private void InsertGimmick(List gimmicks)
+ {
+ var operations = new List();
+ foreach (var gim in gimmicks)
+ {
+ chart.Gimmicks.Add(gim);
+ operations.Add(new Operations.InsertGimmick(chart, gim));
+ }
+ chart.IsSaved = false;
+ opManager.Push(new CompositeOperation(operations[0].Description, operations));
+ }
+
+ private void maskRatio_CheckChanged(object sender, EventArgs e)
+ {
+ if (currentNoteType == NoteType.MaskAdd || currentNoteType == NoteType.MaskRemove)
+ maskButton_Click(this, new EventArgs());
+ }
+
+ private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ MessageBox.Show($"A reimagining of Goatgarien's BAKKA Editor.\n\nCode: VeroxZik\n\nUI Inspiration: Yellowberry", $"BAKKA Sharp {fileVersion}");
+ }
+
+ private void initialChartSettingsToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ ShowInitialSettings();
+ }
+
+ private void ShowInitialSettings()
+ {
+ if (initSettingsForm.ShowDialog() == DialogResult.OK)
+ {
+ var initBpm = chart.Gimmicks.FirstOrDefault(x => x.Measure == 0.0f && x.GimmickType == GimmickType.BpmChange);
+ if (initBpm != null)
+ initBpm.BPM = initSettingsForm.Bpm;
+ else
+ chart.Gimmicks.Add(new Gimmick() { BPM = initSettingsForm.Bpm, BeatInfo = new BeatInfo(0, 0), GimmickType = GimmickType.BpmChange });
+
+ var initTimSig = chart.Gimmicks.FirstOrDefault(x => x.Measure == 0.0f && x.GimmickType == GimmickType.TimeSignatureChange);
+ if (initTimSig != null)
+ {
+ initTimSig.TimeSig.Upper = initSettingsForm.TimeSigUpper;
+ initTimSig.TimeSig.Lower = initSettingsForm.TimeSigLower;
+ }
+ else
+ chart.Gimmicks.Add(
+ new Gimmick()
+ {
+ TimeSig = new TimeSignature() { Upper = initSettingsForm.TimeSigUpper, Lower = initSettingsForm.TimeSigLower },
+ BeatInfo = new BeatInfo(0, 0),
+ GimmickType = GimmickType.TimeSignatureChange
+ });
+ chart.Offset = initSettingsForm.Offset;
+ chart.MovieOffset = initSettingsForm.MovieOffset;
+
+ if (selectedGimmickIndex == -1)
+ selectedGimmickIndex = 0;
+ UpdateGimmickLabels();
+ chart.Gimmicks = chart.Gimmicks.OrderBy(x => x.Measure).ToList();
+ chart.RecalcTime();
+ }
+ }
+
+ private void showCursorToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ circlePanel.Invalidate();
+ }
+
+ private void gimmickPrevButton_Click(object sender, EventArgs e)
+ {
+ if (chart.Gimmicks.Count == 0)
+ return;
+
+ if (selectedGimmickIndex == 0)
+ selectedGimmickIndex = chart.Gimmicks.Count - 1;
+ else
+ selectedGimmickIndex -= 1;
+
+ UpdateGimmickLabels();
+ }
+
+ private void gimmickNextButton_Click(object sender, EventArgs e)
+ {
+ if (chart.Gimmicks.Count == 0)
+ return;
+
+ if (selectedGimmickIndex == chart.Gimmicks.Count - 1)
+ selectedGimmickIndex = 0;
+ else
+ selectedGimmickIndex += 1;
+
+ UpdateGimmickLabels();
+ }
+
+ private void gimmickEditButton_Click(object sender, EventArgs e)
+ {
+ if (selectedGimmickIndex == -1)
+ return;
+
+ var gimmick = chart.Gimmicks[selectedGimmickIndex];
+ Gimmick? gim1 = null;
+ Gimmick? gim2 = null;
+ if (gimmick.Measure == 0 && (gimmick.GimmickType == GimmickType.BpmChange || gimmick.GimmickType == GimmickType.TimeSignatureChange))
+ ShowInitialSettings();
+ else
+ {
+ switch (gimmick.GimmickType)
+ {
+ case GimmickType.ReverseStart:
+ gim1 = chart.Gimmicks.FirstOrDefault(x => x.Measure > gimmick.Measure && x.GimmickType == GimmickType.ReverseMiddle);
+ gim2 = chart.Gimmicks.FirstOrDefault(x => x.Measure > gimmick.Measure && x.GimmickType == GimmickType.ReverseEnd);
+ break;
+ case GimmickType.ReverseMiddle:
+ gim1 = chart.Gimmicks.LastOrDefault(x => x.Measure < gimmick.Measure && x.GimmickType == GimmickType.ReverseStart);
+ gim2 = chart.Gimmicks.FirstOrDefault(x => x.Measure > gimmick.Measure && x.GimmickType == GimmickType.ReverseEnd);
+ break;
+ case GimmickType.ReverseEnd:
+ gim1 = chart.Gimmicks.LastOrDefault(x => x.Measure < gimmick.Measure && x.GimmickType == GimmickType.ReverseStart);
+ gim2 = chart.Gimmicks.LastOrDefault(x => x.Measure < gimmick.Measure && x.GimmickType == GimmickType.ReverseMiddle);
+ break;
+ case GimmickType.StopStart:
+ gim1 = chart.Gimmicks.FirstOrDefault(x => x.Measure > gimmick.Measure && x.GimmickType == GimmickType.StopEnd);
+ break;
+ case GimmickType.StopEnd:
+ gim1 = chart.Gimmicks.LastOrDefault(x => x.Measure < gimmick.Measure && x.GimmickType == GimmickType.StopStart);
+ break;
+ default:
+ break;
+ }
+
+ if (gimmickForm.Show(gimmick, GimmickForm.FormReason.Edit, gim1, gim2) == DialogResult.OK)
+ {
+ var opList = new List();
+
+ switch (gimmick.GimmickType)
+ {
+ case GimmickType.BpmChange:
+ case GimmickType.TimeSignatureChange:
+ case GimmickType.HiSpeedChange:
+ opList.Add(new EditGimmick(gimmick, gimmickForm.Gimmicks[0]));
+ break;
+ case GimmickType.ReverseStart:
+ opList.Add(new EditGimmick(gimmick, gimmickForm.Gimmicks[0]));
+ opList.Add(new EditGimmick(gim1, gimmickForm.Gimmicks[1]));
+ opList.Add(new EditGimmick(gim2, gimmickForm.Gimmicks[2]));
+ break;
+ case GimmickType.ReverseMiddle:
+ opList.Add(new EditGimmick(gim1, gimmickForm.Gimmicks[0]));
+ opList.Add(new EditGimmick(gimmick, gimmickForm.Gimmicks[1]));
+ opList.Add(new EditGimmick(gim2, gimmickForm.Gimmicks[2]));
+ break;
+ case GimmickType.ReverseEnd:
+ opList.Add(new EditGimmick(gim1, gimmickForm.Gimmicks[0]));
+ opList.Add(new EditGimmick(gim2, gimmickForm.Gimmicks[1]));
+ opList.Add(new EditGimmick(gimmick, gimmickForm.Gimmicks[2]));
+ break;
+ case GimmickType.StopStart:
+ opList.Add(new EditGimmick(gimmick, gimmickForm.Gimmicks[0]));
+ opList.Add(new EditGimmick(gim1, gimmickForm.Gimmicks[1]));
+ break;
+ case GimmickType.StopEnd:
+ opList.Add(new EditGimmick(gim1, gimmickForm.Gimmicks[0]));
+ opList.Add(new EditGimmick(gimmick, gimmickForm.Gimmicks[1]));
+ break;
+ default:
+ break;
+ }
+ opManager.InvokeAndPush(new CompositeOperation(opList[0].Description, opList));
+ UpdateGimmickLabels();
+ }
+ }
+ }
+
+ private void gimmickDeleteButton_Click(object sender, EventArgs e)
+ {
+ if (selectedGimmickIndex == -1)
+ return;
+
+ float measure = chart.Gimmicks[selectedGimmickIndex].Measure;
+ var type = chart.Gimmicks[selectedGimmickIndex].GimmickType;
+ var gimmicks = new List();
+ gimmicks.Add(chart.Gimmicks[selectedGimmickIndex]);
+ chart.Gimmicks.RemoveAt(selectedGimmickIndex);
+ switch (type)
+ {
+ case GimmickType.ReverseStart:
+ gimmicks.Add(chart.Gimmicks.First(x => x.Measure > measure && x.GimmickType == GimmickType.ReverseMiddle));
+ gimmicks.Add(chart.Gimmicks.First(x => x.Measure > measure && x.GimmickType == GimmickType.ReverseEnd));
+ break;
+ case GimmickType.ReverseMiddle:
+ gimmicks.Add(chart.Gimmicks.Last(x => x.Measure < measure && x.GimmickType == GimmickType.ReverseStart));
+ gimmicks.Add(chart.Gimmicks.First(x => x.Measure > measure && x.GimmickType == GimmickType.ReverseEnd));
+ break;
+ case GimmickType.ReverseEnd:
+ gimmicks.Add(chart.Gimmicks.Last(x => x.Measure < measure && x.GimmickType == GimmickType.ReverseStart));
+ gimmicks.Add(chart.Gimmicks.Last(x => x.Measure < measure && x.GimmickType == GimmickType.ReverseMiddle));
+ break;
+ case GimmickType.StopStart:
+ gimmicks.Add(chart.Gimmicks.First(x => x.Measure > measure && x.GimmickType == GimmickType.StopEnd));
+ break;
+ case GimmickType.StopEnd:
+ gimmicks.Add(chart.Gimmicks.Last(x => x.Measure < measure && x.GimmickType == GimmickType.StopStart));
+ break;
+ default:
+ break;
+ }
+ var ops = new List();
+ foreach (var gim in gimmicks)
+ ops.Add(new RemoveGimmick(chart, gim));
+ opManager.InvokeAndPush(new CompositeOperation(ops[0].Description, ops));
+ if (selectedGimmickIndex >= chart.Gimmicks.Count)
+ selectedGimmickIndex = chart.Gimmicks.Count - 1;
+ UpdateGimmickLabels();
+ }
+
+ private void UpdateGimmickLabels(int val = -2)
+ {
+ if (val != -2 && val < chart.Gimmicks.Count)
+ selectedGimmickIndex = val;
+ if (selectedGimmickIndex == -1)
+ {
+ gimmickMeasureLabel.Text = "None";
+ gimmickBeatLabel.Text = "None";
+ gimmickTypeLabel.Text = "None";
+ gimmickValueLabel.Text = "None";
+ return;
+ }
+
+ var gimmick = chart.Gimmicks[selectedGimmickIndex];
+
+ gimmickMeasureLabel.Text = gimmick.BeatInfo.Measure.ToString();
+ var quant = Utils.GetQuantization(gimmick.BeatInfo.Beat, 16);
+ gimmickBeatLabel.Text = $"{quant.Item1} / {quant.Item2}";
+ gimmickTypeLabel.Text = gimmick.GimmickType.ToLabel();
+ switch (gimmick.GimmickType)
+ {
+ case GimmickType.BpmChange:
+ gimmickValueLabel.Text = gimmick.BPM.ToString("F6");
+ break;
+ case GimmickType.TimeSignatureChange:
+ gimmickValueLabel.Text = gimmick.TimeSig.Upper.ToString() + " / " + gimmick.TimeSig.Lower.ToString();
+ break;
+ case GimmickType.HiSpeedChange:
+ gimmickValueLabel.Text = gimmick.HiSpeed.ToString("F6");
+ break;
+ case GimmickType.NoGimmick:
+ case GimmickType.ReverseStart:
+ case GimmickType.ReverseMiddle:
+ case GimmickType.ReverseEnd:
+ case GimmickType.StopStart:
+ case GimmickType.StopEnd:
+ default:
+ gimmickValueLabel.Text = "No value";
+ break;
+ }
+
+ // Prevent deletetion of initial BPM and time signature
+ if (chart.Gimmicks.Count == 0
+ || (gimmick.Measure == 0 && (gimmick.GimmickType == GimmickType.BpmChange || gimmick.GimmickType == GimmickType.TimeSignatureChange)))
+ {
+ gimmickDeleteButton.Enabled = false;
+ }
+ else
+ {
+ gimmickDeleteButton.Enabled = true;
+ }
+ }
+
+ private void UpdateNoteLabels(int val = -2)
+ {
+ if (val != -2)
+ selectedNoteIndex = val;
+ if(selectedNoteIndex == -1)
+ {
+ noteMeasureLabel.Text = "None";
+ noteBeatLabel.Text = "None";
+ noteTypeLabel.Text = "None";
+ notePositionLabel.Text = "None";
+ noteSizeLabel.Text = "None";
+ noteMaskLabel.Text = "N/A";
+ return;
+ }
+
+ var note = chart.Notes[selectedNoteIndex];
+
+ noteMeasureLabel.Text = note.BeatInfo.Measure.ToString();
+ var quant = Utils.GetQuantization(note.BeatInfo.Beat, 16);
+ noteBeatLabel.Text = $"{quant.Item1} / {quant.Item2}";
+ noteTypeLabel.Text = note.NoteType.ToLabel();
+ notePositionLabel.Text = note.Position.ToString();
+ noteSizeLabel.Text = note.Size.ToString();
+ if (!note.IsMask)
+ noteMaskLabel.Text = "N/A";
+ else
+ {
+ switch (note.MaskFill)
+ {
+ case MaskType.Clockwise:
+ noteMaskLabel.Text = "Clockwise";
+ break;
+ case MaskType.CounterClockwise:
+ noteMaskLabel.Text = "C-Clockwise";
+ break;
+ case MaskType.Center:
+ noteMaskLabel.Text = "From Center";
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ private void notePrevButton_Click(object sender, EventArgs e)
+ {
+ if (chart.Notes.Count == 0)
+ return;
+
+ if (selectedNoteIndex == 0)
+ selectedNoteIndex = chart.Notes.Count - 1;
+ else
+ selectedNoteIndex -= 1;
+
+ circlePanel.Invalidate();
+ UpdateNoteLabels();
+ }
+
+ private void noteNextButton_Click(object sender, EventArgs e)
+ {
+ if (chart.Notes.Count == 0)
+ return;
+
+ if (selectedNoteIndex == chart.Notes.Count - 1)
+ selectedNoteIndex = 0;
+ else
+ selectedNoteIndex += 1;
+
+ circlePanel.Invalidate();
+ UpdateNoteLabels();
+ }
+
+ private void notePrevMeasureButton_Click(object sender, EventArgs e)
+ {
+ if (chart.Notes.Count == 0)
+ return;
+
+ int lastMeasure = chart.Notes[selectedNoteIndex].BeatInfo.Measure;
+ var note = chart.Notes.LastOrDefault(x => x.BeatInfo.Measure < lastMeasure);
+ if (note != null)
+ {
+ selectedNoteIndex = chart.Notes.IndexOf(note);
+ }
+ else
+ {
+ note = chart.Notes.LastOrDefault(x => x.BeatInfo.Measure > lastMeasure);
+ if (note != null)
+ {
+ selectedNoteIndex = chart.Notes.IndexOf(note);
+ }
+ }
+ circlePanel.Invalidate();
+ UpdateNoteLabels();
+ }
+
+ private void noteNextMeasureButton_Click(object sender, EventArgs e)
+ {
+ if (chart.Notes.Count == 0)
+ return;
+
+ int lastMeasure = chart.Notes[selectedNoteIndex].BeatInfo.Measure;
+ var note = chart.Notes.FirstOrDefault(x => x.BeatInfo.Measure > lastMeasure);
+ if (note != null)
+ {
+ selectedNoteIndex = chart.Notes.IndexOf(note);
+ }
+ else
+ {
+ note = chart.Notes.FirstOrDefault(x => x.BeatInfo.Measure < lastMeasure);
+ if (note != null)
+ {
+ selectedNoteIndex = chart.Notes.IndexOf(note);
+ }
+ }
+ circlePanel.Invalidate();
+ UpdateNoteLabels();
+ }
+
+ private void noteEditSelectedButton_Click(object sender, EventArgs e)
+ {
+ if (selectedNoteIndex == -1)
+ return;
+
+ var currentNote = chart.Notes[selectedNoteIndex];
+ var newNote = new Note()
+ {
+ BeatInfo = currentNote.BeatInfo,
+ Position = (int)positionNumeric.Value,
+ Size = (int)sizeNumeric.Value
+ };
+ opManager.InvokeAndPush(new EditNote(currentNote, newNote));
+ circlePanel.Invalidate();
+ UpdateNoteLabels();
+ }
+
+ private void noteDeleteSelectedButton_Click(object sender, EventArgs e)
+ {
+ if (selectedNoteIndex == -1)
+ return;
+
+ int delIndex = selectedNoteIndex;
+ opManager.InvokeAndPush(new RemoveNote(chart, chart.Notes[selectedNoteIndex]));
+ if (selectedNoteIndex == delIndex)
+ {
+ UpdateNoteLabels(delIndex - 1);
+ circlePanel.Invalidate();
+ }
+ }
+
+ protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
+ {
+ var sender = this;
+ var e = new EventArgs();
+
+ switch (keyData)
+ {
+ case Keys.T:
+ tapButton_Click(sender, e);
+ tapButton.Focus();
+ return true;
+ case Keys.O:
+ orangeButton_Click(sender, e);
+ orangeButton.Focus();
+ return true;
+ case Keys.G:
+ greenButton_Click(sender, e);
+ greenButton.Focus();
+ return true;
+ case Keys.R:
+ redButton_Click(sender, e);
+ redButton.Focus();
+ return true;
+ case Keys.B:
+ blueButton_Click(sender, e);
+ blueButton.Focus();
+ return true;
+ case Keys.Y:
+ chainButton_Click(sender, e);
+ chainButton.Focus();
+ return true;
+ case Keys.H:
+ holdButton_Click(sender, e);
+ holdButton.Focus();
+ return true;
+ case Keys.I:
+ insertButton_Click(sender, e);
+ insertButton.Focus();
+ return true;
+ case Keys.P:
+ playButton_Click(sender, e);
+ playButton.Focus();
+ return true;
+ default:
+ break;
+ }
+
+ return base.ProcessCmdKey(ref msg, keyData);
+ }
+
+ private void undoToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ if (opManager.CanUndo)
+ opManager.Undo();
+ }
+
+ private void redoToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ if (opManager.CanRedo)
+ opManager.Redo();
+ }
+
+ private void MainForm_Resize(object sender, EventArgs e)
+ {
+ var zoneWidth = noteViewGroupBox.Left - gimmickTypeGroupBox.Right - 12;
+ var zoneHeight = playbackGroupBox.Top - gimmickTypeGroupBox.Top - 6;
+ if (zoneWidth > zoneHeight)
+ {
+ circlePanel.Width = zoneHeight;
+ circlePanel.Height = zoneHeight;
+ }
+ else
+ {
+ circlePanel.Width = zoneWidth;
+ circlePanel.Height = zoneWidth;
+ }
+ int paddingLeft = (zoneWidth - circlePanel.Width) / 2;
+ circlePanel.Left = gimmickTypeGroupBox.Right + 6 + paddingLeft;
+ SetBufferedGraphicsContext();
+ circleView.Update(circlePanel.Size);
+ circlePanel.Invalidate();
+ }
+
+ private void autoSaveTimer_Tick(object sender, EventArgs e)
+ {
+ if (tempFilePath == "")
+ tempFilePath = Path.GetTempFileName().Replace(".tmp", ".mer");
+
+ if ((chart.Notes.Count > 0 || chart.Gimmicks.Count > 0) && !chart.IsSaved)
+ {
+ chart.WriteFile(tempFilePath, false);
+ File.WriteAllLines(tempStatusPath, new string[] { "true", DateTime.Now.ToString("yyyy-MM-dd HH:mm") });
+ }
+ else
+ {
+ DeleteAutosaves(tempFilePath);
+ }
+ }
+
+ private void DeleteAutosaves(string keep = "")
+ {
+ var oldAutosave = Directory.GetFiles(Path.GetTempPath(), "*.mer");
+ foreach (var file in oldAutosave)
+ {
+ if (file != keep)
+ File.Delete(file);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/BAKKA-Sharp/MainForm.resx b/BAKKA-Sharp/MainForm.resx
new file mode 100644
index 0000000..3410fdf
--- /dev/null
+++ b/BAKKA-Sharp/MainForm.resx
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 125, 17
+
+
+ 258, 17
+
+
+ 387, 17
+
+
+ 530, 17
+
+
+ 17, 17
+
+
+ 651, 17
+
+
\ No newline at end of file
diff --git a/BAKKA-Sharp/Note.cs b/BAKKA-Sharp/Note.cs
new file mode 100644
index 0000000..cf2ae73
--- /dev/null
+++ b/BAKKA-Sharp/Note.cs
@@ -0,0 +1,229 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BAKKA_Sharp
+{
+ internal class BeatInfo
+ {
+ public int Measure;
+ public int Beat;
+
+ public BeatInfo(int measure, int beat)
+ {
+ Measure = measure;
+ Beat = beat;
+ }
+
+ public BeatInfo(float measure)
+ {
+ Measure = (int)Math.Floor(measure);
+ Beat = (int)((measure - (float)Measure) * 1920.0f);
+ }
+
+ public BeatInfo(BeatInfo info)
+ {
+ Measure = info.Measure;
+ Beat = info.Beat;
+ }
+
+ public float MeasureDecimal { get { return (float)Measure + (float)Beat / 1920.0f; } }
+ }
+
+ internal class TimeSignature
+ {
+ public int Upper;
+ public int Lower;
+
+ public double Ratio { get { return (double)Upper / (double)Lower; } }
+
+ public TimeSignature()
+ {
+ Upper = 4;
+ Lower = 4;
+ }
+
+ public TimeSignature(TimeSignature sig)
+ {
+ Upper = sig.Upper;
+ Lower = sig.Lower;
+ }
+ }
+
+ internal class NoteBase
+ {
+ public BeatInfo BeatInfo { get; set; } = new BeatInfo(-1, 0);
+ public GimmickType GimmickType { get; set; } = GimmickType.NoGimmick;
+
+ public float Measure { get { return BeatInfo.MeasureDecimal; } }
+ }
+
+ internal class Note : NoteBase
+ {
+ public NoteType NoteType { get; set; } = NoteType.TouchNoBonus;
+ public int Position { get; set; }
+ public int Size { get; set; }
+ [System.ComponentModel.Browsable(false)]
+ public bool HoldChange { get; set; }
+ [System.ComponentModel.Browsable(false)]
+ public MaskType MaskFill { get; set; }
+ [System.ComponentModel.Browsable(false)]
+ public Note NextNote { get; set; }
+ [System.ComponentModel.Browsable(false)]
+ public Note PrevNote { get; set; }
+
+ [System.ComponentModel.Browsable(false)]
+ public bool IsHold
+ {
+ get
+ {
+ switch (NoteType)
+ {
+ case NoteType.HoldStartNoBonus:
+ case NoteType.HoldJoint:
+ case NoteType.HoldEnd:
+ case NoteType.HoldStartBonusFlair:
+ return true;
+ default:
+ return false;
+ }
+ }
+ }
+ [System.ComponentModel.Browsable(false)]
+ public bool IsMask
+ {
+ get
+ {
+ switch (NoteType)
+ {
+ case NoteType.MaskAdd:
+ case NoteType.MaskRemove:
+ return true;
+ default:
+ return false;
+ }
+ }
+ }
+ [System.ComponentModel.Browsable(false)]
+ public bool IsBonus
+ {
+ get
+ {
+ switch (NoteType)
+ {
+ case NoteType.TouchBonus:
+ case NoteType.SlideOrangeBonus:
+ case NoteType.SlideGreenBonus:
+ return true;
+ default:
+ return false; ;
+ }
+ }
+ }
+ [System.ComponentModel.Browsable(false)]
+ public bool IsFlair
+ {
+ get
+ {
+ switch (NoteType)
+ {
+ case NoteType.TouchBonusFlair:
+ case NoteType.SnapRedBonusFlair:
+ case NoteType.SnapBlueBonusFlair:
+ case NoteType.SlideOrangeBonusFlair:
+ case NoteType.SlideGreenBonusFlair:
+ case NoteType.HoldStartBonusFlair:
+ case NoteType.ChainBonusFlair:
+ return true;
+ default:
+ return false;
+ }
+ }
+ }
+ [System.ComponentModel.Browsable(false)]
+ public Color Color
+ {
+ get
+ {
+ return Utils.NoteTypeToColor(NoteType);
+ }
+ }
+
+ public Note() { }
+ public Note(BeatInfo info)
+ {
+ BeatInfo = info;
+ GimmickType = GimmickType.NoGimmick;
+ }
+
+ public Note(Note baseNote) : this(baseNote.BeatInfo)
+ {
+ Position = baseNote.Position;
+ Size = baseNote.Size;
+ NoteType = baseNote.NoteType;
+ }
+ }
+
+ internal class Gimmick : NoteBase
+ {
+ public double BPM { get; set; }
+ public TimeSignature TimeSig { get; set; } = new();
+ public double HiSpeed { get; set; }
+ public double StartTime { get; set; }
+
+ public bool IsReverse
+ {
+ get
+ {
+ switch (GimmickType)
+ {
+ case GimmickType.ReverseStart:
+ case GimmickType.ReverseMiddle:
+ case GimmickType.ReverseEnd:
+ return true;
+ default:
+ return false;
+ }
+ }
+ }
+
+ public bool IsStop
+ {
+ get
+ {
+ switch (GimmickType)
+ {
+ case GimmickType.StopStart:
+ case GimmickType.StopEnd:
+ return true;
+ default:
+ return false;
+ }
+ }
+ }
+
+ public Gimmick() { }
+ public Gimmick(BeatInfo info, GimmickType type)
+ {
+ BeatInfo = info;
+ GimmickType = type;
+ }
+ public Gimmick(Gimmick baseGimmick) : this(baseGimmick.BeatInfo, baseGimmick.GimmickType)
+ {
+ switch (GimmickType)
+ {
+ case GimmickType.BpmChange:
+ HiSpeed = baseGimmick.HiSpeed;
+ break;
+ case GimmickType.TimeSignatureChange:
+ TimeSig = new TimeSignature(baseGimmick.TimeSig);
+ break;
+ case GimmickType.HiSpeedChange:
+ HiSpeed = baseGimmick.HiSpeed;
+ break;
+ }
+ }
+ }
+}
diff --git a/BAKKA-Sharp/Operations/CompositeOperation.cs b/BAKKA-Sharp/Operations/CompositeOperation.cs
new file mode 100644
index 0000000..d041d6f
--- /dev/null
+++ b/BAKKA-Sharp/Operations/CompositeOperation.cs
@@ -0,0 +1,37 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BAKKA_Sharp.Operations
+{
+ internal class CompositeOperation : IOperation
+ {
+ public string Description { get; }
+
+ protected IEnumerable Operations { get; }
+
+ public CompositeOperation(string description, IEnumerable operations)
+ {
+ Description = description;
+ Operations = operations;
+ }
+
+ public void Redo()
+ {
+ foreach (var op in Operations)
+ {
+ op.Redo();
+ }
+ }
+
+ public void Undo()
+ {
+ foreach (var op in Operations)
+ {
+ op.Undo();
+ }
+ }
+ }
+}
diff --git a/BAKKA-Sharp/Operations/GimmickOperation.cs b/BAKKA-Sharp/Operations/GimmickOperation.cs
new file mode 100644
index 0000000..cd1086b
--- /dev/null
+++ b/BAKKA-Sharp/Operations/GimmickOperation.cs
@@ -0,0 +1,111 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BAKKA_Sharp.Operations
+{
+ internal abstract class GimmickOperation : IOperation
+ {
+ protected Gimmick Gimmick { get; }
+ protected Chart Chart { get; }
+ public abstract string Description { get; }
+
+ public GimmickOperation(Chart chart, Gimmick item)
+ {
+ Chart = chart;
+ Gimmick = item;
+ }
+
+ public abstract void Redo();
+
+ public abstract void Undo();
+ }
+
+ internal class InsertGimmick : GimmickOperation
+ {
+ public override string Description => "Insert gimmick";
+
+ public InsertGimmick(Chart chart, Gimmick item) : base(chart, item)
+ { }
+
+ public override void Redo()
+ {
+ Chart.Gimmicks.Add(Gimmick);
+ }
+
+ public override void Undo()
+ {
+ Chart.Gimmicks.Remove(Gimmick);
+ }
+ }
+
+ internal class RemoveGimmick : GimmickOperation
+ {
+ public override string Description => "Remove gimmick";
+
+ public RemoveGimmick(Chart chart, Gimmick item) : base(chart, item)
+ { }
+
+ public override void Redo()
+ {
+ Chart.Gimmicks.Remove(Gimmick);
+ }
+
+ public override void Undo()
+ {
+ Chart.Gimmicks.Add(Gimmick);
+ }
+ }
+
+ internal class EditGimmick : IOperation
+ {
+ public string Description => "Edit gimmick";
+
+ protected Gimmick Base { get; }
+ protected Gimmick OldGimmick { get; }
+ protected Gimmick NewGimmick { get; }
+
+ public EditGimmick(Gimmick baseGimmick, Gimmick newGimmick)
+ {
+ Base = baseGimmick;
+ OldGimmick = new Gimmick(baseGimmick);
+ NewGimmick = new Gimmick(newGimmick);
+ }
+
+ public void Redo()
+ {
+ Base.BeatInfo = new BeatInfo(NewGimmick.BeatInfo);
+ switch (Base.GimmickType)
+ {
+ case GimmickType.BpmChange:
+ Base.BPM = NewGimmick.BPM;
+ break;
+ case GimmickType.TimeSignatureChange:
+ Base.TimeSig = new TimeSignature(NewGimmick.TimeSig);
+ break;
+ case GimmickType.HiSpeedChange:
+ Base.HiSpeed = NewGimmick.HiSpeed;
+ break;
+ }
+ }
+
+ public void Undo()
+ {
+ Base.BeatInfo = new BeatInfo(OldGimmick.BeatInfo);
+ switch (Base.GimmickType)
+ {
+ case GimmickType.BpmChange:
+ Base.BPM = OldGimmick.BPM;
+ break;
+ case GimmickType.TimeSignatureChange:
+ Base.TimeSig = new TimeSignature(OldGimmick.TimeSig);
+ break;
+ case GimmickType.HiSpeedChange:
+ Base.HiSpeed = OldGimmick.HiSpeed;
+ break;
+ }
+ }
+ }
+}
diff --git a/BAKKA-Sharp/Operations/IOperation.cs b/BAKKA-Sharp/Operations/IOperation.cs
new file mode 100644
index 0000000..8b5a3ee
--- /dev/null
+++ b/BAKKA-Sharp/Operations/IOperation.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BAKKA_Sharp.Operations
+{
+ internal interface IOperation
+ {
+ string Description { get; }
+
+ void Undo();
+
+ void Redo();
+ }
+}
diff --git a/BAKKA-Sharp/Operations/NoteOperation.cs b/BAKKA-Sharp/Operations/NoteOperation.cs
new file mode 100644
index 0000000..17511f0
--- /dev/null
+++ b/BAKKA-Sharp/Operations/NoteOperation.cs
@@ -0,0 +1,91 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BAKKA_Sharp.Operations
+{
+ internal abstract class NoteOperation : IOperation
+ {
+ protected Note Note { get; }
+ protected Chart Chart { get; }
+ public abstract string Description { get; }
+
+ public NoteOperation(Chart chart, Note item)
+ {
+ Chart = chart;
+ Note = item;
+ }
+
+ public abstract void Redo();
+
+ public abstract void Undo();
+ }
+
+ internal class InsertNote : NoteOperation
+ {
+ public override string Description => "Insert note";
+
+ public InsertNote(Chart chart, Note item) : base(chart, item)
+ { }
+
+ public override void Redo()
+ {
+ Chart.Notes.Add(Note);
+ }
+
+ public override void Undo()
+ {
+ Chart.Notes.Remove(Note);
+ }
+ }
+
+ internal class RemoveNote : NoteOperation
+ {
+ public override string Description => "Remove note";
+
+ public RemoveNote(Chart chart, Note item) : base(chart, item)
+ { }
+
+ public override void Redo()
+ {
+ Chart.Notes.Remove(Note);
+ }
+
+ public override void Undo()
+ {
+ Chart.Notes.Add(Note);
+ }
+ }
+
+ internal class EditNote : IOperation
+ {
+ public string Description => "Edit note";
+
+ protected Note Base { get; }
+ protected Note OldNote { get; }
+ protected Note NewNote { get; }
+
+ public EditNote(Note baseNote, Note newNote)
+ {
+ Base = baseNote;
+ OldNote = new Note(baseNote);
+ NewNote = new Note(newNote);
+ }
+
+ public void Redo()
+ {
+ Base.BeatInfo = new BeatInfo(NewNote.BeatInfo);
+ Base.Position = NewNote.Position;
+ Base.Size = NewNote.Size;
+ }
+
+ public void Undo()
+ {
+ Base.BeatInfo = new BeatInfo(OldNote.BeatInfo);
+ Base.Position = OldNote.Position;
+ Base.Size = OldNote.Size;
+ }
+ }
+}
diff --git a/BAKKA-Sharp/Operations/OperationManager.cs b/BAKKA-Sharp/Operations/OperationManager.cs
new file mode 100644
index 0000000..317eaeb
--- /dev/null
+++ b/BAKKA-Sharp/Operations/OperationManager.cs
@@ -0,0 +1,70 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BAKKA_Sharp.Operations
+{
+ internal class OperationManager
+ {
+ public event EventHandler? OperationHistoryChanged;
+ public event EventHandler? ChangesCommitted;
+
+ protected Stack UndoStack { get; } = new Stack();
+ protected Stack RedoStack { get; } = new Stack();
+
+ private IOperation? LastCommittedOperation { get; set; } = null;
+
+ public IEnumerable UndoOperationsDescription
+ {
+ get { return UndoStack.Select(p => p.Description); }
+ }
+
+ public IEnumerable RedoOperationsDescription
+ {
+ get { return RedoStack.Select(p => p.Description); }
+ }
+
+ public bool CanUndo { get { return UndoStack.Count > 0; } }
+
+ public bool CanRedo { get { return RedoStack.Count > 0; } }
+
+ public void Push(IOperation op)
+ {
+ UndoStack.Push(op);
+ RedoStack.Clear();
+ OperationHistoryChanged?.Invoke(this, EventArgs.Empty);
+ }
+
+ public void InvokeAndPush(IOperation op)
+ {
+ op.Redo();
+ Push(op);
+ }
+
+ public void Undo()
+ {
+ IOperation op = UndoStack.Pop();
+ op.Undo();
+ RedoStack.Push(op);
+ OperationHistoryChanged?.Invoke(this, EventArgs.Empty);
+ }
+
+ public void Redo()
+ {
+ IOperation op = RedoStack.Pop();
+ op.Redo();
+ UndoStack.Push(op);
+ OperationHistoryChanged?.Invoke(this, EventArgs.Empty);
+ }
+
+ public void Clear()
+ {
+ UndoStack.Clear();
+ RedoStack.Clear();
+ LastCommittedOperation = null;
+ OperationHistoryChanged?.Invoke(this, EventArgs.Empty);
+ }
+ }
+}
diff --git a/BAKKA-Sharp/Program.cs b/BAKKA-Sharp/Program.cs
new file mode 100644
index 0000000..eb5fda0
--- /dev/null
+++ b/BAKKA-Sharp/Program.cs
@@ -0,0 +1,17 @@
+namespace BAKKA_Sharp
+{
+ internal static class Program
+ {
+ ///
+ /// The main entry point for the application.
+ ///
+ [STAThread]
+ static void Main()
+ {
+ // To customize application configuration such as set high DPI settings or default font,
+ // see https://aka.ms/applicationconfiguration.
+ ApplicationConfiguration.Initialize();
+ Application.Run(new MainForm());
+ }
+ }
+}
\ No newline at end of file
diff --git a/BAKKA-Sharp/Properties/Resources.Designer.cs b/BAKKA-Sharp/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..b07bf61
--- /dev/null
+++ b/BAKKA-Sharp/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace BAKKA_Sharp.Properties {
+ using System;
+
+
+ ///
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ ///
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// Returns the cached ResourceManager instance used by this class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("BAKKA_Sharp.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/BAKKA-Sharp/Properties/Resources.resx b/BAKKA-Sharp/Properties/Resources.resx
new file mode 100644
index 0000000..29dcb1b
--- /dev/null
+++ b/BAKKA-Sharp/Properties/Resources.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/BAKKA-Sharp/Properties/launchSettings.json b/BAKKA-Sharp/Properties/launchSettings.json
new file mode 100644
index 0000000..3e86481
--- /dev/null
+++ b/BAKKA-Sharp/Properties/launchSettings.json
@@ -0,0 +1,7 @@
+{
+ "profiles": {
+ "BAKKA-Sharp": {
+ "commandName": "Project"
+ }
+ }
+}
\ No newline at end of file
diff --git a/BAKKA-Sharp/UserSettings.cs b/BAKKA-Sharp/UserSettings.cs
new file mode 100644
index 0000000..3ef2225
--- /dev/null
+++ b/BAKKA-Sharp/UserSettings.cs
@@ -0,0 +1,29 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BAKKA_Sharp
+{
+ internal class UserSettings
+ {
+ public ViewSettings ViewSettings { get; set; } = new();
+ public SaveSettings SaveSettings { get; set; } = new();
+ }
+
+ internal class ViewSettings
+ {
+ public bool ShowCursor { get; set; } = true;
+ public bool ShowCursorDuringPlayback { get; set; } = false;
+ public bool HighlightViewedNote { get; set; } = true;
+ }
+
+ internal class SaveSettings
+ {
+ ///
+ /// How frequently autosave occurs (in minutes)
+ ///
+ public int AutoSaveInterval { get; set; } = 1;
+ }
+}
diff --git a/BAKKA-Sharp/Utils.cs b/BAKKA-Sharp/Utils.cs
new file mode 100644
index 0000000..9106567
--- /dev/null
+++ b/BAKKA-Sharp/Utils.cs
@@ -0,0 +1,182 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BAKKA_Sharp
+{
+ internal static class Utils
+ {
+ internal static string? GetTag(string input, string tag)
+ {
+ if(input.Contains(tag))
+ {
+ return input.Substring(input.IndexOf(tag) + tag.Length);
+ }
+
+ return null;
+ }
+
+ internal static double DegToRad(double deg)
+ {
+ return deg * Math.PI / 180.0f;
+ }
+
+ internal static Color NoteTypeToColor(NoteType type)
+ {
+ switch (type)
+ {
+ case NoteType.TouchNoBonus:
+ case NoteType.TouchBonus:
+ case NoteType.TouchBonusFlair:
+ return Color.Fuchsia;
+ case NoteType.SnapRedNoBonus:
+ case NoteType.SnapRedBonusFlair:
+ return Color.Red;
+ case NoteType.SnapBlueNoBonus:
+ case NoteType.SnapBlueBonusFlair:
+ return Color.Aqua;
+ case NoteType.SlideOrangeNoBonus:
+ case NoteType.SlideOrangeBonus:
+ case NoteType.SlideOrangeBonusFlair:
+ return Color.FromArgb(255, 128, 0);
+ case NoteType.SlideGreenNoBonus:
+ case NoteType.SlideGreenBonus:
+ case NoteType.SlideGreenBonusFlair:
+ return Color.LimeGreen;
+ case NoteType.HoldStartNoBonus:
+ case NoteType.HoldJoint:
+ case NoteType.HoldEnd:
+ case NoteType.HoldStartBonusFlair:
+ return Color.Yellow;
+ case NoteType.Chain:
+ case NoteType.ChainBonusFlair:
+ return Color.FromArgb(204, 190, 45);
+ default:
+ return Color.Transparent;
+ }
+ }
+
+ internal static void InvokeIfRequired(this Control control, MethodInvoker action)
+ {
+ if (control.InvokeRequired)
+ {
+ control.Invoke(action);
+ }
+ else
+ {
+ action();
+ }
+ }
+
+ internal static Rectangle ToInt(this RectangleF rect)
+ {
+ return new Rectangle((int)rect.X, (int)rect.Y, (int)rect.Width, (int)rect.Height);
+ }
+
+ internal static int FindGCD(int a, int b)
+ {
+ if (b == 0)
+ return a;
+ return FindGCD(b, a & b);
+ }
+
+ internal static string ToLabel(this NoteType type)
+ {
+ switch (type)
+ {
+ case NoteType.TouchNoBonus:
+ return "Touch";
+ case NoteType.TouchBonus:
+ return "Touch [Bonus]";
+ case NoteType.SnapRedNoBonus:
+ return "Snap (R)";
+ case NoteType.SnapBlueNoBonus:
+ return "Snap (B)";
+ case NoteType.SlideOrangeNoBonus:
+ return "Slide (O)";
+ case NoteType.SlideOrangeBonus:
+ return "Slide (O) [Bonus]";
+ case NoteType.SlideGreenNoBonus:
+ return "Slide (G)";
+ case NoteType.SlideGreenBonus:
+ return "Slide (G) [Bonus]";
+ case NoteType.HoldStartNoBonus:
+ return "Hold Start";
+ case NoteType.HoldJoint:
+ return "Hold Joint";
+ case NoteType.HoldEnd:
+ return "Hold End";
+ case NoteType.MaskAdd:
+ return "Mask Add";
+ case NoteType.MaskRemove:
+ return "Mask Remove";
+ case NoteType.EndOfChart:
+ return "End of Chart";
+ case NoteType.Chain:
+ return "Chain";
+ case NoteType.TouchBonusFlair:
+ return "Touch [R Note]";
+ case NoteType.SnapRedBonusFlair:
+ return "Snap (R) [R Note]";
+ case NoteType.SnapBlueBonusFlair:
+ return "Snap (B) [R Note]";
+ case NoteType.SlideOrangeBonusFlair:
+ return "Slide (O) [R Note]";
+ case NoteType.SlideGreenBonusFlair:
+ return "Slide (G) [R Note]";
+ case NoteType.HoldStartBonusFlair:
+ return "Hold Start [R Note]";
+ case NoteType.ChainBonusFlair:
+ return "Chain [R Note]";
+ default:
+ return "Undefined Note Type";
+ }
+ }
+
+ internal static string ToLabel(this GimmickType type)
+ {
+ switch (type)
+ {
+ case GimmickType.BpmChange:
+ return "BPM Change";
+ case GimmickType.TimeSignatureChange:
+ return "Time Signature Change";
+ case GimmickType.HiSpeedChange:
+ return "Hi-Speed Change";
+ case GimmickType.ReverseStart:
+ return "Reverse Start";
+ case GimmickType.ReverseMiddle:
+ return "Reverse Middle";
+ case GimmickType.ReverseEnd:
+ return "Reverse Stop";
+ case GimmickType.StopStart:
+ return "Stop Start";
+ case GimmickType.StopEnd:
+ return "Stop End";
+ default:
+ return "Undefined Gimmick";
+ }
+ }
+
+ internal static bool HasDecimal(double num)
+ {
+ return Math.Ceiling(num) == Math.Floor(num);
+ }
+
+ internal static Tuple GetQuantization(int val, int min)
+ {
+ while (!HasDecimal((double)(val * min) / 1920.0))
+ {
+ min *= 2;
+ }
+ return new Tuple((int)(val * min / 1920.0), min);
+ }
+
+ internal static float GetDist(Point a, Point b)
+ {
+ return (float)Math.Sqrt(Math.Pow(a.X - b.X, 2) + Math.Pow(a.Y - b.Y, 2));
+ }
+ }
+}
diff --git a/BAKKA-Sharp/bin/Debug/net6.0-windows/BAKKA-Sharp.deps.json b/BAKKA-Sharp/bin/Debug/net6.0-windows/BAKKA-Sharp.deps.json
new file mode 100644
index 0000000..0a0ce84
--- /dev/null
+++ b/BAKKA-Sharp/bin/Debug/net6.0-windows/BAKKA-Sharp.deps.json
@@ -0,0 +1,55 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v6.0",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v6.0": {
+ "BAKKA-Sharp/1.0.0-rc8": {
+ "dependencies": {
+ "Tomlyn": "0.15.0",
+ "irrKlang.NET4": "1.0.6617.18847"
+ },
+ "runtime": {
+ "BAKKA-Sharp.dll": {}
+ }
+ },
+ "Tomlyn/0.15.0": {
+ "runtime": {
+ "lib/net6.0/Tomlyn.dll": {
+ "assemblyVersion": "0.15.0.0",
+ "fileVersion": "0.15.0.0"
+ }
+ }
+ },
+ "irrKlang.NET4/1.0.6617.18847": {
+ "runtime": {
+ "irrKlang.NET4.dll": {
+ "assemblyVersion": "1.0.6617.18847",
+ "fileVersion": "0.0.0.0"
+ }
+ }
+ }
+ }
+ },
+ "libraries": {
+ "BAKKA-Sharp/1.0.0-rc8": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Tomlyn/0.15.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-WyEYqnQ7iN2m6N9cZjhAFqSa6Mz+M04AgUfDxXabTh+dToDPNKqh2r8V7oZLoRAIk3f0YEia08R9eYcrW1Txxg==",
+ "path": "tomlyn/0.15.0",
+ "hashPath": "tomlyn.0.15.0.nupkg.sha512"
+ },
+ "irrKlang.NET4/1.0.6617.18847": {
+ "type": "reference",
+ "serviceable": false,
+ "sha512": ""
+ }
+ }
+}
\ No newline at end of file
diff --git a/BAKKA-Sharp/bin/Debug/net6.0-windows/BAKKA-Sharp.dll b/BAKKA-Sharp/bin/Debug/net6.0-windows/BAKKA-Sharp.dll
new file mode 100644
index 0000000..1452bb5
Binary files /dev/null and b/BAKKA-Sharp/bin/Debug/net6.0-windows/BAKKA-Sharp.dll differ
diff --git a/BAKKA-Sharp/bin/Debug/net6.0-windows/BAKKA-Sharp.dll.config b/BAKKA-Sharp/bin/Debug/net6.0-windows/BAKKA-Sharp.dll.config
new file mode 100644
index 0000000..3680e72
--- /dev/null
+++ b/BAKKA-Sharp/bin/Debug/net6.0-windows/BAKKA-Sharp.dll.config
@@ -0,0 +1,599 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/BAKKA-Sharp/bin/Debug/net6.0-windows/BAKKA-Sharp.exe b/BAKKA-Sharp/bin/Debug/net6.0-windows/BAKKA-Sharp.exe
new file mode 100644
index 0000000..2bea414
Binary files /dev/null and b/BAKKA-Sharp/bin/Debug/net6.0-windows/BAKKA-Sharp.exe differ
diff --git a/BAKKA-Sharp/bin/Debug/net6.0-windows/BAKKA-Sharp.pdb b/BAKKA-Sharp/bin/Debug/net6.0-windows/BAKKA-Sharp.pdb
new file mode 100644
index 0000000..a3fa720
Binary files /dev/null and b/BAKKA-Sharp/bin/Debug/net6.0-windows/BAKKA-Sharp.pdb differ
diff --git a/BAKKA-Sharp/bin/Debug/net6.0-windows/BAKKA-Sharp.runtimeconfig.json b/BAKKA-Sharp/bin/Debug/net6.0-windows/BAKKA-Sharp.runtimeconfig.json
new file mode 100644
index 0000000..b6062ae
--- /dev/null
+++ b/BAKKA-Sharp/bin/Debug/net6.0-windows/BAKKA-Sharp.runtimeconfig.json
@@ -0,0 +1,15 @@
+{
+ "runtimeOptions": {
+ "tfm": "net6.0",
+ "frameworks": [
+ {
+ "name": "Microsoft.NETCore.App",
+ "version": "6.0.0"
+ },
+ {
+ "name": "Microsoft.WindowsDesktop.App",
+ "version": "6.0.0"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/BAKKA-Sharp/bin/Debug/net6.0-windows/Tomlyn.dll b/BAKKA-Sharp/bin/Debug/net6.0-windows/Tomlyn.dll
new file mode 100644
index 0000000..57c670e
Binary files /dev/null and b/BAKKA-Sharp/bin/Debug/net6.0-windows/Tomlyn.dll differ
diff --git a/BAKKA-Sharp/bin/Debug/net6.0-windows/irrKlang.NET4.dll b/BAKKA-Sharp/bin/Debug/net6.0-windows/irrKlang.NET4.dll
new file mode 100644
index 0000000..ef53ee5
Binary files /dev/null and b/BAKKA-Sharp/bin/Debug/net6.0-windows/irrKlang.NET4.dll differ
diff --git a/BAKKA-Sharp/bin/Release/net6.0-windows/BAKKA-Sharp.deps.json b/BAKKA-Sharp/bin/Release/net6.0-windows/BAKKA-Sharp.deps.json
new file mode 100644
index 0000000..0a0ce84
--- /dev/null
+++ b/BAKKA-Sharp/bin/Release/net6.0-windows/BAKKA-Sharp.deps.json
@@ -0,0 +1,55 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v6.0",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v6.0": {
+ "BAKKA-Sharp/1.0.0-rc8": {
+ "dependencies": {
+ "Tomlyn": "0.15.0",
+ "irrKlang.NET4": "1.0.6617.18847"
+ },
+ "runtime": {
+ "BAKKA-Sharp.dll": {}
+ }
+ },
+ "Tomlyn/0.15.0": {
+ "runtime": {
+ "lib/net6.0/Tomlyn.dll": {
+ "assemblyVersion": "0.15.0.0",
+ "fileVersion": "0.15.0.0"
+ }
+ }
+ },
+ "irrKlang.NET4/1.0.6617.18847": {
+ "runtime": {
+ "irrKlang.NET4.dll": {
+ "assemblyVersion": "1.0.6617.18847",
+ "fileVersion": "0.0.0.0"
+ }
+ }
+ }
+ }
+ },
+ "libraries": {
+ "BAKKA-Sharp/1.0.0-rc8": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Tomlyn/0.15.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-WyEYqnQ7iN2m6N9cZjhAFqSa6Mz+M04AgUfDxXabTh+dToDPNKqh2r8V7oZLoRAIk3f0YEia08R9eYcrW1Txxg==",
+ "path": "tomlyn/0.15.0",
+ "hashPath": "tomlyn.0.15.0.nupkg.sha512"
+ },
+ "irrKlang.NET4/1.0.6617.18847": {
+ "type": "reference",
+ "serviceable": false,
+ "sha512": ""
+ }
+ }
+}
\ No newline at end of file
diff --git a/BAKKA-Sharp/bin/Release/net6.0-windows/BAKKA-Sharp.dll b/BAKKA-Sharp/bin/Release/net6.0-windows/BAKKA-Sharp.dll
new file mode 100644
index 0000000..d3eec8b
Binary files /dev/null and b/BAKKA-Sharp/bin/Release/net6.0-windows/BAKKA-Sharp.dll differ
diff --git a/BAKKA-Sharp/bin/Release/net6.0-windows/BAKKA-Sharp.dll.config b/BAKKA-Sharp/bin/Release/net6.0-windows/BAKKA-Sharp.dll.config
new file mode 100644
index 0000000..3680e72
--- /dev/null
+++ b/BAKKA-Sharp/bin/Release/net6.0-windows/BAKKA-Sharp.dll.config
@@ -0,0 +1,599 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/BAKKA-Sharp/bin/Release/net6.0-windows/BAKKA-Sharp.exe b/BAKKA-Sharp/bin/Release/net6.0-windows/BAKKA-Sharp.exe
new file mode 100644
index 0000000..2bea414
Binary files /dev/null and b/BAKKA-Sharp/bin/Release/net6.0-windows/BAKKA-Sharp.exe differ
diff --git a/BAKKA-Sharp/bin/Release/net6.0-windows/BAKKA-Sharp.pdb b/BAKKA-Sharp/bin/Release/net6.0-windows/BAKKA-Sharp.pdb
new file mode 100644
index 0000000..171fc6e
Binary files /dev/null and b/BAKKA-Sharp/bin/Release/net6.0-windows/BAKKA-Sharp.pdb differ
diff --git a/BAKKA-Sharp/bin/Release/net6.0-windows/BAKKA-Sharp.runtimeconfig.json b/BAKKA-Sharp/bin/Release/net6.0-windows/BAKKA-Sharp.runtimeconfig.json
new file mode 100644
index 0000000..383c312
--- /dev/null
+++ b/BAKKA-Sharp/bin/Release/net6.0-windows/BAKKA-Sharp.runtimeconfig.json
@@ -0,0 +1,18 @@
+{
+ "runtimeOptions": {
+ "tfm": "net6.0",
+ "frameworks": [
+ {
+ "name": "Microsoft.NETCore.App",
+ "version": "6.0.0"
+ },
+ {
+ "name": "Microsoft.WindowsDesktop.App",
+ "version": "6.0.0"
+ }
+ ],
+ "configProperties": {
+ "System.Reflection.Metadata.MetadataUpdater.IsSupported": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/BAKKA-Sharp/bin/Release/net6.0-windows/Tomlyn.dll b/BAKKA-Sharp/bin/Release/net6.0-windows/Tomlyn.dll
new file mode 100644
index 0000000..57c670e
Binary files /dev/null and b/BAKKA-Sharp/bin/Release/net6.0-windows/Tomlyn.dll differ
diff --git a/BAKKA-Sharp/bin/Release/net6.0-windows/irrKlang.NET4.dll b/BAKKA-Sharp/bin/Release/net6.0-windows/irrKlang.NET4.dll
new file mode 100644
index 0000000..ef53ee5
Binary files /dev/null and b/BAKKA-Sharp/bin/Release/net6.0-windows/irrKlang.NET4.dll differ
diff --git a/BAKKA-Sharp/obj/BAKKA-Sharp.csproj.nuget.dgspec.json b/BAKKA-Sharp/obj/BAKKA-Sharp.csproj.nuget.dgspec.json
new file mode 100644
index 0000000..fb39ac4
--- /dev/null
+++ b/BAKKA-Sharp/obj/BAKKA-Sharp.csproj.nuget.dgspec.json
@@ -0,0 +1,75 @@
+{
+ "format": 1,
+ "restore": {
+ "C:\\Users\\otaku\\source\\repos\\BAKKA-Sharp\\BAKKA-Sharp\\BAKKA-Sharp.csproj": {}
+ },
+ "projects": {
+ "C:\\Users\\otaku\\source\\repos\\BAKKA-Sharp\\BAKKA-Sharp\\BAKKA-Sharp.csproj": {
+ "version": "1.0.0-rc8",
+ "restore": {
+ "projectUniqueName": "C:\\Users\\otaku\\source\\repos\\BAKKA-Sharp\\BAKKA-Sharp\\BAKKA-Sharp.csproj",
+ "projectName": "BAKKA-Sharp",
+ "projectPath": "C:\\Users\\otaku\\source\\repos\\BAKKA-Sharp\\BAKKA-Sharp\\BAKKA-Sharp.csproj",
+ "packagesPath": "C:\\Users\\otaku\\.nuget\\packages\\",
+ "outputPath": "C:\\Users\\otaku\\source\\repos\\BAKKA-Sharp\\BAKKA-Sharp\\obj\\",
+ "projectStyle": "PackageReference",
+ "fallbackFolders": [
+ "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder"
+ ],
+ "configFilePaths": [
+ "C:\\Users\\otaku\\AppData\\Roaming\\NuGet\\NuGet.Config",
+ "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
+ ],
+ "originalTargetFrameworks": [
+ "net6.0-windows"
+ ],
+ "sources": {
+ "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
+ "https://api.nuget.org/v3/index.json": {}
+ },
+ "frameworks": {
+ "net6.0-windows7.0": {
+ "targetAlias": "net6.0-windows",
+ "projectReferences": {}
+ }
+ },
+ "warningProperties": {
+ "warnAsError": [
+ "NU1605"
+ ]
+ }
+ },
+ "frameworks": {
+ "net6.0-windows7.0": {
+ "targetAlias": "net6.0-windows",
+ "dependencies": {
+ "Tomlyn": {
+ "target": "Package",
+ "version": "[0.15.0, )"
+ }
+ },
+ "imports": [
+ "net461",
+ "net462",
+ "net47",
+ "net471",
+ "net472",
+ "net48",
+ "net481"
+ ],
+ "assetTargetFallback": true,
+ "warn": true,
+ "frameworkReferences": {
+ "Microsoft.NETCore.App": {
+ "privateAssets": "all"
+ },
+ "Microsoft.WindowsDesktop.App.WindowsForms": {
+ "privateAssets": "none"
+ }
+ },
+ "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\6.0.400\\RuntimeIdentifierGraph.json"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/BAKKA-Sharp/obj/BAKKA-Sharp.csproj.nuget.g.props b/BAKKA-Sharp/obj/BAKKA-Sharp.csproj.nuget.g.props
new file mode 100644
index 0000000..d3ab229
--- /dev/null
+++ b/BAKKA-Sharp/obj/BAKKA-Sharp.csproj.nuget.g.props
@@ -0,0 +1,16 @@
+
+
+
+ True
+ NuGet
+ $(MSBuildThisFileDirectory)project.assets.json
+ $(UserProfile)\.nuget\packages\
+ C:\Users\otaku\.nuget\packages\;C:\Program Files\dotnet\sdk\NuGetFallbackFolder
+ PackageReference
+ 6.3.0
+
+
+
+
+
+
\ No newline at end of file
diff --git a/BAKKA-Sharp/obj/BAKKA-Sharp.csproj.nuget.g.targets b/BAKKA-Sharp/obj/BAKKA-Sharp.csproj.nuget.g.targets
new file mode 100644
index 0000000..35a7576
--- /dev/null
+++ b/BAKKA-Sharp/obj/BAKKA-Sharp.csproj.nuget.g.targets
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.AssemblyInfo.cs b/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.AssemblyInfo.cs
new file mode 100644
index 0000000..9e430c3
--- /dev/null
+++ b/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.AssemblyInfo.cs
@@ -0,0 +1,26 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+using System;
+using System.Reflection;
+
+[assembly: System.Reflection.AssemblyCompanyAttribute("VeroxZik")]
+[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
+[assembly: System.Reflection.AssemblyCopyrightAttribute("2022")]
+[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0-rc8")]
+[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0-rc8")]
+[assembly: System.Reflection.AssemblyProductAttribute("BAKKA-Sharp")]
+[assembly: System.Reflection.AssemblyTitleAttribute("BAKKA-Sharp")]
+[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
+[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
+[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
+
+// Generated by the MSBuild WriteCodeFragment class.
+
diff --git a/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.AssemblyInfoInputs.cache b/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.AssemblyInfoInputs.cache
new file mode 100644
index 0000000..ee7937d
--- /dev/null
+++ b/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.AssemblyInfoInputs.cache
@@ -0,0 +1 @@
+3dbe1528cf4029aabee1dcda2fe55e7c5bbfe1ee
diff --git a/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.GeneratedMSBuildEditorConfig.editorconfig b/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.GeneratedMSBuildEditorConfig.editorconfig
new file mode 100644
index 0000000..f6a0c6d
--- /dev/null
+++ b/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.GeneratedMSBuildEditorConfig.editorconfig
@@ -0,0 +1,16 @@
+is_global = true
+build_property.ApplicationManifest =
+build_property.StartupObject = BAKKA_Sharp.Program
+build_property.ApplicationDefaultFont =
+build_property.ApplicationHighDpiMode =
+build_property.ApplicationUseCompatibleTextRendering =
+build_property.ApplicationVisualStyles =
+build_property.TargetFramework = net6.0-windows
+build_property.TargetPlatformMinVersion = 7.0
+build_property.UsingMicrosoftNETSdkWeb =
+build_property.ProjectTypeGuids =
+build_property.InvariantGlobalization =
+build_property.PlatformNeutralAssembly =
+build_property._SupportedPlatformList = Linux,macOS,Windows
+build_property.RootNamespace = BAKKA_Sharp
+build_property.ProjectDir = C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\
diff --git a/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.GlobalUsings.g.cs b/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.GlobalUsings.g.cs
new file mode 100644
index 0000000..fea4009
--- /dev/null
+++ b/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.GlobalUsings.g.cs
@@ -0,0 +1,10 @@
+//
+global using global::System;
+global using global::System.Collections.Generic;
+global using global::System.Drawing;
+global using global::System.IO;
+global using global::System.Linq;
+global using global::System.Net.Http;
+global using global::System.Threading;
+global using global::System.Threading.Tasks;
+global using global::System.Windows.Forms;
diff --git a/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.assets.cache b/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.assets.cache
new file mode 100644
index 0000000..74e5a3e
Binary files /dev/null and b/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.assets.cache differ
diff --git a/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.csproj.AssemblyReference.cache b/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.csproj.AssemblyReference.cache
new file mode 100644
index 0000000..919ceda
Binary files /dev/null and b/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.csproj.AssemblyReference.cache differ
diff --git a/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.csproj.BuildWithSkipAnalyzers b/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.csproj.BuildWithSkipAnalyzers
new file mode 100644
index 0000000..e69de29
diff --git a/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.csproj.CopyComplete b/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.csproj.CopyComplete
new file mode 100644
index 0000000..e69de29
diff --git a/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.csproj.CoreCompileInputs.cache b/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.csproj.CoreCompileInputs.cache
new file mode 100644
index 0000000..14389a9
--- /dev/null
+++ b/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.csproj.CoreCompileInputs.cache
@@ -0,0 +1 @@
+5fcd841432db581d6e8bf5bf1d8376cce86318e7
diff --git a/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.csproj.FileListAbsolute.txt b/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.csproj.FileListAbsolute.txt
new file mode 100644
index 0000000..ff11a29
--- /dev/null
+++ b/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.csproj.FileListAbsolute.txt
@@ -0,0 +1,26 @@
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\bin\Debug\net6.0-windows\BAKKA-Sharp.exe
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\bin\Debug\net6.0-windows\BAKKA-Sharp.dll.config
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\bin\Debug\net6.0-windows\BAKKA-Sharp.deps.json
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\bin\Debug\net6.0-windows\BAKKA-Sharp.runtimeconfig.json
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\bin\Debug\net6.0-windows\BAKKA-Sharp.dll
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\bin\Debug\net6.0-windows\BAKKA-Sharp.pdb
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\bin\Debug\net6.0-windows\Tomlyn.dll
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\bin\Debug\net6.0-windows\irrKlang.NET4.dll
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\obj\Debug\net6.0-windows\BAKKA-Sharp.csproj.AssemblyReference.cache
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\obj\Debug\net6.0-windows\BAKKA-Sharp.csproj.SuggestedBindingRedirects.cache
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\obj\Debug\net6.0-windows\BAKKA-Sharp.dll.config
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\obj\Debug\net6.0-windows\BAKKA_Sharp.GimmickForm.resources
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\obj\Debug\net6.0-windows\BAKKA_Sharp.InitChartSettingsForm.resources
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\obj\Debug\net6.0-windows\BAKKA_Sharp.MainForm.resources
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\obj\Debug\net6.0-windows\BAKKA_Sharp.Properties.Resources.resources
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\obj\Debug\net6.0-windows\BAKKA-Sharp.csproj.GenerateResource.cache
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\obj\Debug\net6.0-windows\BAKKA-Sharp.GeneratedMSBuildEditorConfig.editorconfig
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\obj\Debug\net6.0-windows\BAKKA-Sharp.AssemblyInfoInputs.cache
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\obj\Debug\net6.0-windows\BAKKA-Sharp.AssemblyInfo.cs
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\obj\Debug\net6.0-windows\BAKKA-Sharp.csproj.CoreCompileInputs.cache
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\obj\Debug\net6.0-windows\BAKKA-Sharp.csproj.CopyComplete
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\obj\Debug\net6.0-windows\BAKKA-Sharp.dll
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\obj\Debug\net6.0-windows\refint\BAKKA-Sharp.dll
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\obj\Debug\net6.0-windows\BAKKA-Sharp.pdb
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\obj\Debug\net6.0-windows\BAKKA-Sharp.genruntimeconfig.cache
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\obj\Debug\net6.0-windows\ref\BAKKA-Sharp.dll
diff --git a/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.csproj.GenerateResource.cache b/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.csproj.GenerateResource.cache
new file mode 100644
index 0000000..ecda1c8
Binary files /dev/null and b/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.csproj.GenerateResource.cache differ
diff --git a/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.csproj.SuggestedBindingRedirects.cache b/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.csproj.SuggestedBindingRedirects.cache
new file mode 100644
index 0000000..0dab5c6
--- /dev/null
+++ b/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.csproj.SuggestedBindingRedirects.cache
@@ -0,0 +1 @@
+015466d50d4df6383792bd4d722ac145ecd651ab
diff --git a/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.designer.deps.json b/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.designer.deps.json
new file mode 100644
index 0000000..37dbb8f
--- /dev/null
+++ b/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.designer.deps.json
@@ -0,0 +1,28 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v6.0",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v6.0": {
+ "Tomlyn/0.15.0": {
+ "runtime": {
+ "lib/net6.0/Tomlyn.dll": {
+ "assemblyVersion": "0.15.0.0",
+ "fileVersion": "0.15.0.0"
+ }
+ }
+ }
+ }
+ },
+ "libraries": {
+ "Tomlyn/0.15.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-WyEYqnQ7iN2m6N9cZjhAFqSa6Mz+M04AgUfDxXabTh+dToDPNKqh2r8V7oZLoRAIk3f0YEia08R9eYcrW1Txxg==",
+ "path": "tomlyn/0.15.0",
+ "hashPath": "tomlyn.0.15.0.nupkg.sha512"
+ }
+ }
+}
\ No newline at end of file
diff --git a/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.designer.runtimeconfig.json b/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.designer.runtimeconfig.json
new file mode 100644
index 0000000..c2eb1bf
--- /dev/null
+++ b/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.designer.runtimeconfig.json
@@ -0,0 +1,23 @@
+{
+ "runtimeOptions": {
+ "tfm": "net6.0",
+ "frameworks": [
+ {
+ "name": "Microsoft.NETCore.App",
+ "version": "6.0.0"
+ },
+ {
+ "name": "Microsoft.WindowsDesktop.App",
+ "version": "6.0.0"
+ }
+ ],
+ "additionalProbingPaths": [
+ "C:\\Users\\otaku\\.dotnet\\store\\|arch|\\|tfm|",
+ "C:\\Users\\otaku\\.nuget\\packages",
+ "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder"
+ ],
+ "configProperties": {
+ "Microsoft.NETCore.DotNetHostPolicy.SetAppPaths": true
+ }
+ }
+}
\ No newline at end of file
diff --git a/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.dll b/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.dll
new file mode 100644
index 0000000..1452bb5
Binary files /dev/null and b/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.dll differ
diff --git a/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.dll.config b/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.dll.config
new file mode 100644
index 0000000..3680e72
--- /dev/null
+++ b/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.dll.config
@@ -0,0 +1,599 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.genruntimeconfig.cache b/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.genruntimeconfig.cache
new file mode 100644
index 0000000..ff95179
--- /dev/null
+++ b/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.genruntimeconfig.cache
@@ -0,0 +1 @@
+d05a886fd8b05ad418b242db5b987ac9d6626cb4
diff --git a/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.pdb b/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.pdb
new file mode 100644
index 0000000..a3fa720
Binary files /dev/null and b/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA-Sharp.pdb differ
diff --git a/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA_Sharp.GimmickForm.resources b/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA_Sharp.GimmickForm.resources
new file mode 100644
index 0000000..6c05a97
Binary files /dev/null and b/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA_Sharp.GimmickForm.resources differ
diff --git a/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA_Sharp.InitChartSettingsForm.resources b/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA_Sharp.InitChartSettingsForm.resources
new file mode 100644
index 0000000..6c05a97
Binary files /dev/null and b/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA_Sharp.InitChartSettingsForm.resources differ
diff --git a/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA_Sharp.MainForm.resources b/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA_Sharp.MainForm.resources
new file mode 100644
index 0000000..6c05a97
Binary files /dev/null and b/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA_Sharp.MainForm.resources differ
diff --git a/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA_Sharp.Properties.Resources.resources b/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA_Sharp.Properties.Resources.resources
new file mode 100644
index 0000000..6c05a97
Binary files /dev/null and b/BAKKA-Sharp/obj/Debug/net6.0-windows/BAKKA_Sharp.Properties.Resources.resources differ
diff --git a/BAKKA-Sharp/obj/Debug/net6.0-windows/apphost.exe b/BAKKA-Sharp/obj/Debug/net6.0-windows/apphost.exe
new file mode 100644
index 0000000..2bea414
Binary files /dev/null and b/BAKKA-Sharp/obj/Debug/net6.0-windows/apphost.exe differ
diff --git a/BAKKA-Sharp/obj/Debug/net6.0-windows/ref/BAKKA-Sharp.dll b/BAKKA-Sharp/obj/Debug/net6.0-windows/ref/BAKKA-Sharp.dll
new file mode 100644
index 0000000..382c6dd
Binary files /dev/null and b/BAKKA-Sharp/obj/Debug/net6.0-windows/ref/BAKKA-Sharp.dll differ
diff --git a/BAKKA-Sharp/obj/Debug/net6.0-windows/refint/BAKKA-Sharp.dll b/BAKKA-Sharp/obj/Debug/net6.0-windows/refint/BAKKA-Sharp.dll
new file mode 100644
index 0000000..382c6dd
Binary files /dev/null and b/BAKKA-Sharp/obj/Debug/net6.0-windows/refint/BAKKA-Sharp.dll differ
diff --git a/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.AssemblyInfo.cs b/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.AssemblyInfo.cs
new file mode 100644
index 0000000..20caad1
--- /dev/null
+++ b/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.AssemblyInfo.cs
@@ -0,0 +1,26 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+using System;
+using System.Reflection;
+
+[assembly: System.Reflection.AssemblyCompanyAttribute("VeroxZik")]
+[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")]
+[assembly: System.Reflection.AssemblyCopyrightAttribute("2022")]
+[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0-rc8")]
+[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0-rc8")]
+[assembly: System.Reflection.AssemblyProductAttribute("BAKKA-Sharp")]
+[assembly: System.Reflection.AssemblyTitleAttribute("BAKKA-Sharp")]
+[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
+[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
+[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
+
+// Generated by the MSBuild WriteCodeFragment class.
+
diff --git a/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.AssemblyInfoInputs.cache b/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.AssemblyInfoInputs.cache
new file mode 100644
index 0000000..acfbb37
--- /dev/null
+++ b/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.AssemblyInfoInputs.cache
@@ -0,0 +1 @@
+12c483775a579c00efb4200a5b21994e4af18272
diff --git a/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.GeneratedMSBuildEditorConfig.editorconfig b/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.GeneratedMSBuildEditorConfig.editorconfig
new file mode 100644
index 0000000..f6a0c6d
--- /dev/null
+++ b/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.GeneratedMSBuildEditorConfig.editorconfig
@@ -0,0 +1,16 @@
+is_global = true
+build_property.ApplicationManifest =
+build_property.StartupObject = BAKKA_Sharp.Program
+build_property.ApplicationDefaultFont =
+build_property.ApplicationHighDpiMode =
+build_property.ApplicationUseCompatibleTextRendering =
+build_property.ApplicationVisualStyles =
+build_property.TargetFramework = net6.0-windows
+build_property.TargetPlatformMinVersion = 7.0
+build_property.UsingMicrosoftNETSdkWeb =
+build_property.ProjectTypeGuids =
+build_property.InvariantGlobalization =
+build_property.PlatformNeutralAssembly =
+build_property._SupportedPlatformList = Linux,macOS,Windows
+build_property.RootNamespace = BAKKA_Sharp
+build_property.ProjectDir = C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\
diff --git a/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.GlobalUsings.g.cs b/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.GlobalUsings.g.cs
new file mode 100644
index 0000000..fea4009
--- /dev/null
+++ b/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.GlobalUsings.g.cs
@@ -0,0 +1,10 @@
+//
+global using global::System;
+global using global::System.Collections.Generic;
+global using global::System.Drawing;
+global using global::System.IO;
+global using global::System.Linq;
+global using global::System.Net.Http;
+global using global::System.Threading;
+global using global::System.Threading.Tasks;
+global using global::System.Windows.Forms;
diff --git a/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.assets.cache b/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.assets.cache
new file mode 100644
index 0000000..d279501
Binary files /dev/null and b/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.assets.cache differ
diff --git a/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.csproj.AssemblyReference.cache b/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.csproj.AssemblyReference.cache
new file mode 100644
index 0000000..919ceda
Binary files /dev/null and b/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.csproj.AssemblyReference.cache differ
diff --git a/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.csproj.BuildWithSkipAnalyzers b/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.csproj.BuildWithSkipAnalyzers
new file mode 100644
index 0000000..e69de29
diff --git a/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.csproj.CopyComplete b/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.csproj.CopyComplete
new file mode 100644
index 0000000..e69de29
diff --git a/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.csproj.CoreCompileInputs.cache b/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.csproj.CoreCompileInputs.cache
new file mode 100644
index 0000000..3b01cb9
--- /dev/null
+++ b/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.csproj.CoreCompileInputs.cache
@@ -0,0 +1 @@
+f94e78794f9ea9507c3b13dbdbd02c6fe11382b0
diff --git a/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.csproj.FileListAbsolute.txt b/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.csproj.FileListAbsolute.txt
new file mode 100644
index 0000000..833271a
--- /dev/null
+++ b/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.csproj.FileListAbsolute.txt
@@ -0,0 +1,26 @@
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\bin\Release\net6.0-windows\BAKKA-Sharp.exe
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\bin\Release\net6.0-windows\BAKKA-Sharp.dll.config
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\bin\Release\net6.0-windows\BAKKA-Sharp.deps.json
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\bin\Release\net6.0-windows\BAKKA-Sharp.runtimeconfig.json
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\bin\Release\net6.0-windows\BAKKA-Sharp.dll
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\bin\Release\net6.0-windows\BAKKA-Sharp.pdb
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\bin\Release\net6.0-windows\Tomlyn.dll
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\bin\Release\net6.0-windows\irrKlang.NET4.dll
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\obj\Release\net6.0-windows\BAKKA-Sharp.csproj.AssemblyReference.cache
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\obj\Release\net6.0-windows\BAKKA-Sharp.csproj.SuggestedBindingRedirects.cache
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\obj\Release\net6.0-windows\BAKKA-Sharp.dll.config
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\obj\Release\net6.0-windows\BAKKA_Sharp.GimmickForm.resources
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\obj\Release\net6.0-windows\BAKKA_Sharp.InitChartSettingsForm.resources
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\obj\Release\net6.0-windows\BAKKA_Sharp.MainForm.resources
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\obj\Release\net6.0-windows\BAKKA_Sharp.Properties.Resources.resources
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\obj\Release\net6.0-windows\BAKKA-Sharp.csproj.GenerateResource.cache
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\obj\Release\net6.0-windows\BAKKA-Sharp.GeneratedMSBuildEditorConfig.editorconfig
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\obj\Release\net6.0-windows\BAKKA-Sharp.AssemblyInfoInputs.cache
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\obj\Release\net6.0-windows\BAKKA-Sharp.AssemblyInfo.cs
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\obj\Release\net6.0-windows\BAKKA-Sharp.csproj.CoreCompileInputs.cache
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\obj\Release\net6.0-windows\BAKKA-Sharp.csproj.CopyComplete
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\obj\Release\net6.0-windows\BAKKA-Sharp.dll
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\obj\Release\net6.0-windows\refint\BAKKA-Sharp.dll
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\obj\Release\net6.0-windows\BAKKA-Sharp.pdb
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\obj\Release\net6.0-windows\BAKKA-Sharp.genruntimeconfig.cache
+C:\Users\otaku\source\repos\BAKKA-Sharp\BAKKA-Sharp\obj\Release\net6.0-windows\ref\BAKKA-Sharp.dll
diff --git a/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.csproj.GenerateResource.cache b/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.csproj.GenerateResource.cache
new file mode 100644
index 0000000..ecda1c8
Binary files /dev/null and b/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.csproj.GenerateResource.cache differ
diff --git a/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.csproj.SuggestedBindingRedirects.cache b/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.csproj.SuggestedBindingRedirects.cache
new file mode 100644
index 0000000..0dab5c6
--- /dev/null
+++ b/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.csproj.SuggestedBindingRedirects.cache
@@ -0,0 +1 @@
+015466d50d4df6383792bd4d722ac145ecd651ab
diff --git a/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.designer.deps.json b/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.designer.deps.json
new file mode 100644
index 0000000..37dbb8f
--- /dev/null
+++ b/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.designer.deps.json
@@ -0,0 +1,28 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v6.0",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v6.0": {
+ "Tomlyn/0.15.0": {
+ "runtime": {
+ "lib/net6.0/Tomlyn.dll": {
+ "assemblyVersion": "0.15.0.0",
+ "fileVersion": "0.15.0.0"
+ }
+ }
+ }
+ }
+ },
+ "libraries": {
+ "Tomlyn/0.15.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-WyEYqnQ7iN2m6N9cZjhAFqSa6Mz+M04AgUfDxXabTh+dToDPNKqh2r8V7oZLoRAIk3f0YEia08R9eYcrW1Txxg==",
+ "path": "tomlyn/0.15.0",
+ "hashPath": "tomlyn.0.15.0.nupkg.sha512"
+ }
+ }
+}
\ No newline at end of file
diff --git a/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.designer.runtimeconfig.json b/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.designer.runtimeconfig.json
new file mode 100644
index 0000000..f8106ad
--- /dev/null
+++ b/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.designer.runtimeconfig.json
@@ -0,0 +1,24 @@
+{
+ "runtimeOptions": {
+ "tfm": "net6.0",
+ "frameworks": [
+ {
+ "name": "Microsoft.NETCore.App",
+ "version": "6.0.0"
+ },
+ {
+ "name": "Microsoft.WindowsDesktop.App",
+ "version": "6.0.0"
+ }
+ ],
+ "additionalProbingPaths": [
+ "C:\\Users\\otaku\\.dotnet\\store\\|arch|\\|tfm|",
+ "C:\\Users\\otaku\\.nuget\\packages",
+ "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder"
+ ],
+ "configProperties": {
+ "System.Reflection.Metadata.MetadataUpdater.IsSupported": false,
+ "Microsoft.NETCore.DotNetHostPolicy.SetAppPaths": true
+ }
+ }
+}
\ No newline at end of file
diff --git a/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.dll b/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.dll
new file mode 100644
index 0000000..d3eec8b
Binary files /dev/null and b/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.dll differ
diff --git a/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.dll.config b/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.dll.config
new file mode 100644
index 0000000..3680e72
--- /dev/null
+++ b/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.dll.config
@@ -0,0 +1,599 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.genruntimeconfig.cache b/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.genruntimeconfig.cache
new file mode 100644
index 0000000..fe6919e
--- /dev/null
+++ b/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.genruntimeconfig.cache
@@ -0,0 +1 @@
+a8c90ddd8682860b141a2576d19f5258227ed315
diff --git a/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.pdb b/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.pdb
new file mode 100644
index 0000000..171fc6e
Binary files /dev/null and b/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA-Sharp.pdb differ
diff --git a/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA_Sharp.GimmickForm.resources b/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA_Sharp.GimmickForm.resources
new file mode 100644
index 0000000..6c05a97
Binary files /dev/null and b/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA_Sharp.GimmickForm.resources differ
diff --git a/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA_Sharp.InitChartSettingsForm.resources b/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA_Sharp.InitChartSettingsForm.resources
new file mode 100644
index 0000000..6c05a97
Binary files /dev/null and b/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA_Sharp.InitChartSettingsForm.resources differ
diff --git a/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA_Sharp.MainForm.resources b/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA_Sharp.MainForm.resources
new file mode 100644
index 0000000..6c05a97
Binary files /dev/null and b/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA_Sharp.MainForm.resources differ
diff --git a/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA_Sharp.Properties.Resources.resources b/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA_Sharp.Properties.Resources.resources
new file mode 100644
index 0000000..6c05a97
Binary files /dev/null and b/BAKKA-Sharp/obj/Release/net6.0-windows/BAKKA_Sharp.Properties.Resources.resources differ
diff --git a/BAKKA-Sharp/obj/Release/net6.0-windows/apphost.exe b/BAKKA-Sharp/obj/Release/net6.0-windows/apphost.exe
new file mode 100644
index 0000000..2bea414
Binary files /dev/null and b/BAKKA-Sharp/obj/Release/net6.0-windows/apphost.exe differ
diff --git a/BAKKA-Sharp/obj/Release/net6.0-windows/ref/BAKKA-Sharp.dll b/BAKKA-Sharp/obj/Release/net6.0-windows/ref/BAKKA-Sharp.dll
new file mode 100644
index 0000000..afd0fc2
Binary files /dev/null and b/BAKKA-Sharp/obj/Release/net6.0-windows/ref/BAKKA-Sharp.dll differ
diff --git a/BAKKA-Sharp/obj/Release/net6.0-windows/refint/BAKKA-Sharp.dll b/BAKKA-Sharp/obj/Release/net6.0-windows/refint/BAKKA-Sharp.dll
new file mode 100644
index 0000000..afd0fc2
Binary files /dev/null and b/BAKKA-Sharp/obj/Release/net6.0-windows/refint/BAKKA-Sharp.dll differ
diff --git a/BAKKA-Sharp/obj/project.assets.json b/BAKKA-Sharp/obj/project.assets.json
new file mode 100644
index 0000000..60b9ca2
--- /dev/null
+++ b/BAKKA-Sharp/obj/project.assets.json
@@ -0,0 +1,115 @@
+{
+ "version": 3,
+ "targets": {
+ "net6.0-windows7.0": {
+ "Tomlyn/0.15.0": {
+ "type": "package",
+ "compile": {
+ "lib/net6.0/Tomlyn.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtime": {
+ "lib/net6.0/Tomlyn.dll": {
+ "related": ".xml"
+ }
+ }
+ }
+ }
+ },
+ "libraries": {
+ "Tomlyn/0.15.0": {
+ "sha512": "WyEYqnQ7iN2m6N9cZjhAFqSa6Mz+M04AgUfDxXabTh+dToDPNKqh2r8V7oZLoRAIk3f0YEia08R9eYcrW1Txxg==",
+ "type": "package",
+ "path": "tomlyn/0.15.0",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "lib/net6.0/Tomlyn.dll",
+ "lib/net6.0/Tomlyn.xml",
+ "lib/netstandard2.0/Tomlyn.dll",
+ "lib/netstandard2.0/Tomlyn.xml",
+ "logo.png",
+ "readme.md",
+ "tomlyn.0.15.0.nupkg.sha512",
+ "tomlyn.nuspec"
+ ]
+ }
+ },
+ "projectFileDependencyGroups": {
+ "net6.0-windows7.0": [
+ "Tomlyn >= 0.15.0"
+ ]
+ },
+ "packageFolders": {
+ "C:\\Users\\otaku\\.nuget\\packages\\": {},
+ "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder": {}
+ },
+ "project": {
+ "version": "1.0.0-rc8",
+ "restore": {
+ "projectUniqueName": "C:\\Users\\otaku\\source\\repos\\BAKKA-Sharp\\BAKKA-Sharp\\BAKKA-Sharp.csproj",
+ "projectName": "BAKKA-Sharp",
+ "projectPath": "C:\\Users\\otaku\\source\\repos\\BAKKA-Sharp\\BAKKA-Sharp\\BAKKA-Sharp.csproj",
+ "packagesPath": "C:\\Users\\otaku\\.nuget\\packages\\",
+ "outputPath": "C:\\Users\\otaku\\source\\repos\\BAKKA-Sharp\\BAKKA-Sharp\\obj\\",
+ "projectStyle": "PackageReference",
+ "fallbackFolders": [
+ "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder"
+ ],
+ "configFilePaths": [
+ "C:\\Users\\otaku\\AppData\\Roaming\\NuGet\\NuGet.Config",
+ "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
+ ],
+ "originalTargetFrameworks": [
+ "net6.0-windows"
+ ],
+ "sources": {
+ "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
+ "https://api.nuget.org/v3/index.json": {}
+ },
+ "frameworks": {
+ "net6.0-windows7.0": {
+ "targetAlias": "net6.0-windows",
+ "projectReferences": {}
+ }
+ },
+ "warningProperties": {
+ "warnAsError": [
+ "NU1605"
+ ]
+ }
+ },
+ "frameworks": {
+ "net6.0-windows7.0": {
+ "targetAlias": "net6.0-windows",
+ "dependencies": {
+ "Tomlyn": {
+ "target": "Package",
+ "version": "[0.15.0, )"
+ }
+ },
+ "imports": [
+ "net461",
+ "net462",
+ "net47",
+ "net471",
+ "net472",
+ "net48",
+ "net481"
+ ],
+ "assetTargetFallback": true,
+ "warn": true,
+ "frameworkReferences": {
+ "Microsoft.NETCore.App": {
+ "privateAssets": "all"
+ },
+ "Microsoft.WindowsDesktop.App.WindowsForms": {
+ "privateAssets": "none"
+ }
+ },
+ "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\6.0.400\\RuntimeIdentifierGraph.json"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/BAKKA-Sharp/obj/project.nuget.cache b/BAKKA-Sharp/obj/project.nuget.cache
new file mode 100644
index 0000000..336b6fc
--- /dev/null
+++ b/BAKKA-Sharp/obj/project.nuget.cache
@@ -0,0 +1,10 @@
+{
+ "version": 2,
+ "dgSpecHash": "2Q6ues+SPqlOWBceWaU5ZzgESW7U2BDDfbemQakV5ch0DLIs/guBOLsoD0XgkY8MVWXaao67kqvjNpc466SsIA==",
+ "success": true,
+ "projectFilePath": "C:\\Users\\otaku\\source\\repos\\BAKKA-Sharp\\BAKKA-Sharp\\BAKKA-Sharp.csproj",
+ "expectedPackageFiles": [
+ "C:\\Users\\otaku\\.nuget\\packages\\tomlyn\\0.15.0\\tomlyn.0.15.0.nupkg.sha512"
+ ],
+ "logs": []
+}
\ No newline at end of file
diff --git a/lib/ikpFlac.dll b/lib/ikpFlac.dll
new file mode 100644
index 0000000..2271a3f
Binary files /dev/null and b/lib/ikpFlac.dll differ
diff --git a/lib/ikpMP3.dll b/lib/ikpMP3.dll
new file mode 100644
index 0000000..b913400
Binary files /dev/null and b/lib/ikpMP3.dll differ
diff --git a/lib/irrKlang.NET4.dll b/lib/irrKlang.NET4.dll
new file mode 100644
index 0000000..ef53ee5
Binary files /dev/null and b/lib/irrKlang.NET4.dll differ