From 187fa2636a60eb6cfdf24b80d46c94e598f5cba5 Mon Sep 17 00:00:00 2001 From: LysiX Date: Sat, 8 Oct 2022 20:23:12 -0700 Subject: [PATCH] custom track speed without patches --- Dependencies/DtxCS/Library/DTX.cs | 2 +- Dependencies/DtxCS/README.md | 10 +- .../RBVRELauncherApp.Designer.cs | 51 +- .../RBVRELauncherApp.cs | 53 +- .../RBVR Enhanced Launcher/track_graphics.dta | 513 ++++++++++++++++++ 5 files changed, 595 insertions(+), 34 deletions(-) create mode 100644 RBVR Enhanced Launcher/RBVR Enhanced Launcher/track_graphics.dta diff --git a/Dependencies/DtxCS/Library/DTX.cs b/Dependencies/DtxCS/Library/DTX.cs index 3e16de9..069cdcd 100644 --- a/Dependencies/DtxCS/Library/DTX.cs +++ b/Dependencies/DtxCS/Library/DTX.cs @@ -226,7 +226,7 @@ private static void ParseString(string data, DataArray root) current.AddNode(new DataIfNDef(tmp_constant)); break; case "include": - current.AddNode(new DataIfNDef(tmp_constant)); + current.AddNode(new DataInclude(tmp_constant)); break; case "merge": current.AddNode(new DataMerge(tmp_constant)); diff --git a/Dependencies/DtxCS/README.md b/Dependencies/DtxCS/README.md index 0ee5c7b..e6e485c 100644 --- a/Dependencies/DtxCS/README.md +++ b/Dependencies/DtxCS/README.md @@ -1,13 +1,13 @@ # DtxCS A C# library to parse and interpret the data-driven scripting language used in Harmonix games -"DTX" is the name I've decided to use to refer to the .dta/.dtb/.dtx/.\*\_dta\_\* scripting environment that's used in most of Harmonix's games, -including the Rock Band and Guitar Hero series. +"DTX" is used to refer to the .dta/.dtb/.dtx/.\*\_dta\_\* scripting environment that's used in most of Harmonix's games, including the Rock Band and Guitar Hero series. -This library provides an interface to load these scripts and use them from a C# environment. Preliminary support is included for using -the scripting functionality itself. +This library provides an interface to load these scripts and use them from a C# environment. This fork aims to continue to improve on maxton's efforts. -This fork aims to continue to improve on maxton's efforts. +## DTXTool + +A command-line utility called DTXTool is provided as a way to convert and/or (en/de)crypt DTX format files. ## Supported Features - Read data from plaintext DTA or serialized/encrypted DTB format diff --git a/RBVR Enhanced Launcher/RBVR Enhanced Launcher/RBVRELauncherApp.Designer.cs b/RBVR Enhanced Launcher/RBVR Enhanced Launcher/RBVRELauncherApp.Designer.cs index 5038692..72089e9 100644 --- a/RBVR Enhanced Launcher/RBVR Enhanced Launcher/RBVRELauncherApp.Designer.cs +++ b/RBVR Enhanced Launcher/RBVR Enhanced Launcher/RBVRELauncherApp.Designer.cs @@ -34,10 +34,10 @@ private void InitializeComponent() this.clearButton = new System.Windows.Forms.Button(); this.listBox1 = new System.Windows.Forms.ListBox(); this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.noDeleteCheck = new System.Windows.Forms.CheckBox(); this.Outputbtn = new System.Windows.Forms.Button(); this.volumeAdjustCheckBox = new System.Windows.Forms.CheckBox(); this.label2 = new System.Windows.Forms.Label(); - this.tspeedMult = new System.Windows.Forms.TextBox(); this.groupBox3 = new System.Windows.Forms.GroupBox(); this.folderName = new System.Windows.Forms.Label(); this.Outputtxt = new System.Windows.Forms.Label(); @@ -45,10 +45,11 @@ private void InitializeComponent() this.contentIdTextBox = new System.Windows.Forms.Label(); this.label5 = new System.Windows.Forms.Label(); this.logBox = new System.Windows.Forms.TextBox(); - this.noDeleteCheck = new System.Windows.Forms.CheckBox(); + this.tspeedMult = new System.Windows.Forms.NumericUpDown(); this.groupBox1.SuspendLayout(); this.groupBox2.SuspendLayout(); this.groupBox3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.tspeedMult)).BeginInit(); this.SuspendLayout(); // // pickFileButton @@ -103,11 +104,11 @@ private void InitializeComponent() // this.groupBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); + this.groupBox2.Controls.Add(this.tspeedMult); this.groupBox2.Controls.Add(this.noDeleteCheck); this.groupBox2.Controls.Add(this.Outputbtn); this.groupBox2.Controls.Add(this.volumeAdjustCheckBox); this.groupBox2.Controls.Add(this.label2); - this.groupBox2.Controls.Add(this.tspeedMult); this.groupBox2.Enabled = false; this.groupBox2.Location = new System.Drawing.Point(4, 214); this.groupBox2.Name = "groupBox2"; @@ -116,6 +117,18 @@ private void InitializeComponent() this.groupBox2.TabStop = false; this.groupBox2.Text = "Step 2: Select your RBVR.exe file"; // + // noDeleteCheck + // + this.noDeleteCheck.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.noDeleteCheck.AutoSize = true; + this.noDeleteCheck.Location = new System.Drawing.Point(509, 45); + this.noDeleteCheck.Name = "noDeleteCheck"; + this.noDeleteCheck.Size = new System.Drawing.Size(166, 17); + this.noDeleteCheck.TabIndex = 7; + this.noDeleteCheck.Text = "Don\'t Delete Existing Patches"; + this.noDeleteCheck.UseVisualStyleBackColor = true; + this.noDeleteCheck.CheckedChanged += new System.EventHandler(this.noDeleteCheck_CheckedChanged); + // // Outputbtn // this.Outputbtn.Location = new System.Drawing.Point(12, 41); @@ -136,7 +149,6 @@ private void InitializeComponent() this.volumeAdjustCheckBox.TabIndex = 6; this.volumeAdjustCheckBox.Text = "Use RB1-4 base Track Speed"; this.volumeAdjustCheckBox.UseVisualStyleBackColor = true; - this.volumeAdjustCheckBox.Visible = false; // // label2 // @@ -146,17 +158,6 @@ private void InitializeComponent() this.label2.Size = new System.Drawing.Size(116, 13); this.label2.TabIndex = 3; this.label2.Text = "Track Speed Multiplier:"; - this.label2.Visible = false; - // - // tspeedMult - // - this.tspeedMult.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.tspeedMult.Location = new System.Drawing.Point(514, 19); - this.tspeedMult.Name = "tspeedMult"; - this.tspeedMult.Size = new System.Drawing.Size(336, 20); - this.tspeedMult.TabIndex = 0; - this.tspeedMult.Visible = false; - this.tspeedMult.TextChanged += new System.EventHandler(this.idBox_TextChanged); // // groupBox3 // @@ -232,17 +233,14 @@ private void InitializeComponent() this.logBox.Size = new System.Drawing.Size(850, 104); this.logBox.TabIndex = 5; // - // noDeleteCheck + // tspeedMult // - this.noDeleteCheck.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.noDeleteCheck.AutoSize = true; - this.noDeleteCheck.Location = new System.Drawing.Point(509, 45); - this.noDeleteCheck.Name = "noDeleteCheck"; - this.noDeleteCheck.Size = new System.Drawing.Size(166, 17); - this.noDeleteCheck.TabIndex = 7; - this.noDeleteCheck.Text = "Don\'t Delete Existing Patches"; - this.noDeleteCheck.UseVisualStyleBackColor = true; - this.noDeleteCheck.CheckedChanged += new System.EventHandler(this.noDeleteCheck_CheckedChanged); + this.tspeedMult.DecimalPlaces = 2; + this.tspeedMult.Location = new System.Drawing.Point(131, 19); + this.tspeedMult.Name = "tspeedMult"; + this.tspeedMult.Size = new System.Drawing.Size(48, 20); + this.tspeedMult.TabIndex = 8; + this.tspeedMult.ValueChanged += new System.EventHandler(this.tspeedMult_ValueChanged); // // RBVRELauncherApp // @@ -263,6 +261,7 @@ private void InitializeComponent() this.groupBox2.PerformLayout(); this.groupBox3.ResumeLayout(false); this.groupBox3.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.tspeedMult)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); @@ -274,7 +273,6 @@ private void InitializeComponent() private System.Windows.Forms.GroupBox groupBox1; private System.Windows.Forms.GroupBox groupBox2; private System.Windows.Forms.GroupBox groupBox3; - private System.Windows.Forms.TextBox tspeedMult; private System.Windows.Forms.Label label2; private System.Windows.Forms.Label contentIdTextBox; private System.Windows.Forms.CheckBox volumeAdjustCheckBox; @@ -287,5 +285,6 @@ private void InitializeComponent() private System.Windows.Forms.Label Outputtxt; private System.Windows.Forms.Label folderName; private System.Windows.Forms.CheckBox noDeleteCheck; + private System.Windows.Forms.NumericUpDown tspeedMult; } } diff --git a/RBVR Enhanced Launcher/RBVR Enhanced Launcher/RBVRELauncherApp.cs b/RBVR Enhanced Launcher/RBVR Enhanced Launcher/RBVRELauncherApp.cs index 41fe0ca..b3038ed 100644 --- a/RBVR Enhanced Launcher/RBVR Enhanced Launcher/RBVRELauncherApp.cs +++ b/RBVR Enhanced Launcher/RBVR Enhanced Launcher/RBVRELauncherApp.cs @@ -32,7 +32,7 @@ void UpdateState() { groupBox2.Enabled = false; groupBox3.Enabled = false; - tspeedMult.Text = ""; + tspeedMult.Value = 0; return; } else @@ -97,6 +97,8 @@ private void buildButton_Click(object sender, EventArgs e) Action log = x => logBox.AppendText(x + Environment.NewLine); var rbvrExec = folderName.Text + "/rbvr.exe"; var rbvrPatchDir = folderName.Text + "/rawfiles"; + string rbvrtSpeedA = File.ReadAllText("track_graphics.dta"); + var rbvrtSpeedB = folderName.Text + "/rawfiles/pc/config/include/track_graphics.dta_dta_pc"; Process rbvr = new Process(); rbvr.StartInfo.WorkingDirectory = folderName.Text; rbvr.StartInfo.FileName = rbvrExec; @@ -113,7 +115,49 @@ private void buildButton_Click(object sender, EventArgs e) CopyPatches(patch, rbvrDir); log($"Copying Patch {listBox1.Items[i]} to {folderName.Text}..."); } - log("Starting RBVR!"); + if (tspeedMult.Value > 0) + { + if (File.Exists($"{rbvrPatchDir}/pc/config/include/track_graphics.dta_dta_pc")) + File.Delete($"{rbvrPatchDir}/pc/config/include/track_graphics.dta_dta_pc"); + + if (volumeAdjustCheckBox.Checked) + { + log($"adding track multiplier of {tspeedMult.Value} using RB1-RB4 Multiplier"); + decimal ezspd = 2.4m / tspeedMult.Value; + decimal mdspd = 2.0m / tspeedMult.Value; + decimal hdspd = 1.6m / tspeedMult.Value; + decimal exspd = 1.2m / tspeedMult.Value; + + Directory.CreateDirectory(rbvrPatchDir + "/pc/config/include/"); + + rbvrtSpeedA = rbvrtSpeedA.Replace("2.4", $"{ezspd}"); + rbvrtSpeedA = rbvrtSpeedA.Replace("2.0", $"{mdspd}"); + rbvrtSpeedA = rbvrtSpeedA.Replace("1.6", $"{hdspd}"); + rbvrtSpeedA = rbvrtSpeedA.Replace("1.2", $"{exspd}"); + } + else + { + log($"adding track multiplier of {tspeedMult.Value} using RBVR Multiplier"); + decimal ezspd = 3.4m / tspeedMult.Value; + decimal mdspd = 3.0m / tspeedMult.Value; + decimal hdspd = 2.6m / tspeedMult.Value; + decimal exspd = 2.2m / tspeedMult.Value; + + Directory.CreateDirectory(rbvrPatchDir + "/pc/config/include/"); + + rbvrtSpeedA = rbvrtSpeedA.Replace("2.4", $"{ezspd}"); + rbvrtSpeedA = rbvrtSpeedA.Replace("2.0", $"{mdspd}"); + rbvrtSpeedA = rbvrtSpeedA.Replace("1.6", $"{hdspd}"); + rbvrtSpeedA = rbvrtSpeedA.Replace("1.2", $"{exspd}"); + } + + using (FileStream fs = File.Create(rbvrtSpeedB)) + { + var tspeedA = DTX.FromDtaString(rbvrtSpeedA); + DTX.ToDtb(tspeedA, fs); + } + } + log("Starting RBVR!"); rbvr.Start(); } @@ -164,5 +208,10 @@ private void noDeleteCheck_CheckedChanged(object sender, EventArgs e) { } + + private void tspeedMult_ValueChanged(object sender, EventArgs e) + { + + } } } diff --git a/RBVR Enhanced Launcher/RBVR Enhanced Launcher/track_graphics.dta b/RBVR Enhanced Launcher/RBVR Enhanced Launcher/track_graphics.dta new file mode 100644 index 0000000..fd0176d --- /dev/null +++ b/RBVR Enhanced Launcher/RBVR Enhanced Launcher/track_graphics.dta @@ -0,0 +1,513 @@ +#define +GUITAR_SET +( + (0 + (normal gem_green.wid) + (normal_hopo gem_green_hopo.wid) + (star star_gem.wid) + (star_hopo star_hopo.wid) + (unison star_gem.wid) + (unison_hopo star_hopo.wid) + (miss gem_miss.wid) + (miss_hopo gem_miss_hopo.wid) + (mash gem_mash0.wid)) + (1 + (normal gem_red.wid) + (normal_hopo gem_red_hopo.wid) + (star star_gem.wid) + (star_hopo star_hopo.wid) + (unison star_gem.wid) + (unison_hopo star_hopo.wid) + (miss gem_miss.wid) + (miss_hopo gem_miss_hopo.wid) + (mash gem_mash1.wid)) + (2 + (normal gem_yellow.wid) + (normal_hopo gem_yellow_hopo.wid) + (star star_gem.wid) + (star_hopo star_hopo.wid) + (unison star_gem.wid) + (unison_hopo star_hopo.wid) + (miss gem_miss.wid) + (miss_hopo gem_miss_hopo.wid) + (mash gem_mash2.wid)) + (3 + (normal gem_blue.wid) + (normal_hopo gem_blue_hopo.wid) + (star star_gem.wid) + (star_hopo star_hopo.wid) + (unison star_gem.wid) + (unison_hopo star_hopo.wid) + (miss gem_miss.wid) + (miss_hopo gem_miss_hopo.wid) + (mash gem_mash3.wid)) + (4 + (normal gem_orange.wid) + (normal_hopo gem_orange_hopo.wid) + (star star_gem.wid) + (star_hopo star_hopo.wid) + (unison star_gem.wid) + (unison_hopo star_hopo.wid) + (miss gem_miss.wid) + (miss_hopo gem_miss_hopo.wid) + (mash gem_mash4.wid)) + (unison unison_mask.wid)) +#define +DRUM_SET +( + (0 + (normal gem_kick.wid) + (star star_kick.wid) + (unison star_kick.wid) + (miss kick_miss.wid)) + (1 + (normal drum_red.wid) + (star drum_star.wid) + (unison drum_star.wid) + (miss drum_miss.wid) + (fill drum_mash1.wid) + (mash drum_roll1.wid) + (normal_cymbal cymbal_gem_red.wid) + (miss_cymbal cymbal_gem_miss.wid) + (star_cymbal cymbal_gem_star.wid) + (unison_cymbal cymbal_gem_star.wid)) + (2 + (normal drum_yellow.wid) + (star drum_star.wid) + (unison drum_star.wid) + (miss drum_miss.wid) + (fill drum_mash2.wid) + (mash drum_roll2.wid) + (normal_cymbal cymbal_gem_yellow.wid) + (miss_cymbal cymbal_gem_miss.wid) + (star_cymbal cymbal_gem_star.wid) + (unison_cymbal cymbal_gem_star.wid)) + (3 + (normal drum_blue.wid) + (star drum_star.wid) + (unison drum_star.wid) + (miss drum_miss.wid) + (fill drum_mash3.wid) + (mash drum_roll3.wid) + (normal_cymbal cymbal_gem_blue.wid) + (miss_cymbal cymbal_gem_miss.wid) + (star_cymbal cymbal_gem_star.wid) + (unison_cymbal cymbal_gem_star.wid)) + (4 + (normal drum_green.wid) + (star drum_star.wid) + (unison drum_star.wid) + (miss drum_miss.wid) + (fill drum_mash4.wid) + (crash dynamic_crash_gem.wid) + (crash_cymbal dynamic_crash_gem_cymbal.wid) + (beard dynamic_crash_beard.wid) + (mash drum_roll4.wid) + (normal_cymbal cymbal_gem_green.wid) + (miss_cymbal cymbal_gem_miss.wid) + (star_cymbal cymbal_gem_star.wid) + (unison_cymbal cymbal_gem_star.wid)) + (unison unison_mask.wid)) +#define +DRUM_LEFTY +( + (0 + (normal gem_kick.wid) + (star star_kick.wid) + (unison star_kick.wid) + (miss kick_miss.wid)) + (1 + (normal drum_green.wid) + (star drum_star.wid) + (unison drum_star.wid) + (miss drum_miss.wid) + (fill drum_mash4.wid) + (mash drum_roll4.wid) + (normal_cymbal cymbal_gem_green.wid) + (miss_cymbal cymbal_gem_miss.wid) + (star_cymbal cymbal_gem_star.wid) + (unison_cymbal cymbal_gem_star.wid)) + (2 + (normal drum_blue.wid) + (star drum_star.wid) + (unison drum_star.wid) + (miss drum_miss.wid) + (fill drum_mash3.wid) + (mash drum_roll3.wid) + (normal_cymbal cymbal_gem_blue.wid) + (miss_cymbal cymbal_gem_miss.wid) + (star_cymbal cymbal_gem_star.wid) + (unison_cymbal cymbal_gem_star.wid)) + (3 + (normal drum_yellow.wid) + (star drum_star.wid) + (unison drum_star.wid) + (miss drum_miss.wid) + (fill drum_mash2.wid) + (mash drum_roll2.wid) + (normal_cymbal cymbal_gem_yellow.wid) + (miss_cymbal cymbal_gem_miss.wid) + (star_cymbal cymbal_gem_star.wid) + (unison_cymbal cymbal_gem_star.wid)) + (4 + (normal drum_red.wid) + (star drum_star.wid) + (unison drum_star.wid) + (miss drum_miss.wid) + (fill drum_mash1.wid) + (crash dynamic_crash_gem_lefty.wid) + (crash_cymbal dynamic_crash_gem_cymbal_lefty.wid) + (beard dynamic_crash_beard_lefty.wid) + (mash drum_roll1.wid) + (normal_cymbal cymbal_gem_red.wid) + (miss_cymbal cymbal_gem_miss.wid) + (star_cymbal cymbal_gem_star.wid) + (unison_cymbal cymbal_gem_star.wid)) + (unison unison_mask.wid)) +#define +WHITE_KEY +( + (normal key_white.wid) + (star key_white_star.wid) + (unison key_white_star.wid) + (miss key_white_miss.wid) + (normal_arrhythmic key_gliss.wid) + (star_arrhythmic key_gliss.wid) + (is_white 1) + (bracket_left chord_bracket_left.wid) + (bracket_span chord_bracket_span.wid) + (bracket_right chord_bracket_right.wid) + (bracket_left_miss chord_bracket_left_miss.wid) + (bracket_span_miss chord_bracket_span_miss.wid) + (bracket_right_miss chord_bracket_right_miss.wid) + (fret_num key_finger_num.wid)) +#define +BLACK_KEY +( + (normal key_black.wid) + (star key_black_star.wid) + (unison key_black_star.wid) + (miss key_black_miss.wid) + (normal_arrhythmic key_gliss.wid) + (star_arrhythmic key_gliss.wid) + (is_white 0) + (bracket_left chord_bracket_left_black.wid) + (bracket_right chord_bracket_right_black.wid) + (bracket_left_miss chord_bracket_left_miss_black.wid) + (bracket_right_miss chord_bracket_right_miss_black.wid) + (fret_num key_finger_num.wid)) +#define +KEYS_RED +( + (mash real_keys_red_mash.wid)) +#define +KEYS_YELLOW +( + (mash real_keys_yellow_mash.wid)) +#define +KEYS_BLUE +( + (mash real_keys_blue_mash.wid)) +#define +KEYS_GREEN +( + (mash real_keys_green_mash.wid)) +#define +KEYS_ORANGE +( + (mash real_keys_orange_mash.wid)) +#define +KEYBOARD_SET +( + (0 WHITE_KEY KEYS_RED) + (1 BLACK_KEY KEYS_RED) + (2 WHITE_KEY KEYS_RED) + (3 BLACK_KEY KEYS_RED) + (4 WHITE_KEY KEYS_RED) + (5 WHITE_KEY KEYS_YELLOW) + (6 BLACK_KEY KEYS_YELLOW) + (7 WHITE_KEY KEYS_YELLOW) + (8 BLACK_KEY KEYS_YELLOW) + (9 WHITE_KEY KEYS_YELLOW) + (10 BLACK_KEY KEYS_YELLOW) + (11 WHITE_KEY KEYS_YELLOW) + (12 WHITE_KEY KEYS_BLUE) + (13 BLACK_KEY KEYS_BLUE) + (14 WHITE_KEY KEYS_BLUE) + (15 BLACK_KEY KEYS_BLUE) + (16 WHITE_KEY KEYS_BLUE) + (17 WHITE_KEY KEYS_GREEN) + (18 BLACK_KEY KEYS_GREEN) + (19 WHITE_KEY KEYS_GREEN) + (20 BLACK_KEY KEYS_GREEN) + (21 WHITE_KEY KEYS_GREEN) + (22 BLACK_KEY KEYS_GREEN) + (23 WHITE_KEY KEYS_GREEN) + (24 WHITE_KEY KEYS_ORANGE) + (unison unison_mask.wid) + (mash key_mash.wid)) +#define +REAL_GUITAR_SET +( + (0 + (normal real_guitar_gem_red) + (normal_hopo real_guitar_gem_red) + (ghost real_guitar_gem_red) + (star real_guitar_gem_style) + (star_hopo real_guitar_gem_style) + (unison real_guitar_gem_style) + (unison_hopo real_guitar_gem_style) + (miss real_guitar_gem_miss) + (miss_hopo real_guitar_gem_miss) + (section real_guitar_gem_section) + (section_hopo real_guitar_gem_section) + (fret_num fret_numbers.wid) + (mash real_guitar_gem_mash_red.wid) + (hopo_tail real_guitar_hopo_tail.wid) + (hopo_tail_miss real_guitar_hopo_tail_miss.wid)) + (1 + (normal real_guitar_gem_green) + (normal_hopo real_guitar_gem_green) + (ghost real_guitar_gem_green) + (star real_guitar_gem_style) + (star_hopo real_guitar_gem_style) + (unison real_guitar_gem_style) + (unison_hopo real_guitar_gem_style) + (miss real_guitar_gem_miss) + (miss_hopo real_guitar_gem_miss) + (section real_guitar_gem_section) + (section_hopo real_guitar_gem_section) + (fret_num fret_numbers.wid) + (mash real_guitar_gem_mash_green.wid)) + (2 + (normal real_guitar_gem_orange) + (normal_hopo real_guitar_gem_orange) + (ghost real_guitar_gem_orange) + (star real_guitar_gem_style) + (star_hopo real_guitar_gem_style) + (unison real_guitar_gem_style) + (unison_hopo real_guitar_gem_style) + (miss real_guitar_gem_miss) + (miss_hopo real_guitar_gem_miss) + (section real_guitar_gem_section) + (section_hopo real_guitar_gem_section) + (fret_num fret_numbers.wid) + (mash real_guitar_gem_mash_orange.wid)) + (3 + (normal real_guitar_gem_blue) + (normal_hopo real_guitar_gem_blue) + (ghost real_guitar_gem_blue) + (star real_guitar_gem_style) + (star_hopo real_guitar_gem_style) + (unison real_guitar_gem_style) + (unison_hopo real_guitar_gem_style) + (miss real_guitar_gem_miss) + (miss_hopo real_guitar_gem_miss) + (section real_guitar_gem_section) + (section_hopo real_guitar_gem_section) + (fret_num fret_numbers.wid) + (mash real_guitar_gem_mash_blue.wid)) + (4 + (normal real_guitar_gem_yellow) + (normal_hopo real_guitar_gem_yellow) + (ghost real_guitar_gem_yellow) + (star real_guitar_gem_style) + (star_hopo real_guitar_gem_style) + (unison real_guitar_gem_style) + (unison_hopo real_guitar_gem_style) + (miss real_guitar_gem_miss) + (miss_hopo real_guitar_gem_miss) + (section real_guitar_gem_section) + (section_hopo real_guitar_gem_section) + (fret_num fret_numbers.wid) + (mash real_guitar_gem_mash_yellow.wid)) + (5 + (normal real_guitar_gem_purple) + (normal_hopo real_guitar_gem_purple) + (ghost real_guitar_gem_purple) + (star real_guitar_gem_style) + (star_hopo real_guitar_gem_style) + (unison real_guitar_gem_style) + (unison_hopo real_guitar_gem_style) + (miss real_guitar_gem_miss) + (miss_hopo real_guitar_gem_miss) + (section real_guitar_gem_section) + (section_hopo real_guitar_gem_section) + (fret_num fret_numbers.wid) + (mash real_guitar_gem_mash_purple.wid)) + (chord + (normal real_guitar_chord.wid) + (repeat real_guitar_chord_repeat.wid) + (miss real_guitar_chord_miss.wid) + (star real_guitar_chord_style.wid) + (unison real_guitar_chord_style.wid)) + (chord_fret + (normal fret_numbers_chord.wid) + (repeat fret_numbers_chord.wid) + (miss fret_numbers_chord.wid) + (star fret_numbers_chord.wid) + (unison fret_numbers_chord.wid)) + (chord_label + (normal chord_label.wid) + (repeat chord_label.wid) + (miss chord_label.wid) + (star chord_label.wid) + (unison chord_label.wid)) + (area_strum + (normal rg_area_strum) + (repeat rg_area_strum) + (section rg_area_strum) + (miss rg_area_strum_miss) + (star rg_area_strum) + (unison rg_area_strum)) + (muted_strum + (normal rg_lhmc) + (repeat rg_lhmc) + (section rg_lhmc) + (miss rg_lhmc_miss) + (star rg_lhmc_style) + (unison rg_lhmc_style)) + (arpeggio section_mask.wid) + (unison unison_mask.wid)) +(smashers + (guitar gem_smasher0 gem_smasher1 gem_smasher2 gem_smasher3 gem_smasher4) + (bass gem_smasher0 gem_smasher1 gem_smasher2 gem_smasher3 gem_smasher4) + (drum gem_smasher0 gem_smasher1 gem_smasher2 gem_smasher3 gem_smasher4) + (keys gem_smasher0 gem_smasher1 gem_smasher2 gem_smasher3 gem_smasher4) + (real_keys smasher_C_0 smasher_C#_0 smasher_D_0 smasher_D#_0 smasher_E_0 smasher_F_0 smasher_F#_0 smasher_G_0 smasher_G#_0 smasher_A_0 smasher_A#_0 smasher_B_0 first_polled_smasher_C_1 smasher_C#_1 smasher_D_1 smasher_D#_1 smasher_E_1 smasher_F_1 smasher_F#_1 smasher_G_1 smasher_G#_1 smasher_A_1 smasher_A#_1 smasher_B_1 smasher_C_2) + (real_guitar gem_smasher0 gem_smasher1 gem_smasher2 gem_smasher3 gem_smasher4 gem_smasher5) + (real_bass gem_smasher0 gem_smasher1 gem_smasher2 gem_smasher3 gem_smasher4 gem_smasher5)) +(use_char_tex TRUE) +(slot_colors + (bass green red yellow blue orange) + (guitar green red yellow blue orange) + (keys green red yellow blue orange) + (drum green red yellow blue orange) + (real_guitar red green orange blue yellow purple) + (real_bass red green orange blue yellow purple) + (real_keys white black white black white white black white black white black white white black white black white white black white black white black white white)) +(gem + (fps 60) + (mat_formats + (gem gem_%s) + (tail tail_%s) + (tail_glow tail_glow_%s) + (star gem_starpower_%s) + (dot dot_top_hopo2_%s)) + (tail_glow_width 1.2) + (tail_glow_tight_width 2.0) + (sparkle_len 1000) + (tail_pulse_rate 64) + (tail_pulse_smoothing 0.5) + (tail_offset_x 0) + (tail_min_alpha 0.5) + (tail_max_alpha 1) + (tail_alpha_smoothing 0.25) + (tail_fade_distance 200000) + (tail_min_freq 15) + (tail_max_freq 4.5) + (tail_min_amp 0.25) + (tail_max_amp 1.5) + (tail_max_length 999999999999.0) + (parts + ( + (gem + (type kMeshGem)) + (glow + (type kMeshGemGlow)) + (top + (type kMeshTop)) + (miss + (type kMeshGemMiss) + (default kMeshGem)) + (hopo + (type kMeshHopoTop) + (default kMeshTop)) + (star + (type kMeshStar) + (default kMeshGem)) + (top_star + (type kMeshStarTop) + (default kMeshTop)) + (gem_bonus + (type kMeshBonus) + (default kMeshGem)) + (gem_bonus2 + (type kMeshBonus2) + (default kMeshGem)))) + (gems + (guitar GUITAR_SET) + (bass GUITAR_SET) + (drum DRUM_SET) + (drum_lefty DRUM_LEFTY) + (keys GUITAR_SET) + (real_keys KEYBOARD_SET) + (real_guitar REAL_GUITAR_SET) + (real_bass REAL_GUITAR_SET)) + (widths + (kick_line4 4) + (snare_red3 3) + (snare_orange3 3))) +(effects + (guitar fx_chorus fx_reverb fx_flanger fx_echo dry) + (bass fx_chorus fx_reverb fx_flanger fx_distortion dry)) +(show_phoneme_tubes TRUE) +(allow_tube_glow TRUE) +(lyric_overlap_ms 100) +(static_vocal_parameters + (static_deploy_x_size 2.0) + (static_phrase_margin_x 0.03) + (static_deploy_buffer_x 0.5) + (lyric_shift_ms 100 20) + (lyric_shift_anticipation_ms 500) + (min_lyric_highlight_ms 120) + (phrase_highlight_ms 500)) +(pulse_offset 0.1) +(ghost_arrow_duration 1000.0) +(key_glow_threshold_ticks 2880) +(key_intro_offset_ms 25) +(key_intro_delay_ms 1000) +(popup_help_intro_duration_ms 5000) +(rg_run_space_ticks 720) +(view_times + (drum + (easy 2.4) + (medium 2.0) + (hard 1.6) + (expert 1.2)) + (bass + (easy 2.4) + (medium 2.0) + (hard 1.6) + (expert 1.2)) + (guitar + (easy 2.4) + (medium 2.0) + (hard 1.6) + (expert 1.2)) + (real_guitar + (easy 2.4) + (medium 2.2) + (hard 1.8) + (expert 1.2)) + (real_bass + (easy 2.4) + (medium 2.2) + (hard 1.8) + (expert 1.2)) + (real_keys + (easy 2.4) + (medium 2.0) + (hard 1.6) + (expert 1.2)) + (keys + (easy 2.4) + (medium 2.0) + (hard 1.6) + (expert 1.2)) + (pending + (easy 2.4) + (medium 2.0) + (hard 1.6) + (expert 1.2)) + (spam 1.2))