From c075d05c8e861b89cec09bd351bddea28579b798 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Gallet?= Date: Sun, 31 Jan 2021 11:33:21 +0100 Subject: [PATCH] Add options to choose what to randomize --- SWD2Randomizer/Form1.Designer.cs | 71 ++++++++++++++++++++++++++--- SWD2Randomizer/Form1.cs | 76 ++++++++++++++++++++++---------- SWD2Randomizer/Patcher.cs | 4 +- SWD2Randomizer/Randomizer.cs | 35 ++++++++++++--- 4 files changed, 148 insertions(+), 38 deletions(-) diff --git a/SWD2Randomizer/Form1.Designer.cs b/SWD2Randomizer/Form1.Designer.cs index 9bc31f7..4f6ea47 100644 --- a/SWD2Randomizer/Form1.Designer.cs +++ b/SWD2Randomizer/Form1.Designer.cs @@ -42,6 +42,10 @@ private void InitializeComponent() this.groupBox1 = new System.Windows.Forms.GroupBox(); this.groupBox2 = new System.Windows.Forms.GroupBox(); this.logText = new System.Windows.Forms.TextBox(); + this.checkUpgrades = new System.Windows.Forms.CheckBox(); + this.checkResources = new System.Windows.Forms.CheckBox(); + this.checkAreas = new System.Windows.Forms.CheckBox(); + this.checkItems = new System.Windows.Forms.CheckBox(); this.groupBox1.SuspendLayout(); this.groupBox2.SuspendLayout(); this.SuspendLayout(); @@ -82,7 +86,7 @@ private void InitializeComponent() // // randomizeBtn // - this.randomizeBtn.Location = new System.Drawing.Point(9, 45); + this.randomizeBtn.Location = new System.Drawing.Point(9, 72); this.randomizeBtn.Name = "randomizeBtn"; this.randomizeBtn.Size = new System.Drawing.Size(75, 23); this.randomizeBtn.TabIndex = 3; @@ -101,7 +105,7 @@ private void InitializeComponent() // // restoreBtn // - this.restoreBtn.Location = new System.Drawing.Point(90, 45); + this.restoreBtn.Location = new System.Drawing.Point(90, 72); this.restoreBtn.Name = "restoreBtn"; this.restoreBtn.Size = new System.Drawing.Size(75, 23); this.restoreBtn.TabIndex = 5; @@ -161,6 +165,10 @@ private void InitializeComponent() // groupBox2 // this.groupBox2.Controls.Add(this.logText); + this.groupBox2.Controls.Add(this.checkItems); + this.groupBox2.Controls.Add(this.checkAreas); + this.groupBox2.Controls.Add(this.checkResources); + this.groupBox2.Controls.Add(this.checkUpgrades); this.groupBox2.Controls.Add(this.seedLabel); this.groupBox2.Controls.Add(this.textSeed); this.groupBox2.Controls.Add(this.randomizeBtn); @@ -172,21 +180,70 @@ private void InitializeComponent() this.groupBox2.Size = new System.Drawing.Size(590, 253); this.groupBox2.TabIndex = 11; this.groupBox2.TabStop = false; + this.groupBox2.Enter += new System.EventHandler(this.groupBox2_Enter); // // logText // - this.logText.Location = new System.Drawing.Point(9, 79); + this.logText.Location = new System.Drawing.Point(0, 101); this.logText.Multiline = true; this.logText.Name = "logText"; this.logText.ReadOnly = true; - this.logText.Size = new System.Drawing.Size(575, 168); + this.logText.Size = new System.Drawing.Size(575, 152); this.logText.TabIndex = 10; // + // checkUpgrades + // + this.checkUpgrades.AutoSize = true; + this.checkUpgrades.Checked = true; + this.checkUpgrades.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkUpgrades.Location = new System.Drawing.Point(369, 49); + this.checkUpgrades.Name = "checkUpgrades"; + this.checkUpgrades.Size = new System.Drawing.Size(126, 17); + this.checkUpgrades.TabIndex = 10; + this.checkUpgrades.Text = "Randomize upgrades"; + this.checkUpgrades.UseVisualStyleBackColor = true; + // + // checkResources + // + this.checkResources.AutoSize = true; + this.checkResources.Checked = true; + this.checkResources.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkResources.Location = new System.Drawing.Point(235, 49); + this.checkResources.Name = "checkResources"; + this.checkResources.Size = new System.Drawing.Size(128, 17); + this.checkResources.TabIndex = 10; + this.checkResources.Text = "Randomize resources"; + this.checkResources.UseVisualStyleBackColor = true; + // + // checkAreas + // + this.checkAreas.AutoSize = true; + this.checkAreas.Checked = true; + this.checkAreas.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkAreas.Location = new System.Drawing.Point(121, 49); + this.checkAreas.Name = "checkAreas"; + this.checkAreas.Size = new System.Drawing.Size(108, 17); + this.checkAreas.TabIndex = 10; + this.checkAreas.Text = "Randomize areas"; + this.checkAreas.UseVisualStyleBackColor = true; + // + // checkItems + // + this.checkItems.AutoSize = true; + this.checkItems.Checked = true; + this.checkItems.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkItems.Location = new System.Drawing.Point(9, 49); + this.checkItems.Name = "checkItems"; + this.checkItems.Size = new System.Drawing.Size(106, 17); + this.checkItems.TabIndex = 10; + this.checkItems.Text = "Randomize items"; + this.checkItems.UseVisualStyleBackColor = true; + // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(614, 349); + this.ClientSize = new System.Drawing.Size(613, 356); this.Controls.Add(this.groupBox2); this.Controls.Add(this.groupBox1); this.Name = "Form1"; @@ -215,6 +272,10 @@ private void InitializeComponent() private System.Windows.Forms.GroupBox groupBox1; private System.Windows.Forms.GroupBox groupBox2; private System.Windows.Forms.TextBox logText; + private System.Windows.Forms.CheckBox checkUpgrades; + private System.Windows.Forms.CheckBox checkItems; + private System.Windows.Forms.CheckBox checkAreas; + private System.Windows.Forms.CheckBox checkResources; } } diff --git a/SWD2Randomizer/Form1.cs b/SWD2Randomizer/Form1.cs index 8ae9f86..d95c18d 100644 --- a/SWD2Randomizer/Form1.cs +++ b/SWD2Randomizer/Form1.cs @@ -104,15 +104,34 @@ private void randomizeBtn_Click(object sender, EventArgs e) string zipFile = Path.Combine(Directory.GetCurrentDirectory(), "data01.impak.zip"); string extractedDir = Path.Combine(Directory.GetCurrentDirectory(), "data01"); + string enfile = Path.Combine(baseDir, "Language", "en.csv.z"); + using (FileStream originalFileStream = File.OpenRead(enfile)) + { + originalFileStream.Seek(6, SeekOrigin.Begin); + string newFileName = enfile.Remove(enfile.Length - 2); + + using (FileStream decompressedFileStream = File.Create(newFileName)) + { + using (DeflateStream decompressionStream = new DeflateStream(originalFileStream, CompressionMode.Decompress)) + { + decompressionStream.CopyTo(decompressedFileStream); + } + } + } + StringBuilder logsb = new StringBuilder(); /* Generate a new seed if blank */ if (string.IsNullOrWhiteSpace(textSeed.Text)) { - SetSeedBasedOnDifficulty(); + SetSeedBasedOnSettings(); + } + else + { + GetSettingsFromSeed(); } - string difficulty = GetRandomizerDifficulty(); + string difficulty = listDifficulty.SelectedItem.ToString(); logsb.Append("Selecting difficulty is ").AppendLine(difficulty); logText.Text = logsb.ToString(); @@ -206,7 +225,7 @@ private void randomizeBtn_Click(object sender, EventArgs e) locations = new LocationsCasual().Locations; } - Randomizer randomizer = new Randomizer(extractedDir, parsedSeed, locations); + Randomizer randomizer = new Randomizer(extractedDir, parsedSeed, locations, checkItems.Checked, checkAreas.Checked, checkResources.Checked, checkUpgrades.Checked); logsb.Append("Randomize"); logText.Text = logsb.ToString(); @@ -286,49 +305,58 @@ private void randomizeBtn_Click(object sender, EventArgs e) } - private void SetSeedBasedOnDifficulty() + private void SetSeedBasedOnSettings() { + textSeed.Text = ""; switch (listDifficulty.SelectedItem.ToString()) { case "Casual": - textSeed.Text = string.Format("C{0:0000000}", (new SeedRandom()).Next(10000000)); + textSeed.Text += "C"; break; default: - textSeed.Text = string.Format("S{0:0000000}", (new SeedRandom()).Next(10000000)); + textSeed.Text += "S"; break; } + if (checkItems.Checked) { textSeed.Text += "I"; } + if (checkAreas.Checked) { textSeed.Text += "A"; } + if (checkResources.Checked) { textSeed.Text += "R"; } + if (checkUpgrades.Checked) { textSeed.Text += "U"; } + + textSeed.Text += string.Format("{0:0000000}", (new SeedRandom()).Next(10000000)); } - private string GetRandomizerDifficulty() + private void GetSettingsFromSeed() { - string difficulty = "Speedrunner"; - if (textSeed.Text.ToUpper().Contains("C")) { - difficulty = "Casual"; + listDifficulty.SelectedItem = "Casual"; } else if (textSeed.Text.ToUpper().Contains("S")) { - difficulty = "Speedrunner"; + listDifficulty.SelectedItem = "Speedrunner"; } - listDifficulty.SelectedItem = difficulty; - - return difficulty; + checkItems.Checked = textSeed.Text.ToUpper().Contains("I"); + checkAreas.Checked = textSeed.Text.ToUpper().Contains("A"); + checkResources.Checked = textSeed.Text.ToUpper().Contains("R"); + checkUpgrades.Checked = textSeed.Text.ToUpper().Contains("U"); } private string GetSeed() { - if (textSeed.Text.ToUpper().Contains("C")) - { - return textSeed.Text.ToUpper().Replace("C", ""); - } - else if (textSeed.Text.ToUpper().Contains("S")) - { - return textSeed.Text.ToUpper().Replace("S", ""); - } - MessageBox.Show("The seed string is unrecognized.", "Seed Difficulty", MessageBoxButtons.OK, MessageBoxIcon.Error); - return ""; + string seed = textSeed.Text.ToUpper(); + seed = seed.Replace("C", ""); + seed = seed.Replace("S", ""); + seed = seed.Replace("I", ""); + seed = seed.Replace("A", ""); + seed = seed.Replace("R", ""); + seed = seed.Replace("U", ""); + return seed; + } + + private void groupBox2_Enter(object sender, EventArgs e) + { + } } } diff --git a/SWD2Randomizer/Patcher.cs b/SWD2Randomizer/Patcher.cs index b89f7fd..4823551 100644 --- a/SWD2Randomizer/Patcher.cs +++ b/SWD2Randomizer/Patcher.cs @@ -90,7 +90,7 @@ public void PatchOasis() } XmlNode hubIntro = doc.SelectSingleNode("//Level[@Name='the_hub']/LayerFilters/Filter[@Layer='filter_intro']"); - hubIntro.ParentNode.RemoveChild(hubIntro); + hubIntro.InnerXml = @""; XmlNode hubPostIntro = doc.SelectSingleNode("//Level[@Name='the_hub']/LayerFilters/Filter[@Layer='filter_post_intro']"); hubPostIntro.InnerXml = @" @@ -288,7 +288,7 @@ public void PatchIntro() checkQuestProp.InnerXml = @" 32566045 - ProgressQuest5 + ProgressQuest6 2389, 2036 ProgressQuest 2280, 2004, 216, 63 diff --git a/SWD2Randomizer/Randomizer.cs b/SWD2Randomizer/Randomizer.cs index c886e8d..17234ed 100644 --- a/SWD2Randomizer/Randomizer.cs +++ b/SWD2Randomizer/Randomizer.cs @@ -12,13 +12,21 @@ class Randomizer private readonly int seed; private List haveFlags; private List locations; + private bool items; + private bool areas; + private bool resources; + private bool upgrades; - public Randomizer(string baseDir, int seed, List locations) + public Randomizer(string baseDir, int seed, List locations, bool items, bool areas, bool resources, bool upgrades) { random = new SeedRandom(seed); this.locations = locations; this.seed = seed; this.baseDir = baseDir; + this.items = items; + this.areas = areas; + this.resources = resources; + this.upgrades = upgrades; haveFlags = new List(); } @@ -26,11 +34,17 @@ public int Randomize() { bool ret; - ret = PermuteFlags(Location.RandomizeType.Upgrade); - if (!ret) return -1; + if (items) + { + ret = PermuteFlags(Location.RandomizeType.Upgrade); + if (!ret) return -1; + } - ret = PermuteFlags(Location.RandomizeType.Area); - if (!ret) return -1; + if (areas) + { + ret = PermuteFlags(Location.RandomizeType.Area); + if (!ret) return -1; + } ret = CheckValid(); if (!ret) return 0; @@ -168,8 +182,15 @@ public int Randomize() doc.Save(patchFile); } - RandomizeResources(); - RandomizeCogUpgrades(); + if (resources) + { + RandomizeResources(); + } + + if (upgrades) + { + RandomizeCogUpgrades(); + } return 1; }