From 06d3a2d8644a1cc6c069b1f350720432366cb9ff Mon Sep 17 00:00:00 2001 From: Dalet Date: Sun, 19 Oct 2014 03:29:34 +0200 Subject: [PATCH 01/19] Autosplits for Any% (splitting where I split) --- GameMemory.cs | 266 +++++++++++++++++++++++- SkyrimComponent.cs | 18 +- SkyrimSettings.Designer.cs | 403 ++++++++++++++++++++++++++++++------- SkyrimSettings.cs | 90 +++++++++ 4 files changed, 699 insertions(+), 78 deletions(-) diff --git a/GameMemory.cs b/GameMemory.cs index 8ec886e..76235dd 100644 --- a/GameMemory.cs +++ b/GameMemory.cs @@ -14,6 +14,21 @@ public enum SplitArea : int { None, Helgen, + Whiterun, + ThalmorEmbassy, + Esbern, + Riverwood, + TheWall, + Septimus, + MzarkTower, + ClearSky, + Alduin1, + HighHrothgar, + Solitude, + Windhelm, + Council, + Odahviing, + EnterSovngarde, DarkBrotherhoodQuestlineCompleted, CompanionsQuestlineCompleted, ThievesGuildQuestlineCompleted, @@ -48,12 +63,30 @@ public enum SplitArea : int private DeepPointer _darkBrotherhoodQuestsCompletedPtr; private DeepPointer _thievesGuildQuestsCompletedPtr; private DeepPointer _isInEscapeMenuPtr; + private DeepPointer _mainQuestsCompletedPtr; + private DeepPointer _wordsOfPowerLearnedPtr; private enum Locations { Tamriel = 0x0000003C, Sovngarde = 0x0002EE41, HelgenKeep01 = 0x0005DE24, + WhiterunWorld = 0x0001A26F, + ThalmorEmbassy02 = 0x0007DCFC, + WhiterunDragonsreach = 0x000165A3, + RiftenWorld = 0x00016BB4, + RiftenRatway01 = 0x0003B698, + RiverwoodSleepingGiantInn = 0x000133C6, + KarthspireRedoubtWorld = 0x00035699, + SkyHavenTemple = 0x000161EB, + SeptimusSignusOutpost = 0x0002D4E4, + TowerOfMzark = 0x0002D4E3, + HighHrothgar = 0x00087764, + SolitudeWorld = 0x00037EDF, + SolitudeCastleDour = 0x000213A0, + WindhelmWorld = 0x0001691D, + WindhelmPalaceoftheKings = 0x0001677C, + SkuldafnWorld = 0x000278DD, } private enum ExpectedDllSizes @@ -63,6 +96,7 @@ private enum ExpectedDllSizes } public bool[] splitStates { get; set; } + int mainQuestsWhenEnteringSkyHavenTemple = -1; public void resetSplitStates() { @@ -70,6 +104,7 @@ public void resetSplitStates() { splitStates[i] = false; } + mainQuestsWhenEnteringSkyHavenTemple = -1; } public GameMemory() @@ -94,6 +129,8 @@ public GameMemory() _darkBrotherhoodQuestsCompletedPtr = new DeepPointer(0x00EE6C34, 0x3b4); // number of dark brotherhood quests completed (from ingame stats) _thievesGuildQuestsCompletedPtr = new DeepPointer(0x00EE6C34, 0x3a0); // number of thieves' guild quests completed (from ingame stats) _isInEscapeMenuPtr = new DeepPointer(0x172E85E); // == 1 when in the pause menu or level up menu + _mainQuestsCompletedPtr = new DeepPointer(0x00EE6C34, 0x350); // number of main quests completed (from ingame stats) + _wordsOfPowerLearnedPtr = new DeepPointer(0x00EE6C34, 0x558); // "Words Of Power Learned" from ingame stats resetSplitStates(); @@ -162,10 +199,17 @@ void MemoryReadThread() int prevThievesGuildQuestsCompleted = 0; bool prevIsInEscapeMenu = false; int prevLocationID = 0; + int prevWorld_X = 0; + int prevWorld_Y = 0; bool loadingStarted = false; bool loadingScreenStarted = false; bool loadScreenFadeoutStarted = false; + bool isLoadingSaveFromMenu = false; + int loadScreenStartLocationID = 0; + int loadScreenStartWorld_X = 0; + int loadScreenStartWorld_Y = 0; + bool isWaitingLocationUpdate = false; SplitArea lastQuestCompleted = SplitArea.None; uint lastQuestframeCounter = 0; @@ -216,6 +260,12 @@ void MemoryReadThread() bool isInEscapeMenu; _isInEscapeMenuPtr.Deref(game, out isInEscapeMenu); + int mainquestsCompleted; + _mainQuestsCompletedPtr.Deref(game, out mainquestsCompleted); + + int wordsOfPowerLearned; + _wordsOfPowerLearnedPtr.Deref(game, out wordsOfPowerLearned); + if (isLoading != prevIsLoading) { if (isLoading) @@ -223,7 +273,6 @@ void MemoryReadThread() Trace.WriteLine(String.Format("[NoLoads] Load Start - {0}", frameCounter)); loadingStarted = true; - // pause game timer _uiThread.Post(d => { @@ -241,6 +290,20 @@ void MemoryReadThread() { loadingStarted = false; + if (!loadScreenFadeoutStarted) + { + if (locationID == (int)Locations.Tamriel && world_X == 13 && (world_Y == -10 || world_Y == -9) && wordsOfPowerLearned == 3) + { + _uiThread.Post(d => + { + if (this.OnSplitCompleted != null) + { + this.OnSplitCompleted(this, SplitArea.ClearSky, frameCounter); + } + }, null); + } + } + // unpause game timer _uiThread.Post(d => { @@ -260,11 +323,19 @@ void MemoryReadThread() Trace.WriteLine(String.Format("[NoLoads] LoadScreen Start - {0}", frameCounter)); loadingScreenStarted = true; + loadScreenStartLocationID = locationID; + loadScreenStartWorld_X = world_X; + loadScreenStartWorld_Y = world_Y; if (isInFadeOut) { loadScreenFadeoutStarted = true; } + + if (isInEscapeMenu) + { + isLoadingSaveFromMenu = true; + } // nothing currently // _uiThread.Post(d => @@ -276,10 +347,12 @@ void MemoryReadThread() // }, null); // if it isn't a loadscreen from loading a save - if (!isInEscapeMenu) + if (!isLoadingSaveFromMenu) { + isWaitingLocationUpdate = true; + // if loadscreen starts while leaving helgen - if (locationID == (int)Locations.HelgenKeep01 && world_X == -2 && world_Y == -5) + if (loadScreenStartLocationID == (int)Locations.HelgenKeep01 && loadScreenStartWorld_X == -2 && loadScreenStartWorld_Y == -5) { // Helgen split _uiThread.Post(d => @@ -290,6 +363,30 @@ void MemoryReadThread() } }, null); } + // if loadscreen starts in Karthspire and one main quest has been completed since arriving Karthspire + else if (mainquestsCompleted == mainQuestsWhenEnteringSkyHavenTemple + 1 && loadScreenStartLocationID == (int)Locations.KarthspireRedoubtWorld) + { + _uiThread.Post(d => + { + if (this.OnSplitCompleted != null) + { + this.OnSplitCompleted(this, SplitArea.TheWall, frameCounter); + } + }, null); + } + // if loadscreen starts in Paarthurnax' mountain whereabouts + else if (loadScreenStartLocationID == (int)Locations.Tamriel && ((loadScreenStartWorld_X == 14 && loadScreenStartWorld_Y == -12) || + (loadScreenStartWorld_X == 14 && loadScreenStartWorld_Y == -13) || (loadScreenStartWorld_X == 13 && loadScreenStartWorld_Y == -12) || + (loadScreenStartWorld_X == 13 && loadScreenStartWorld_Y == -13))) + { + _uiThread.Post(d => + { + if (this.OnSplitCompleted != null) + { + this.OnSplitCompleted(this, SplitArea.Alduin1, frameCounter); + } + }, null); + } } } else @@ -308,6 +405,8 @@ void MemoryReadThread() // this.OnLoadScreenFinished(this, EventArgs.Empty); // } // }, null); + + isLoadingSaveFromMenu = false; } } } @@ -329,6 +428,7 @@ void MemoryReadThread() if (prevIsInFadeOut && loadScreenFadeoutStarted && locationID == (int)Locations.Tamriel && world_X == 3 && world_Y == -20) { + mainQuestsWhenEnteringSkyHavenTemple = -1; // reset Trace.WriteLine(String.Format("[NoLoads] Reset - {0}", frameCounter)); _uiThread.Post(d => @@ -353,6 +453,162 @@ void MemoryReadThread() } } + if ((locationID != prevLocationID || world_X != prevWorld_X || world_Y != prevWorld_Y) && isWaitingLocationUpdate) + { + isWaitingLocationUpdate = false; + + if (locationID == (int)Locations.SkyHavenTemple && mainQuestsWhenEnteringSkyHavenTemple == -1) + { + mainQuestsWhenEnteringSkyHavenTemple = mainquestsCompleted; + } + + // if loadscreen starts in Whiterun and doesn't end in dragonsreach + if (loadScreenStartLocationID == (int)Locations.WhiterunWorld && + locationID != (int)Locations.WhiterunDragonsreach) + { + _uiThread.Post(d => + { + if (this.OnSplitCompleted != null) + { + this.OnSplitCompleted(this, SplitArea.Whiterun, frameCounter); + } + }, null); + } + // if loadscreen starts while in front of the door of Thalmor Embassy and doesn't end inside the Embassy + else if (loadScreenStartLocationID == (int)Locations.Tamriel && loadScreenStartWorld_X == -20 && loadScreenStartWorld_Y == 28 + && locationID != (int)Locations.ThalmorEmbassy02) + { + _uiThread.Post(d => + { + if (this.OnSplitCompleted != null) + { + this.OnSplitCompleted(this, SplitArea.ThalmorEmbassy, frameCounter); + } + }, null); + } + // if loadscreen starts while in front of the ratway door and doesn't end inside it + else if (loadScreenStartLocationID == (int)Locations.RiftenWorld && loadScreenStartWorld_X == 42 && loadScreenStartWorld_Y == -24 + && locationID != (int)Locations.RiftenRatway01) + { + _uiThread.Post(d => + { + if (this.OnSplitCompleted != null) + { + this.OnSplitCompleted(this, SplitArea.Esbern, frameCounter); + } + }, null); + } + // if loadscreen starts while in front of the Sleeping Giant Inn and doesn't end inside it + else if (loadScreenStartLocationID == (int)Locations.Tamriel && loadScreenStartWorld_X == 5 && loadScreenStartWorld_Y == -11 + && locationID != (int)Locations.RiverwoodSleepingGiantInn) + { + _uiThread.Post(d => + { + if (this.OnSplitCompleted != null) + { + this.OnSplitCompleted(this, SplitArea.Riverwood, frameCounter); + } + }, null); + } + // if loadscreen starts outside Septimus' Outpost and doesn't end inside it + else if (loadScreenStartLocationID == (int)Locations.Tamriel && loadScreenStartWorld_X == 28 && loadScreenStartWorld_Y == 34 + && locationID != (int)Locations.SeptimusSignusOutpost) + { + _uiThread.Post(d => + { + if (this.OnSplitCompleted != null) + { + this.OnSplitCompleted(this, SplitArea.Septimus, frameCounter); + } + }, null); + } + // if loadscreen starts outside Mzark Tower and doesn't end inside it + else if (loadScreenStartLocationID == (int)Locations.Tamriel && loadScreenStartWorld_X == 6 && loadScreenStartWorld_Y == 11 + && locationID != (int)Locations.TowerOfMzark) + { + _uiThread.Post(d => + { + if (this.OnSplitCompleted != null) + { + this.OnSplitCompleted(this, SplitArea.MzarkTower, frameCounter); + } + }, null); + } + // if loadscreen starts in High Hrothgar's whereabouts and doesn't end inside + else if (loadScreenStartLocationID == (int)Locations.Tamriel && loadScreenStartWorld_X == 13 && + (loadScreenStartWorld_Y == -9 || loadScreenStartWorld_Y == -10) + && locationID != (int)Locations.HighHrothgar) + { + if (!splitStates[(int)SplitArea.HighHrothgar]) + { + _uiThread.Post(d => + { + if (this.OnSplitCompleted != null) + { + this.OnSplitCompleted(this, SplitArea.HighHrothgar, frameCounter); + } + }, null); + } + else + { + _uiThread.Post(d => + { + if (this.OnSplitCompleted != null) + { + this.OnSplitCompleted(this, SplitArea.Council, frameCounter); + } + }, null); + } + } + // if loadscreen starts in Solitude in front of the door of Castle Dour and doesn't end inside it + else if (loadScreenStartLocationID == (int)Locations.SolitudeWorld && loadScreenStartWorld_X == -16 && loadScreenStartWorld_Y == 26 + && locationID != (int)Locations.SolitudeCastleDour) + { + _uiThread.Post(d => + { + if (this.OnSplitCompleted != null) + { + this.OnSplitCompleted(this, SplitArea.Solitude, frameCounter); + } + }, null); + } + // if loadscreen starts in Windhelm and doesn't end inside + else if (loadScreenStartLocationID == (int)Locations.WindhelmWorld && loadScreenStartWorld_X == 32 && loadScreenStartWorld_Y == 10 && + locationID != (int)Locations.WindhelmPalaceoftheKings) + { + _uiThread.Post(d => + { + if (this.OnSplitCompleted != null) + { + this.OnSplitCompleted(this, SplitArea.Windhelm, frameCounter); + } + }, null); + } + // if loadscreen ends in Skuldafn + else if (locationID == (int)Locations.SkuldafnWorld) + { + _uiThread.Post(d => + { + if (this.OnSplitCompleted != null) + { + this.OnSplitCompleted(this, SplitArea.Odahviing, frameCounter); + } + }, null); + } + // if loadscreen ends in Sovngarde + else if (locationID == (int)Locations.Sovngarde) + { + _uiThread.Post(d => + { + if (this.OnSplitCompleted != null) + { + this.OnSplitCompleted(this, SplitArea.EnterSovngarde, frameCounter); + } + }, null); + + } + } + // if alduin is defeated in sovngarde if (isAlduinDefeated != prevIsAlduinDefeated && isAlduinDefeated && locationID == (int)Locations.Sovngarde) { @@ -410,7 +666,7 @@ void MemoryReadThread() }, null); } - Debug.WriteLineIf(locationID != prevLocationID, String.Format("[NoLoads] LocationID changed from {0} to {1} - {2}", prevLocationID.ToString("X8"), locationID.ToString("X8"), frameCounter)); + Debug.WriteLineIf(locationID != prevLocationID || world_X != prevWorld_X || world_Y != prevWorld_Y, String.Format("[NoLoads] Location changed to {0} at X: {1} Y: {2} - {3}", locationID.ToString("X8"), world_X, world_Y, frameCounter)); Debug.WriteLineIf(isInEscapeMenu != prevIsInEscapeMenu, String.Format("[NoLoads] isInEscapeMenu changed to {0} - {1}", isInEscapeMenu, frameCounter)); prevIsLoading = isLoading; @@ -424,6 +680,8 @@ void MemoryReadThread() prevThievesGuildQuestsCompleted = thievesGuildQuestsCompleted; prevIsInEscapeMenu = isInEscapeMenu; prevLocationID = locationID; + prevWorld_X = world_X; + prevWorld_Y = world_Y; frameCounter++; Thread.Sleep(15); diff --git a/SkyrimComponent.cs b/SkyrimComponent.cs index 54360ab..4b4f877 100644 --- a/SkyrimComponent.cs +++ b/SkyrimComponent.cs @@ -150,15 +150,31 @@ void gameMemory_OnLoadFinished(object sender, EventArgs e) void gameMemory_OnSplitCompleted(object sender, GameMemory.SplitArea split, uint frame) { - Trace.WriteLineIf(split != GameMemory.SplitArea.None, String.Format("[NoLoads] {0} Split - {1}", split, frame)); + Debug.WriteLineIf(split != GameMemory.SplitArea.None, String.Format("[NoLoads] Trying to split {0}, State: {1} - {2}", split, _gameMemory.splitStates[(int)split], frame)); if (!_gameMemory.splitStates[(int)split] && ((split == GameMemory.SplitArea.Helgen && this.Settings.Helgen) || + (split == GameMemory.SplitArea.Whiterun && this.Settings.Whiterun) || + (split == GameMemory.SplitArea.ThalmorEmbassy && this.Settings.ThalmorEmbassy) || + (split == GameMemory.SplitArea.Esbern && this.Settings.Esbern) || + (split == GameMemory.SplitArea.Riverwood && this.Settings.Riverwood) || + (split == GameMemory.SplitArea.TheWall && this.Settings.TheWall) || + (split == GameMemory.SplitArea.Septimus && this.Settings.Septimus) || + (split == GameMemory.SplitArea.MzarkTower && this.Settings.MzarkTower) || + (split == GameMemory.SplitArea.ClearSky && this.Settings.ClearSky) || + (split == GameMemory.SplitArea.Alduin1 && this.Settings.Alduin1) || + (split == GameMemory.SplitArea.HighHrothgar && this.Settings.HighHrothgar) || + (split == GameMemory.SplitArea.Solitude && this.Settings.Solitude) || + (split == GameMemory.SplitArea.Windhelm && this.Settings.Windhelm) || + (split == GameMemory.SplitArea.Council && this.Settings.Council) || + (split == GameMemory.SplitArea.Odahviing && this.Settings.Odahviing) || + (split == GameMemory.SplitArea.EnterSovngarde && this.Settings.EnterSovngarde) || (split == GameMemory.SplitArea.DarkBrotherhoodQuestlineCompleted && this.Settings.DarkBrotherhood) || (split == GameMemory.SplitArea.CompanionsQuestlineCompleted && this.Settings.Companions) || (split == GameMemory.SplitArea.CollegeQuestlineCompleted && this.Settings.CollegeOfWinterhold) || (split == GameMemory.SplitArea.ThievesGuildQuestlineCompleted && this.Settings.ThievesGuild) || (split == GameMemory.SplitArea.AlduinDefeated && this.Settings.AlduinDefeated))) { + Trace.WriteLine(String.Format("[NoLoads] {0} Split - {1}", split, frame)); _timer.Split(); _gameMemory.splitStates[(int)split] = true; } diff --git a/SkyrimSettings.Designer.cs b/SkyrimSettings.Designer.cs index cce91a7..aa06bcd 100644 --- a/SkyrimSettings.Designer.cs +++ b/SkyrimSettings.Designer.cs @@ -33,9 +33,8 @@ private void InitializeComponent() this.tlpStartSplits = new System.Windows.Forms.TableLayoutPanel(); this.chkHelgen = new System.Windows.Forms.CheckBox(); this.chkAutoStart = new System.Windows.Forms.CheckBox(); - this.gbEndSplits = new System.Windows.Forms.GroupBox(); - this.tlpEndSplits = new System.Windows.Forms.TableLayoutPanel(); - this.chkAlduinDefeated = new System.Windows.Forms.CheckBox(); + this.gbGuildsSplits = new System.Windows.Forms.GroupBox(); + this.tlpGuildsSplits = new System.Windows.Forms.TableLayoutPanel(); this.chkCollege = new System.Windows.Forms.CheckBox(); this.chkCompanions = new System.Windows.Forms.CheckBox(); this.chkThievesGuild = new System.Windows.Forms.CheckBox(); @@ -43,41 +42,65 @@ private void InitializeComponent() this.gbDisplayAlternateTiming = new System.Windows.Forms.GroupBox(); this.tlpDisplayAlternateTiming = new System.Windows.Forms.TableLayoutPanel(); this.chkDisplayWithoutLoads = new System.Windows.Forms.CheckBox(); + this.gb_AnyPercentSplits = new System.Windows.Forms.GroupBox(); + this.tlp_AnyPercentSplits = new System.Windows.Forms.TableLayoutPanel(); + this.chkAlduinDefeated = new System.Windows.Forms.CheckBox(); + this.chkWhiterun = new System.Windows.Forms.CheckBox(); + this.chkThalmorEmbassy = new System.Windows.Forms.CheckBox(); + this.chkEsbern = new System.Windows.Forms.CheckBox(); + this.chkRiverwood = new System.Windows.Forms.CheckBox(); + this.chkTheWall = new System.Windows.Forms.CheckBox(); + this.chkSeptimus = new System.Windows.Forms.CheckBox(); + this.chkMzarkTower = new System.Windows.Forms.CheckBox(); + this.chkClearSky = new System.Windows.Forms.CheckBox(); + this.chkHighHrothgar = new System.Windows.Forms.CheckBox(); + this.chkSolitude = new System.Windows.Forms.CheckBox(); + this.chkWindhelm = new System.Windows.Forms.CheckBox(); + this.chkCouncil = new System.Windows.Forms.CheckBox(); + this.chkOdahviing = new System.Windows.Forms.CheckBox(); + this.chkEnterSovngarde = new System.Windows.Forms.CheckBox(); + this.chkAlduin1 = new System.Windows.Forms.CheckBox(); this.tlpMain.SuspendLayout(); this.gbStartSplits.SuspendLayout(); this.tlpStartSplits.SuspendLayout(); - this.gbEndSplits.SuspendLayout(); - this.tlpEndSplits.SuspendLayout(); + this.gbGuildsSplits.SuspendLayout(); + this.tlpGuildsSplits.SuspendLayout(); this.gbDisplayAlternateTiming.SuspendLayout(); this.tlpDisplayAlternateTiming.SuspendLayout(); + this.gb_AnyPercentSplits.SuspendLayout(); + this.tlp_AnyPercentSplits.SuspendLayout(); this.SuspendLayout(); // // tlpMain // + this.tlpMain.AutoSize = true; + this.tlpMain.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; this.tlpMain.ColumnCount = 1; this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); this.tlpMain.Controls.Add(this.gbStartSplits, 0, 0); - this.tlpMain.Controls.Add(this.gbEndSplits, 0, 1); - this.tlpMain.Controls.Add(this.gbDisplayAlternateTiming, 0, 2); + this.tlpMain.Controls.Add(this.gbGuildsSplits, 0, 2); + this.tlpMain.Controls.Add(this.gbDisplayAlternateTiming, 0, 3); + this.tlpMain.Controls.Add(this.gb_AnyPercentSplits, 0, 1); this.tlpMain.Dock = System.Windows.Forms.DockStyle.Top; this.tlpMain.Location = new System.Drawing.Point(0, 0); this.tlpMain.Name = "tlpMain"; - this.tlpMain.RowCount = 3; + this.tlpMain.RowCount = 4; + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tlpMain.Size = new System.Drawing.Size(476, 365); + this.tlpMain.Size = new System.Drawing.Size(450, 629); this.tlpMain.TabIndex = 0; // // gbStartSplits // this.gbStartSplits.AutoSize = true; + this.gbStartSplits.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; this.gbStartSplits.Controls.Add(this.tlpStartSplits); this.gbStartSplits.Dock = System.Windows.Forms.DockStyle.Top; this.gbStartSplits.Location = new System.Drawing.Point(3, 3); this.gbStartSplits.Name = "gbStartSplits"; - this.gbStartSplits.Size = new System.Drawing.Size(470, 65); + this.gbStartSplits.Size = new System.Drawing.Size(444, 65); this.gbStartSplits.TabIndex = 5; this.gbStartSplits.TabStop = false; this.gbStartSplits.Text = "Start Auto-splits"; @@ -85,6 +108,7 @@ private void InitializeComponent() // tlpStartSplits // this.tlpStartSplits.AutoSize = true; + this.tlpStartSplits.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; this.tlpStartSplits.BackColor = System.Drawing.Color.Transparent; this.tlpStartSplits.ColumnCount = 1; this.tlpStartSplits.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); @@ -96,7 +120,7 @@ private void InitializeComponent() this.tlpStartSplits.RowCount = 2; this.tlpStartSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); this.tlpStartSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpStartSplits.Size = new System.Drawing.Size(464, 46); + this.tlpStartSplits.Size = new System.Drawing.Size(438, 46); this.tlpStartSplits.TabIndex = 4; // // chkHelgen @@ -121,57 +145,46 @@ private void InitializeComponent() this.chkAutoStart.Text = "Start / Reset"; this.chkAutoStart.UseVisualStyleBackColor = true; // - // gbEndSplits - // - this.gbEndSplits.AutoSize = true; - this.gbEndSplits.Controls.Add(this.tlpEndSplits); - this.gbEndSplits.Dock = System.Windows.Forms.DockStyle.Top; - this.gbEndSplits.Location = new System.Drawing.Point(3, 74); - this.gbEndSplits.Name = "gbEndSplits"; - this.gbEndSplits.Size = new System.Drawing.Size(470, 134); - this.gbEndSplits.TabIndex = 7; - this.gbEndSplits.TabStop = false; - this.gbEndSplits.Text = "End Auto-splits"; - // - // tlpEndSplits - // - this.tlpEndSplits.AutoSize = true; - this.tlpEndSplits.BackColor = System.Drawing.Color.Transparent; - this.tlpEndSplits.ColumnCount = 1; - this.tlpEndSplits.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tlpEndSplits.Controls.Add(this.chkAlduinDefeated, 0, 0); - this.tlpEndSplits.Controls.Add(this.chkCollege, 0, 1); - this.tlpEndSplits.Controls.Add(this.chkCompanions, 0, 2); - this.tlpEndSplits.Controls.Add(this.chkThievesGuild, 0, 4); - this.tlpEndSplits.Controls.Add(this.chkDarkBrotherhood, 0, 3); - this.tlpEndSplits.Dock = System.Windows.Forms.DockStyle.Fill; - this.tlpEndSplits.Location = new System.Drawing.Point(3, 16); - this.tlpEndSplits.Name = "tlpEndSplits"; - this.tlpEndSplits.RowCount = 5; - this.tlpEndSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpEndSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpEndSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpEndSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpEndSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpEndSplits.Size = new System.Drawing.Size(464, 115); - this.tlpEndSplits.TabIndex = 4; - // - // chkAlduinDefeated - // - this.chkAlduinDefeated.AutoSize = true; - this.chkAlduinDefeated.Checked = true; - this.chkAlduinDefeated.CheckState = System.Windows.Forms.CheckState.Checked; - this.chkAlduinDefeated.Location = new System.Drawing.Point(3, 3); - this.chkAlduinDefeated.Name = "chkAlduinDefeated"; - this.chkAlduinDefeated.Size = new System.Drawing.Size(160, 17); - this.chkAlduinDefeated.TabIndex = 5; - this.chkAlduinDefeated.Text = "Alduin\'s Defeat (Main Quest)"; - this.chkAlduinDefeated.UseVisualStyleBackColor = true; + // gbGuildsSplits + // + this.gbGuildsSplits.AutoSize = true; + this.gbGuildsSplits.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.gbGuildsSplits.Controls.Add(this.tlpGuildsSplits); + this.gbGuildsSplits.Dock = System.Windows.Forms.DockStyle.Top; + this.gbGuildsSplits.Location = new System.Drawing.Point(3, 467); + this.gbGuildsSplits.Name = "gbGuildsSplits"; + this.gbGuildsSplits.Size = new System.Drawing.Size(444, 111); + this.gbGuildsSplits.TabIndex = 7; + this.gbGuildsSplits.TabStop = false; + this.gbGuildsSplits.Text = "Guilds Auto-splits"; + // + // tlpGuildsSplits + // + this.tlpGuildsSplits.AutoSize = true; + this.tlpGuildsSplits.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tlpGuildsSplits.BackColor = System.Drawing.Color.Transparent; + this.tlpGuildsSplits.ColumnCount = 1; + this.tlpGuildsSplits.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpGuildsSplits.Controls.Add(this.chkCollege, 0, 0); + this.tlpGuildsSplits.Controls.Add(this.chkCompanions, 0, 1); + this.tlpGuildsSplits.Controls.Add(this.chkThievesGuild, 0, 3); + this.tlpGuildsSplits.Controls.Add(this.chkDarkBrotherhood, 0, 2); + this.tlpGuildsSplits.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpGuildsSplits.Location = new System.Drawing.Point(3, 16); + this.tlpGuildsSplits.Name = "tlpGuildsSplits"; + this.tlpGuildsSplits.RowCount = 4; + this.tlpGuildsSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpGuildsSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpGuildsSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpGuildsSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpGuildsSplits.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tlpGuildsSplits.Size = new System.Drawing.Size(438, 92); + this.tlpGuildsSplits.TabIndex = 4; // // chkCollege // this.chkCollege.AutoSize = true; - this.chkCollege.Location = new System.Drawing.Point(3, 26); + this.chkCollege.Location = new System.Drawing.Point(3, 3); this.chkCollege.Name = "chkCollege"; this.chkCollege.Size = new System.Drawing.Size(318, 17); this.chkCollege.TabIndex = 10; @@ -181,7 +194,7 @@ private void InitializeComponent() // chkCompanions // this.chkCompanions.AutoSize = true; - this.chkCompanions.Location = new System.Drawing.Point(3, 49); + this.chkCompanions.Location = new System.Drawing.Point(3, 26); this.chkCompanions.Name = "chkCompanions"; this.chkCompanions.Size = new System.Drawing.Size(275, 17); this.chkCompanions.TabIndex = 8; @@ -191,7 +204,7 @@ private void InitializeComponent() // chkThievesGuild // this.chkThievesGuild.AutoSize = true; - this.chkThievesGuild.Location = new System.Drawing.Point(3, 95); + this.chkThievesGuild.Location = new System.Drawing.Point(3, 72); this.chkThievesGuild.Name = "chkThievesGuild"; this.chkThievesGuild.Size = new System.Drawing.Size(284, 17); this.chkThievesGuild.TabIndex = 9; @@ -201,7 +214,7 @@ private void InitializeComponent() // chkDarkBrotherhood // this.chkDarkBrotherhood.AutoSize = true; - this.chkDarkBrotherhood.Location = new System.Drawing.Point(3, 72); + this.chkDarkBrotherhood.Location = new System.Drawing.Point(3, 49); this.chkDarkBrotherhood.Name = "chkDarkBrotherhood"; this.chkDarkBrotherhood.Size = new System.Drawing.Size(301, 17); this.chkDarkBrotherhood.TabIndex = 7; @@ -211,11 +224,12 @@ private void InitializeComponent() // gbDisplayAlternateTiming // this.gbDisplayAlternateTiming.AutoSize = true; + this.gbDisplayAlternateTiming.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; this.gbDisplayAlternateTiming.Controls.Add(this.tlpDisplayAlternateTiming); this.gbDisplayAlternateTiming.Dock = System.Windows.Forms.DockStyle.Top; - this.gbDisplayAlternateTiming.Location = new System.Drawing.Point(3, 214); + this.gbDisplayAlternateTiming.Location = new System.Drawing.Point(3, 584); this.gbDisplayAlternateTiming.Name = "gbDisplayAlternateTiming"; - this.gbDisplayAlternateTiming.Size = new System.Drawing.Size(470, 42); + this.gbDisplayAlternateTiming.Size = new System.Drawing.Size(444, 42); this.gbDisplayAlternateTiming.TabIndex = 9; this.gbDisplayAlternateTiming.TabStop = false; this.gbDisplayAlternateTiming.Text = "Show Alternate Timing Method"; @@ -223,6 +237,7 @@ private void InitializeComponent() // tlpDisplayAlternateTiming // this.tlpDisplayAlternateTiming.AutoSize = true; + this.tlpDisplayAlternateTiming.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; this.tlpDisplayAlternateTiming.ColumnCount = 1; this.tlpDisplayAlternateTiming.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); this.tlpDisplayAlternateTiming.Controls.Add(this.chkDisplayWithoutLoads, 0, 0); @@ -231,8 +246,8 @@ private void InitializeComponent() this.tlpDisplayAlternateTiming.Name = "tlpDisplayAlternateTiming"; this.tlpDisplayAlternateTiming.RowCount = 1; this.tlpDisplayAlternateTiming.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpDisplayAlternateTiming.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tlpDisplayAlternateTiming.Size = new System.Drawing.Size(464, 23); + this.tlpDisplayAlternateTiming.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F)); + this.tlpDisplayAlternateTiming.Size = new System.Drawing.Size(438, 23); this.tlpDisplayAlternateTiming.TabIndex = 0; // // chkDisplayWithoutLoads @@ -247,28 +262,253 @@ private void InitializeComponent() this.chkDisplayWithoutLoads.Text = "Enable"; this.chkDisplayWithoutLoads.UseVisualStyleBackColor = true; // + // gb_AnyPercentSplits + // + this.gb_AnyPercentSplits.AutoSize = true; + this.gb_AnyPercentSplits.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.gb_AnyPercentSplits.Controls.Add(this.tlp_AnyPercentSplits); + this.gb_AnyPercentSplits.Dock = System.Windows.Forms.DockStyle.Top; + this.gb_AnyPercentSplits.Location = new System.Drawing.Point(3, 74); + this.gb_AnyPercentSplits.Name = "gb_AnyPercentSplits"; + this.gb_AnyPercentSplits.Size = new System.Drawing.Size(444, 387); + this.gb_AnyPercentSplits.TabIndex = 10; + this.gb_AnyPercentSplits.TabStop = false; + this.gb_AnyPercentSplits.Text = "Any% Auto-splits"; + // + // tlp_AnyPercentSplits + // + this.tlp_AnyPercentSplits.AutoSize = true; + this.tlp_AnyPercentSplits.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tlp_AnyPercentSplits.ColumnCount = 1; + this.tlp_AnyPercentSplits.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlp_AnyPercentSplits.Controls.Add(this.chkAlduinDefeated, 0, 15); + this.tlp_AnyPercentSplits.Controls.Add(this.chkWhiterun, 0, 0); + this.tlp_AnyPercentSplits.Controls.Add(this.chkThalmorEmbassy, 0, 1); + this.tlp_AnyPercentSplits.Controls.Add(this.chkEsbern, 0, 2); + this.tlp_AnyPercentSplits.Controls.Add(this.chkRiverwood, 0, 3); + this.tlp_AnyPercentSplits.Controls.Add(this.chkTheWall, 0, 4); + this.tlp_AnyPercentSplits.Controls.Add(this.chkSeptimus, 0, 5); + this.tlp_AnyPercentSplits.Controls.Add(this.chkMzarkTower, 0, 6); + this.tlp_AnyPercentSplits.Controls.Add(this.chkClearSky, 0, 7); + this.tlp_AnyPercentSplits.Controls.Add(this.chkHighHrothgar, 0, 9); + this.tlp_AnyPercentSplits.Controls.Add(this.chkSolitude, 0, 10); + this.tlp_AnyPercentSplits.Controls.Add(this.chkWindhelm, 0, 11); + this.tlp_AnyPercentSplits.Controls.Add(this.chkCouncil, 0, 12); + this.tlp_AnyPercentSplits.Controls.Add(this.chkOdahviing, 0, 13); + this.tlp_AnyPercentSplits.Controls.Add(this.chkEnterSovngarde, 0, 14); + this.tlp_AnyPercentSplits.Controls.Add(this.chkAlduin1, 0, 8); + this.tlp_AnyPercentSplits.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlp_AnyPercentSplits.Location = new System.Drawing.Point(3, 16); + this.tlp_AnyPercentSplits.Name = "tlp_AnyPercentSplits"; + this.tlp_AnyPercentSplits.RowCount = 16; + this.tlp_AnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlp_AnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlp_AnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlp_AnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlp_AnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlp_AnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlp_AnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlp_AnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlp_AnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlp_AnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlp_AnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlp_AnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlp_AnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlp_AnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlp_AnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlp_AnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlp_AnyPercentSplits.Size = new System.Drawing.Size(438, 368); + this.tlp_AnyPercentSplits.TabIndex = 0; + // + // chkAlduinDefeated + // + this.chkAlduinDefeated.AutoSize = true; + this.chkAlduinDefeated.Checked = true; + this.chkAlduinDefeated.CheckState = System.Windows.Forms.CheckState.Checked; + this.chkAlduinDefeated.Location = new System.Drawing.Point(3, 348); + this.chkAlduinDefeated.Name = "chkAlduinDefeated"; + this.chkAlduinDefeated.Size = new System.Drawing.Size(97, 17); + this.chkAlduinDefeated.TabIndex = 5; + this.chkAlduinDefeated.Text = "Alduin\'s Defeat"; + this.chkAlduinDefeated.UseVisualStyleBackColor = true; + // + // chkWhiterun + // + this.chkWhiterun.AutoSize = true; + this.chkWhiterun.Location = new System.Drawing.Point(3, 3); + this.chkWhiterun.Name = "chkWhiterun"; + this.chkWhiterun.Size = new System.Drawing.Size(69, 17); + this.chkWhiterun.TabIndex = 0; + this.chkWhiterun.Text = "Whiterun"; + this.chkWhiterun.UseVisualStyleBackColor = true; + // + // chkThalmorEmbassy + // + this.chkThalmorEmbassy.AutoSize = true; + this.chkThalmorEmbassy.Location = new System.Drawing.Point(3, 26); + this.chkThalmorEmbassy.Name = "chkThalmorEmbassy"; + this.chkThalmorEmbassy.Size = new System.Drawing.Size(109, 17); + this.chkThalmorEmbassy.TabIndex = 1; + this.chkThalmorEmbassy.Text = "Thalmor Embassy"; + this.chkThalmorEmbassy.UseVisualStyleBackColor = true; + // + // chkEsbern + // + this.chkEsbern.AutoSize = true; + this.chkEsbern.Location = new System.Drawing.Point(3, 49); + this.chkEsbern.Name = "chkEsbern"; + this.chkEsbern.Size = new System.Drawing.Size(101, 17); + this.chkEsbern.TabIndex = 6; + this.chkEsbern.Text = "Esbern in Riften"; + this.chkEsbern.UseVisualStyleBackColor = true; + // + // chkRiverwood + // + this.chkRiverwood.AutoSize = true; + this.chkRiverwood.Location = new System.Drawing.Point(3, 72); + this.chkRiverwood.Name = "chkRiverwood"; + this.chkRiverwood.Size = new System.Drawing.Size(77, 17); + this.chkRiverwood.TabIndex = 7; + this.chkRiverwood.Text = "Riverwood"; + this.chkRiverwood.UseVisualStyleBackColor = true; + // + // chkTheWall + // + this.chkTheWall.AutoSize = true; + this.chkTheWall.Location = new System.Drawing.Point(3, 95); + this.chkTheWall.Name = "chkTheWall"; + this.chkTheWall.Size = new System.Drawing.Size(69, 17); + this.chkTheWall.TabIndex = 8; + this.chkTheWall.Text = "The Wall"; + this.chkTheWall.UseVisualStyleBackColor = true; + // + // chkSeptimus + // + this.chkSeptimus.AutoSize = true; + this.chkSeptimus.Location = new System.Drawing.Point(3, 118); + this.chkSeptimus.Name = "chkSeptimus"; + this.chkSeptimus.Size = new System.Drawing.Size(69, 17); + this.chkSeptimus.TabIndex = 9; + this.chkSeptimus.Text = "Septimus"; + this.chkSeptimus.UseVisualStyleBackColor = true; + // + // chkMzarkTower + // + this.chkMzarkTower.AutoSize = true; + this.chkMzarkTower.Location = new System.Drawing.Point(3, 141); + this.chkMzarkTower.Name = "chkMzarkTower"; + this.chkMzarkTower.Size = new System.Drawing.Size(88, 17); + this.chkMzarkTower.TabIndex = 10; + this.chkMzarkTower.Text = "Mzark Tower"; + this.chkMzarkTower.UseVisualStyleBackColor = true; + // + // chkClearSky + // + this.chkClearSky.AutoSize = true; + this.chkClearSky.Location = new System.Drawing.Point(3, 164); + this.chkClearSky.Name = "chkClearSky"; + this.chkClearSky.Size = new System.Drawing.Size(71, 17); + this.chkClearSky.TabIndex = 11; + this.chkClearSky.Text = "Clear Sky"; + this.chkClearSky.UseVisualStyleBackColor = true; + // + // chkHighHrothgar + // + this.chkHighHrothgar.AutoSize = true; + this.chkHighHrothgar.Location = new System.Drawing.Point(3, 210); + this.chkHighHrothgar.Name = "chkHighHrothgar"; + this.chkHighHrothgar.Size = new System.Drawing.Size(92, 17); + this.chkHighHrothgar.TabIndex = 12; + this.chkHighHrothgar.Text = "High Hrothgar"; + this.chkHighHrothgar.UseVisualStyleBackColor = true; + // + // chkSolitude + // + this.chkSolitude.AutoSize = true; + this.chkSolitude.Location = new System.Drawing.Point(3, 233); + this.chkSolitude.Name = "chkSolitude"; + this.chkSolitude.Size = new System.Drawing.Size(64, 17); + this.chkSolitude.TabIndex = 13; + this.chkSolitude.Text = "Solitude"; + this.chkSolitude.UseVisualStyleBackColor = true; + // + // chkWindhelm + // + this.chkWindhelm.AutoSize = true; + this.chkWindhelm.Location = new System.Drawing.Point(3, 256); + this.chkWindhelm.Name = "chkWindhelm"; + this.chkWindhelm.Size = new System.Drawing.Size(73, 17); + this.chkWindhelm.TabIndex = 14; + this.chkWindhelm.Text = "Windhelm"; + this.chkWindhelm.UseVisualStyleBackColor = true; + // + // chkCouncil + // + this.chkCouncil.AutoSize = true; + this.chkCouncil.Location = new System.Drawing.Point(3, 279); + this.chkCouncil.Name = "chkCouncil"; + this.chkCouncil.Size = new System.Drawing.Size(61, 17); + this.chkCouncil.TabIndex = 15; + this.chkCouncil.Text = "Council"; + this.chkCouncil.UseVisualStyleBackColor = true; + // + // chkOdahviing + // + this.chkOdahviing.AutoSize = true; + this.chkOdahviing.Location = new System.Drawing.Point(3, 302); + this.chkOdahviing.Name = "chkOdahviing"; + this.chkOdahviing.Size = new System.Drawing.Size(74, 17); + this.chkOdahviing.TabIndex = 16; + this.chkOdahviing.Text = "Odahviing"; + this.chkOdahviing.UseVisualStyleBackColor = true; + // + // chkEnterSovngarde + // + this.chkEnterSovngarde.AutoSize = true; + this.chkEnterSovngarde.Location = new System.Drawing.Point(3, 325); + this.chkEnterSovngarde.Name = "chkEnterSovngarde"; + this.chkEnterSovngarde.Size = new System.Drawing.Size(106, 17); + this.chkEnterSovngarde.TabIndex = 17; + this.chkEnterSovngarde.Text = "Enter Sovngarde"; + this.chkEnterSovngarde.UseVisualStyleBackColor = true; + // + // chkAlduin1 + // + this.chkAlduin1.AutoSize = true; + this.chkAlduin1.Location = new System.Drawing.Point(3, 187); + this.chkAlduin1.Name = "chkAlduin1"; + this.chkAlduin1.Size = new System.Drawing.Size(64, 17); + this.chkAlduin1.TabIndex = 18; + this.chkAlduin1.Text = "Alduin 1"; + this.chkAlduin1.UseVisualStyleBackColor = true; + // // SkyrimSettings // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Controls.Add(this.tlpMain); this.Name = "SkyrimSettings"; - this.Size = new System.Drawing.Size(476, 443); + this.Size = new System.Drawing.Size(450, 658); this.tlpMain.ResumeLayout(false); this.tlpMain.PerformLayout(); this.gbStartSplits.ResumeLayout(false); this.gbStartSplits.PerformLayout(); this.tlpStartSplits.ResumeLayout(false); this.tlpStartSplits.PerformLayout(); - this.gbEndSplits.ResumeLayout(false); - this.gbEndSplits.PerformLayout(); - this.tlpEndSplits.ResumeLayout(false); - this.tlpEndSplits.PerformLayout(); + this.gbGuildsSplits.ResumeLayout(false); + this.gbGuildsSplits.PerformLayout(); + this.tlpGuildsSplits.ResumeLayout(false); + this.tlpGuildsSplits.PerformLayout(); this.gbDisplayAlternateTiming.ResumeLayout(false); this.gbDisplayAlternateTiming.PerformLayout(); this.tlpDisplayAlternateTiming.ResumeLayout(false); this.tlpDisplayAlternateTiming.PerformLayout(); + this.gb_AnyPercentSplits.ResumeLayout(false); + this.gb_AnyPercentSplits.PerformLayout(); + this.tlp_AnyPercentSplits.ResumeLayout(false); + this.tlp_AnyPercentSplits.PerformLayout(); this.ResumeLayout(false); + this.PerformLayout(); } @@ -276,8 +516,8 @@ private void InitializeComponent() private System.Windows.Forms.TableLayoutPanel tlpMain; private System.Windows.Forms.GroupBox gbStartSplits; - private System.Windows.Forms.GroupBox gbEndSplits; - private System.Windows.Forms.TableLayoutPanel tlpEndSplits; + private System.Windows.Forms.GroupBox gbGuildsSplits; + private System.Windows.Forms.TableLayoutPanel tlpGuildsSplits; private System.Windows.Forms.CheckBox chkAlduinDefeated; private System.Windows.Forms.TableLayoutPanel tlpStartSplits; private System.Windows.Forms.CheckBox chkHelgen; @@ -289,5 +529,22 @@ private void InitializeComponent() private System.Windows.Forms.CheckBox chkCollege; private System.Windows.Forms.GroupBox gbDisplayAlternateTiming; private System.Windows.Forms.TableLayoutPanel tlpDisplayAlternateTiming; + private System.Windows.Forms.GroupBox gb_AnyPercentSplits; + private System.Windows.Forms.TableLayoutPanel tlp_AnyPercentSplits; + private System.Windows.Forms.CheckBox chkWhiterun; + private System.Windows.Forms.CheckBox chkThalmorEmbassy; + private System.Windows.Forms.CheckBox chkEsbern; + private System.Windows.Forms.CheckBox chkRiverwood; + private System.Windows.Forms.CheckBox chkTheWall; + private System.Windows.Forms.CheckBox chkSeptimus; + private System.Windows.Forms.CheckBox chkMzarkTower; + private System.Windows.Forms.CheckBox chkClearSky; + private System.Windows.Forms.CheckBox chkHighHrothgar; + private System.Windows.Forms.CheckBox chkSolitude; + private System.Windows.Forms.CheckBox chkWindhelm; + private System.Windows.Forms.CheckBox chkCouncil; + private System.Windows.Forms.CheckBox chkOdahviing; + private System.Windows.Forms.CheckBox chkEnterSovngarde; + private System.Windows.Forms.CheckBox chkAlduin1; } } diff --git a/SkyrimSettings.cs b/SkyrimSettings.cs index ea79068..0b2863d 100644 --- a/SkyrimSettings.cs +++ b/SkyrimSettings.cs @@ -11,6 +11,21 @@ public partial class SkyrimSettings : UserControl public bool AutoStart { get; set; } public bool AlduinDefeated { get; set; } public bool Helgen { get; set; } + public bool Whiterun { get; set; } + public bool ThalmorEmbassy { get; set; } + public bool Esbern { get; set; } + public bool Riverwood { get; set; } + public bool TheWall { get; set; } + public bool Septimus { get; set; } + public bool MzarkTower { get; set; } + public bool ClearSky { get; set; } + public bool Alduin1 { get; set; } + public bool HighHrothgar{ get; set; } + public bool Solitude { get; set; } + public bool Windhelm { get; set; } + public bool Council { get; set; } + public bool Odahviing { get; set; } + public bool EnterSovngarde{ get; set; } public bool DarkBrotherhood { get; set; } public bool Companions { get; set; } public bool ThievesGuild { get; set; } @@ -20,6 +35,21 @@ public partial class SkyrimSettings : UserControl private const bool DEFAULT_AUTOSTART = true; private const bool DEFAULT_ALDUINDEFEATED = true; private const bool DEFAULT_HELGEN = false; + private const bool DEFAULT_WHITERUN = false; + private const bool DEFAULT_THALMOREMBASSY = false; + private const bool DEFAULT_ESBERN = false; + private const bool DEFAULT_RIVERWOOD = false; + private const bool DEFAULT_THEWALL = false; + private const bool DEFAULT_SEPTIMUS = false; + private const bool DEFAULT_MZARKTOWER = false; + private const bool DEFAULT_CLEARSKY = false; + private const bool DEFAULT_ALDUIN1 = false; + private const bool DEFAULT_HIGHHROTHGAR = false; + private const bool DEFAULT_SOLITUDE = false; + private const bool DEFAULT_WINDHELM = false; + private const bool DEFAULT_COUNCIL = false; + private const bool DEFAULT_ODAHVIING = false; + private const bool DEFAULT_ENTERSOVNGARDE = false; private const bool DEFAULT_DARKBROTHERHOOD = false; private const bool DEFAULT_COMPANIONS = false; private const bool DEFAULT_THIEVESGUILD = false; @@ -33,6 +63,21 @@ public SkyrimSettings() this.chkAutoStart.DataBindings.Add("Checked", this, "AutoStart", false, DataSourceUpdateMode.OnPropertyChanged); this.chkAlduinDefeated.DataBindings.Add("Checked", this, "AlduinDefeated", false, DataSourceUpdateMode.OnPropertyChanged); this.chkHelgen.DataBindings.Add("Checked", this, "Helgen", false, DataSourceUpdateMode.OnPropertyChanged); + this.chkWhiterun.DataBindings.Add("Checked", this, "Whiterun", false, DataSourceUpdateMode.OnPropertyChanged); + this.chkThalmorEmbassy.DataBindings.Add("Checked", this, "ThalmorEmbassy", false, DataSourceUpdateMode.OnPropertyChanged); + this.chkEsbern.DataBindings.Add("Checked", this, "Esbern", false, DataSourceUpdateMode.OnPropertyChanged); + this.chkRiverwood.DataBindings.Add("Checked", this, "Riverwood", false, DataSourceUpdateMode.OnPropertyChanged); + this.chkTheWall.DataBindings.Add("Checked", this, "TheWall", false, DataSourceUpdateMode.OnPropertyChanged); + this.chkSeptimus.DataBindings.Add("Checked", this, "Septimus", false, DataSourceUpdateMode.OnPropertyChanged); + this.chkMzarkTower.DataBindings.Add("Checked", this, "MzarkTower", false, DataSourceUpdateMode.OnPropertyChanged); + this.chkClearSky.DataBindings.Add("Checked", this, "ClearSky", false, DataSourceUpdateMode.OnPropertyChanged); + this.chkAlduin1.DataBindings.Add("Checked", this, "Alduin1", false, DataSourceUpdateMode.OnPropertyChanged); + this.chkHighHrothgar.DataBindings.Add("Checked", this, "HighHrothgar", false, DataSourceUpdateMode.OnPropertyChanged); + this.chkSolitude.DataBindings.Add("Checked", this, "Solitude", false, DataSourceUpdateMode.OnPropertyChanged); + this.chkWindhelm.DataBindings.Add("Checked", this, "Windhelm", false, DataSourceUpdateMode.OnPropertyChanged); + this.chkCouncil.DataBindings.Add("Checked", this, "Council", false, DataSourceUpdateMode.OnPropertyChanged); + this.chkOdahviing.DataBindings.Add("Checked", this, "Odahviing", false, DataSourceUpdateMode.OnPropertyChanged); + this.chkEnterSovngarde.DataBindings.Add("Checked", this, "EnterSovngarde", false, DataSourceUpdateMode.OnPropertyChanged); this.chkDarkBrotherhood.DataBindings.Add("Checked", this, "DarkBrotherhood", false, DataSourceUpdateMode.OnPropertyChanged); this.chkCompanions.DataBindings.Add("Checked", this, "Companions", false, DataSourceUpdateMode.OnPropertyChanged); this.chkThievesGuild.DataBindings.Add("Checked", this, "ThievesGuild", false, DataSourceUpdateMode.OnPropertyChanged); @@ -43,6 +88,21 @@ public SkyrimSettings() this.AutoStart = DEFAULT_AUTOSTART; this.AlduinDefeated = DEFAULT_ALDUINDEFEATED; this.Helgen = DEFAULT_HELGEN; + this.Whiterun = DEFAULT_WHITERUN; + this.ThalmorEmbassy = DEFAULT_THALMOREMBASSY; + this.Esbern = DEFAULT_ESBERN; + this.Riverwood = DEFAULT_RIVERWOOD; + this.TheWall = DEFAULT_THEWALL; + this.Septimus = DEFAULT_SEPTIMUS; + this.MzarkTower = DEFAULT_MZARKTOWER; + this.ClearSky = DEFAULT_CLEARSKY; + this.Alduin1 = DEFAULT_ALDUIN1; + this.HighHrothgar = DEFAULT_HIGHHROTHGAR; + this.Solitude = DEFAULT_SOLITUDE; + this.Windhelm = DEFAULT_WINDHELM; + this.Council = DEFAULT_COUNCIL; + this.Odahviing = DEFAULT_ODAHVIING; + this.EnterSovngarde = DEFAULT_ENTERSOVNGARDE; this.DarkBrotherhood = DEFAULT_DARKBROTHERHOOD; this.Companions = DEFAULT_COMPANIONS; this.CollegeOfWinterhold = DEFAULT_COLLEGEOFWINTERHOLD; @@ -59,6 +119,21 @@ public XmlNode GetSettings(XmlDocument doc) settingsNode.AppendChild(ToElement(doc, "AutoStart", this.AutoStart)); settingsNode.AppendChild(ToElement(doc, "AlduinDefeated", this.AlduinDefeated)); settingsNode.AppendChild(ToElement(doc, "Helgen", this.Helgen)); + settingsNode.AppendChild(ToElement(doc, "Whiterun", this.Whiterun)); + settingsNode.AppendChild(ToElement(doc, "ThalmorEmbassy", this.ThalmorEmbassy)); + settingsNode.AppendChild(ToElement(doc, "Esbern", this.Esbern)); + settingsNode.AppendChild(ToElement(doc, "Riverwood", this.Riverwood)); + settingsNode.AppendChild(ToElement(doc, "TheWall", this.TheWall)); + settingsNode.AppendChild(ToElement(doc, "Septimus", this.Septimus)); + settingsNode.AppendChild(ToElement(doc, "MzarkTower", this.MzarkTower)); + settingsNode.AppendChild(ToElement(doc, "ClearSky", this.ClearSky)); + settingsNode.AppendChild(ToElement(doc, "Alduin1", this.Alduin1)); + settingsNode.AppendChild(ToElement(doc, "HighHrothgar", this.HighHrothgar)); + settingsNode.AppendChild(ToElement(doc, "Solitude", this.Solitude)); + settingsNode.AppendChild(ToElement(doc, "Windhelm", this.Windhelm)); + settingsNode.AppendChild(ToElement(doc, "Council", this.Council)); + settingsNode.AppendChild(ToElement(doc, "Odahviing", this.Odahviing)); + settingsNode.AppendChild(ToElement(doc, "EnterSovngarde", this.EnterSovngarde)); settingsNode.AppendChild(ToElement(doc, "DarkBrotherhood", this.DarkBrotherhood)); settingsNode.AppendChild(ToElement(doc, "Companions", this.Companions)); settingsNode.AppendChild(ToElement(doc, "ThievesGuild", this.ThievesGuild)); @@ -73,6 +148,21 @@ public void SetSettings(XmlNode settings) this.AutoStart = ParseBool(settings, "AutoStart", DEFAULT_AUTOSTART); this.AlduinDefeated = ParseBool(settings, "AlduinDefeated", DEFAULT_ALDUINDEFEATED); this.Helgen = ParseBool(settings, "Helgen", DEFAULT_HELGEN); + this.Whiterun = ParseBool(settings, "Whiterun", DEFAULT_WHITERUN); + this.ThalmorEmbassy = ParseBool(settings, "ThalmorEmbassy", DEFAULT_THALMOREMBASSY); + this.Esbern = ParseBool(settings, "Esbern", DEFAULT_ESBERN); + this.Riverwood = ParseBool(settings, "Riverwood", DEFAULT_RIVERWOOD); + this.TheWall = ParseBool(settings, "TheWall", DEFAULT_THEWALL); + this.Septimus = ParseBool(settings, "Septimus", DEFAULT_SEPTIMUS); + this.MzarkTower = ParseBool(settings, "MzarkTower", DEFAULT_RIVERWOOD); + this.ClearSky = ParseBool(settings, "ClearSky", DEFAULT_CLEARSKY); + this.Alduin1 = ParseBool(settings, "Alduin1", DEFAULT_ALDUIN1); + this.HighHrothgar = ParseBool(settings, "HighHrothgar", DEFAULT_HIGHHROTHGAR); + this.Solitude = ParseBool(settings, "Solitude", DEFAULT_SOLITUDE); + this.Windhelm = ParseBool(settings, "Windhelm", DEFAULT_WINDHELM); + this.Council = ParseBool(settings, "Council", DEFAULT_COUNCIL); + this.Odahviing = ParseBool(settings, "Odahviing", DEFAULT_ODAHVIING); + this.EnterSovngarde = ParseBool(settings, "EnterSovngarde", DEFAULT_ENTERSOVNGARDE); this.DarkBrotherhood = ParseBool(settings, "DarkBrotherhood", DEFAULT_DARKBROTHERHOOD); this.Companions = ParseBool(settings, "Companions", DEFAULT_COMPANIONS); this.ThievesGuild = ParseBool(settings, "ThievesGuild", DEFAULT_THIEVESGUILD); From 93fd6d2fb28fd46b8be3d3ce176882cd4bba02e2 Mon Sep 17 00:00:00 2001 From: Dalet Date: Sun, 19 Oct 2014 11:34:56 +0200 Subject: [PATCH 02/19] odahviing fix + started preparing presets --- GameMemory.cs | 39 ++++--- SkyrimSettings.Designer.cs | 215 +++++++++++++++++++++++++------------ SkyrimSettings.cs | 33 ++++++ 3 files changed, 202 insertions(+), 85 deletions(-) diff --git a/GameMemory.cs b/GameMemory.cs index 76235dd..8abdba6 100644 --- a/GameMemory.cs +++ b/GameMemory.cs @@ -209,7 +209,8 @@ void MemoryReadThread() int loadScreenStartLocationID = 0; int loadScreenStartWorld_X = 0; int loadScreenStartWorld_Y = 0; - bool isWaitingLocationUpdate = false; + bool isWaitingLocationOrCoordsUpdate = false; + bool isWaitingLocationIDUpdate = false; SplitArea lastQuestCompleted = SplitArea.None; uint lastQuestframeCounter = 0; @@ -349,7 +350,8 @@ void MemoryReadThread() // if it isn't a loadscreen from loading a save if (!isLoadingSaveFromMenu) { - isWaitingLocationUpdate = true; + isWaitingLocationOrCoordsUpdate = true; + isWaitingLocationIDUpdate = true; // if loadscreen starts while leaving helgen if (loadScreenStartLocationID == (int)Locations.HelgenKeep01 && loadScreenStartWorld_X == -2 && loadScreenStartWorld_Y == -5) @@ -453,17 +455,17 @@ void MemoryReadThread() } } - if ((locationID != prevLocationID || world_X != prevWorld_X || world_Y != prevWorld_Y) && isWaitingLocationUpdate) + if (locationID != prevLocationID && isWaitingLocationOrCoordsUpdate) { - isWaitingLocationUpdate = false; + isWaitingLocationOrCoordsUpdate = false; if (locationID == (int)Locations.SkyHavenTemple && mainQuestsWhenEnteringSkyHavenTemple == -1) { mainQuestsWhenEnteringSkyHavenTemple = mainquestsCompleted; } - // if loadscreen starts in Whiterun and doesn't end in dragonsreach - if (loadScreenStartLocationID == (int)Locations.WhiterunWorld && + // if loadscreen starts in Whiterun in front the entry of dragonsreach and doesn't end inside it + if (loadScreenStartLocationID == (int)Locations.WhiterunWorld && loadScreenStartWorld_X == 6 && loadScreenStartWorld_Y == 0 && locationID != (int)Locations.WhiterunDragonsreach) { _uiThread.Post(d => @@ -584,28 +586,35 @@ void MemoryReadThread() } }, null); } - // if loadscreen ends in Skuldafn - else if (locationID == (int)Locations.SkuldafnWorld) + // if loadscreen ends in Sovngarde + else if (locationID == (int)Locations.Sovngarde) { _uiThread.Post(d => { if (this.OnSplitCompleted != null) { - this.OnSplitCompleted(this, SplitArea.Odahviing, frameCounter); + this.OnSplitCompleted(this, SplitArea.EnterSovngarde, frameCounter); } }, null); + } - // if loadscreen ends in Sovngarde - else if (locationID == (int)Locations.Sovngarde) + } + + if (locationID != prevLocationID && isWaitingLocationIDUpdate) + { + isWaitingLocationIDUpdate = false; + + // if loadscreen ends in Skuldafn. + // Note: For some reason in this loadscreen the coordinates are updated at the beginning of the loadscreen location ID instead of at the end + if (locationID == (int)Locations.SkuldafnWorld) { _uiThread.Post(d => { if (this.OnSplitCompleted != null) { - this.OnSplitCompleted(this, SplitArea.EnterSovngarde, frameCounter); + this.OnSplitCompleted(this, SplitArea.Odahviing, frameCounter); } }, null); - } } @@ -666,7 +675,9 @@ void MemoryReadThread() }, null); } - Debug.WriteLineIf(locationID != prevLocationID || world_X != prevWorld_X || world_Y != prevWorld_Y, String.Format("[NoLoads] Location changed to {0} at X: {1} Y: {2} - {3}", locationID.ToString("X8"), world_X, world_Y, frameCounter)); + + Debug.WriteLineIf(locationID != prevLocationID, String.Format("[NoLoads] Location changed to {0} - {1}", locationID.ToString("X8"), frameCounter)); + Debug.WriteLineIf(world_X != prevWorld_X || world_Y != prevWorld_Y, String.Format("[NoLoads] Coords changed to X: {0} Y: {1} - {2}", world_X, world_Y, frameCounter)); Debug.WriteLineIf(isInEscapeMenu != prevIsInEscapeMenu, String.Format("[NoLoads] isInEscapeMenu changed to {0} - {1}", isInEscapeMenu, frameCounter)); prevIsLoading = isLoading; diff --git a/SkyrimSettings.Designer.cs b/SkyrimSettings.Designer.cs index aa06bcd..a598889 100644 --- a/SkyrimSettings.Designer.cs +++ b/SkyrimSettings.Designer.cs @@ -43,7 +43,7 @@ private void InitializeComponent() this.tlpDisplayAlternateTiming = new System.Windows.Forms.TableLayoutPanel(); this.chkDisplayWithoutLoads = new System.Windows.Forms.CheckBox(); this.gb_AnyPercentSplits = new System.Windows.Forms.GroupBox(); - this.tlp_AnyPercentSplits = new System.Windows.Forms.TableLayoutPanel(); + this.tlpAnyPercentSplits = new System.Windows.Forms.TableLayoutPanel(); this.chkAlduinDefeated = new System.Windows.Forms.CheckBox(); this.chkWhiterun = new System.Windows.Forms.CheckBox(); this.chkThalmorEmbassy = new System.Windows.Forms.CheckBox(); @@ -60,6 +60,10 @@ private void InitializeComponent() this.chkOdahviing = new System.Windows.Forms.CheckBox(); this.chkEnterSovngarde = new System.Windows.Forms.CheckBox(); this.chkAlduin1 = new System.Windows.Forms.CheckBox(); + this.rbMrwalrus = new System.Windows.Forms.RadioButton(); + this.rbDrtchops = new System.Windows.Forms.RadioButton(); + this.tlpAnyPercentPreset = new System.Windows.Forms.TableLayoutPanel(); + this.gbAnyPercentPreset = new System.Windows.Forms.GroupBox(); this.tlpMain.SuspendLayout(); this.gbStartSplits.SuspendLayout(); this.tlpStartSplits.SuspendLayout(); @@ -68,7 +72,9 @@ private void InitializeComponent() this.gbDisplayAlternateTiming.SuspendLayout(); this.tlpDisplayAlternateTiming.SuspendLayout(); this.gb_AnyPercentSplits.SuspendLayout(); - this.tlp_AnyPercentSplits.SuspendLayout(); + this.tlpAnyPercentSplits.SuspendLayout(); + this.tlpAnyPercentPreset.SuspendLayout(); + this.gbAnyPercentPreset.SuspendLayout(); this.SuspendLayout(); // // tlpMain @@ -89,7 +95,7 @@ private void InitializeComponent() this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpMain.Size = new System.Drawing.Size(450, 629); + this.tlpMain.Size = new System.Drawing.Size(450, 677); this.tlpMain.TabIndex = 0; // // gbStartSplits @@ -151,7 +157,7 @@ private void InitializeComponent() this.gbGuildsSplits.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; this.gbGuildsSplits.Controls.Add(this.tlpGuildsSplits); this.gbGuildsSplits.Dock = System.Windows.Forms.DockStyle.Top; - this.gbGuildsSplits.Location = new System.Drawing.Point(3, 467); + this.gbGuildsSplits.Location = new System.Drawing.Point(3, 515); this.gbGuildsSplits.Name = "gbGuildsSplits"; this.gbGuildsSplits.Size = new System.Drawing.Size(444, 111); this.gbGuildsSplits.TabIndex = 7; @@ -227,7 +233,7 @@ private void InitializeComponent() this.gbDisplayAlternateTiming.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; this.gbDisplayAlternateTiming.Controls.Add(this.tlpDisplayAlternateTiming); this.gbDisplayAlternateTiming.Dock = System.Windows.Forms.DockStyle.Top; - this.gbDisplayAlternateTiming.Location = new System.Drawing.Point(3, 584); + this.gbDisplayAlternateTiming.Location = new System.Drawing.Point(3, 632); this.gbDisplayAlternateTiming.Name = "gbDisplayAlternateTiming"; this.gbDisplayAlternateTiming.Size = new System.Drawing.Size(444, 42); this.gbDisplayAlternateTiming.TabIndex = 9; @@ -266,66 +272,70 @@ private void InitializeComponent() // this.gb_AnyPercentSplits.AutoSize = true; this.gb_AnyPercentSplits.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.gb_AnyPercentSplits.Controls.Add(this.tlp_AnyPercentSplits); + this.gb_AnyPercentSplits.Controls.Add(this.tlpAnyPercentSplits); this.gb_AnyPercentSplits.Dock = System.Windows.Forms.DockStyle.Top; this.gb_AnyPercentSplits.Location = new System.Drawing.Point(3, 74); this.gb_AnyPercentSplits.Name = "gb_AnyPercentSplits"; - this.gb_AnyPercentSplits.Size = new System.Drawing.Size(444, 387); + this.gb_AnyPercentSplits.Size = new System.Drawing.Size(444, 435); this.gb_AnyPercentSplits.TabIndex = 10; this.gb_AnyPercentSplits.TabStop = false; this.gb_AnyPercentSplits.Text = "Any% Auto-splits"; // - // tlp_AnyPercentSplits - // - this.tlp_AnyPercentSplits.AutoSize = true; - this.tlp_AnyPercentSplits.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.tlp_AnyPercentSplits.ColumnCount = 1; - this.tlp_AnyPercentSplits.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tlp_AnyPercentSplits.Controls.Add(this.chkAlduinDefeated, 0, 15); - this.tlp_AnyPercentSplits.Controls.Add(this.chkWhiterun, 0, 0); - this.tlp_AnyPercentSplits.Controls.Add(this.chkThalmorEmbassy, 0, 1); - this.tlp_AnyPercentSplits.Controls.Add(this.chkEsbern, 0, 2); - this.tlp_AnyPercentSplits.Controls.Add(this.chkRiverwood, 0, 3); - this.tlp_AnyPercentSplits.Controls.Add(this.chkTheWall, 0, 4); - this.tlp_AnyPercentSplits.Controls.Add(this.chkSeptimus, 0, 5); - this.tlp_AnyPercentSplits.Controls.Add(this.chkMzarkTower, 0, 6); - this.tlp_AnyPercentSplits.Controls.Add(this.chkClearSky, 0, 7); - this.tlp_AnyPercentSplits.Controls.Add(this.chkHighHrothgar, 0, 9); - this.tlp_AnyPercentSplits.Controls.Add(this.chkSolitude, 0, 10); - this.tlp_AnyPercentSplits.Controls.Add(this.chkWindhelm, 0, 11); - this.tlp_AnyPercentSplits.Controls.Add(this.chkCouncil, 0, 12); - this.tlp_AnyPercentSplits.Controls.Add(this.chkOdahviing, 0, 13); - this.tlp_AnyPercentSplits.Controls.Add(this.chkEnterSovngarde, 0, 14); - this.tlp_AnyPercentSplits.Controls.Add(this.chkAlduin1, 0, 8); - this.tlp_AnyPercentSplits.Dock = System.Windows.Forms.DockStyle.Fill; - this.tlp_AnyPercentSplits.Location = new System.Drawing.Point(3, 16); - this.tlp_AnyPercentSplits.Name = "tlp_AnyPercentSplits"; - this.tlp_AnyPercentSplits.RowCount = 16; - this.tlp_AnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlp_AnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlp_AnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlp_AnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlp_AnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlp_AnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlp_AnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlp_AnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlp_AnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlp_AnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlp_AnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlp_AnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlp_AnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlp_AnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlp_AnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlp_AnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlp_AnyPercentSplits.Size = new System.Drawing.Size(438, 368); - this.tlp_AnyPercentSplits.TabIndex = 0; + // tlpAnyPercentSplits + // + this.tlpAnyPercentSplits.AutoSize = true; + this.tlpAnyPercentSplits.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tlpAnyPercentSplits.ColumnCount = 1; + this.tlpAnyPercentSplits.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpAnyPercentSplits.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tlpAnyPercentSplits.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tlpAnyPercentSplits.Controls.Add(this.chkAlduinDefeated, 0, 16); + this.tlpAnyPercentSplits.Controls.Add(this.chkWhiterun, 0, 1); + this.tlpAnyPercentSplits.Controls.Add(this.chkThalmorEmbassy, 0, 2); + this.tlpAnyPercentSplits.Controls.Add(this.chkEsbern, 0, 3); + this.tlpAnyPercentSplits.Controls.Add(this.chkRiverwood, 0, 4); + this.tlpAnyPercentSplits.Controls.Add(this.chkTheWall, 0, 5); + this.tlpAnyPercentSplits.Controls.Add(this.chkSeptimus, 0, 6); + this.tlpAnyPercentSplits.Controls.Add(this.chkMzarkTower, 0, 7); + this.tlpAnyPercentSplits.Controls.Add(this.chkClearSky, 0, 8); + this.tlpAnyPercentSplits.Controls.Add(this.chkHighHrothgar, 0, 10); + this.tlpAnyPercentSplits.Controls.Add(this.chkSolitude, 0, 11); + this.tlpAnyPercentSplits.Controls.Add(this.chkWindhelm, 0, 12); + this.tlpAnyPercentSplits.Controls.Add(this.chkCouncil, 0, 13); + this.tlpAnyPercentSplits.Controls.Add(this.chkOdahviing, 0, 14); + this.tlpAnyPercentSplits.Controls.Add(this.chkEnterSovngarde, 0, 15); + this.tlpAnyPercentSplits.Controls.Add(this.chkAlduin1, 0, 9); + this.tlpAnyPercentSplits.Controls.Add(this.gbAnyPercentPreset, 0, 0); + this.tlpAnyPercentSplits.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpAnyPercentSplits.Location = new System.Drawing.Point(3, 16); + this.tlpAnyPercentSplits.Name = "tlpAnyPercentSplits"; + this.tlpAnyPercentSplits.RowCount = 17; + this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpAnyPercentSplits.Size = new System.Drawing.Size(438, 416); + this.tlpAnyPercentSplits.TabIndex = 0; // // chkAlduinDefeated // this.chkAlduinDefeated.AutoSize = true; this.chkAlduinDefeated.Checked = true; this.chkAlduinDefeated.CheckState = System.Windows.Forms.CheckState.Checked; - this.chkAlduinDefeated.Location = new System.Drawing.Point(3, 348); + this.chkAlduinDefeated.Location = new System.Drawing.Point(3, 396); this.chkAlduinDefeated.Name = "chkAlduinDefeated"; this.chkAlduinDefeated.Size = new System.Drawing.Size(97, 17); this.chkAlduinDefeated.TabIndex = 5; @@ -335,7 +345,7 @@ private void InitializeComponent() // chkWhiterun // this.chkWhiterun.AutoSize = true; - this.chkWhiterun.Location = new System.Drawing.Point(3, 3); + this.chkWhiterun.Location = new System.Drawing.Point(3, 51); this.chkWhiterun.Name = "chkWhiterun"; this.chkWhiterun.Size = new System.Drawing.Size(69, 17); this.chkWhiterun.TabIndex = 0; @@ -345,7 +355,7 @@ private void InitializeComponent() // chkThalmorEmbassy // this.chkThalmorEmbassy.AutoSize = true; - this.chkThalmorEmbassy.Location = new System.Drawing.Point(3, 26); + this.chkThalmorEmbassy.Location = new System.Drawing.Point(3, 74); this.chkThalmorEmbassy.Name = "chkThalmorEmbassy"; this.chkThalmorEmbassy.Size = new System.Drawing.Size(109, 17); this.chkThalmorEmbassy.TabIndex = 1; @@ -355,7 +365,7 @@ private void InitializeComponent() // chkEsbern // this.chkEsbern.AutoSize = true; - this.chkEsbern.Location = new System.Drawing.Point(3, 49); + this.chkEsbern.Location = new System.Drawing.Point(3, 97); this.chkEsbern.Name = "chkEsbern"; this.chkEsbern.Size = new System.Drawing.Size(101, 17); this.chkEsbern.TabIndex = 6; @@ -365,7 +375,7 @@ private void InitializeComponent() // chkRiverwood // this.chkRiverwood.AutoSize = true; - this.chkRiverwood.Location = new System.Drawing.Point(3, 72); + this.chkRiverwood.Location = new System.Drawing.Point(3, 120); this.chkRiverwood.Name = "chkRiverwood"; this.chkRiverwood.Size = new System.Drawing.Size(77, 17); this.chkRiverwood.TabIndex = 7; @@ -375,7 +385,7 @@ private void InitializeComponent() // chkTheWall // this.chkTheWall.AutoSize = true; - this.chkTheWall.Location = new System.Drawing.Point(3, 95); + this.chkTheWall.Location = new System.Drawing.Point(3, 143); this.chkTheWall.Name = "chkTheWall"; this.chkTheWall.Size = new System.Drawing.Size(69, 17); this.chkTheWall.TabIndex = 8; @@ -385,7 +395,7 @@ private void InitializeComponent() // chkSeptimus // this.chkSeptimus.AutoSize = true; - this.chkSeptimus.Location = new System.Drawing.Point(3, 118); + this.chkSeptimus.Location = new System.Drawing.Point(3, 166); this.chkSeptimus.Name = "chkSeptimus"; this.chkSeptimus.Size = new System.Drawing.Size(69, 17); this.chkSeptimus.TabIndex = 9; @@ -395,7 +405,7 @@ private void InitializeComponent() // chkMzarkTower // this.chkMzarkTower.AutoSize = true; - this.chkMzarkTower.Location = new System.Drawing.Point(3, 141); + this.chkMzarkTower.Location = new System.Drawing.Point(3, 189); this.chkMzarkTower.Name = "chkMzarkTower"; this.chkMzarkTower.Size = new System.Drawing.Size(88, 17); this.chkMzarkTower.TabIndex = 10; @@ -405,7 +415,7 @@ private void InitializeComponent() // chkClearSky // this.chkClearSky.AutoSize = true; - this.chkClearSky.Location = new System.Drawing.Point(3, 164); + this.chkClearSky.Location = new System.Drawing.Point(3, 212); this.chkClearSky.Name = "chkClearSky"; this.chkClearSky.Size = new System.Drawing.Size(71, 17); this.chkClearSky.TabIndex = 11; @@ -415,7 +425,7 @@ private void InitializeComponent() // chkHighHrothgar // this.chkHighHrothgar.AutoSize = true; - this.chkHighHrothgar.Location = new System.Drawing.Point(3, 210); + this.chkHighHrothgar.Location = new System.Drawing.Point(3, 258); this.chkHighHrothgar.Name = "chkHighHrothgar"; this.chkHighHrothgar.Size = new System.Drawing.Size(92, 17); this.chkHighHrothgar.TabIndex = 12; @@ -425,7 +435,7 @@ private void InitializeComponent() // chkSolitude // this.chkSolitude.AutoSize = true; - this.chkSolitude.Location = new System.Drawing.Point(3, 233); + this.chkSolitude.Location = new System.Drawing.Point(3, 281); this.chkSolitude.Name = "chkSolitude"; this.chkSolitude.Size = new System.Drawing.Size(64, 17); this.chkSolitude.TabIndex = 13; @@ -435,7 +445,7 @@ private void InitializeComponent() // chkWindhelm // this.chkWindhelm.AutoSize = true; - this.chkWindhelm.Location = new System.Drawing.Point(3, 256); + this.chkWindhelm.Location = new System.Drawing.Point(3, 304); this.chkWindhelm.Name = "chkWindhelm"; this.chkWindhelm.Size = new System.Drawing.Size(73, 17); this.chkWindhelm.TabIndex = 14; @@ -445,7 +455,7 @@ private void InitializeComponent() // chkCouncil // this.chkCouncil.AutoSize = true; - this.chkCouncil.Location = new System.Drawing.Point(3, 279); + this.chkCouncil.Location = new System.Drawing.Point(3, 327); this.chkCouncil.Name = "chkCouncil"; this.chkCouncil.Size = new System.Drawing.Size(61, 17); this.chkCouncil.TabIndex = 15; @@ -455,7 +465,7 @@ private void InitializeComponent() // chkOdahviing // this.chkOdahviing.AutoSize = true; - this.chkOdahviing.Location = new System.Drawing.Point(3, 302); + this.chkOdahviing.Location = new System.Drawing.Point(3, 350); this.chkOdahviing.Name = "chkOdahviing"; this.chkOdahviing.Size = new System.Drawing.Size(74, 17); this.chkOdahviing.TabIndex = 16; @@ -465,7 +475,7 @@ private void InitializeComponent() // chkEnterSovngarde // this.chkEnterSovngarde.AutoSize = true; - this.chkEnterSovngarde.Location = new System.Drawing.Point(3, 325); + this.chkEnterSovngarde.Location = new System.Drawing.Point(3, 373); this.chkEnterSovngarde.Name = "chkEnterSovngarde"; this.chkEnterSovngarde.Size = new System.Drawing.Size(106, 17); this.chkEnterSovngarde.TabIndex = 17; @@ -475,20 +485,75 @@ private void InitializeComponent() // chkAlduin1 // this.chkAlduin1.AutoSize = true; - this.chkAlduin1.Location = new System.Drawing.Point(3, 187); + this.chkAlduin1.Location = new System.Drawing.Point(3, 235); this.chkAlduin1.Name = "chkAlduin1"; this.chkAlduin1.Size = new System.Drawing.Size(64, 17); this.chkAlduin1.TabIndex = 18; this.chkAlduin1.Text = "Alduin 1"; this.chkAlduin1.UseVisualStyleBackColor = true; // + // rbMrwalrus + // + this.rbMrwalrus.AutoSize = true; + this.rbMrwalrus.Checked = true; + this.rbMrwalrus.Location = new System.Drawing.Point(3, 3); + this.rbMrwalrus.Name = "rbMrwalrus"; + this.rbMrwalrus.Size = new System.Drawing.Size(70, 17); + this.rbMrwalrus.TabIndex = 0; + this.rbMrwalrus.TabStop = true; + this.rbMrwalrus.Text = "MrWalrus"; + this.rbMrwalrus.UseVisualStyleBackColor = true; + this.rbMrwalrus.CheckedChanged += new System.EventHandler(this.rbMrwalrus_CheckedChanged); + // + // rbDrtchops + // + this.rbDrtchops.AutoSize = true; + this.rbDrtchops.Location = new System.Drawing.Point(79, 3); + this.rbDrtchops.Name = "rbDrtchops"; + this.rbDrtchops.Size = new System.Drawing.Size(73, 17); + this.rbDrtchops.TabIndex = 1; + this.rbDrtchops.TabStop = true; + this.rbDrtchops.Text = "DrTChops"; + this.rbDrtchops.UseVisualStyleBackColor = true; + this.rbDrtchops.CheckedChanged += new System.EventHandler(this.rbDrtchops_CheckedChanged); + // + // tlpAnyPercentPreset + // + this.tlpAnyPercentPreset.AutoSize = true; + this.tlpAnyPercentPreset.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tlpAnyPercentPreset.ColumnCount = 2; + this.tlpAnyPercentPreset.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpAnyPercentPreset.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpAnyPercentPreset.Controls.Add(this.rbMrwalrus, 0, 0); + this.tlpAnyPercentPreset.Controls.Add(this.rbDrtchops, 1, 0); + this.tlpAnyPercentPreset.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpAnyPercentPreset.Location = new System.Drawing.Point(3, 16); + this.tlpAnyPercentPreset.Name = "tlpAnyPercentPreset"; + this.tlpAnyPercentPreset.RowCount = 1; + this.tlpAnyPercentPreset.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpAnyPercentPreset.Size = new System.Drawing.Size(155, 23); + this.tlpAnyPercentPreset.TabIndex = 0; + // + // gbAnyPercentPreset + // + this.gbAnyPercentPreset.AutoSize = true; + this.gbAnyPercentPreset.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.gbAnyPercentPreset.Controls.Add(this.tlpAnyPercentPreset); + this.gbAnyPercentPreset.Dock = System.Windows.Forms.DockStyle.Left; + this.gbAnyPercentPreset.Location = new System.Drawing.Point(3, 3); + this.gbAnyPercentPreset.Name = "gbAnyPercentPreset"; + this.gbAnyPercentPreset.Size = new System.Drawing.Size(161, 42); + this.gbAnyPercentPreset.TabIndex = 19; + this.gbAnyPercentPreset.TabStop = false; + this.gbAnyPercentPreset.Text = "Preset"; + // // SkyrimSettings // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Controls.Add(this.tlpMain); this.Name = "SkyrimSettings"; - this.Size = new System.Drawing.Size(450, 658); + this.Size = new System.Drawing.Size(450, 680); this.tlpMain.ResumeLayout(false); this.tlpMain.PerformLayout(); this.gbStartSplits.ResumeLayout(false); @@ -505,8 +570,12 @@ private void InitializeComponent() this.tlpDisplayAlternateTiming.PerformLayout(); this.gb_AnyPercentSplits.ResumeLayout(false); this.gb_AnyPercentSplits.PerformLayout(); - this.tlp_AnyPercentSplits.ResumeLayout(false); - this.tlp_AnyPercentSplits.PerformLayout(); + this.tlpAnyPercentSplits.ResumeLayout(false); + this.tlpAnyPercentSplits.PerformLayout(); + this.tlpAnyPercentPreset.ResumeLayout(false); + this.tlpAnyPercentPreset.PerformLayout(); + this.gbAnyPercentPreset.ResumeLayout(false); + this.gbAnyPercentPreset.PerformLayout(); this.ResumeLayout(false); this.PerformLayout(); @@ -530,7 +599,7 @@ private void InitializeComponent() private System.Windows.Forms.GroupBox gbDisplayAlternateTiming; private System.Windows.Forms.TableLayoutPanel tlpDisplayAlternateTiming; private System.Windows.Forms.GroupBox gb_AnyPercentSplits; - private System.Windows.Forms.TableLayoutPanel tlp_AnyPercentSplits; + private System.Windows.Forms.TableLayoutPanel tlpAnyPercentSplits; private System.Windows.Forms.CheckBox chkWhiterun; private System.Windows.Forms.CheckBox chkThalmorEmbassy; private System.Windows.Forms.CheckBox chkEsbern; @@ -546,5 +615,9 @@ private void InitializeComponent() private System.Windows.Forms.CheckBox chkOdahviing; private System.Windows.Forms.CheckBox chkEnterSovngarde; private System.Windows.Forms.CheckBox chkAlduin1; + private System.Windows.Forms.RadioButton rbMrwalrus; + private System.Windows.Forms.RadioButton rbDrtchops; + private System.Windows.Forms.GroupBox gbAnyPercentPreset; + private System.Windows.Forms.TableLayoutPanel tlpAnyPercentPreset; } } diff --git a/SkyrimSettings.cs b/SkyrimSettings.cs index 0b2863d..6a57ab9 100644 --- a/SkyrimSettings.cs +++ b/SkyrimSettings.cs @@ -30,6 +30,10 @@ public partial class SkyrimSettings : UserControl public bool Companions { get; set; } public bool ThievesGuild { get; set; } public bool CollegeOfWinterhold { get; set; } + public string AnyPercentPreset { get; set; } + + public static string PRESET_MRWALRUS = "MrWalrus"; + public static string PRESET_DRTCHOPS = "DrTChops"; private const bool DEFAULT_DRAWWITHOUTLOADS = true; private const bool DEFAULT_AUTOSTART = true; @@ -54,6 +58,7 @@ public partial class SkyrimSettings : UserControl private const bool DEFAULT_COMPANIONS = false; private const bool DEFAULT_THIEVESGUILD = false; private const bool DEFAULT_COLLEGEOFWINTERHOLD = false; + private const string DEFAULT_ANYPERCENTPRESET = "MrWalrus"; public SkyrimSettings() { @@ -107,6 +112,10 @@ public SkyrimSettings() this.Companions = DEFAULT_COMPANIONS; this.CollegeOfWinterhold = DEFAULT_COLLEGEOFWINTERHOLD; this.ThievesGuild = DEFAULT_THIEVESGUILD; + this.AnyPercentPreset = DEFAULT_ANYPERCENTPRESET; + + this.rbMrwalrus.Checked = this.AnyPercentPreset == PRESET_MRWALRUS; + this.rbDrtchops.Checked = this.AnyPercentPreset == PRESET_DRTCHOPS; } public XmlNode GetSettings(XmlDocument doc) @@ -138,6 +147,7 @@ public XmlNode GetSettings(XmlDocument doc) settingsNode.AppendChild(ToElement(doc, "Companions", this.Companions)); settingsNode.AppendChild(ToElement(doc, "ThievesGuild", this.ThievesGuild)); settingsNode.AppendChild(ToElement(doc, "CollegeOfWinterhold", this.CollegeOfWinterhold)); + settingsNode.AppendChild(ToElement(doc, "AnyPercentPreset", this.AnyPercentPreset)); return settingsNode; } @@ -167,6 +177,7 @@ public void SetSettings(XmlNode settings) this.Companions = ParseBool(settings, "Companions", DEFAULT_COMPANIONS); this.ThievesGuild = ParseBool(settings, "ThievesGuild", DEFAULT_THIEVESGUILD); this.CollegeOfWinterhold = ParseBool(settings, "CollegeOfWinterhold", DEFAULT_COLLEGEOFWINTERHOLD); + this.AnyPercentPreset = settings.Attributes["AnyPercentPreset"] != null ? settings.Attributes["AnyPercentPreset"].Value : DEFAULT_ANYPERCENTPRESET; } static bool ParseBool(XmlNode settings, string setting, bool default_ = false) @@ -183,5 +194,27 @@ static XmlElement ToElement(XmlDocument document, string name, T value) str.InnerText = value.ToString(); return str; } + + private void rbDrtchops_CheckedChanged(object sender, EventArgs e) + { + UpdatePreset(); + } + + private void rbMrwalrus_CheckedChanged(object sender, EventArgs e) + { + UpdatePreset(); + } + + private void UpdatePreset() + { + if (rbMrwalrus.Checked) + { + this.AnyPercentPreset = PRESET_MRWALRUS; + } + else if (rbDrtchops.Checked) + { + this.AnyPercentPreset = PRESET_DRTCHOPS; + } + } } } From d7b08cd8bfa7d29fb9eb1fb985762269986edbe3 Mon Sep 17 00:00:00 2001 From: Dalet Date: Mon, 20 Oct 2014 05:14:34 +0200 Subject: [PATCH 03/19] Alduin1's walrus autosplit (still have Council to do), settings actually saving now. --- GameMemory.cs | 43 +- SkyrimComponent.cs | 6 +- SkyrimSettings.Designer.cs | 87 +- SkyrimSettings.cs | 43 +- config/TESV.CT | 3356 +++++++++++++++++++++++++++++++++++- 5 files changed, 3444 insertions(+), 91 deletions(-) diff --git a/GameMemory.cs b/GameMemory.cs index 8abdba6..4e3f0cd 100644 --- a/GameMemory.cs +++ b/GameMemory.cs @@ -49,6 +49,7 @@ public enum SplitArea : int private CancellationTokenSource _cancelSource; private SynchronizationContext _uiThread; private List _ignorePIDs; + private SkyrimSettings _settings; private DeepPointer _isLoadingPtr; private DeepPointer _isLoadingScreenPtr; @@ -65,6 +66,7 @@ public enum SplitArea : int private DeepPointer _isInEscapeMenuPtr; private DeepPointer _mainQuestsCompletedPtr; private DeepPointer _wordsOfPowerLearnedPtr; + private DeepPointer _Alduin1HealthPtr; private enum Locations { @@ -97,6 +99,7 @@ private enum ExpectedDllSizes public bool[] splitStates { get; set; } int mainQuestsWhenEnteringSkyHavenTemple = -1; + bool isAlduin1Defeated = false; public void resetSplitStates() { @@ -105,10 +108,12 @@ public void resetSplitStates() splitStates[i] = false; } mainQuestsWhenEnteringSkyHavenTemple = -1; + isAlduin1Defeated = false; } - public GameMemory() + public GameMemory(SkyrimSettings componentSettings) { + _settings = componentSettings; splitStates = new bool[(int)SplitArea.AlduinDefeated + 1]; // Loads @@ -131,6 +136,7 @@ public GameMemory() _isInEscapeMenuPtr = new DeepPointer(0x172E85E); // == 1 when in the pause menu or level up menu _mainQuestsCompletedPtr = new DeepPointer(0x00EE6C34, 0x350); // number of main quests completed (from ingame stats) _wordsOfPowerLearnedPtr = new DeepPointer(0x00EE6C34, 0x558); // "Words Of Power Learned" from ingame stats + _Alduin1HealthPtr = new DeepPointer(0x00F41764, 0x74, 0x30, 0x30, 0x1c); // Alduin 1's health (if it's at 0 it's 99% of the time because it can't be found) resetSplitStates(); @@ -191,7 +197,7 @@ void MemoryReadThread() bool prevIsLoading = false; bool prevIsLoadingScreen = false; bool prevIsInFadeOut = false; - bool prevIsAlduinDefeated = false; + bool prevIsAlduin2Defeated = false; int prevQuestlinesCompleted = 0; int prevCompanionsQuestsCompleted = 0; int prevCollegeQuestsCompleted = 0; @@ -240,8 +246,8 @@ void MemoryReadThread() int world_Y; _world_YPtr.Deref(game, out world_Y); - bool isAlduinDefeated; - _isAlduinDefeatedPtr.Deref(game, out isAlduinDefeated); + bool isAlduin2Defeated; + _isAlduinDefeatedPtr.Deref(game, out isAlduin2Defeated); int questlinesCompleted; _questlinesCompleted.Deref(game, out questlinesCompleted); @@ -267,6 +273,9 @@ void MemoryReadThread() int wordsOfPowerLearned; _wordsOfPowerLearnedPtr.Deref(game, out wordsOfPowerLearned); + float alduin1Health; + _Alduin1HealthPtr.Deref(game, out alduin1Health); + if (isLoading != prevIsLoading) { if (isLoading) @@ -379,7 +388,7 @@ void MemoryReadThread() // if loadscreen starts in Paarthurnax' mountain whereabouts else if (loadScreenStartLocationID == (int)Locations.Tamriel && ((loadScreenStartWorld_X == 14 && loadScreenStartWorld_Y == -12) || (loadScreenStartWorld_X == 14 && loadScreenStartWorld_Y == -13) || (loadScreenStartWorld_X == 13 && loadScreenStartWorld_Y == -12) || - (loadScreenStartWorld_X == 13 && loadScreenStartWorld_Y == -13))) + (loadScreenStartWorld_X == 13 && loadScreenStartWorld_Y == -13)) && (_settings.AnyPercentPreset == SkyrimSettings.PRESET_DRTCHOPS || _settings.AnyPercentPreset == SkyrimSettings.PRESET_DALLETH)) { _uiThread.Post(d => { @@ -465,7 +474,7 @@ void MemoryReadThread() } // if loadscreen starts in Whiterun in front the entry of dragonsreach and doesn't end inside it - if (loadScreenStartLocationID == (int)Locations.WhiterunWorld && loadScreenStartWorld_X == 6 && loadScreenStartWorld_Y == 0 && + if (isAlduin1Defeated && loadScreenStartLocationID == (int)Locations.WhiterunWorld && loadScreenStartWorld_X == 6 && loadScreenStartWorld_Y == 0 && locationID != (int)Locations.WhiterunDragonsreach) { _uiThread.Post(d => @@ -618,8 +627,26 @@ void MemoryReadThread() } } + // + if (alduin1Health < 0 && !isAlduin1Defeated) + { + Debug.WriteLine(String.Format("[NoLoads] Alduin 1 has been defeated. HP: {1} - {0}", frameCounter, alduin1Health)); + isAlduin1Defeated = true; + + if (_settings.AnyPercentPreset == SkyrimSettings.PRESET_MRWALRUS) + { + _uiThread.Post(d => + { + if (this.OnSplitCompleted != null) + { + this.OnSplitCompleted(this, SplitArea.Alduin1, frameCounter); + } + }, null); + } + } + // if alduin is defeated in sovngarde - if (isAlduinDefeated != prevIsAlduinDefeated && isAlduinDefeated && locationID == (int)Locations.Sovngarde) + if (isAlduin2Defeated != prevIsAlduin2Defeated && isAlduin2Defeated && locationID == (int)Locations.Sovngarde) { // AlduinDefeated split _uiThread.Post(d => @@ -683,7 +710,7 @@ void MemoryReadThread() prevIsLoading = isLoading; prevIsLoadingScreen = isLoadingScreen; prevIsInFadeOut = isInFadeOut; - prevIsAlduinDefeated = isAlduinDefeated; + prevIsAlduin2Defeated = isAlduin2Defeated; prevQuestlinesCompleted = questlinesCompleted; prevCompanionsQuestsCompleted = companionsQuestsCompleted; prevCollegeQuestsCompleted = collegeQuestsCompleted; diff --git a/SkyrimComponent.cs b/SkyrimComponent.cs index 4b4f877..b04635e 100644 --- a/SkyrimComponent.cs +++ b/SkyrimComponent.cs @@ -42,7 +42,7 @@ public SkyrimComponent(LiveSplitState state, bool isLayoutComponent) _cache = new GraphicsCache(); _timer = new TimerModel { CurrentState = state }; - _gameMemory = new GameMemory(); + _gameMemory = new GameMemory(this.Settings); _gameMemory.OnFirstLevelLoading += gameMemory_OnFirstLevelLoading; _gameMemory.OnPlayerGainedControl += gameMemory_OnPlayerGainedControl; _gameMemory.OnLoadStarted += gameMemory_OnLoadStarted; @@ -151,7 +151,7 @@ void gameMemory_OnLoadFinished(object sender, EventArgs e) void gameMemory_OnSplitCompleted(object sender, GameMemory.SplitArea split, uint frame) { Debug.WriteLineIf(split != GameMemory.SplitArea.None, String.Format("[NoLoads] Trying to split {0}, State: {1} - {2}", split, _gameMemory.splitStates[(int)split], frame)); - if (!_gameMemory.splitStates[(int)split] && + if (_state.CurrentPhase == TimerPhase.Running && !_gameMemory.splitStates[(int)split] && ((split == GameMemory.SplitArea.Helgen && this.Settings.Helgen) || (split == GameMemory.SplitArea.Whiterun && this.Settings.Whiterun) || (split == GameMemory.SplitArea.ThalmorEmbassy && this.Settings.ThalmorEmbassy) || @@ -174,7 +174,7 @@ void gameMemory_OnSplitCompleted(object sender, GameMemory.SplitArea split, uint (split == GameMemory.SplitArea.ThievesGuildQuestlineCompleted && this.Settings.ThievesGuild) || (split == GameMemory.SplitArea.AlduinDefeated && this.Settings.AlduinDefeated))) { - Trace.WriteLine(String.Format("[NoLoads] {0} Split - {1}", split, frame)); + Trace.WriteLine(String.Format("[NoLoads] {0} Split with {2} preset - {1}", split, frame, this.Settings.AnyPercentPreset)); _timer.Split(); _gameMemory.splitStates[(int)split] = true; } diff --git a/SkyrimSettings.Designer.cs b/SkyrimSettings.Designer.cs index a598889..9514da9 100644 --- a/SkyrimSettings.Designer.cs +++ b/SkyrimSettings.Designer.cs @@ -60,10 +60,11 @@ private void InitializeComponent() this.chkOdahviing = new System.Windows.Forms.CheckBox(); this.chkEnterSovngarde = new System.Windows.Forms.CheckBox(); this.chkAlduin1 = new System.Windows.Forms.CheckBox(); + this.gbAnyPercentPreset = new System.Windows.Forms.GroupBox(); + this.tlpAnyPercentPreset = new System.Windows.Forms.TableLayoutPanel(); this.rbMrwalrus = new System.Windows.Forms.RadioButton(); this.rbDrtchops = new System.Windows.Forms.RadioButton(); - this.tlpAnyPercentPreset = new System.Windows.Forms.TableLayoutPanel(); - this.gbAnyPercentPreset = new System.Windows.Forms.GroupBox(); + this.rbDalleth = new System.Windows.Forms.RadioButton(); this.tlpMain.SuspendLayout(); this.gbStartSplits.SuspendLayout(); this.tlpStartSplits.SuspendLayout(); @@ -73,8 +74,8 @@ private void InitializeComponent() this.tlpDisplayAlternateTiming.SuspendLayout(); this.gb_AnyPercentSplits.SuspendLayout(); this.tlpAnyPercentSplits.SuspendLayout(); - this.tlpAnyPercentPreset.SuspendLayout(); this.gbAnyPercentPreset.SuspendLayout(); + this.tlpAnyPercentPreset.SuspendLayout(); this.SuspendLayout(); // // tlpMain @@ -492,60 +493,71 @@ private void InitializeComponent() this.chkAlduin1.Text = "Alduin 1"; this.chkAlduin1.UseVisualStyleBackColor = true; // + // gbAnyPercentPreset + // + this.gbAnyPercentPreset.AutoSize = true; + this.gbAnyPercentPreset.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.gbAnyPercentPreset.Controls.Add(this.tlpAnyPercentPreset); + this.gbAnyPercentPreset.Dock = System.Windows.Forms.DockStyle.Left; + this.gbAnyPercentPreset.Location = new System.Drawing.Point(3, 3); + this.gbAnyPercentPreset.Name = "gbAnyPercentPreset"; + this.gbAnyPercentPreset.Size = new System.Drawing.Size(225, 42); + this.gbAnyPercentPreset.TabIndex = 19; + this.gbAnyPercentPreset.TabStop = false; + this.gbAnyPercentPreset.Text = "Preset"; + // + // tlpAnyPercentPreset + // + this.tlpAnyPercentPreset.AutoSize = true; + this.tlpAnyPercentPreset.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tlpAnyPercentPreset.ColumnCount = 3; + this.tlpAnyPercentPreset.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpAnyPercentPreset.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpAnyPercentPreset.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpAnyPercentPreset.Controls.Add(this.rbMrwalrus, 0, 0); + this.tlpAnyPercentPreset.Controls.Add(this.rbDrtchops, 1, 0); + this.tlpAnyPercentPreset.Controls.Add(this.rbDalleth, 2, 0); + this.tlpAnyPercentPreset.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpAnyPercentPreset.Location = new System.Drawing.Point(3, 16); + this.tlpAnyPercentPreset.Name = "tlpAnyPercentPreset"; + this.tlpAnyPercentPreset.RowCount = 1; + this.tlpAnyPercentPreset.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpAnyPercentPreset.Size = new System.Drawing.Size(219, 23); + this.tlpAnyPercentPreset.TabIndex = 0; + // // rbMrwalrus // this.rbMrwalrus.AutoSize = true; - this.rbMrwalrus.Checked = true; this.rbMrwalrus.Location = new System.Drawing.Point(3, 3); this.rbMrwalrus.Name = "rbMrwalrus"; this.rbMrwalrus.Size = new System.Drawing.Size(70, 17); this.rbMrwalrus.TabIndex = 0; - this.rbMrwalrus.TabStop = true; this.rbMrwalrus.Text = "MrWalrus"; this.rbMrwalrus.UseVisualStyleBackColor = true; - this.rbMrwalrus.CheckedChanged += new System.EventHandler(this.rbMrwalrus_CheckedChanged); + this.rbMrwalrus.CheckedChanged += new System.EventHandler(this.rbDrtchops_CheckedChanged); // // rbDrtchops // this.rbDrtchops.AutoSize = true; + this.rbDrtchops.Enabled = false; this.rbDrtchops.Location = new System.Drawing.Point(79, 3); this.rbDrtchops.Name = "rbDrtchops"; this.rbDrtchops.Size = new System.Drawing.Size(73, 17); this.rbDrtchops.TabIndex = 1; - this.rbDrtchops.TabStop = true; this.rbDrtchops.Text = "DrTChops"; this.rbDrtchops.UseVisualStyleBackColor = true; this.rbDrtchops.CheckedChanged += new System.EventHandler(this.rbDrtchops_CheckedChanged); // - // tlpAnyPercentPreset + // rbDalleth // - this.tlpAnyPercentPreset.AutoSize = true; - this.tlpAnyPercentPreset.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.tlpAnyPercentPreset.ColumnCount = 2; - this.tlpAnyPercentPreset.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tlpAnyPercentPreset.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tlpAnyPercentPreset.Controls.Add(this.rbMrwalrus, 0, 0); - this.tlpAnyPercentPreset.Controls.Add(this.rbDrtchops, 1, 0); - this.tlpAnyPercentPreset.Dock = System.Windows.Forms.DockStyle.Fill; - this.tlpAnyPercentPreset.Location = new System.Drawing.Point(3, 16); - this.tlpAnyPercentPreset.Name = "tlpAnyPercentPreset"; - this.tlpAnyPercentPreset.RowCount = 1; - this.tlpAnyPercentPreset.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpAnyPercentPreset.Size = new System.Drawing.Size(155, 23); - this.tlpAnyPercentPreset.TabIndex = 0; - // - // gbAnyPercentPreset - // - this.gbAnyPercentPreset.AutoSize = true; - this.gbAnyPercentPreset.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.gbAnyPercentPreset.Controls.Add(this.tlpAnyPercentPreset); - this.gbAnyPercentPreset.Dock = System.Windows.Forms.DockStyle.Left; - this.gbAnyPercentPreset.Location = new System.Drawing.Point(3, 3); - this.gbAnyPercentPreset.Name = "gbAnyPercentPreset"; - this.gbAnyPercentPreset.Size = new System.Drawing.Size(161, 42); - this.gbAnyPercentPreset.TabIndex = 19; - this.gbAnyPercentPreset.TabStop = false; - this.gbAnyPercentPreset.Text = "Preset"; + this.rbDalleth.AutoSize = true; + this.rbDalleth.Location = new System.Drawing.Point(158, 3); + this.rbDalleth.Name = "rbDalleth"; + this.rbDalleth.Size = new System.Drawing.Size(58, 17); + this.rbDalleth.TabIndex = 2; + this.rbDalleth.Text = "Dalleth"; + this.rbDalleth.UseVisualStyleBackColor = true; + this.rbDalleth.CheckedChanged += new System.EventHandler(this.rbDalleth_CheckedChanged); // // SkyrimSettings // @@ -572,10 +584,10 @@ private void InitializeComponent() this.gb_AnyPercentSplits.PerformLayout(); this.tlpAnyPercentSplits.ResumeLayout(false); this.tlpAnyPercentSplits.PerformLayout(); - this.tlpAnyPercentPreset.ResumeLayout(false); - this.tlpAnyPercentPreset.PerformLayout(); this.gbAnyPercentPreset.ResumeLayout(false); this.gbAnyPercentPreset.PerformLayout(); + this.tlpAnyPercentPreset.ResumeLayout(false); + this.tlpAnyPercentPreset.PerformLayout(); this.ResumeLayout(false); this.PerformLayout(); @@ -619,5 +631,6 @@ private void InitializeComponent() private System.Windows.Forms.RadioButton rbDrtchops; private System.Windows.Forms.GroupBox gbAnyPercentPreset; private System.Windows.Forms.TableLayoutPanel tlpAnyPercentPreset; + private System.Windows.Forms.RadioButton rbDalleth; } } diff --git a/SkyrimSettings.cs b/SkyrimSettings.cs index 6a57ab9..4c7c6cc 100644 --- a/SkyrimSettings.cs +++ b/SkyrimSettings.cs @@ -32,8 +32,9 @@ public partial class SkyrimSettings : UserControl public bool CollegeOfWinterhold { get; set; } public string AnyPercentPreset { get; set; } - public static string PRESET_MRWALRUS = "MrWalrus"; - public static string PRESET_DRTCHOPS = "DrTChops"; + public const string PRESET_MRWALRUS = "MrWalrus"; + public const string PRESET_DRTCHOPS = "DrTChops"; + public const string PRESET_DALLETH = "Dalleth"; private const bool DEFAULT_DRAWWITHOUTLOADS = true; private const bool DEFAULT_AUTOSTART = true; @@ -113,9 +114,6 @@ public SkyrimSettings() this.CollegeOfWinterhold = DEFAULT_COLLEGEOFWINTERHOLD; this.ThievesGuild = DEFAULT_THIEVESGUILD; this.AnyPercentPreset = DEFAULT_ANYPERCENTPRESET; - - this.rbMrwalrus.Checked = this.AnyPercentPreset == PRESET_MRWALRUS; - this.rbDrtchops.Checked = this.AnyPercentPreset == PRESET_DRTCHOPS; } public XmlNode GetSettings(XmlDocument doc) @@ -154,6 +152,8 @@ public XmlNode GetSettings(XmlDocument doc) public void SetSettings(XmlNode settings) { + var element = (XmlElement)settings; + this.DrawWithoutLoads = ParseBool(settings, "DrawWithoutLoads", DEFAULT_DRAWWITHOUTLOADS); this.AutoStart = ParseBool(settings, "AutoStart", DEFAULT_AUTOSTART); this.AlduinDefeated = ParseBool(settings, "AlduinDefeated", DEFAULT_ALDUINDEFEATED); @@ -177,7 +177,11 @@ public void SetSettings(XmlNode settings) this.Companions = ParseBool(settings, "Companions", DEFAULT_COMPANIONS); this.ThievesGuild = ParseBool(settings, "ThievesGuild", DEFAULT_THIEVESGUILD); this.CollegeOfWinterhold = ParseBool(settings, "CollegeOfWinterhold", DEFAULT_COLLEGEOFWINTERHOLD); - this.AnyPercentPreset = settings.Attributes["AnyPercentPreset"] != null ? settings.Attributes["AnyPercentPreset"].Value : DEFAULT_ANYPERCENTPRESET; + this.AnyPercentPreset = element["AnyPercentPreset"].InnerText.Equals(PRESET_MRWALRUS) || element["AnyPercentPreset"].InnerText.Equals(PRESET_DRTCHOPS) || element["AnyPercentPreset"].InnerText.Equals(PRESET_DALLETH) + ? element["AnyPercentPreset"].InnerText : DEFAULT_ANYPERCENTPRESET; + this.rbMrwalrus.Checked = this.AnyPercentPreset == PRESET_MRWALRUS; + this.rbDrtchops.Checked = this.AnyPercentPreset == PRESET_DRTCHOPS; + this.rbDalleth.Checked = this.AnyPercentPreset == PRESET_DALLETH; } static bool ParseBool(XmlNode settings, string setting, bool default_ = false) @@ -195,6 +199,22 @@ static XmlElement ToElement(XmlDocument document, string name, T value) return str; } + private void UpdatePreset() + { + if (rbMrwalrus.Checked) + { + this.AnyPercentPreset = PRESET_MRWALRUS; + } + else if (rbDrtchops.Checked) + { + this.AnyPercentPreset = PRESET_DRTCHOPS; + } + else if (rbDalleth.Checked) + { + this.AnyPercentPreset = PRESET_DALLETH; + } + } + private void rbDrtchops_CheckedChanged(object sender, EventArgs e) { UpdatePreset(); @@ -205,16 +225,9 @@ private void rbMrwalrus_CheckedChanged(object sender, EventArgs e) UpdatePreset(); } - private void UpdatePreset() + private void rbDalleth_CheckedChanged(object sender, EventArgs e) { - if (rbMrwalrus.Checked) - { - this.AnyPercentPreset = PRESET_MRWALRUS; - } - else if (rbDrtchops.Checked) - { - this.AnyPercentPreset = PRESET_DRTCHOPS; - } + UpdatePreset(); } } } diff --git a/config/TESV.CT b/config/TESV.CT index d84b5c9..9f55429 100644 --- a/config/TESV.CT +++ b/config/TESV.CT @@ -4,7 +4,7 @@ 0 "isPaused" - + 80000008 Byte
"TESV.exe"+172E85F
@@ -12,7 +12,7 @@ 1 "isLoading" - + 80000008 Byte
"TESV.exe"+17337CC
@@ -20,7 +20,7 @@ 3 "isLoadscreen" - + 80000008 Byte
"TESV.exe"+EE3561
@@ -28,25 +28,23 @@ 5 "IsInFadeOut" - + 80000008 Byte
TESV.exe+172EE2E
- - - 4 - "AreHandsTied?" - - 80000008 - Byte -
TESV.exe+172EE2C
-
-
+
+ + 4 + "AreHandsTied?" + + 80000008 + Byte +
TESV.exe+172EE2C
12 "IsAlduinDead?" - + 80000008 Byte
TESV.exe+1711608
@@ -54,7 +52,7 @@ 9 "X world coord" - + 80000008 4 Bytes
"TESV.exe"+0172E864
@@ -65,7 +63,7 @@ 11 "Y world coord" - + 80000008 4 Bytes
"TESV.exe"+0172E864
@@ -76,7 +74,7 @@ 18 "isInTamriel" - + 80000008 Byte
TESV.exe+173815C
@@ -84,7 +82,7 @@ 20 "questLinesCompleted" - + 80000008 4 Bytes
"TESV.exe"+00EE6C34
@@ -92,10 +90,21 @@ 3F0
+ + 34 + "thievesGuildQuestsCompleted" + + 80000008 + 4 Bytes +
"TESV.exe"+00EE6C34
+ + 3A0 + +
26 "Location ID" - + 1 80000008 4 Bytes @@ -110,7 +119,7 @@ 27 "isInEscapeMenu" - + 80000008 Byte
TESV.exe+172E85E
@@ -118,7 +127,7 @@ 28 "companionsQuestsCompleted" - + 80000008 4 Bytes
"TESV.exe"+00EE6C34
@@ -129,7 +138,7 @@ 29 "collegeQuestsCompleted" - + 80000008 4 Bytes
"TESV.exe"+00EE6C34
@@ -140,7 +149,7 @@ 31 "darkBrotherhoodQuestsCompleted" - + 80000008 4 Bytes
"TESV.exe"+00EE6C34
@@ -149,16 +158,3307 @@
- 34 - "thievesGuildQuestsCompleted" - + 36 + "IslastDialogue???" + + 80000008 + Byte +
TESV.exe+1732BF2
+
+ + 38 + "mainQuestsCompleted" + 80000008 4 Bytes
"TESV.exe"+00EE6C34
- 3A0 + 350 + +
+ + 41 + "wordsOfPowerLearned" + + 80000008 + 4 Bytes +
"TESV.exe"+00EE6C34
+ + 558 + +
+ + 43 + "Alduin 1 health" + + 80000008 + Float +
"TESV.exe"+00F41764
+ + 1C + 30 + 30 + 74 + +
+ + 45 + "Alduin 2 health" + + 80000008 + Float +
"TESV.exe"+00F5F0F4
+ + 1C + 30 + 30 + 74
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 5782cf23632d088336773fea48f6d40635306bf4 Mon Sep 17 00:00:00 2001 From: Dalet Date: Mon, 20 Oct 2014 12:27:32 +0200 Subject: [PATCH 04/19] Fixed the dumb stuff that broke splits (doing that stuff while super tired was a bad idea) --- GameMemory.cs | 120 ++++++++++++++++++++------------------------- SkyrimComponent.cs | 2 +- 2 files changed, 53 insertions(+), 69 deletions(-) diff --git a/GameMemory.cs b/GameMemory.cs index 4e3f0cd..2283900 100644 --- a/GameMemory.cs +++ b/GameMemory.cs @@ -330,7 +330,7 @@ void MemoryReadThread() { if (isLoadingScreen) { - Trace.WriteLine(String.Format("[NoLoads] LoadScreen Start - {0}", frameCounter)); + Trace.WriteLine(String.Format("[NoLoads] LoadScreen Start at {0} X: {1} Y: {2} - {3}", locationID.ToString("X8"), world_X, world_Y, frameCounter)); loadingScreenStarted = true; loadScreenStartLocationID = locationID; @@ -347,15 +347,6 @@ void MemoryReadThread() isLoadingSaveFromMenu = true; } - // nothing currently - // _uiThread.Post(d => - // { - // if (this.OnLoadScreenStarted != null) - // { - // this.OnLoadScreenStarted(this, EventArgs.Empty); - // } - // }, null); - // if it isn't a loadscreen from loading a save if (!isLoadingSaveFromMenu) { @@ -386,7 +377,7 @@ void MemoryReadThread() }, null); } // if loadscreen starts in Paarthurnax' mountain whereabouts - else if (loadScreenStartLocationID == (int)Locations.Tamriel && ((loadScreenStartWorld_X == 14 && loadScreenStartWorld_Y == -12) || + else if (isAlduin1Defeated && loadScreenStartLocationID == (int)Locations.Tamriel && ((loadScreenStartWorld_X == 14 && loadScreenStartWorld_Y == -12) || (loadScreenStartWorld_X == 14 && loadScreenStartWorld_Y == -13) || (loadScreenStartWorld_X == 13 && loadScreenStartWorld_Y == -12) || (loadScreenStartWorld_X == 13 && loadScreenStartWorld_Y == -13)) && (_settings.AnyPercentPreset == SkyrimSettings.PRESET_DRTCHOPS || _settings.AnyPercentPreset == SkyrimSettings.PRESET_DALLETH)) { @@ -399,6 +390,11 @@ void MemoryReadThread() }, null); } } + else + { + isWaitingLocationOrCoordsUpdate = false; + isWaitingLocationIDUpdate = false; + } } else { @@ -407,16 +403,6 @@ void MemoryReadThread() if (loadingScreenStarted) { loadingScreenStarted = false; - - // nothing currently - // _uiThread.Post(d => - // { - // if (this.OnLoadScreenFinished != null) - // { - // this.OnLoadScreenFinished(this, EventArgs.Empty); - // } - // }, null); - isLoadingSaveFromMenu = false; } } @@ -464,29 +450,12 @@ void MemoryReadThread() } } - if (locationID != prevLocationID && isWaitingLocationOrCoordsUpdate) + if ((locationID != prevLocationID || world_X != prevWorld_X || world_Y != prevWorld_Y) && isWaitingLocationOrCoordsUpdate) { isWaitingLocationOrCoordsUpdate = false; - if (locationID == (int)Locations.SkyHavenTemple && mainQuestsWhenEnteringSkyHavenTemple == -1) - { - mainQuestsWhenEnteringSkyHavenTemple = mainquestsCompleted; - } - - // if loadscreen starts in Whiterun in front the entry of dragonsreach and doesn't end inside it - if (isAlduin1Defeated && loadScreenStartLocationID == (int)Locations.WhiterunWorld && loadScreenStartWorld_X == 6 && loadScreenStartWorld_Y == 0 && - locationID != (int)Locations.WhiterunDragonsreach) - { - _uiThread.Post(d => - { - if (this.OnSplitCompleted != null) - { - this.OnSplitCompleted(this, SplitArea.Whiterun, frameCounter); - } - }, null); - } // if loadscreen starts while in front of the door of Thalmor Embassy and doesn't end inside the Embassy - else if (loadScreenStartLocationID == (int)Locations.Tamriel && loadScreenStartWorld_X == -20 && loadScreenStartWorld_Y == 28 + if (loadScreenStartLocationID == (int)Locations.Tamriel && loadScreenStartWorld_X == -20 && loadScreenStartWorld_Y == 28 && locationID != (int)Locations.ThalmorEmbassy02) { _uiThread.Post(d => @@ -497,18 +466,6 @@ void MemoryReadThread() } }, null); } - // if loadscreen starts while in front of the ratway door and doesn't end inside it - else if (loadScreenStartLocationID == (int)Locations.RiftenWorld && loadScreenStartWorld_X == 42 && loadScreenStartWorld_Y == -24 - && locationID != (int)Locations.RiftenRatway01) - { - _uiThread.Post(d => - { - if (this.OnSplitCompleted != null) - { - this.OnSplitCompleted(this, SplitArea.Esbern, frameCounter); - } - }, null); - } // if loadscreen starts while in front of the Sleeping Giant Inn and doesn't end inside it else if (loadScreenStartLocationID == (int)Locations.Tamriel && loadScreenStartWorld_X == 5 && loadScreenStartWorld_Y == -11 && locationID != (int)Locations.RiverwoodSleepingGiantInn) @@ -571,8 +528,43 @@ void MemoryReadThread() }, null); } } + } + + if (locationID != prevLocationID && isWaitingLocationIDUpdate) + { + isWaitingLocationIDUpdate = false; + + if (locationID == (int)Locations.SkyHavenTemple && mainQuestsWhenEnteringSkyHavenTemple == -1) + { + mainQuestsWhenEnteringSkyHavenTemple = mainquestsCompleted; + } + + // if loadscreen starts in Whiterun in front the entry of dragonsreach and doesn't end inside it + if (loadScreenStartLocationID == (int)Locations.WhiterunWorld && loadScreenStartWorld_X == 6 && loadScreenStartWorld_Y == 0 && + locationID != (int)Locations.WhiterunDragonsreach) + { + _uiThread.Post(d => + { + if (this.OnSplitCompleted != null) + { + this.OnSplitCompleted(this, SplitArea.Whiterun, frameCounter); + } + }, null); + } + // if loadscreen starts while in front of the ratway door and doesn't end inside it + else if (loadScreenStartLocationID == (int)Locations.RiftenWorld && loadScreenStartWorld_X == 42 && loadScreenStartWorld_Y == -24 + && locationID != (int)Locations.RiftenRatway01) + { + _uiThread.Post(d => + { + if (this.OnSplitCompleted != null) + { + this.OnSplitCompleted(this, SplitArea.Esbern, frameCounter); + } + }, null); + } // if loadscreen starts in Solitude in front of the door of Castle Dour and doesn't end inside it - else if (loadScreenStartLocationID == (int)Locations.SolitudeWorld && loadScreenStartWorld_X == -16 && loadScreenStartWorld_Y == 26 + if (loadScreenStartLocationID == (int)Locations.SolitudeWorld && loadScreenStartWorld_X == -16 && loadScreenStartWorld_Y == 26 && locationID != (int)Locations.SolitudeCastleDour) { _uiThread.Post(d => @@ -595,39 +587,31 @@ void MemoryReadThread() } }, null); } - // if loadscreen ends in Sovngarde - else if (locationID == (int)Locations.Sovngarde) + // if loadscreen ends in Skuldafn. + else if (locationID == (int)Locations.SkuldafnWorld) { _uiThread.Post(d => { if (this.OnSplitCompleted != null) { - this.OnSplitCompleted(this, SplitArea.EnterSovngarde, frameCounter); + this.OnSplitCompleted(this, SplitArea.Odahviing, frameCounter); } }, null); - } - } - - if (locationID != prevLocationID && isWaitingLocationIDUpdate) - { - isWaitingLocationIDUpdate = false; - - // if loadscreen ends in Skuldafn. - // Note: For some reason in this loadscreen the coordinates are updated at the beginning of the loadscreen location ID instead of at the end - if (locationID == (int)Locations.SkuldafnWorld) + // if loadscreen ends in Sovngarde + else if (locationID == (int)Locations.Sovngarde) { _uiThread.Post(d => { if (this.OnSplitCompleted != null) { - this.OnSplitCompleted(this, SplitArea.Odahviing, frameCounter); + this.OnSplitCompleted(this, SplitArea.EnterSovngarde, frameCounter); } }, null); + } } - // if (alduin1Health < 0 && !isAlduin1Defeated) { Debug.WriteLine(String.Format("[NoLoads] Alduin 1 has been defeated. HP: {1} - {0}", frameCounter, alduin1Health)); diff --git a/SkyrimComponent.cs b/SkyrimComponent.cs index b04635e..025735a 100644 --- a/SkyrimComponent.cs +++ b/SkyrimComponent.cs @@ -150,7 +150,7 @@ void gameMemory_OnLoadFinished(object sender, EventArgs e) void gameMemory_OnSplitCompleted(object sender, GameMemory.SplitArea split, uint frame) { - Debug.WriteLineIf(split != GameMemory.SplitArea.None, String.Format("[NoLoads] Trying to split {0}, State: {1} - {2}", split, _gameMemory.splitStates[(int)split], frame)); + Debug.WriteLineIf(split != GameMemory.SplitArea.None, String.Format("[NoLoads] Trying to split {0} with {1} preset, State: {2} - {3}", split, this.Settings.AnyPercentPreset, _gameMemory.splitStates[(int)split], frame)); if (_state.CurrentPhase == TimerPhase.Running && !_gameMemory.splitStates[(int)split] && ((split == GameMemory.SplitArea.Helgen && this.Settings.Helgen) || (split == GameMemory.SplitArea.Whiterun && this.Settings.Whiterun) || From 463e6962ff5b4dcbf086b884d37639aec3ced3b1 Mon Sep 17 00:00:00 2001 From: Dalet Date: Tue, 21 Oct 2014 00:31:05 +0200 Subject: [PATCH 05/19] Walrus' council split + settings UI (any% part) changed + renamed "preset" to "template" --- GameMemory.cs | 21 +- SkyrimComponent.cs | 4 +- SkyrimSettings.Designer.cs | 399 +++++++++++++++++++++---------------- SkyrimSettings.cs | 40 ++-- 4 files changed, 273 insertions(+), 191 deletions(-) diff --git a/GameMemory.cs b/GameMemory.cs index 2283900..0a263df 100644 --- a/GameMemory.cs +++ b/GameMemory.cs @@ -207,6 +207,7 @@ void MemoryReadThread() int prevLocationID = 0; int prevWorld_X = 0; int prevWorld_Y = 0; + int prevMainQuestsCompleted = 0; bool loadingStarted = false; bool loadingScreenStarted = false; @@ -379,7 +380,7 @@ void MemoryReadThread() // if loadscreen starts in Paarthurnax' mountain whereabouts else if (isAlduin1Defeated && loadScreenStartLocationID == (int)Locations.Tamriel && ((loadScreenStartWorld_X == 14 && loadScreenStartWorld_Y == -12) || (loadScreenStartWorld_X == 14 && loadScreenStartWorld_Y == -13) || (loadScreenStartWorld_X == 13 && loadScreenStartWorld_Y == -12) || - (loadScreenStartWorld_X == 13 && loadScreenStartWorld_Y == -13)) && (_settings.AnyPercentPreset == SkyrimSettings.PRESET_DRTCHOPS || _settings.AnyPercentPreset == SkyrimSettings.PRESET_DALLETH)) + (loadScreenStartWorld_X == 13 && loadScreenStartWorld_Y == -13)) && (_settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_DRTCHOPS || _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_DALLETH)) { _uiThread.Post(d => { @@ -517,7 +518,7 @@ void MemoryReadThread() } }, null); } - else + else if (_settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_DRTCHOPS || _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_DALLETH) { _uiThread.Post(d => { @@ -617,7 +618,7 @@ void MemoryReadThread() Debug.WriteLine(String.Format("[NoLoads] Alduin 1 has been defeated. HP: {1} - {0}", frameCounter, alduin1Health)); isAlduin1Defeated = true; - if (_settings.AnyPercentPreset == SkyrimSettings.PRESET_MRWALRUS) + if (_settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_MRWALRUS) { _uiThread.Post(d => { @@ -629,6 +630,19 @@ void MemoryReadThread() } } + // the only mainquest you can complete here is the council so when a quest completes, walrus' council split + if (mainquestsCompleted == prevMainQuestsCompleted + 1 && locationID == (int)Locations.HighHrothgar && + _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_MRWALRUS) + { + _uiThread.Post(d => + { + if (this.OnSplitCompleted != null) + { + this.OnSplitCompleted(this, SplitArea.Council, frameCounter); + } + }, null); + } + // if alduin is defeated in sovngarde if (isAlduin2Defeated != prevIsAlduin2Defeated && isAlduin2Defeated && locationID == (int)Locations.Sovngarde) { @@ -704,6 +718,7 @@ void MemoryReadThread() prevLocationID = locationID; prevWorld_X = world_X; prevWorld_Y = world_Y; + prevMainQuestsCompleted = mainquestsCompleted; frameCounter++; Thread.Sleep(15); diff --git a/SkyrimComponent.cs b/SkyrimComponent.cs index 025735a..d3b7e84 100644 --- a/SkyrimComponent.cs +++ b/SkyrimComponent.cs @@ -150,7 +150,7 @@ void gameMemory_OnLoadFinished(object sender, EventArgs e) void gameMemory_OnSplitCompleted(object sender, GameMemory.SplitArea split, uint frame) { - Debug.WriteLineIf(split != GameMemory.SplitArea.None, String.Format("[NoLoads] Trying to split {0} with {1} preset, State: {2} - {3}", split, this.Settings.AnyPercentPreset, _gameMemory.splitStates[(int)split], frame)); + Debug.WriteLineIf(split != GameMemory.SplitArea.None, String.Format("[NoLoads] Trying to split {0} with {1} template, State: {2} - {3}", split, this.Settings.AnyPercentTemplate, _gameMemory.splitStates[(int)split], frame)); if (_state.CurrentPhase == TimerPhase.Running && !_gameMemory.splitStates[(int)split] && ((split == GameMemory.SplitArea.Helgen && this.Settings.Helgen) || (split == GameMemory.SplitArea.Whiterun && this.Settings.Whiterun) || @@ -174,7 +174,7 @@ void gameMemory_OnSplitCompleted(object sender, GameMemory.SplitArea split, uint (split == GameMemory.SplitArea.ThievesGuildQuestlineCompleted && this.Settings.ThievesGuild) || (split == GameMemory.SplitArea.AlduinDefeated && this.Settings.AlduinDefeated))) { - Trace.WriteLine(String.Format("[NoLoads] {0} Split with {2} preset - {1}", split, frame, this.Settings.AnyPercentPreset)); + Trace.WriteLine(String.Format("[NoLoads] {0} Split with {2} template - {1}", split, frame, this.Settings.AnyPercentTemplate)); _timer.Split(); _gameMemory.splitStates[(int)split] = true; } diff --git a/SkyrimSettings.Designer.cs b/SkyrimSettings.Designer.cs index 9514da9..d19d622 100644 --- a/SkyrimSettings.Designer.cs +++ b/SkyrimSettings.Designer.cs @@ -44,7 +44,12 @@ private void InitializeComponent() this.chkDisplayWithoutLoads = new System.Windows.Forms.CheckBox(); this.gb_AnyPercentSplits = new System.Windows.Forms.GroupBox(); this.tlpAnyPercentSplits = new System.Windows.Forms.TableLayoutPanel(); - this.chkAlduinDefeated = new System.Windows.Forms.CheckBox(); + this.gbAnyPercentTemplate = new System.Windows.Forms.GroupBox(); + this.tlpAnyPercentTemplate = new System.Windows.Forms.TableLayoutPanel(); + this.rbMrwalrus = new System.Windows.Forms.RadioButton(); + this.rbDrtchops = new System.Windows.Forms.RadioButton(); + this.rbDalleth = new System.Windows.Forms.RadioButton(); + this.flp_AnyPercentSplits = new System.Windows.Forms.FlowLayoutPanel(); this.chkWhiterun = new System.Windows.Forms.CheckBox(); this.chkThalmorEmbassy = new System.Windows.Forms.CheckBox(); this.chkEsbern = new System.Windows.Forms.CheckBox(); @@ -53,18 +58,15 @@ private void InitializeComponent() this.chkSeptimus = new System.Windows.Forms.CheckBox(); this.chkMzarkTower = new System.Windows.Forms.CheckBox(); this.chkClearSky = new System.Windows.Forms.CheckBox(); + this.chkReadScroll = new System.Windows.Forms.CheckBox(); + this.chkAlduin1 = new System.Windows.Forms.CheckBox(); this.chkHighHrothgar = new System.Windows.Forms.CheckBox(); this.chkSolitude = new System.Windows.Forms.CheckBox(); this.chkWindhelm = new System.Windows.Forms.CheckBox(); this.chkCouncil = new System.Windows.Forms.CheckBox(); this.chkOdahviing = new System.Windows.Forms.CheckBox(); this.chkEnterSovngarde = new System.Windows.Forms.CheckBox(); - this.chkAlduin1 = new System.Windows.Forms.CheckBox(); - this.gbAnyPercentPreset = new System.Windows.Forms.GroupBox(); - this.tlpAnyPercentPreset = new System.Windows.Forms.TableLayoutPanel(); - this.rbMrwalrus = new System.Windows.Forms.RadioButton(); - this.rbDrtchops = new System.Windows.Forms.RadioButton(); - this.rbDalleth = new System.Windows.Forms.RadioButton(); + this.chkAlduinDefeated = new System.Windows.Forms.CheckBox(); this.tlpMain.SuspendLayout(); this.gbStartSplits.SuspendLayout(); this.tlpStartSplits.SuspendLayout(); @@ -74,8 +76,9 @@ private void InitializeComponent() this.tlpDisplayAlternateTiming.SuspendLayout(); this.gb_AnyPercentSplits.SuspendLayout(); this.tlpAnyPercentSplits.SuspendLayout(); - this.gbAnyPercentPreset.SuspendLayout(); - this.tlpAnyPercentPreset.SuspendLayout(); + this.gbAnyPercentTemplate.SuspendLayout(); + this.tlpAnyPercentTemplate.SuspendLayout(); + this.flp_AnyPercentSplits.SuspendLayout(); this.SuspendLayout(); // // tlpMain @@ -96,7 +99,7 @@ private void InitializeComponent() this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpMain.Size = new System.Drawing.Size(450, 677); + this.tlpMain.Size = new System.Drawing.Size(450, 476); this.tlpMain.TabIndex = 0; // // gbStartSplits @@ -158,7 +161,7 @@ private void InitializeComponent() this.gbGuildsSplits.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; this.gbGuildsSplits.Controls.Add(this.tlpGuildsSplits); this.gbGuildsSplits.Dock = System.Windows.Forms.DockStyle.Top; - this.gbGuildsSplits.Location = new System.Drawing.Point(3, 515); + this.gbGuildsSplits.Location = new System.Drawing.Point(3, 314); this.gbGuildsSplits.Name = "gbGuildsSplits"; this.gbGuildsSplits.Size = new System.Drawing.Size(444, 111); this.gbGuildsSplits.TabIndex = 7; @@ -234,7 +237,7 @@ private void InitializeComponent() this.gbDisplayAlternateTiming.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; this.gbDisplayAlternateTiming.Controls.Add(this.tlpDisplayAlternateTiming); this.gbDisplayAlternateTiming.Dock = System.Windows.Forms.DockStyle.Top; - this.gbDisplayAlternateTiming.Location = new System.Drawing.Point(3, 632); + this.gbDisplayAlternateTiming.Location = new System.Drawing.Point(3, 431); this.gbDisplayAlternateTiming.Name = "gbDisplayAlternateTiming"; this.gbDisplayAlternateTiming.Size = new System.Drawing.Size(444, 42); this.gbDisplayAlternateTiming.TabIndex = 9; @@ -277,7 +280,7 @@ private void InitializeComponent() this.gb_AnyPercentSplits.Dock = System.Windows.Forms.DockStyle.Top; this.gb_AnyPercentSplits.Location = new System.Drawing.Point(3, 74); this.gb_AnyPercentSplits.Name = "gb_AnyPercentSplits"; - this.gb_AnyPercentSplits.Size = new System.Drawing.Size(444, 435); + this.gb_AnyPercentSplits.Size = new System.Drawing.Size(444, 234); this.gb_AnyPercentSplits.TabIndex = 10; this.gb_AnyPercentSplits.TabStop = false; this.gb_AnyPercentSplits.Text = "Any% Auto-splits"; @@ -288,67 +291,137 @@ private void InitializeComponent() this.tlpAnyPercentSplits.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; this.tlpAnyPercentSplits.ColumnCount = 1; this.tlpAnyPercentSplits.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tlpAnyPercentSplits.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tlpAnyPercentSplits.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tlpAnyPercentSplits.Controls.Add(this.chkAlduinDefeated, 0, 16); - this.tlpAnyPercentSplits.Controls.Add(this.chkWhiterun, 0, 1); - this.tlpAnyPercentSplits.Controls.Add(this.chkThalmorEmbassy, 0, 2); - this.tlpAnyPercentSplits.Controls.Add(this.chkEsbern, 0, 3); - this.tlpAnyPercentSplits.Controls.Add(this.chkRiverwood, 0, 4); - this.tlpAnyPercentSplits.Controls.Add(this.chkTheWall, 0, 5); - this.tlpAnyPercentSplits.Controls.Add(this.chkSeptimus, 0, 6); - this.tlpAnyPercentSplits.Controls.Add(this.chkMzarkTower, 0, 7); - this.tlpAnyPercentSplits.Controls.Add(this.chkClearSky, 0, 8); - this.tlpAnyPercentSplits.Controls.Add(this.chkHighHrothgar, 0, 10); - this.tlpAnyPercentSplits.Controls.Add(this.chkSolitude, 0, 11); - this.tlpAnyPercentSplits.Controls.Add(this.chkWindhelm, 0, 12); - this.tlpAnyPercentSplits.Controls.Add(this.chkCouncil, 0, 13); - this.tlpAnyPercentSplits.Controls.Add(this.chkOdahviing, 0, 14); - this.tlpAnyPercentSplits.Controls.Add(this.chkEnterSovngarde, 0, 15); - this.tlpAnyPercentSplits.Controls.Add(this.chkAlduin1, 0, 9); - this.tlpAnyPercentSplits.Controls.Add(this.gbAnyPercentPreset, 0, 0); - this.tlpAnyPercentSplits.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpAnyPercentSplits.Controls.Add(this.gbAnyPercentTemplate, 0, 0); + this.tlpAnyPercentSplits.Controls.Add(this.flp_AnyPercentSplits, 0, 1); + this.tlpAnyPercentSplits.Dock = System.Windows.Forms.DockStyle.Top; this.tlpAnyPercentSplits.Location = new System.Drawing.Point(3, 16); this.tlpAnyPercentSplits.Name = "tlpAnyPercentSplits"; - this.tlpAnyPercentSplits.RowCount = 17; - this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpAnyPercentSplits.RowCount = 2; this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpAnyPercentSplits.Size = new System.Drawing.Size(438, 416); + this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tlpAnyPercentSplits.Size = new System.Drawing.Size(438, 215); this.tlpAnyPercentSplits.TabIndex = 0; // - // chkAlduinDefeated + // gbAnyPercentTemplate + // + this.gbAnyPercentTemplate.AutoSize = true; + this.gbAnyPercentTemplate.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.gbAnyPercentTemplate.Controls.Add(this.tlpAnyPercentTemplate); + this.gbAnyPercentTemplate.Dock = System.Windows.Forms.DockStyle.Top; + this.gbAnyPercentTemplate.Location = new System.Drawing.Point(3, 3); + this.gbAnyPercentTemplate.Name = "gbAnyPercentTemplate"; + this.gbAnyPercentTemplate.Size = new System.Drawing.Size(432, 42); + this.gbAnyPercentTemplate.TabIndex = 19; + this.gbAnyPercentTemplate.TabStop = false; + this.gbAnyPercentTemplate.Text = "Split Template"; + // + // tlpAnyPercentTemplate + // + this.tlpAnyPercentTemplate.AutoSize = true; + this.tlpAnyPercentTemplate.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tlpAnyPercentTemplate.ColumnCount = 3; + this.tlpAnyPercentTemplate.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); + this.tlpAnyPercentTemplate.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); + this.tlpAnyPercentTemplate.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); + this.tlpAnyPercentTemplate.Controls.Add(this.rbMrwalrus, 0, 0); + this.tlpAnyPercentTemplate.Controls.Add(this.rbDrtchops, 1, 0); + this.tlpAnyPercentTemplate.Controls.Add(this.rbDalleth, 2, 0); + this.tlpAnyPercentTemplate.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpAnyPercentTemplate.Location = new System.Drawing.Point(3, 16); + this.tlpAnyPercentTemplate.Name = "tlpAnyPercentTemplate"; + this.tlpAnyPercentTemplate.RowCount = 1; + this.tlpAnyPercentTemplate.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpAnyPercentTemplate.Size = new System.Drawing.Size(426, 23); + this.tlpAnyPercentTemplate.TabIndex = 0; // - this.chkAlduinDefeated.AutoSize = true; - this.chkAlduinDefeated.Checked = true; - this.chkAlduinDefeated.CheckState = System.Windows.Forms.CheckState.Checked; - this.chkAlduinDefeated.Location = new System.Drawing.Point(3, 396); - this.chkAlduinDefeated.Name = "chkAlduinDefeated"; - this.chkAlduinDefeated.Size = new System.Drawing.Size(97, 17); - this.chkAlduinDefeated.TabIndex = 5; - this.chkAlduinDefeated.Text = "Alduin\'s Defeat"; - this.chkAlduinDefeated.UseVisualStyleBackColor = true; + // rbMrwalrus + // + this.rbMrwalrus.AutoSize = true; + this.rbMrwalrus.Location = new System.Drawing.Point(3, 3); + this.rbMrwalrus.Name = "rbMrwalrus"; + this.rbMrwalrus.Size = new System.Drawing.Size(70, 17); + this.rbMrwalrus.TabIndex = 0; + this.rbMrwalrus.Text = "MrWalrus"; + this.rbMrwalrus.UseVisualStyleBackColor = true; + this.rbMrwalrus.CheckedChanged += new System.EventHandler(this.rbDrtchops_CheckedChanged); + // + // rbDrtchops + // + this.rbDrtchops.AutoSize = true; + this.rbDrtchops.Location = new System.Drawing.Point(144, 3); + this.rbDrtchops.Name = "rbDrtchops"; + this.rbDrtchops.Size = new System.Drawing.Size(73, 17); + this.rbDrtchops.TabIndex = 1; + this.rbDrtchops.Text = "DrTChops"; + this.rbDrtchops.UseVisualStyleBackColor = true; + this.rbDrtchops.CheckedChanged += new System.EventHandler(this.rbDrtchops_CheckedChanged); + // + // rbDalleth + // + this.rbDalleth.AutoSize = true; + this.rbDalleth.Location = new System.Drawing.Point(285, 3); + this.rbDalleth.Name = "rbDalleth"; + this.rbDalleth.Size = new System.Drawing.Size(58, 17); + this.rbDalleth.TabIndex = 2; + this.rbDalleth.Text = "Dalleth"; + this.rbDalleth.UseVisualStyleBackColor = true; + this.rbDalleth.CheckedChanged += new System.EventHandler(this.rbDalleth_CheckedChanged); + // + // flp_AnyPercentSplits + // + this.flp_AnyPercentSplits.AutoScroll = true; + this.flp_AnyPercentSplits.AutoSize = true; + this.flp_AnyPercentSplits.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.flp_AnyPercentSplits.Controls.Add(this.chkWhiterun); + this.flp_AnyPercentSplits.Controls.Add(this.chkThalmorEmbassy); + this.flp_AnyPercentSplits.Controls.Add(this.chkEsbern); + this.flp_AnyPercentSplits.Controls.Add(this.chkRiverwood); + this.flp_AnyPercentSplits.Controls.Add(this.chkTheWall); + this.flp_AnyPercentSplits.Controls.Add(this.chkSeptimus); + this.flp_AnyPercentSplits.Controls.Add(this.chkMzarkTower); + this.flp_AnyPercentSplits.Controls.Add(this.chkClearSky); + this.flp_AnyPercentSplits.Controls.Add(this.chkReadScroll); + this.flp_AnyPercentSplits.Controls.Add(this.chkAlduin1); + this.flp_AnyPercentSplits.Controls.Add(this.chkHighHrothgar); + this.flp_AnyPercentSplits.Controls.Add(this.chkSolitude); + this.flp_AnyPercentSplits.Controls.Add(this.chkWindhelm); + this.flp_AnyPercentSplits.Controls.Add(this.chkCouncil); + this.flp_AnyPercentSplits.Controls.Add(this.chkOdahviing); + this.flp_AnyPercentSplits.Controls.Add(this.chkEnterSovngarde); + this.flp_AnyPercentSplits.Controls.Add(this.chkAlduinDefeated); + this.flp_AnyPercentSplits.Dock = System.Windows.Forms.DockStyle.Top; + this.flp_AnyPercentSplits.FlowDirection = System.Windows.Forms.FlowDirection.TopDown; + this.flp_AnyPercentSplits.Location = new System.Drawing.Point(3, 51); + this.flp_AnyPercentSplits.MaximumSize = new System.Drawing.Size(0, 170); + this.flp_AnyPercentSplits.Name = "flp_AnyPercentSplits"; + this.flp_AnyPercentSplits.Size = new System.Drawing.Size(432, 161); + this.flp_AnyPercentSplits.TabIndex = 21; // // chkWhiterun // this.chkWhiterun.AutoSize = true; - this.chkWhiterun.Location = new System.Drawing.Point(3, 51); + this.chkWhiterun.Dock = System.Windows.Forms.DockStyle.Top; + this.chkWhiterun.Location = new System.Drawing.Point(3, 3); + this.chkWhiterun.Margin = new System.Windows.Forms.Padding(3, 3, 15, 3); this.chkWhiterun.Name = "chkWhiterun"; - this.chkWhiterun.Size = new System.Drawing.Size(69, 17); + this.chkWhiterun.Size = new System.Drawing.Size(109, 17); this.chkWhiterun.TabIndex = 0; this.chkWhiterun.Text = "Whiterun"; this.chkWhiterun.UseVisualStyleBackColor = true; @@ -356,7 +429,9 @@ private void InitializeComponent() // chkThalmorEmbassy // this.chkThalmorEmbassy.AutoSize = true; - this.chkThalmorEmbassy.Location = new System.Drawing.Point(3, 74); + this.chkThalmorEmbassy.Dock = System.Windows.Forms.DockStyle.Top; + this.chkThalmorEmbassy.Location = new System.Drawing.Point(3, 26); + this.chkThalmorEmbassy.Margin = new System.Windows.Forms.Padding(3, 3, 15, 3); this.chkThalmorEmbassy.Name = "chkThalmorEmbassy"; this.chkThalmorEmbassy.Size = new System.Drawing.Size(109, 17); this.chkThalmorEmbassy.TabIndex = 1; @@ -366,9 +441,11 @@ private void InitializeComponent() // chkEsbern // this.chkEsbern.AutoSize = true; - this.chkEsbern.Location = new System.Drawing.Point(3, 97); + this.chkEsbern.Dock = System.Windows.Forms.DockStyle.Top; + this.chkEsbern.Location = new System.Drawing.Point(3, 49); + this.chkEsbern.Margin = new System.Windows.Forms.Padding(3, 3, 15, 3); this.chkEsbern.Name = "chkEsbern"; - this.chkEsbern.Size = new System.Drawing.Size(101, 17); + this.chkEsbern.Size = new System.Drawing.Size(109, 17); this.chkEsbern.TabIndex = 6; this.chkEsbern.Text = "Esbern in Riften"; this.chkEsbern.UseVisualStyleBackColor = true; @@ -376,9 +453,11 @@ private void InitializeComponent() // chkRiverwood // this.chkRiverwood.AutoSize = true; - this.chkRiverwood.Location = new System.Drawing.Point(3, 120); + this.chkRiverwood.Dock = System.Windows.Forms.DockStyle.Top; + this.chkRiverwood.Location = new System.Drawing.Point(3, 72); + this.chkRiverwood.Margin = new System.Windows.Forms.Padding(3, 3, 15, 3); this.chkRiverwood.Name = "chkRiverwood"; - this.chkRiverwood.Size = new System.Drawing.Size(77, 17); + this.chkRiverwood.Size = new System.Drawing.Size(109, 17); this.chkRiverwood.TabIndex = 7; this.chkRiverwood.Text = "Riverwood"; this.chkRiverwood.UseVisualStyleBackColor = true; @@ -386,9 +465,11 @@ private void InitializeComponent() // chkTheWall // this.chkTheWall.AutoSize = true; - this.chkTheWall.Location = new System.Drawing.Point(3, 143); + this.chkTheWall.Dock = System.Windows.Forms.DockStyle.Top; + this.chkTheWall.Location = new System.Drawing.Point(3, 95); + this.chkTheWall.Margin = new System.Windows.Forms.Padding(3, 3, 15, 3); this.chkTheWall.Name = "chkTheWall"; - this.chkTheWall.Size = new System.Drawing.Size(69, 17); + this.chkTheWall.Size = new System.Drawing.Size(109, 17); this.chkTheWall.TabIndex = 8; this.chkTheWall.Text = "The Wall"; this.chkTheWall.UseVisualStyleBackColor = true; @@ -396,9 +477,11 @@ private void InitializeComponent() // chkSeptimus // this.chkSeptimus.AutoSize = true; - this.chkSeptimus.Location = new System.Drawing.Point(3, 166); + this.chkSeptimus.Dock = System.Windows.Forms.DockStyle.Top; + this.chkSeptimus.Location = new System.Drawing.Point(3, 118); + this.chkSeptimus.Margin = new System.Windows.Forms.Padding(3, 3, 15, 3); this.chkSeptimus.Name = "chkSeptimus"; - this.chkSeptimus.Size = new System.Drawing.Size(69, 17); + this.chkSeptimus.Size = new System.Drawing.Size(109, 17); this.chkSeptimus.TabIndex = 9; this.chkSeptimus.Text = "Septimus"; this.chkSeptimus.UseVisualStyleBackColor = true; @@ -406,9 +489,11 @@ private void InitializeComponent() // chkMzarkTower // this.chkMzarkTower.AutoSize = true; - this.chkMzarkTower.Location = new System.Drawing.Point(3, 189); + this.chkMzarkTower.Dock = System.Windows.Forms.DockStyle.Top; + this.chkMzarkTower.Location = new System.Drawing.Point(3, 141); + this.chkMzarkTower.Margin = new System.Windows.Forms.Padding(3, 3, 15, 3); this.chkMzarkTower.Name = "chkMzarkTower"; - this.chkMzarkTower.Size = new System.Drawing.Size(88, 17); + this.chkMzarkTower.Size = new System.Drawing.Size(109, 17); this.chkMzarkTower.TabIndex = 10; this.chkMzarkTower.Text = "Mzark Tower"; this.chkMzarkTower.UseVisualStyleBackColor = true; @@ -416,19 +501,47 @@ private void InitializeComponent() // chkClearSky // this.chkClearSky.AutoSize = true; - this.chkClearSky.Location = new System.Drawing.Point(3, 212); + this.chkClearSky.Dock = System.Windows.Forms.DockStyle.Top; + this.chkClearSky.Location = new System.Drawing.Point(130, 3); + this.chkClearSky.Margin = new System.Windows.Forms.Padding(3, 3, 15, 3); this.chkClearSky.Name = "chkClearSky"; - this.chkClearSky.Size = new System.Drawing.Size(71, 17); + this.chkClearSky.Size = new System.Drawing.Size(145, 17); this.chkClearSky.TabIndex = 11; this.chkClearSky.Text = "Clear Sky"; this.chkClearSky.UseVisualStyleBackColor = true; // + // chkReadScroll + // + this.chkReadScroll.AutoSize = true; + this.chkReadScroll.Dock = System.Windows.Forms.DockStyle.Top; + this.chkReadScroll.Location = new System.Drawing.Point(130, 26); + this.chkReadScroll.Margin = new System.Windows.Forms.Padding(3, 3, 15, 3); + this.chkReadScroll.Name = "chkReadScroll"; + this.chkReadScroll.Size = new System.Drawing.Size(145, 17); + this.chkReadScroll.TabIndex = 20; + this.chkReadScroll.Text = "Reading the Elder Scrolls"; + this.chkReadScroll.UseVisualStyleBackColor = true; + // + // chkAlduin1 + // + this.chkAlduin1.AutoSize = true; + this.chkAlduin1.Dock = System.Windows.Forms.DockStyle.Top; + this.chkAlduin1.Location = new System.Drawing.Point(130, 49); + this.chkAlduin1.Margin = new System.Windows.Forms.Padding(3, 3, 15, 3); + this.chkAlduin1.Name = "chkAlduin1"; + this.chkAlduin1.Size = new System.Drawing.Size(145, 17); + this.chkAlduin1.TabIndex = 18; + this.chkAlduin1.Text = "Alduin 1"; + this.chkAlduin1.UseVisualStyleBackColor = true; + // // chkHighHrothgar // this.chkHighHrothgar.AutoSize = true; - this.chkHighHrothgar.Location = new System.Drawing.Point(3, 258); + this.chkHighHrothgar.Dock = System.Windows.Forms.DockStyle.Top; + this.chkHighHrothgar.Location = new System.Drawing.Point(130, 72); + this.chkHighHrothgar.Margin = new System.Windows.Forms.Padding(3, 3, 15, 3); this.chkHighHrothgar.Name = "chkHighHrothgar"; - this.chkHighHrothgar.Size = new System.Drawing.Size(92, 17); + this.chkHighHrothgar.Size = new System.Drawing.Size(145, 17); this.chkHighHrothgar.TabIndex = 12; this.chkHighHrothgar.Text = "High Hrothgar"; this.chkHighHrothgar.UseVisualStyleBackColor = true; @@ -436,9 +549,11 @@ private void InitializeComponent() // chkSolitude // this.chkSolitude.AutoSize = true; - this.chkSolitude.Location = new System.Drawing.Point(3, 281); + this.chkSolitude.Dock = System.Windows.Forms.DockStyle.Top; + this.chkSolitude.Location = new System.Drawing.Point(130, 95); + this.chkSolitude.Margin = new System.Windows.Forms.Padding(3, 3, 15, 3); this.chkSolitude.Name = "chkSolitude"; - this.chkSolitude.Size = new System.Drawing.Size(64, 17); + this.chkSolitude.Size = new System.Drawing.Size(145, 17); this.chkSolitude.TabIndex = 13; this.chkSolitude.Text = "Solitude"; this.chkSolitude.UseVisualStyleBackColor = true; @@ -446,9 +561,11 @@ private void InitializeComponent() // chkWindhelm // this.chkWindhelm.AutoSize = true; - this.chkWindhelm.Location = new System.Drawing.Point(3, 304); + this.chkWindhelm.Dock = System.Windows.Forms.DockStyle.Top; + this.chkWindhelm.Location = new System.Drawing.Point(130, 118); + this.chkWindhelm.Margin = new System.Windows.Forms.Padding(3, 3, 15, 3); this.chkWindhelm.Name = "chkWindhelm"; - this.chkWindhelm.Size = new System.Drawing.Size(73, 17); + this.chkWindhelm.Size = new System.Drawing.Size(145, 17); this.chkWindhelm.TabIndex = 14; this.chkWindhelm.Text = "Windhelm"; this.chkWindhelm.UseVisualStyleBackColor = true; @@ -456,9 +573,11 @@ private void InitializeComponent() // chkCouncil // this.chkCouncil.AutoSize = true; - this.chkCouncil.Location = new System.Drawing.Point(3, 327); + this.chkCouncil.Dock = System.Windows.Forms.DockStyle.Top; + this.chkCouncil.Location = new System.Drawing.Point(130, 141); + this.chkCouncil.Margin = new System.Windows.Forms.Padding(3, 3, 15, 3); this.chkCouncil.Name = "chkCouncil"; - this.chkCouncil.Size = new System.Drawing.Size(61, 17); + this.chkCouncil.Size = new System.Drawing.Size(145, 17); this.chkCouncil.TabIndex = 15; this.chkCouncil.Text = "Council"; this.chkCouncil.UseVisualStyleBackColor = true; @@ -466,9 +585,11 @@ private void InitializeComponent() // chkOdahviing // this.chkOdahviing.AutoSize = true; - this.chkOdahviing.Location = new System.Drawing.Point(3, 350); + this.chkOdahviing.Dock = System.Windows.Forms.DockStyle.Top; + this.chkOdahviing.Location = new System.Drawing.Point(293, 3); + this.chkOdahviing.Margin = new System.Windows.Forms.Padding(3, 3, 15, 3); this.chkOdahviing.Name = "chkOdahviing"; - this.chkOdahviing.Size = new System.Drawing.Size(74, 17); + this.chkOdahviing.Size = new System.Drawing.Size(106, 17); this.chkOdahviing.TabIndex = 16; this.chkOdahviing.Text = "Odahviing"; this.chkOdahviing.UseVisualStyleBackColor = true; @@ -476,88 +597,28 @@ private void InitializeComponent() // chkEnterSovngarde // this.chkEnterSovngarde.AutoSize = true; - this.chkEnterSovngarde.Location = new System.Drawing.Point(3, 373); + this.chkEnterSovngarde.Dock = System.Windows.Forms.DockStyle.Top; + this.chkEnterSovngarde.Location = new System.Drawing.Point(293, 26); + this.chkEnterSovngarde.Margin = new System.Windows.Forms.Padding(3, 3, 15, 3); this.chkEnterSovngarde.Name = "chkEnterSovngarde"; this.chkEnterSovngarde.Size = new System.Drawing.Size(106, 17); this.chkEnterSovngarde.TabIndex = 17; this.chkEnterSovngarde.Text = "Enter Sovngarde"; this.chkEnterSovngarde.UseVisualStyleBackColor = true; // - // chkAlduin1 - // - this.chkAlduin1.AutoSize = true; - this.chkAlduin1.Location = new System.Drawing.Point(3, 235); - this.chkAlduin1.Name = "chkAlduin1"; - this.chkAlduin1.Size = new System.Drawing.Size(64, 17); - this.chkAlduin1.TabIndex = 18; - this.chkAlduin1.Text = "Alduin 1"; - this.chkAlduin1.UseVisualStyleBackColor = true; - // - // gbAnyPercentPreset - // - this.gbAnyPercentPreset.AutoSize = true; - this.gbAnyPercentPreset.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.gbAnyPercentPreset.Controls.Add(this.tlpAnyPercentPreset); - this.gbAnyPercentPreset.Dock = System.Windows.Forms.DockStyle.Left; - this.gbAnyPercentPreset.Location = new System.Drawing.Point(3, 3); - this.gbAnyPercentPreset.Name = "gbAnyPercentPreset"; - this.gbAnyPercentPreset.Size = new System.Drawing.Size(225, 42); - this.gbAnyPercentPreset.TabIndex = 19; - this.gbAnyPercentPreset.TabStop = false; - this.gbAnyPercentPreset.Text = "Preset"; - // - // tlpAnyPercentPreset - // - this.tlpAnyPercentPreset.AutoSize = true; - this.tlpAnyPercentPreset.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.tlpAnyPercentPreset.ColumnCount = 3; - this.tlpAnyPercentPreset.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tlpAnyPercentPreset.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tlpAnyPercentPreset.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tlpAnyPercentPreset.Controls.Add(this.rbMrwalrus, 0, 0); - this.tlpAnyPercentPreset.Controls.Add(this.rbDrtchops, 1, 0); - this.tlpAnyPercentPreset.Controls.Add(this.rbDalleth, 2, 0); - this.tlpAnyPercentPreset.Dock = System.Windows.Forms.DockStyle.Fill; - this.tlpAnyPercentPreset.Location = new System.Drawing.Point(3, 16); - this.tlpAnyPercentPreset.Name = "tlpAnyPercentPreset"; - this.tlpAnyPercentPreset.RowCount = 1; - this.tlpAnyPercentPreset.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpAnyPercentPreset.Size = new System.Drawing.Size(219, 23); - this.tlpAnyPercentPreset.TabIndex = 0; - // - // rbMrwalrus - // - this.rbMrwalrus.AutoSize = true; - this.rbMrwalrus.Location = new System.Drawing.Point(3, 3); - this.rbMrwalrus.Name = "rbMrwalrus"; - this.rbMrwalrus.Size = new System.Drawing.Size(70, 17); - this.rbMrwalrus.TabIndex = 0; - this.rbMrwalrus.Text = "MrWalrus"; - this.rbMrwalrus.UseVisualStyleBackColor = true; - this.rbMrwalrus.CheckedChanged += new System.EventHandler(this.rbDrtchops_CheckedChanged); - // - // rbDrtchops - // - this.rbDrtchops.AutoSize = true; - this.rbDrtchops.Enabled = false; - this.rbDrtchops.Location = new System.Drawing.Point(79, 3); - this.rbDrtchops.Name = "rbDrtchops"; - this.rbDrtchops.Size = new System.Drawing.Size(73, 17); - this.rbDrtchops.TabIndex = 1; - this.rbDrtchops.Text = "DrTChops"; - this.rbDrtchops.UseVisualStyleBackColor = true; - this.rbDrtchops.CheckedChanged += new System.EventHandler(this.rbDrtchops_CheckedChanged); - // - // rbDalleth + // chkAlduinDefeated // - this.rbDalleth.AutoSize = true; - this.rbDalleth.Location = new System.Drawing.Point(158, 3); - this.rbDalleth.Name = "rbDalleth"; - this.rbDalleth.Size = new System.Drawing.Size(58, 17); - this.rbDalleth.TabIndex = 2; - this.rbDalleth.Text = "Dalleth"; - this.rbDalleth.UseVisualStyleBackColor = true; - this.rbDalleth.CheckedChanged += new System.EventHandler(this.rbDalleth_CheckedChanged); + this.chkAlduinDefeated.AutoSize = true; + this.chkAlduinDefeated.Checked = true; + this.chkAlduinDefeated.CheckState = System.Windows.Forms.CheckState.Checked; + this.chkAlduinDefeated.Dock = System.Windows.Forms.DockStyle.Top; + this.chkAlduinDefeated.Location = new System.Drawing.Point(293, 49); + this.chkAlduinDefeated.Margin = new System.Windows.Forms.Padding(3, 3, 15, 3); + this.chkAlduinDefeated.Name = "chkAlduinDefeated"; + this.chkAlduinDefeated.Size = new System.Drawing.Size(106, 17); + this.chkAlduinDefeated.TabIndex = 5; + this.chkAlduinDefeated.Text = "Alduin\'s Defeat"; + this.chkAlduinDefeated.UseVisualStyleBackColor = true; // // SkyrimSettings // @@ -565,7 +626,7 @@ private void InitializeComponent() this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Controls.Add(this.tlpMain); this.Name = "SkyrimSettings"; - this.Size = new System.Drawing.Size(450, 680); + this.Size = new System.Drawing.Size(450, 487); this.tlpMain.ResumeLayout(false); this.tlpMain.PerformLayout(); this.gbStartSplits.ResumeLayout(false); @@ -584,10 +645,12 @@ private void InitializeComponent() this.gb_AnyPercentSplits.PerformLayout(); this.tlpAnyPercentSplits.ResumeLayout(false); this.tlpAnyPercentSplits.PerformLayout(); - this.gbAnyPercentPreset.ResumeLayout(false); - this.gbAnyPercentPreset.PerformLayout(); - this.tlpAnyPercentPreset.ResumeLayout(false); - this.tlpAnyPercentPreset.PerformLayout(); + this.gbAnyPercentTemplate.ResumeLayout(false); + this.gbAnyPercentTemplate.PerformLayout(); + this.tlpAnyPercentTemplate.ResumeLayout(false); + this.tlpAnyPercentTemplate.PerformLayout(); + this.flp_AnyPercentSplits.ResumeLayout(false); + this.flp_AnyPercentSplits.PerformLayout(); this.ResumeLayout(false); this.PerformLayout(); @@ -629,8 +692,10 @@ private void InitializeComponent() private System.Windows.Forms.CheckBox chkAlduin1; private System.Windows.Forms.RadioButton rbMrwalrus; private System.Windows.Forms.RadioButton rbDrtchops; - private System.Windows.Forms.GroupBox gbAnyPercentPreset; - private System.Windows.Forms.TableLayoutPanel tlpAnyPercentPreset; + private System.Windows.Forms.GroupBox gbAnyPercentTemplate; + private System.Windows.Forms.TableLayoutPanel tlpAnyPercentTemplate; private System.Windows.Forms.RadioButton rbDalleth; + private System.Windows.Forms.CheckBox chkReadScroll; + private System.Windows.Forms.FlowLayoutPanel flp_AnyPercentSplits; } } diff --git a/SkyrimSettings.cs b/SkyrimSettings.cs index 4c7c6cc..c6591fb 100644 --- a/SkyrimSettings.cs +++ b/SkyrimSettings.cs @@ -30,11 +30,11 @@ public partial class SkyrimSettings : UserControl public bool Companions { get; set; } public bool ThievesGuild { get; set; } public bool CollegeOfWinterhold { get; set; } - public string AnyPercentPreset { get; set; } + public string AnyPercentTemplate { get; set; } - public const string PRESET_MRWALRUS = "MrWalrus"; - public const string PRESET_DRTCHOPS = "DrTChops"; - public const string PRESET_DALLETH = "Dalleth"; + public const string TEMPLATE_MRWALRUS = "MrWalrus"; + public const string TEMPLATE_DRTCHOPS = "DrTChops"; + public const string TEMPLATE_DALLETH = "Dalleth"; private const bool DEFAULT_DRAWWITHOUTLOADS = true; private const bool DEFAULT_AUTOSTART = true; @@ -59,7 +59,7 @@ public partial class SkyrimSettings : UserControl private const bool DEFAULT_COMPANIONS = false; private const bool DEFAULT_THIEVESGUILD = false; private const bool DEFAULT_COLLEGEOFWINTERHOLD = false; - private const string DEFAULT_ANYPERCENTPRESET = "MrWalrus"; + private const string DEFAULT_ANYPERCENTTEMPLATE = "MrWalrus"; public SkyrimSettings() { @@ -113,7 +113,7 @@ public SkyrimSettings() this.Companions = DEFAULT_COMPANIONS; this.CollegeOfWinterhold = DEFAULT_COLLEGEOFWINTERHOLD; this.ThievesGuild = DEFAULT_THIEVESGUILD; - this.AnyPercentPreset = DEFAULT_ANYPERCENTPRESET; + this.AnyPercentTemplate = DEFAULT_ANYPERCENTTEMPLATE; } public XmlNode GetSettings(XmlDocument doc) @@ -145,7 +145,7 @@ public XmlNode GetSettings(XmlDocument doc) settingsNode.AppendChild(ToElement(doc, "Companions", this.Companions)); settingsNode.AppendChild(ToElement(doc, "ThievesGuild", this.ThievesGuild)); settingsNode.AppendChild(ToElement(doc, "CollegeOfWinterhold", this.CollegeOfWinterhold)); - settingsNode.AppendChild(ToElement(doc, "AnyPercentPreset", this.AnyPercentPreset)); + settingsNode.AppendChild(ToElement(doc, "AnyPercentTemplate", this.AnyPercentTemplate)); return settingsNode; } @@ -177,11 +177,12 @@ public void SetSettings(XmlNode settings) this.Companions = ParseBool(settings, "Companions", DEFAULT_COMPANIONS); this.ThievesGuild = ParseBool(settings, "ThievesGuild", DEFAULT_THIEVESGUILD); this.CollegeOfWinterhold = ParseBool(settings, "CollegeOfWinterhold", DEFAULT_COLLEGEOFWINTERHOLD); - this.AnyPercentPreset = element["AnyPercentPreset"].InnerText.Equals(PRESET_MRWALRUS) || element["AnyPercentPreset"].InnerText.Equals(PRESET_DRTCHOPS) || element["AnyPercentPreset"].InnerText.Equals(PRESET_DALLETH) - ? element["AnyPercentPreset"].InnerText : DEFAULT_ANYPERCENTPRESET; - this.rbMrwalrus.Checked = this.AnyPercentPreset == PRESET_MRWALRUS; - this.rbDrtchops.Checked = this.AnyPercentPreset == PRESET_DRTCHOPS; - this.rbDalleth.Checked = this.AnyPercentPreset == PRESET_DALLETH; + this.AnyPercentTemplate = element["AnyPercentTemplate"].InnerText.Equals(TEMPLATE_MRWALRUS) || element["AnyPercentTemplate"].InnerText.Equals(TEMPLATE_DRTCHOPS) || element["AnyPercentTemplate"].InnerText.Equals(TEMPLATE_DALLETH) + ? element["AnyPercentTemplate"].InnerText : DEFAULT_ANYPERCENTTEMPLATE; + this.rbMrwalrus.Checked = this.AnyPercentTemplate == TEMPLATE_MRWALRUS; + this.rbDrtchops.Checked = this.AnyPercentTemplate == TEMPLATE_DRTCHOPS; + this.rbDalleth.Checked = this.AnyPercentTemplate == TEMPLATE_DALLETH; + UpdateTemplate(); } static bool ParseBool(XmlNode settings, string setting, bool default_ = false) @@ -199,35 +200,36 @@ static XmlElement ToElement(XmlDocument document, string name, T value) return str; } - private void UpdatePreset() + private void UpdateTemplate() { if (rbMrwalrus.Checked) { - this.AnyPercentPreset = PRESET_MRWALRUS; + this.AnyPercentTemplate = TEMPLATE_MRWALRUS; } else if (rbDrtchops.Checked) { - this.AnyPercentPreset = PRESET_DRTCHOPS; + this.AnyPercentTemplate = TEMPLATE_DRTCHOPS; } else if (rbDalleth.Checked) { - this.AnyPercentPreset = PRESET_DALLETH; + this.AnyPercentTemplate = TEMPLATE_DALLETH; } + this.chkReadScroll.Enabled = this.AnyPercentTemplate == TEMPLATE_DRTCHOPS; } private void rbDrtchops_CheckedChanged(object sender, EventArgs e) { - UpdatePreset(); + UpdateTemplate(); } private void rbMrwalrus_CheckedChanged(object sender, EventArgs e) { - UpdatePreset(); + UpdateTemplate(); } private void rbDalleth_CheckedChanged(object sender, EventArgs e) { - UpdatePreset(); + UpdateTemplate(); } } } From b31335a72d748767243497710f81f39c8a05b7c8 Mon Sep 17 00:00:00 2001 From: Dalet Date: Tue, 21 Oct 2014 00:49:17 +0200 Subject: [PATCH 06/19] Null check for AnyPercentTemplate setting --- SkyrimSettings.cs | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/SkyrimSettings.cs b/SkyrimSettings.cs index c6591fb..bc9ed31 100644 --- a/SkyrimSettings.cs +++ b/SkyrimSettings.cs @@ -177,9 +177,20 @@ public void SetSettings(XmlNode settings) this.Companions = ParseBool(settings, "Companions", DEFAULT_COMPANIONS); this.ThievesGuild = ParseBool(settings, "ThievesGuild", DEFAULT_THIEVESGUILD); this.CollegeOfWinterhold = ParseBool(settings, "CollegeOfWinterhold", DEFAULT_COLLEGEOFWINTERHOLD); - this.AnyPercentTemplate = element["AnyPercentTemplate"].InnerText.Equals(TEMPLATE_MRWALRUS) || element["AnyPercentTemplate"].InnerText.Equals(TEMPLATE_DRTCHOPS) || element["AnyPercentTemplate"].InnerText.Equals(TEMPLATE_DALLETH) - ? element["AnyPercentTemplate"].InnerText : DEFAULT_ANYPERCENTTEMPLATE; - this.rbMrwalrus.Checked = this.AnyPercentTemplate == TEMPLATE_MRWALRUS; + + if (element["AnyPercentTemplate"] != null) + { + this.AnyPercentTemplate = element["AnyPercentTemplate"].InnerText.Equals(TEMPLATE_MRWALRUS) || + element["AnyPercentTemplate"].InnerText.Equals(TEMPLATE_DRTCHOPS) || element["AnyPercentTemplate"].InnerText.Equals(TEMPLATE_DALLETH) + ? element["AnyPercentTemplate"].InnerText + : DEFAULT_ANYPERCENTTEMPLATE; + } + else + { + this.AnyPercentTemplate = DEFAULT_ANYPERCENTTEMPLATE; + } + + this.rbMrwalrus.Checked = this.AnyPercentTemplate == TEMPLATE_MRWALRUS; this.rbDrtchops.Checked = this.AnyPercentTemplate == TEMPLATE_DRTCHOPS; this.rbDalleth.Checked = this.AnyPercentTemplate == TEMPLATE_DALLETH; UpdateTemplate(); From 7f0437dd47d2a425c92dcc83e5947b93466170cb Mon Sep 17 00:00:00 2001 From: Dalet Date: Tue, 21 Oct 2014 01:23:59 +0200 Subject: [PATCH 07/19] "Activate/Deactivate all splits " button --- SkyrimSettings.Designer.cs | 53 +++++++++++++++++++------------------- SkyrimSettings.cs | 43 +++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+), 27 deletions(-) diff --git a/SkyrimSettings.Designer.cs b/SkyrimSettings.Designer.cs index d19d622..6219874 100644 --- a/SkyrimSettings.Designer.cs +++ b/SkyrimSettings.Designer.cs @@ -67,6 +67,7 @@ private void InitializeComponent() this.chkOdahviing = new System.Windows.Forms.CheckBox(); this.chkEnterSovngarde = new System.Windows.Forms.CheckBox(); this.chkAlduinDefeated = new System.Windows.Forms.CheckBox(); + this.llCheckAll = new System.Windows.Forms.LinkLabel(); this.tlpMain.SuspendLayout(); this.gbStartSplits.SuspendLayout(); this.tlpStartSplits.SuspendLayout(); @@ -99,7 +100,7 @@ private void InitializeComponent() this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpMain.Size = new System.Drawing.Size(450, 476); + this.tlpMain.Size = new System.Drawing.Size(450, 489); this.tlpMain.TabIndex = 0; // // gbStartSplits @@ -161,7 +162,7 @@ private void InitializeComponent() this.gbGuildsSplits.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; this.gbGuildsSplits.Controls.Add(this.tlpGuildsSplits); this.gbGuildsSplits.Dock = System.Windows.Forms.DockStyle.Top; - this.gbGuildsSplits.Location = new System.Drawing.Point(3, 314); + this.gbGuildsSplits.Location = new System.Drawing.Point(3, 327); this.gbGuildsSplits.Name = "gbGuildsSplits"; this.gbGuildsSplits.Size = new System.Drawing.Size(444, 111); this.gbGuildsSplits.TabIndex = 7; @@ -237,7 +238,7 @@ private void InitializeComponent() this.gbDisplayAlternateTiming.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; this.gbDisplayAlternateTiming.Controls.Add(this.tlpDisplayAlternateTiming); this.gbDisplayAlternateTiming.Dock = System.Windows.Forms.DockStyle.Top; - this.gbDisplayAlternateTiming.Location = new System.Drawing.Point(3, 431); + this.gbDisplayAlternateTiming.Location = new System.Drawing.Point(3, 444); this.gbDisplayAlternateTiming.Name = "gbDisplayAlternateTiming"; this.gbDisplayAlternateTiming.Size = new System.Drawing.Size(444, 42); this.gbDisplayAlternateTiming.TabIndex = 9; @@ -280,7 +281,7 @@ private void InitializeComponent() this.gb_AnyPercentSplits.Dock = System.Windows.Forms.DockStyle.Top; this.gb_AnyPercentSplits.Location = new System.Drawing.Point(3, 74); this.gb_AnyPercentSplits.Name = "gb_AnyPercentSplits"; - this.gb_AnyPercentSplits.Size = new System.Drawing.Size(444, 234); + this.gb_AnyPercentSplits.Size = new System.Drawing.Size(444, 247); this.gb_AnyPercentSplits.TabIndex = 10; this.gb_AnyPercentSplits.TabStop = false; this.gb_AnyPercentSplits.Text = "Any% Auto-splits"; @@ -292,31 +293,16 @@ private void InitializeComponent() this.tlpAnyPercentSplits.ColumnCount = 1; this.tlpAnyPercentSplits.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); this.tlpAnyPercentSplits.Controls.Add(this.gbAnyPercentTemplate, 0, 0); - this.tlpAnyPercentSplits.Controls.Add(this.flp_AnyPercentSplits, 0, 1); + this.tlpAnyPercentSplits.Controls.Add(this.flp_AnyPercentSplits, 0, 2); + this.tlpAnyPercentSplits.Controls.Add(this.llCheckAll, 0, 1); this.tlpAnyPercentSplits.Dock = System.Windows.Forms.DockStyle.Top; this.tlpAnyPercentSplits.Location = new System.Drawing.Point(3, 16); this.tlpAnyPercentSplits.Name = "tlpAnyPercentSplits"; - this.tlpAnyPercentSplits.RowCount = 2; + this.tlpAnyPercentSplits.RowCount = 3; this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tlpAnyPercentSplits.Size = new System.Drawing.Size(438, 215); + this.tlpAnyPercentSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpAnyPercentSplits.Size = new System.Drawing.Size(438, 228); this.tlpAnyPercentSplits.TabIndex = 0; // // gbAnyPercentTemplate @@ -365,7 +351,7 @@ private void InitializeComponent() // rbDrtchops // this.rbDrtchops.AutoSize = true; - this.rbDrtchops.Location = new System.Drawing.Point(144, 3); + this.rbDrtchops.Location = new System.Drawing.Point(145, 3); this.rbDrtchops.Name = "rbDrtchops"; this.rbDrtchops.Size = new System.Drawing.Size(73, 17); this.rbDrtchops.TabIndex = 1; @@ -376,7 +362,7 @@ private void InitializeComponent() // rbDalleth // this.rbDalleth.AutoSize = true; - this.rbDalleth.Location = new System.Drawing.Point(285, 3); + this.rbDalleth.Location = new System.Drawing.Point(287, 3); this.rbDalleth.Name = "rbDalleth"; this.rbDalleth.Size = new System.Drawing.Size(58, 17); this.rbDalleth.TabIndex = 2; @@ -408,7 +394,7 @@ private void InitializeComponent() this.flp_AnyPercentSplits.Controls.Add(this.chkAlduinDefeated); this.flp_AnyPercentSplits.Dock = System.Windows.Forms.DockStyle.Top; this.flp_AnyPercentSplits.FlowDirection = System.Windows.Forms.FlowDirection.TopDown; - this.flp_AnyPercentSplits.Location = new System.Drawing.Point(3, 51); + this.flp_AnyPercentSplits.Location = new System.Drawing.Point(3, 64); this.flp_AnyPercentSplits.MaximumSize = new System.Drawing.Size(0, 170); this.flp_AnyPercentSplits.Name = "flp_AnyPercentSplits"; this.flp_AnyPercentSplits.Size = new System.Drawing.Size(432, 161); @@ -620,6 +606,18 @@ private void InitializeComponent() this.chkAlduinDefeated.Text = "Alduin\'s Defeat"; this.chkAlduinDefeated.UseVisualStyleBackColor = true; // + // llCheckAll + // + this.llCheckAll.AutoSize = true; + this.llCheckAll.Dock = System.Windows.Forms.DockStyle.Right; + this.llCheckAll.Location = new System.Drawing.Point(318, 48); + this.llCheckAll.Name = "llCheckAll"; + this.llCheckAll.Size = new System.Drawing.Size(117, 13); + this.llCheckAll.TabIndex = 22; + this.llCheckAll.TabStop = true; + this.llCheckAll.Text = "Activate/Deactivate All"; + this.llCheckAll.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.llCheckAll_LinkClicked); + // // SkyrimSettings // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -697,5 +695,6 @@ private void InitializeComponent() private System.Windows.Forms.RadioButton rbDalleth; private System.Windows.Forms.CheckBox chkReadScroll; private System.Windows.Forms.FlowLayoutPanel flp_AnyPercentSplits; + private System.Windows.Forms.LinkLabel llCheckAll; } } diff --git a/SkyrimSettings.cs b/SkyrimSettings.cs index bc9ed31..5259165 100644 --- a/SkyrimSettings.cs +++ b/SkyrimSettings.cs @@ -242,5 +242,48 @@ private void rbDalleth_CheckedChanged(object sender, EventArgs e) { UpdateTemplate(); } + + private void llCheckAll_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + if (!AreAllEnabledCheckboxChecked(flp_AnyPercentSplits.Controls)) + { + checkAll(flp_AnyPercentSplits.Controls); + } + else + { + checkAll(flp_AnyPercentSplits.Controls, false); + } + } + + private bool AreAllEnabledCheckboxChecked(ControlCollection collection, bool state = true) + { + foreach (Control c in collection) + { + if (c.GetType().Equals(typeof(CheckBox))) + { + CheckBox checkBox = (CheckBox)c; + if (checkBox.Checked != state && checkBox.Enabled) + { + return false; + } + } + } + return true; + } + + private void checkAll(ControlCollection collection, bool state = true) + { + foreach (Control c in collection) + { + if (c.GetType().Equals(typeof(CheckBox))) + { + CheckBox checkBox = (CheckBox)c; + if (checkBox.Checked != state && checkBox.Enabled) + { + checkBox.Checked = state; + } + } + } + } } } From 6a9944f6022e6b982793b46e57c73a01527084d2 Mon Sep 17 00:00:00 2001 From: Dalet Date: Wed, 22 Oct 2014 10:56:42 +0200 Subject: [PATCH 08/19] autosplits of all templates done --- GameMemory.cs | 376 ++++++++++++++++++--------------- SkyrimComponent.cs | 10 +- SkyrimSettings.Designer.cs | 153 +++++++++----- SkyrimSettings.cs | 48 +++-- config/TESV.CT | 414 ++++++++++++++++++++++--------------- 5 files changed, 589 insertions(+), 412 deletions(-) diff --git a/GameMemory.cs b/GameMemory.cs index 0a263df..f4baa5c 100644 --- a/GameMemory.cs +++ b/GameMemory.cs @@ -22,6 +22,9 @@ public enum SplitArea : int Septimus, MzarkTower, ClearSky, + HorseClimb, + CutsceneStart, + CutsceneEnd, Alduin1, HighHrothgar, Solitude, @@ -67,6 +70,8 @@ public enum SplitArea : int private DeepPointer _mainQuestsCompletedPtr; private DeepPointer _wordsOfPowerLearnedPtr; private DeepPointer _Alduin1HealthPtr; + private DeepPointer _locationsDiscoveredPtr; + private DeepPointer _arePlayerControlsDisablePtr; private enum Locations { @@ -98,8 +103,10 @@ private enum ExpectedDllSizes } public bool[] splitStates { get; set; } - int mainQuestsWhenEnteringSkyHavenTemple = -1; + bool isSkyHavenTempleVisited = false; bool isAlduin1Defeated = false; + int leaveSleepingGiantInnCounter = 0; + bool isCouncilDone = false; public void resetSplitStates() { @@ -107,8 +114,10 @@ public void resetSplitStates() { splitStates[i] = false; } - mainQuestsWhenEnteringSkyHavenTemple = -1; + isSkyHavenTempleVisited = false; isAlduin1Defeated = false; + leaveSleepingGiantInnCounter = 0; + isCouncilDone = false; } public GameMemory(SkyrimSettings componentSettings) @@ -137,6 +146,8 @@ public GameMemory(SkyrimSettings componentSettings) _mainQuestsCompletedPtr = new DeepPointer(0x00EE6C34, 0x350); // number of main quests completed (from ingame stats) _wordsOfPowerLearnedPtr = new DeepPointer(0x00EE6C34, 0x558); // "Words Of Power Learned" from ingame stats _Alduin1HealthPtr = new DeepPointer(0x00F41764, 0x74, 0x30, 0x30, 0x1c); // Alduin 1's health (if it's at 0 it's 99% of the time because it can't be found) + _locationsDiscoveredPtr = new DeepPointer(0x00EE6C34, 0x170); // number of locations discovered (from ingame stats) + _arePlayerControlsDisablePtr = new DeepPointer(0x172EF30, 0xf); // == 1 when player controls have been disabled (not necessarily all controls) resetSplitStates(); @@ -208,6 +219,8 @@ void MemoryReadThread() int prevWorld_X = 0; int prevWorld_Y = 0; int prevMainQuestsCompleted = 0; + int prevLocationsDiscovered = 0; + bool prevArePlayerControlsDisabled = false; bool loadingStarted = false; bool loadingScreenStarted = false; @@ -277,6 +290,12 @@ void MemoryReadThread() float alduin1Health; _Alduin1HealthPtr.Deref(game, out alduin1Health); + int locationsDiscovered; + _locationsDiscoveredPtr.Deref(game, out locationsDiscovered); + + bool arePlayerControlsDisabled; + _arePlayerControlsDisablePtr.Deref(game, out arePlayerControlsDisabled); + if (isLoading != prevIsLoading) { if (isLoading) @@ -305,13 +324,7 @@ void MemoryReadThread() { if (locationID == (int)Locations.Tamriel && world_X == 13 && (world_Y == -10 || world_Y == -9) && wordsOfPowerLearned == 3) { - _uiThread.Post(d => - { - if (this.OnSplitCompleted != null) - { - this.OnSplitCompleted(this, SplitArea.ClearSky, frameCounter); - } - }, null); + Split(SplitArea.ClearSky, frameCounter); } } @@ -358,37 +371,27 @@ void MemoryReadThread() if (loadScreenStartLocationID == (int)Locations.HelgenKeep01 && loadScreenStartWorld_X == -2 && loadScreenStartWorld_Y == -5) { // Helgen split - _uiThread.Post(d => - { - if (this.OnSplitCompleted != null) - { - this.OnSplitCompleted(this, SplitArea.Helgen, frameCounter); - } - }, null); + Split(SplitArea.Helgen, frameCounter); } - // if loadscreen starts in Karthspire and one main quest has been completed since arriving Karthspire - else if (mainquestsCompleted == mainQuestsWhenEnteringSkyHavenTemple + 1 && loadScreenStartLocationID == (int)Locations.KarthspireRedoubtWorld) + // if loadscreen starts in around the carriage of Whiterun Stables + else if (loadScreenStartLocationID == (int)Locations.Tamriel && loadScreenStartWorld_X == 4 && (loadScreenStartWorld_Y == -3 || loadScreenStartWorld_Y == -4) && + _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_DRTCHOPS) { - _uiThread.Post(d => - { - if (this.OnSplitCompleted != null) - { - this.OnSplitCompleted(this, SplitArea.TheWall, frameCounter); - } - }, null); + Split(SplitArea.Whiterun, frameCounter); + } + // if loadscreen starts in Karthspire and Sky Haven Temple has been entered at least once + else if (loadScreenStartLocationID == (int)Locations.KarthspireRedoubtWorld && isSkyHavenTempleVisited && + (_settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_MRWALRUS || _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_DRTCHOPS || _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_DALLETH)) + { + Split(SplitArea.TheWall, frameCounter); } // if loadscreen starts in Paarthurnax' mountain whereabouts else if (isAlduin1Defeated && loadScreenStartLocationID == (int)Locations.Tamriel && ((loadScreenStartWorld_X == 14 && loadScreenStartWorld_Y == -12) || (loadScreenStartWorld_X == 14 && loadScreenStartWorld_Y == -13) || (loadScreenStartWorld_X == 13 && loadScreenStartWorld_Y == -12) || - (loadScreenStartWorld_X == 13 && loadScreenStartWorld_Y == -13)) && (_settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_DRTCHOPS || _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_DALLETH)) + (loadScreenStartWorld_X == 13 && loadScreenStartWorld_Y == -13)) && + (_settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_DRTCHOPS || _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_GR3YSCALE || _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_DALLETH)) { - _uiThread.Post(d => - { - if (this.OnSplitCompleted != null) - { - this.OnSplitCompleted(this, SplitArea.Alduin1, frameCounter); - } - }, null); + Split(SplitArea.Alduin1, frameCounter); } } else @@ -423,10 +426,9 @@ void MemoryReadThread() { Debug.WriteLine(String.Format("[NoLoads] Fadeout ended - {0}", frameCounter)); // if loadscreen fadeout finishes in helgen - if (prevIsInFadeOut && loadScreenFadeoutStarted - && locationID == (int)Locations.Tamriel && world_X == 3 && world_Y == -20) + if (prevIsInFadeOut && loadScreenFadeoutStarted && + locationID == (int)Locations.Tamriel && world_X == 3 && world_Y == -20) { - mainQuestsWhenEnteringSkyHavenTemple = -1; // reset Trace.WriteLine(String.Format("[NoLoads] Reset - {0}", frameCounter)); _uiThread.Post(d => @@ -456,77 +458,52 @@ void MemoryReadThread() isWaitingLocationOrCoordsUpdate = false; // if loadscreen starts while in front of the door of Thalmor Embassy and doesn't end inside the Embassy - if (loadScreenStartLocationID == (int)Locations.Tamriel && loadScreenStartWorld_X == -20 && loadScreenStartWorld_Y == 28 - && locationID != (int)Locations.ThalmorEmbassy02) + if (loadScreenStartLocationID == (int)Locations.Tamriel && loadScreenStartWorld_X == -20 && loadScreenStartWorld_Y == 28 && + locationID == (int)Locations.Tamriel && + (_settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_MRWALRUS || _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_DRTCHOPS || _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_DALLETH)) { - _uiThread.Post(d => - { - if (this.OnSplitCompleted != null) - { - this.OnSplitCompleted(this, SplitArea.ThalmorEmbassy, frameCounter); - } - }, null); + Split(SplitArea.ThalmorEmbassy, frameCounter); + } + // if loadscreen starts while in front of the door of Thalmor Embassy and doesn't end inside the Embassy + else if (loadScreenStartLocationID == (int)Locations.Tamriel && loadScreenStartWorld_X == -20 && loadScreenStartWorld_Y == 28 && + locationID != (int)Locations.ThalmorEmbassy02 && + (_settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_MRWALRUS || _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_DRTCHOPS || _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_DALLETH)) + { + Split(SplitArea.ThalmorEmbassy, frameCounter); } // if loadscreen starts while in front of the Sleeping Giant Inn and doesn't end inside it - else if (loadScreenStartLocationID == (int)Locations.Tamriel && loadScreenStartWorld_X == 5 && loadScreenStartWorld_Y == -11 - && locationID != (int)Locations.RiverwoodSleepingGiantInn) + else if (loadScreenStartLocationID == (int)Locations.Tamriel && loadScreenStartWorld_X == 5 && loadScreenStartWorld_Y == -11 && + locationID != (int)Locations.RiverwoodSleepingGiantInn && + (_settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_MRWALRUS || _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_DRTCHOPS || _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_DALLETH)) { - _uiThread.Post(d => - { - if (this.OnSplitCompleted != null) - { - this.OnSplitCompleted(this, SplitArea.Riverwood, frameCounter); - } - }, null); + Split(SplitArea.Riverwood, frameCounter); } // if loadscreen starts outside Septimus' Outpost and doesn't end inside it - else if (loadScreenStartLocationID == (int)Locations.Tamriel && loadScreenStartWorld_X == 28 && loadScreenStartWorld_Y == 34 - && locationID != (int)Locations.SeptimusSignusOutpost) + else if (loadScreenStartLocationID == (int)Locations.Tamriel && loadScreenStartWorld_X == 28 && loadScreenStartWorld_Y == 34 && + locationID != (int)Locations.SeptimusSignusOutpost && + (_settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_MRWALRUS || _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_DRTCHOPS || _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_DALLETH)) { - _uiThread.Post(d => - { - if (this.OnSplitCompleted != null) - { - this.OnSplitCompleted(this, SplitArea.Septimus, frameCounter); - } - }, null); + Split(SplitArea.Septimus, frameCounter); } // if loadscreen starts outside Mzark Tower and doesn't end inside it - else if (loadScreenStartLocationID == (int)Locations.Tamriel && loadScreenStartWorld_X == 6 && loadScreenStartWorld_Y == 11 - && locationID != (int)Locations.TowerOfMzark) + else if (loadScreenStartLocationID == (int)Locations.Tamriel && loadScreenStartWorld_X == 6 && loadScreenStartWorld_Y == 11 && + locationID != (int)Locations.TowerOfMzark && + (_settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_MRWALRUS || _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_DRTCHOPS || _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_DALLETH)) { - _uiThread.Post(d => - { - if (this.OnSplitCompleted != null) - { - this.OnSplitCompleted(this, SplitArea.MzarkTower, frameCounter); - } - }, null); + Split(SplitArea.MzarkTower, frameCounter); } // if loadscreen starts in High Hrothgar's whereabouts and doesn't end inside else if (loadScreenStartLocationID == (int)Locations.Tamriel && loadScreenStartWorld_X == 13 && - (loadScreenStartWorld_Y == -9 || loadScreenStartWorld_Y == -10) - && locationID != (int)Locations.HighHrothgar) + (loadScreenStartWorld_Y == -9 || loadScreenStartWorld_Y == -10) && + locationID != (int)Locations.HighHrothgar) { if (!splitStates[(int)SplitArea.HighHrothgar]) { - _uiThread.Post(d => - { - if (this.OnSplitCompleted != null) - { - this.OnSplitCompleted(this, SplitArea.HighHrothgar, frameCounter); - } - }, null); + Split(SplitArea.HighHrothgar, frameCounter); } else if (_settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_DRTCHOPS || _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_DALLETH) { - _uiThread.Post(d => - { - if (this.OnSplitCompleted != null) - { - this.OnSplitCompleted(this, SplitArea.Council, frameCounter); - } - }, null); + Split(SplitArea.Council, frameCounter); } } } @@ -535,81 +512,151 @@ void MemoryReadThread() { isWaitingLocationIDUpdate = false; - if (locationID == (int)Locations.SkyHavenTemple && mainQuestsWhenEnteringSkyHavenTemple == -1) + if (locationID == (int)Locations.SkyHavenTemple) { - mainQuestsWhenEnteringSkyHavenTemple = mainquestsCompleted; + isSkyHavenTempleVisited = true; } - // if loadscreen starts in Whiterun in front the entry of dragonsreach and doesn't end inside it - if (loadScreenStartLocationID == (int)Locations.WhiterunWorld && loadScreenStartWorld_X == 6 && loadScreenStartWorld_Y == 0 && - locationID != (int)Locations.WhiterunDragonsreach) + // if loadscreen starts in dragonsreach and ends in whiterun + if (loadScreenStartLocationID == (int)Locations.WhiterunDragonsreach && + locationID == (int)Locations.WhiterunWorld && world_X == 6 && world_Y == 0 && _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_GR3YSCALE) { - _uiThread.Post(d => - { - if (this.OnSplitCompleted != null) - { - this.OnSplitCompleted(this, SplitArea.Whiterun, frameCounter); - } - }, null); + Split(SplitArea.Whiterun, frameCounter); + } + // if loadscreen starts Thalmor Embassy and ends in front of its door + else if (loadScreenStartLocationID == (int)Locations.ThalmorEmbassy02 && + locationID == (int)Locations.Tamriel && world_X == -20 && world_Y == 28 && + _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_GR3YSCALE) + { + Split(SplitArea.ThalmorEmbassy, frameCounter); } // if loadscreen starts while in front of the ratway door and doesn't end inside it - else if (loadScreenStartLocationID == (int)Locations.RiftenWorld && loadScreenStartWorld_X == 42 && loadScreenStartWorld_Y == -24 - && locationID != (int)Locations.RiftenRatway01) + else if (loadScreenStartLocationID == (int)Locations.RiftenWorld && loadScreenStartWorld_X == 42 && loadScreenStartWorld_Y == -24 && + locationID != (int)Locations.RiftenRatway01 && + (_settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_MRWALRUS || _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_DRTCHOPS || _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_DALLETH)) { - _uiThread.Post(d => + Split(SplitArea.Esbern, frameCounter); + } + // if loadscreen starts inside the ratway and ends in front of its door + else if (loadScreenStartLocationID == (int)Locations.RiftenRatway01 && + locationID == (int)Locations.RiftenWorld && world_X == 42 && world_Y == -24 && + _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_GR3YSCALE) + { + Split(SplitArea.Esbern, frameCounter); + } + // if loadscreen starts while leaving the Sleeping Giant Inn and ends in front of its door + else if (loadScreenStartLocationID == (int)Locations.RiverwoodSleepingGiantInn && + locationID == (int)Locations.Tamriel && world_X == 5 && world_Y == -11 && + _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_GR3YSCALE) + { + leaveSleepingGiantInnCounter++; + if (leaveSleepingGiantInnCounter == 2) { - if (this.OnSplitCompleted != null) - { - this.OnSplitCompleted(this, SplitArea.Esbern, frameCounter); - } - }, null); + Split(SplitArea.Riverwood, frameCounter); + } } - // if loadscreen starts in Solitude in front of the door of Castle Dour and doesn't end inside it - if (loadScreenStartLocationID == (int)Locations.SolitudeWorld && loadScreenStartWorld_X == -16 && loadScreenStartWorld_Y == 26 - && locationID != (int)Locations.SolitudeCastleDour) + // if loadingscren starts in Sky Haven Temple and ends in Karthspire + else if (loadScreenStartLocationID == (int)Locations.SkyHavenTemple && + locationID == (int)Locations.KarthspireRedoubtWorld && + _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_GR3YSCALE) { - _uiThread.Post(d => + Split(SplitArea.TheWall, frameCounter); + } + // if loadscreen starts inside Septimus' Outpost and ends in front of its door + else if (loadScreenStartLocationID == (int)Locations.SeptimusSignusOutpost && + locationID == (int)Locations.Tamriel && world_X == 28 && world_Y == 34 && + _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_GR3YSCALE) + { + Split(SplitArea.Septimus, frameCounter); + } + // if loadscreen starts inside Mzark Tower and ends outside of it + else if (loadScreenStartLocationID == (int)Locations.TowerOfMzark && + locationID == (int)Locations.Tamriel && world_X == 6 && world_Y == 11 && + _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_GR3YSCALE) + { + Split(SplitArea.MzarkTower, frameCounter); + } + // if loadscreen starts in high hrothgar and ends in front of one of its doors + else if (loadScreenStartLocationID == (int)Locations.HighHrothgar && + locationID == (int)Locations.Tamriel && world_X == 13 && (world_Y == -9 || world_Y == -10) && + (_settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_DRTCHOPS || _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_GR3YSCALE)) + { + if (!isCouncilDone) { - if (this.OnSplitCompleted != null) - { - this.OnSplitCompleted(this, SplitArea.Solitude, frameCounter); - } - }, null); + Split(SplitArea.ClearSky, frameCounter); + } + else if (isCouncilDone && _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_GR3YSCALE) + { + Split(SplitArea.Council, frameCounter); + } + } + // if loadscreen starts in Solitude in front of the door of Castle Dour and doesn't end inside it + else if (loadScreenStartLocationID == (int)Locations.SolitudeWorld && loadScreenStartWorld_X == -16 && loadScreenStartWorld_Y == 26 && + locationID != (int)Locations.SolitudeCastleDour && + (_settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_MRWALRUS || _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_DRTCHOPS || _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_DALLETH)) + { + Split(SplitArea.Solitude, frameCounter); + } + // if loadscreen starts in Solitude Castle Dour and ends outside in front of its door + else if (loadScreenStartLocationID == (int)Locations.SolitudeCastleDour && + locationID == (int)Locations.SolitudeWorld && world_X == -16 && world_Y == 26 && + _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_GR3YSCALE) + { + Split(SplitArea.Solitude, frameCounter); } // if loadscreen starts in Windhelm and doesn't end inside else if (loadScreenStartLocationID == (int)Locations.WindhelmWorld && loadScreenStartWorld_X == 32 && loadScreenStartWorld_Y == 10 && - locationID != (int)Locations.WindhelmPalaceoftheKings) + locationID != (int)Locations.WindhelmPalaceoftheKings && + (_settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_MRWALRUS || _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_DRTCHOPS || _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_DALLETH)) { - _uiThread.Post(d => - { - if (this.OnSplitCompleted != null) - { - this.OnSplitCompleted(this, SplitArea.Windhelm, frameCounter); - } - }, null); + Split(SplitArea.Windhelm, frameCounter); + } + // if loadscreen starts in Windhelm's Palace of the Kings and ends outside + else if (loadScreenStartLocationID == (int)Locations.WindhelmPalaceoftheKings && + locationID == (int)Locations.WindhelmWorld && world_X == 32 && world_Y == 10 && + _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_GR3YSCALE) + { + Split(SplitArea.Windhelm, frameCounter); } // if loadscreen ends in Skuldafn. else if (locationID == (int)Locations.SkuldafnWorld) { - _uiThread.Post(d => - { - if (this.OnSplitCompleted != null) - { - this.OnSplitCompleted(this, SplitArea.Odahviing, frameCounter); - } - }, null); + Split(SplitArea.Odahviing, frameCounter); } // if loadscreen ends in Sovngarde else if (locationID == (int)Locations.Sovngarde) { - _uiThread.Post(d => - { - if (this.OnSplitCompleted != null) - { - this.OnSplitCompleted(this, SplitArea.EnterSovngarde, frameCounter); - } - }, null); + Split(SplitArea.EnterSovngarde, frameCounter); + } + } + if (locationsDiscovered != prevLocationsDiscovered) + { + if (locationID == (int)Locations.Tamriel && ((world_X == 14 && world_Y == -12) || (world_X == 14 && world_Y == -13) || (world_X == 13 && world_Y == -12) || + (world_X == 13 && world_Y == -13)) && + _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_GR3YSCALE) + { + Split(SplitArea.HorseClimb, frameCounter); + } + } + + if (arePlayerControlsDisabled != prevArePlayerControlsDisabled) + { + if (arePlayerControlsDisabled) + { + if (locationID == (int)Locations.Tamriel && world_X == 13 && world_Y == -12 && + (_settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_DRTCHOPS || _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_DALLETH)) + { + Split(SplitArea.CutsceneStart, frameCounter); + } + } + else + { + if (locationID == (int)Locations.Tamriel && world_X == 13 && world_Y == -12 && + (_settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_GR3YSCALE || _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_DALLETH)) + { + Split(SplitArea.CutsceneEnd, frameCounter); + } } } @@ -620,40 +667,26 @@ void MemoryReadThread() if (_settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_MRWALRUS) { - _uiThread.Post(d => - { - if (this.OnSplitCompleted != null) - { - this.OnSplitCompleted(this, SplitArea.Alduin1, frameCounter); - } - }, null); + Split(SplitArea.Alduin1, frameCounter); } } // the only mainquest you can complete here is the council so when a quest completes, walrus' council split - if (mainquestsCompleted == prevMainQuestsCompleted + 1 && locationID == (int)Locations.HighHrothgar && - _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_MRWALRUS) + if (mainquestsCompleted == prevMainQuestsCompleted + 1 && locationID == (int)Locations.HighHrothgar) { - _uiThread.Post(d => + isCouncilDone = true; + + if (_settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_MRWALRUS) { - if (this.OnSplitCompleted != null) - { - this.OnSplitCompleted(this, SplitArea.Council, frameCounter); - } - }, null); + Split(SplitArea.Council, frameCounter); + } } // if alduin is defeated in sovngarde if (isAlduin2Defeated != prevIsAlduin2Defeated && isAlduin2Defeated && locationID == (int)Locations.Sovngarde) { // AlduinDefeated split - _uiThread.Post(d => - { - if (this.OnSplitCompleted != null) - { - this.OnSplitCompleted(this, SplitArea.AlduinDefeated, frameCounter); - } - }, null); + Split(SplitArea.AlduinDefeated, frameCounter); } // reset lastQuest 100 frames (1.5 seconds) after a completion to avoid splitting on a wrong questline. @@ -691,13 +724,7 @@ void MemoryReadThread() if (questlinesCompleted > prevQuestlinesCompleted) { Debug.WriteLineIf(lastQuestCompleted == SplitArea.None, String.Format("[NoLoads] A questline has been completed. - {0}", frameCounter)); - _uiThread.Post(d => - { - if (this.OnSplitCompleted != null) - { - this.OnSplitCompleted(this, lastQuestCompleted, frameCounter); - } - }, null); + Split(lastQuestCompleted, frameCounter); } @@ -719,6 +746,8 @@ void MemoryReadThread() prevWorld_X = world_X; prevWorld_Y = world_Y; prevMainQuestsCompleted = mainquestsCompleted; + prevLocationsDiscovered = locationsDiscovered; + prevArePlayerControlsDisabled = arePlayerControlsDisabled; frameCounter++; Thread.Sleep(15); @@ -737,6 +766,17 @@ void MemoryReadThread() } } + private void Split(SplitArea split, uint frame) + { + _uiThread.Post(d => + { + if (this.OnSplitCompleted != null) + { + this.OnSplitCompleted(this, split, frame); + } + }, null); + } + Process GetGameProcess() { Process game = Process.GetProcesses().FirstOrDefault(p => p.ProcessName.ToLower() == "tesv" diff --git a/SkyrimComponent.cs b/SkyrimComponent.cs index d3b7e84..909f5fc 100644 --- a/SkyrimComponent.cs +++ b/SkyrimComponent.cs @@ -50,7 +50,7 @@ public SkyrimComponent(LiveSplitState state, bool isLayoutComponent) // _gameMemory.OnLoadScreenStarted += gameMemory_OnLoadScreenStarted; // _gameMemory.OnLoadScreenFinished += gameMemory_OnLoadScreenFinished; _gameMemory.OnSplitCompleted += gameMemory_OnSplitCompleted; - state.OnReset += state_OnReset; + state.OnStart += State_OnStart; _gameMemory.StartMonitoring(); } @@ -58,15 +58,16 @@ public void Dispose() { this.Disposed = true; - _state.OnReset -= state_OnReset; + _state.OnStart -= State_OnStart; if (_gameMemory != null) { _gameMemory.Stop(); } + } - void state_OnReset(object sender, TimerPhase e) + void State_OnStart(object sender, EventArgs e) { _gameMemory.resetSplitStates(); } @@ -161,6 +162,9 @@ void gameMemory_OnSplitCompleted(object sender, GameMemory.SplitArea split, uint (split == GameMemory.SplitArea.Septimus && this.Settings.Septimus) || (split == GameMemory.SplitArea.MzarkTower && this.Settings.MzarkTower) || (split == GameMemory.SplitArea.ClearSky && this.Settings.ClearSky) || + (split == GameMemory.SplitArea.HorseClimb && this.Settings.HorseClimb) || + (split == GameMemory.SplitArea.CutsceneEnd && this.Settings.CutsceneEnd) || + (split == GameMemory.SplitArea.CutsceneStart && this.Settings.CutsceneStart) || (split == GameMemory.SplitArea.Alduin1 && this.Settings.Alduin1) || (split == GameMemory.SplitArea.HighHrothgar && this.Settings.HighHrothgar) || (split == GameMemory.SplitArea.Solitude && this.Settings.Solitude) || diff --git a/SkyrimSettings.Designer.cs b/SkyrimSettings.Designer.cs index 6219874..df1142a 100644 --- a/SkyrimSettings.Designer.cs +++ b/SkyrimSettings.Designer.cs @@ -49,6 +49,7 @@ private void InitializeComponent() this.rbMrwalrus = new System.Windows.Forms.RadioButton(); this.rbDrtchops = new System.Windows.Forms.RadioButton(); this.rbDalleth = new System.Windows.Forms.RadioButton(); + this.rbGr3yscale = new System.Windows.Forms.RadioButton(); this.flp_AnyPercentSplits = new System.Windows.Forms.FlowLayoutPanel(); this.chkWhiterun = new System.Windows.Forms.CheckBox(); this.chkThalmorEmbassy = new System.Windows.Forms.CheckBox(); @@ -58,7 +59,8 @@ private void InitializeComponent() this.chkSeptimus = new System.Windows.Forms.CheckBox(); this.chkMzarkTower = new System.Windows.Forms.CheckBox(); this.chkClearSky = new System.Windows.Forms.CheckBox(); - this.chkReadScroll = new System.Windows.Forms.CheckBox(); + this.chkHorseClimb = new System.Windows.Forms.CheckBox(); + this.chkCutsceneStart = new System.Windows.Forms.CheckBox(); this.chkAlduin1 = new System.Windows.Forms.CheckBox(); this.chkHighHrothgar = new System.Windows.Forms.CheckBox(); this.chkSolitude = new System.Windows.Forms.CheckBox(); @@ -68,6 +70,7 @@ private void InitializeComponent() this.chkEnterSovngarde = new System.Windows.Forms.CheckBox(); this.chkAlduinDefeated = new System.Windows.Forms.CheckBox(); this.llCheckAll = new System.Windows.Forms.LinkLabel(); + this.chkCutsceneEnd = new System.Windows.Forms.CheckBox(); this.tlpMain.SuspendLayout(); this.gbStartSplits.SuspendLayout(); this.tlpStartSplits.SuspendLayout(); @@ -322,13 +325,15 @@ private void InitializeComponent() // this.tlpAnyPercentTemplate.AutoSize = true; this.tlpAnyPercentTemplate.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.tlpAnyPercentTemplate.ColumnCount = 3; - this.tlpAnyPercentTemplate.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); - this.tlpAnyPercentTemplate.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); - this.tlpAnyPercentTemplate.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); + this.tlpAnyPercentTemplate.ColumnCount = 4; + this.tlpAnyPercentTemplate.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25.00062F)); + this.tlpAnyPercentTemplate.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25.00062F)); + this.tlpAnyPercentTemplate.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25.00062F)); + this.tlpAnyPercentTemplate.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 24.99813F)); this.tlpAnyPercentTemplate.Controls.Add(this.rbMrwalrus, 0, 0); this.tlpAnyPercentTemplate.Controls.Add(this.rbDrtchops, 1, 0); - this.tlpAnyPercentTemplate.Controls.Add(this.rbDalleth, 2, 0); + this.tlpAnyPercentTemplate.Controls.Add(this.rbDalleth, 3, 0); + this.tlpAnyPercentTemplate.Controls.Add(this.rbGr3yscale, 2, 0); this.tlpAnyPercentTemplate.Dock = System.Windows.Forms.DockStyle.Fill; this.tlpAnyPercentTemplate.Location = new System.Drawing.Point(3, 16); this.tlpAnyPercentTemplate.Name = "tlpAnyPercentTemplate"; @@ -346,33 +351,44 @@ private void InitializeComponent() this.rbMrwalrus.TabIndex = 0; this.rbMrwalrus.Text = "MrWalrus"; this.rbMrwalrus.UseVisualStyleBackColor = true; - this.rbMrwalrus.CheckedChanged += new System.EventHandler(this.rbDrtchops_CheckedChanged); + this.rbMrwalrus.CheckedChanged += new System.EventHandler(this.templateRadioButtonChanged); // // rbDrtchops // this.rbDrtchops.AutoSize = true; - this.rbDrtchops.Location = new System.Drawing.Point(145, 3); + this.rbDrtchops.Location = new System.Drawing.Point(109, 3); this.rbDrtchops.Name = "rbDrtchops"; this.rbDrtchops.Size = new System.Drawing.Size(73, 17); this.rbDrtchops.TabIndex = 1; this.rbDrtchops.Text = "DrTChops"; this.rbDrtchops.UseVisualStyleBackColor = true; - this.rbDrtchops.CheckedChanged += new System.EventHandler(this.rbDrtchops_CheckedChanged); + this.rbDrtchops.CheckedChanged += new System.EventHandler(this.templateRadioButtonChanged); // // rbDalleth // this.rbDalleth.AutoSize = true; - this.rbDalleth.Location = new System.Drawing.Point(287, 3); + this.rbDalleth.Location = new System.Drawing.Point(321, 3); this.rbDalleth.Name = "rbDalleth"; this.rbDalleth.Size = new System.Drawing.Size(58, 17); this.rbDalleth.TabIndex = 2; this.rbDalleth.Text = "Dalleth"; this.rbDalleth.UseVisualStyleBackColor = true; - this.rbDalleth.CheckedChanged += new System.EventHandler(this.rbDalleth_CheckedChanged); + this.rbDalleth.CheckedChanged += new System.EventHandler(this.templateRadioButtonChanged); + // + // rbGr3yscale + // + this.rbGr3yscale.AutoSize = true; + this.rbGr3yscale.Location = new System.Drawing.Point(215, 3); + this.rbGr3yscale.Name = "rbGr3yscale"; + this.rbGr3yscale.Size = new System.Drawing.Size(70, 17); + this.rbGr3yscale.TabIndex = 3; + this.rbGr3yscale.TabStop = true; + this.rbGr3yscale.Text = "gr3yscale"; + this.rbGr3yscale.UseVisualStyleBackColor = true; + this.rbGr3yscale.CheckedChanged += new System.EventHandler(this.templateRadioButtonChanged); // // flp_AnyPercentSplits // - this.flp_AnyPercentSplits.AutoScroll = true; this.flp_AnyPercentSplits.AutoSize = true; this.flp_AnyPercentSplits.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; this.flp_AnyPercentSplits.Controls.Add(this.chkWhiterun); @@ -383,7 +399,9 @@ private void InitializeComponent() this.flp_AnyPercentSplits.Controls.Add(this.chkSeptimus); this.flp_AnyPercentSplits.Controls.Add(this.chkMzarkTower); this.flp_AnyPercentSplits.Controls.Add(this.chkClearSky); - this.flp_AnyPercentSplits.Controls.Add(this.chkReadScroll); + this.flp_AnyPercentSplits.Controls.Add(this.chkHorseClimb); + this.flp_AnyPercentSplits.Controls.Add(this.chkCutsceneStart); + this.flp_AnyPercentSplits.Controls.Add(this.chkCutsceneEnd); this.flp_AnyPercentSplits.Controls.Add(this.chkAlduin1); this.flp_AnyPercentSplits.Controls.Add(this.chkHighHrothgar); this.flp_AnyPercentSplits.Controls.Add(this.chkSolitude); @@ -395,7 +413,7 @@ private void InitializeComponent() this.flp_AnyPercentSplits.Dock = System.Windows.Forms.DockStyle.Top; this.flp_AnyPercentSplits.FlowDirection = System.Windows.Forms.FlowDirection.TopDown; this.flp_AnyPercentSplits.Location = new System.Drawing.Point(3, 64); - this.flp_AnyPercentSplits.MaximumSize = new System.Drawing.Size(0, 170); + this.flp_AnyPercentSplits.MaximumSize = new System.Drawing.Size(432, 170); this.flp_AnyPercentSplits.Name = "flp_AnyPercentSplits"; this.flp_AnyPercentSplits.Size = new System.Drawing.Size(432, 161); this.flp_AnyPercentSplits.TabIndex = 21; @@ -405,7 +423,7 @@ private void InitializeComponent() this.chkWhiterun.AutoSize = true; this.chkWhiterun.Dock = System.Windows.Forms.DockStyle.Top; this.chkWhiterun.Location = new System.Drawing.Point(3, 3); - this.chkWhiterun.Margin = new System.Windows.Forms.Padding(3, 3, 15, 3); + this.chkWhiterun.Margin = new System.Windows.Forms.Padding(3, 3, 50, 3); this.chkWhiterun.Name = "chkWhiterun"; this.chkWhiterun.Size = new System.Drawing.Size(109, 17); this.chkWhiterun.TabIndex = 0; @@ -417,7 +435,7 @@ private void InitializeComponent() this.chkThalmorEmbassy.AutoSize = true; this.chkThalmorEmbassy.Dock = System.Windows.Forms.DockStyle.Top; this.chkThalmorEmbassy.Location = new System.Drawing.Point(3, 26); - this.chkThalmorEmbassy.Margin = new System.Windows.Forms.Padding(3, 3, 15, 3); + this.chkThalmorEmbassy.Margin = new System.Windows.Forms.Padding(3, 3, 50, 3); this.chkThalmorEmbassy.Name = "chkThalmorEmbassy"; this.chkThalmorEmbassy.Size = new System.Drawing.Size(109, 17); this.chkThalmorEmbassy.TabIndex = 1; @@ -429,7 +447,7 @@ private void InitializeComponent() this.chkEsbern.AutoSize = true; this.chkEsbern.Dock = System.Windows.Forms.DockStyle.Top; this.chkEsbern.Location = new System.Drawing.Point(3, 49); - this.chkEsbern.Margin = new System.Windows.Forms.Padding(3, 3, 15, 3); + this.chkEsbern.Margin = new System.Windows.Forms.Padding(3, 3, 50, 3); this.chkEsbern.Name = "chkEsbern"; this.chkEsbern.Size = new System.Drawing.Size(109, 17); this.chkEsbern.TabIndex = 6; @@ -441,7 +459,7 @@ private void InitializeComponent() this.chkRiverwood.AutoSize = true; this.chkRiverwood.Dock = System.Windows.Forms.DockStyle.Top; this.chkRiverwood.Location = new System.Drawing.Point(3, 72); - this.chkRiverwood.Margin = new System.Windows.Forms.Padding(3, 3, 15, 3); + this.chkRiverwood.Margin = new System.Windows.Forms.Padding(3, 3, 50, 3); this.chkRiverwood.Name = "chkRiverwood"; this.chkRiverwood.Size = new System.Drawing.Size(109, 17); this.chkRiverwood.TabIndex = 7; @@ -453,7 +471,7 @@ private void InitializeComponent() this.chkTheWall.AutoSize = true; this.chkTheWall.Dock = System.Windows.Forms.DockStyle.Top; this.chkTheWall.Location = new System.Drawing.Point(3, 95); - this.chkTheWall.Margin = new System.Windows.Forms.Padding(3, 3, 15, 3); + this.chkTheWall.Margin = new System.Windows.Forms.Padding(3, 3, 50, 3); this.chkTheWall.Name = "chkTheWall"; this.chkTheWall.Size = new System.Drawing.Size(109, 17); this.chkTheWall.TabIndex = 8; @@ -465,7 +483,7 @@ private void InitializeComponent() this.chkSeptimus.AutoSize = true; this.chkSeptimus.Dock = System.Windows.Forms.DockStyle.Top; this.chkSeptimus.Location = new System.Drawing.Point(3, 118); - this.chkSeptimus.Margin = new System.Windows.Forms.Padding(3, 3, 15, 3); + this.chkSeptimus.Margin = new System.Windows.Forms.Padding(3, 3, 50, 3); this.chkSeptimus.Name = "chkSeptimus"; this.chkSeptimus.Size = new System.Drawing.Size(109, 17); this.chkSeptimus.TabIndex = 9; @@ -477,7 +495,7 @@ private void InitializeComponent() this.chkMzarkTower.AutoSize = true; this.chkMzarkTower.Dock = System.Windows.Forms.DockStyle.Top; this.chkMzarkTower.Location = new System.Drawing.Point(3, 141); - this.chkMzarkTower.Margin = new System.Windows.Forms.Padding(3, 3, 15, 3); + this.chkMzarkTower.Margin = new System.Windows.Forms.Padding(3, 3, 50, 3); this.chkMzarkTower.Name = "chkMzarkTower"; this.chkMzarkTower.Size = new System.Drawing.Size(109, 17); this.chkMzarkTower.TabIndex = 10; @@ -488,34 +506,44 @@ private void InitializeComponent() // this.chkClearSky.AutoSize = true; this.chkClearSky.Dock = System.Windows.Forms.DockStyle.Top; - this.chkClearSky.Location = new System.Drawing.Point(130, 3); - this.chkClearSky.Margin = new System.Windows.Forms.Padding(3, 3, 15, 3); + this.chkClearSky.Location = new System.Drawing.Point(165, 3); + this.chkClearSky.Margin = new System.Windows.Forms.Padding(3, 3, 50, 3); this.chkClearSky.Name = "chkClearSky"; - this.chkClearSky.Size = new System.Drawing.Size(145, 17); + this.chkClearSky.Size = new System.Drawing.Size(96, 17); this.chkClearSky.TabIndex = 11; this.chkClearSky.Text = "Clear Sky"; this.chkClearSky.UseVisualStyleBackColor = true; // - // chkReadScroll + // chkHorseClimb + // + this.chkHorseClimb.AutoSize = true; + this.chkHorseClimb.Location = new System.Drawing.Point(165, 26); + this.chkHorseClimb.Name = "chkHorseClimb"; + this.chkHorseClimb.Size = new System.Drawing.Size(79, 17); + this.chkHorseClimb.TabIndex = 21; + this.chkHorseClimb.Text = "HorseClimb"; + this.chkHorseClimb.UseVisualStyleBackColor = true; // - this.chkReadScroll.AutoSize = true; - this.chkReadScroll.Dock = System.Windows.Forms.DockStyle.Top; - this.chkReadScroll.Location = new System.Drawing.Point(130, 26); - this.chkReadScroll.Margin = new System.Windows.Forms.Padding(3, 3, 15, 3); - this.chkReadScroll.Name = "chkReadScroll"; - this.chkReadScroll.Size = new System.Drawing.Size(145, 17); - this.chkReadScroll.TabIndex = 20; - this.chkReadScroll.Text = "Reading the Elder Scrolls"; - this.chkReadScroll.UseVisualStyleBackColor = true; + // chkCutsceneStart + // + this.chkCutsceneStart.AutoSize = true; + this.chkCutsceneStart.Dock = System.Windows.Forms.DockStyle.Top; + this.chkCutsceneStart.Location = new System.Drawing.Point(165, 49); + this.chkCutsceneStart.Margin = new System.Windows.Forms.Padding(3, 3, 50, 3); + this.chkCutsceneStart.Name = "chkCutsceneStart"; + this.chkCutsceneStart.Size = new System.Drawing.Size(96, 17); + this.chkCutsceneStart.TabIndex = 20; + this.chkCutsceneStart.Text = "Cutscene Start"; + this.chkCutsceneStart.UseVisualStyleBackColor = true; // // chkAlduin1 // this.chkAlduin1.AutoSize = true; this.chkAlduin1.Dock = System.Windows.Forms.DockStyle.Top; - this.chkAlduin1.Location = new System.Drawing.Point(130, 49); - this.chkAlduin1.Margin = new System.Windows.Forms.Padding(3, 3, 15, 3); + this.chkAlduin1.Location = new System.Drawing.Point(165, 95); + this.chkAlduin1.Margin = new System.Windows.Forms.Padding(3, 3, 50, 3); this.chkAlduin1.Name = "chkAlduin1"; - this.chkAlduin1.Size = new System.Drawing.Size(145, 17); + this.chkAlduin1.Size = new System.Drawing.Size(96, 17); this.chkAlduin1.TabIndex = 18; this.chkAlduin1.Text = "Alduin 1"; this.chkAlduin1.UseVisualStyleBackColor = true; @@ -524,10 +552,10 @@ private void InitializeComponent() // this.chkHighHrothgar.AutoSize = true; this.chkHighHrothgar.Dock = System.Windows.Forms.DockStyle.Top; - this.chkHighHrothgar.Location = new System.Drawing.Point(130, 72); - this.chkHighHrothgar.Margin = new System.Windows.Forms.Padding(3, 3, 15, 3); + this.chkHighHrothgar.Location = new System.Drawing.Point(165, 118); + this.chkHighHrothgar.Margin = new System.Windows.Forms.Padding(3, 3, 50, 3); this.chkHighHrothgar.Name = "chkHighHrothgar"; - this.chkHighHrothgar.Size = new System.Drawing.Size(145, 17); + this.chkHighHrothgar.Size = new System.Drawing.Size(96, 17); this.chkHighHrothgar.TabIndex = 12; this.chkHighHrothgar.Text = "High Hrothgar"; this.chkHighHrothgar.UseVisualStyleBackColor = true; @@ -536,10 +564,10 @@ private void InitializeComponent() // this.chkSolitude.AutoSize = true; this.chkSolitude.Dock = System.Windows.Forms.DockStyle.Top; - this.chkSolitude.Location = new System.Drawing.Point(130, 95); - this.chkSolitude.Margin = new System.Windows.Forms.Padding(3, 3, 15, 3); + this.chkSolitude.Location = new System.Drawing.Point(165, 141); + this.chkSolitude.Margin = new System.Windows.Forms.Padding(3, 3, 50, 3); this.chkSolitude.Name = "chkSolitude"; - this.chkSolitude.Size = new System.Drawing.Size(145, 17); + this.chkSolitude.Size = new System.Drawing.Size(96, 17); this.chkSolitude.TabIndex = 13; this.chkSolitude.Text = "Solitude"; this.chkSolitude.UseVisualStyleBackColor = true; @@ -548,10 +576,10 @@ private void InitializeComponent() // this.chkWindhelm.AutoSize = true; this.chkWindhelm.Dock = System.Windows.Forms.DockStyle.Top; - this.chkWindhelm.Location = new System.Drawing.Point(130, 118); - this.chkWindhelm.Margin = new System.Windows.Forms.Padding(3, 3, 15, 3); + this.chkWindhelm.Location = new System.Drawing.Point(314, 3); + this.chkWindhelm.Margin = new System.Windows.Forms.Padding(3, 3, 50, 3); this.chkWindhelm.Name = "chkWindhelm"; - this.chkWindhelm.Size = new System.Drawing.Size(145, 17); + this.chkWindhelm.Size = new System.Drawing.Size(106, 17); this.chkWindhelm.TabIndex = 14; this.chkWindhelm.Text = "Windhelm"; this.chkWindhelm.UseVisualStyleBackColor = true; @@ -560,10 +588,10 @@ private void InitializeComponent() // this.chkCouncil.AutoSize = true; this.chkCouncil.Dock = System.Windows.Forms.DockStyle.Top; - this.chkCouncil.Location = new System.Drawing.Point(130, 141); - this.chkCouncil.Margin = new System.Windows.Forms.Padding(3, 3, 15, 3); + this.chkCouncil.Location = new System.Drawing.Point(314, 26); + this.chkCouncil.Margin = new System.Windows.Forms.Padding(3, 3, 50, 3); this.chkCouncil.Name = "chkCouncil"; - this.chkCouncil.Size = new System.Drawing.Size(145, 17); + this.chkCouncil.Size = new System.Drawing.Size(106, 17); this.chkCouncil.TabIndex = 15; this.chkCouncil.Text = "Council"; this.chkCouncil.UseVisualStyleBackColor = true; @@ -572,8 +600,8 @@ private void InitializeComponent() // this.chkOdahviing.AutoSize = true; this.chkOdahviing.Dock = System.Windows.Forms.DockStyle.Top; - this.chkOdahviing.Location = new System.Drawing.Point(293, 3); - this.chkOdahviing.Margin = new System.Windows.Forms.Padding(3, 3, 15, 3); + this.chkOdahviing.Location = new System.Drawing.Point(314, 49); + this.chkOdahviing.Margin = new System.Windows.Forms.Padding(3, 3, 50, 3); this.chkOdahviing.Name = "chkOdahviing"; this.chkOdahviing.Size = new System.Drawing.Size(106, 17); this.chkOdahviing.TabIndex = 16; @@ -584,8 +612,8 @@ private void InitializeComponent() // this.chkEnterSovngarde.AutoSize = true; this.chkEnterSovngarde.Dock = System.Windows.Forms.DockStyle.Top; - this.chkEnterSovngarde.Location = new System.Drawing.Point(293, 26); - this.chkEnterSovngarde.Margin = new System.Windows.Forms.Padding(3, 3, 15, 3); + this.chkEnterSovngarde.Location = new System.Drawing.Point(314, 72); + this.chkEnterSovngarde.Margin = new System.Windows.Forms.Padding(3, 3, 50, 3); this.chkEnterSovngarde.Name = "chkEnterSovngarde"; this.chkEnterSovngarde.Size = new System.Drawing.Size(106, 17); this.chkEnterSovngarde.TabIndex = 17; @@ -598,8 +626,8 @@ private void InitializeComponent() this.chkAlduinDefeated.Checked = true; this.chkAlduinDefeated.CheckState = System.Windows.Forms.CheckState.Checked; this.chkAlduinDefeated.Dock = System.Windows.Forms.DockStyle.Top; - this.chkAlduinDefeated.Location = new System.Drawing.Point(293, 49); - this.chkAlduinDefeated.Margin = new System.Windows.Forms.Padding(3, 3, 15, 3); + this.chkAlduinDefeated.Location = new System.Drawing.Point(314, 95); + this.chkAlduinDefeated.Margin = new System.Windows.Forms.Padding(3, 3, 50, 3); this.chkAlduinDefeated.Name = "chkAlduinDefeated"; this.chkAlduinDefeated.Size = new System.Drawing.Size(106, 17); this.chkAlduinDefeated.TabIndex = 5; @@ -618,6 +646,16 @@ private void InitializeComponent() this.llCheckAll.Text = "Activate/Deactivate All"; this.llCheckAll.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.llCheckAll_LinkClicked); // + // chkCutsceneEnd + // + this.chkCutsceneEnd.AutoSize = true; + this.chkCutsceneEnd.Location = new System.Drawing.Point(165, 72); + this.chkCutsceneEnd.Name = "chkCutsceneEnd"; + this.chkCutsceneEnd.Size = new System.Drawing.Size(93, 17); + this.chkCutsceneEnd.TabIndex = 22; + this.chkCutsceneEnd.Text = "Cutscene End"; + this.chkCutsceneEnd.UseVisualStyleBackColor = true; + // // SkyrimSettings // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -693,8 +731,11 @@ private void InitializeComponent() private System.Windows.Forms.GroupBox gbAnyPercentTemplate; private System.Windows.Forms.TableLayoutPanel tlpAnyPercentTemplate; private System.Windows.Forms.RadioButton rbDalleth; - private System.Windows.Forms.CheckBox chkReadScroll; + private System.Windows.Forms.CheckBox chkCutsceneStart; private System.Windows.Forms.FlowLayoutPanel flp_AnyPercentSplits; private System.Windows.Forms.LinkLabel llCheckAll; + private System.Windows.Forms.RadioButton rbGr3yscale; + private System.Windows.Forms.CheckBox chkHorseClimb; + private System.Windows.Forms.CheckBox chkCutsceneEnd; } } diff --git a/SkyrimSettings.cs b/SkyrimSettings.cs index 5259165..3096821 100644 --- a/SkyrimSettings.cs +++ b/SkyrimSettings.cs @@ -19,6 +19,9 @@ public partial class SkyrimSettings : UserControl public bool Septimus { get; set; } public bool MzarkTower { get; set; } public bool ClearSky { get; set; } + public bool HorseClimb { get; set; } + public bool CutsceneStart { get; set; } + public bool CutsceneEnd { get; set; } public bool Alduin1 { get; set; } public bool HighHrothgar{ get; set; } public bool Solitude { get; set; } @@ -34,6 +37,7 @@ public partial class SkyrimSettings : UserControl public const string TEMPLATE_MRWALRUS = "MrWalrus"; public const string TEMPLATE_DRTCHOPS = "DrTChops"; + public const string TEMPLATE_GR3YSCALE = "gr3yscale"; public const string TEMPLATE_DALLETH = "Dalleth"; private const bool DEFAULT_DRAWWITHOUTLOADS = true; @@ -48,6 +52,9 @@ public partial class SkyrimSettings : UserControl private const bool DEFAULT_SEPTIMUS = false; private const bool DEFAULT_MZARKTOWER = false; private const bool DEFAULT_CLEARSKY = false; + private const bool DEFAULT_HORSECLIMB = false; + private const bool DEFAULT_CUTSCENESTART = false; + private const bool DEFAULT_CUTSCENEEND = false; private const bool DEFAULT_ALDUIN1 = false; private const bool DEFAULT_HIGHHROTHGAR = false; private const bool DEFAULT_SOLITUDE = false; @@ -59,7 +66,7 @@ public partial class SkyrimSettings : UserControl private const bool DEFAULT_COMPANIONS = false; private const bool DEFAULT_THIEVESGUILD = false; private const bool DEFAULT_COLLEGEOFWINTERHOLD = false; - private const string DEFAULT_ANYPERCENTTEMPLATE = "MrWalrus"; + private const string DEFAULT_ANYPERCENTTEMPLATE = TEMPLATE_MRWALRUS; public SkyrimSettings() { @@ -77,6 +84,9 @@ public SkyrimSettings() this.chkSeptimus.DataBindings.Add("Checked", this, "Septimus", false, DataSourceUpdateMode.OnPropertyChanged); this.chkMzarkTower.DataBindings.Add("Checked", this, "MzarkTower", false, DataSourceUpdateMode.OnPropertyChanged); this.chkClearSky.DataBindings.Add("Checked", this, "ClearSky", false, DataSourceUpdateMode.OnPropertyChanged); + this.chkHorseClimb.DataBindings.Add("Checked", this, "HorseClimb", false, DataSourceUpdateMode.OnPropertyChanged); + this.chkCutsceneStart.DataBindings.Add("Checked", this, "CutsceneStart", false, DataSourceUpdateMode.OnPropertyChanged); + this.chkCutsceneEnd.DataBindings.Add("Checked", this, "CutsceneEnd", false, DataSourceUpdateMode.OnPropertyChanged); this.chkAlduin1.DataBindings.Add("Checked", this, "Alduin1", false, DataSourceUpdateMode.OnPropertyChanged); this.chkHighHrothgar.DataBindings.Add("Checked", this, "HighHrothgar", false, DataSourceUpdateMode.OnPropertyChanged); this.chkSolitude.DataBindings.Add("Checked", this, "Solitude", false, DataSourceUpdateMode.OnPropertyChanged); @@ -102,6 +112,9 @@ public SkyrimSettings() this.Septimus = DEFAULT_SEPTIMUS; this.MzarkTower = DEFAULT_MZARKTOWER; this.ClearSky = DEFAULT_CLEARSKY; + this.HorseClimb = DEFAULT_HORSECLIMB; + this.CutsceneStart = DEFAULT_CUTSCENESTART; + this.CutsceneEnd = DEFAULT_CUTSCENEEND; this.Alduin1 = DEFAULT_ALDUIN1; this.HighHrothgar = DEFAULT_HIGHHROTHGAR; this.Solitude = DEFAULT_SOLITUDE; @@ -134,6 +147,9 @@ public XmlNode GetSettings(XmlDocument doc) settingsNode.AppendChild(ToElement(doc, "Septimus", this.Septimus)); settingsNode.AppendChild(ToElement(doc, "MzarkTower", this.MzarkTower)); settingsNode.AppendChild(ToElement(doc, "ClearSky", this.ClearSky)); + settingsNode.AppendChild(ToElement(doc, "HorseClimb", this.HorseClimb)); + settingsNode.AppendChild(ToElement(doc, "CutsceneStart", this.CutsceneStart)); + settingsNode.AppendChild(ToElement(doc, "CutsceneEnd", this.CutsceneEnd)); settingsNode.AppendChild(ToElement(doc, "Alduin1", this.Alduin1)); settingsNode.AppendChild(ToElement(doc, "HighHrothgar", this.HighHrothgar)); settingsNode.AppendChild(ToElement(doc, "Solitude", this.Solitude)); @@ -166,6 +182,9 @@ public void SetSettings(XmlNode settings) this.Septimus = ParseBool(settings, "Septimus", DEFAULT_SEPTIMUS); this.MzarkTower = ParseBool(settings, "MzarkTower", DEFAULT_RIVERWOOD); this.ClearSky = ParseBool(settings, "ClearSky", DEFAULT_CLEARSKY); + this.HorseClimb = ParseBool(settings, "HorseClimb", DEFAULT_HORSECLIMB); + this.CutsceneStart = ParseBool(settings, "CutsceneStart", DEFAULT_CUTSCENESTART); + this.CutsceneEnd = ParseBool(settings, "CutsceneEnd", DEFAULT_CUTSCENEEND); this.Alduin1 = ParseBool(settings, "Alduin1", DEFAULT_ALDUIN1); this.HighHrothgar = ParseBool(settings, "HighHrothgar", DEFAULT_HIGHHROTHGAR); this.Solitude = ParseBool(settings, "Solitude", DEFAULT_SOLITUDE); @@ -180,8 +199,8 @@ public void SetSettings(XmlNode settings) if (element["AnyPercentTemplate"] != null) { - this.AnyPercentTemplate = element["AnyPercentTemplate"].InnerText.Equals(TEMPLATE_MRWALRUS) || - element["AnyPercentTemplate"].InnerText.Equals(TEMPLATE_DRTCHOPS) || element["AnyPercentTemplate"].InnerText.Equals(TEMPLATE_DALLETH) + this.AnyPercentTemplate = element["AnyPercentTemplate"].InnerText.Equals(TEMPLATE_MRWALRUS) || element["AnyPercentTemplate"].InnerText.Equals(TEMPLATE_DRTCHOPS) || + element["AnyPercentTemplate"].InnerText.Equals(TEMPLATE_GR3YSCALE) || element["AnyPercentTemplate"].InnerText.Equals(TEMPLATE_DALLETH) ? element["AnyPercentTemplate"].InnerText : DEFAULT_ANYPERCENTTEMPLATE; } @@ -190,8 +209,9 @@ public void SetSettings(XmlNode settings) this.AnyPercentTemplate = DEFAULT_ANYPERCENTTEMPLATE; } - this.rbMrwalrus.Checked = this.AnyPercentTemplate == TEMPLATE_MRWALRUS; + this.rbMrwalrus.Checked = this.AnyPercentTemplate == TEMPLATE_MRWALRUS; this.rbDrtchops.Checked = this.AnyPercentTemplate == TEMPLATE_DRTCHOPS; + this.rbGr3yscale.Checked = this.AnyPercentTemplate == TEMPLATE_GR3YSCALE; this.rbDalleth.Checked = this.AnyPercentTemplate == TEMPLATE_DALLETH; UpdateTemplate(); } @@ -225,20 +245,16 @@ private void UpdateTemplate() { this.AnyPercentTemplate = TEMPLATE_DALLETH; } - this.chkReadScroll.Enabled = this.AnyPercentTemplate == TEMPLATE_DRTCHOPS; - } - - private void rbDrtchops_CheckedChanged(object sender, EventArgs e) - { - UpdateTemplate(); - } - - private void rbMrwalrus_CheckedChanged(object sender, EventArgs e) - { - UpdateTemplate(); + else if (rbGr3yscale.Checked) + { + this.AnyPercentTemplate = TEMPLATE_GR3YSCALE; + } + this.chkHorseClimb.Enabled = this.AnyPercentTemplate == TEMPLATE_GR3YSCALE; + this.chkCutsceneStart.Enabled = (this.AnyPercentTemplate == TEMPLATE_DRTCHOPS || this.AnyPercentTemplate == TEMPLATE_DALLETH); + this.chkCutsceneEnd.Enabled = (this.AnyPercentTemplate == TEMPLATE_GR3YSCALE || this.AnyPercentTemplate == TEMPLATE_DALLETH); } - private void rbDalleth_CheckedChanged(object sender, EventArgs e) + private void templateRadioButtonChanged(object sender, EventArgs e) { UpdateTemplate(); } diff --git a/config/TESV.CT b/config/TESV.CT index 9f55429..0a47c7a 100644 --- a/config/TESV.CT +++ b/config/TESV.CT @@ -2,44 +2,250 @@ - 0 - "isPaused" - + 52 + "Location" + 80000008 - Byte -
"TESV.exe"+172E85F
-
- - 1 - "isLoading" - - 80000008 - Byte -
"TESV.exe"+17337CC
+ 1 + + + 9 + "X world coord" + + 80000008 + 4 Bytes +
"TESV.exe"+0172E864
+ + 64 + +
+ + 11 + "Y world coord" + + 80000008 + 4 Bytes +
"TESV.exe"+0172E864
+ + 68 + +
+ + 26 + "Location ID" + + 1 + 80000008 + 4 Bytes +
"TESV.exe"+01738308
+ + EC + 670 + 78 + 4 + +
+ + 18 + "isInTamriel" + + 80000008 + Byte +
TESV.exe+173815C
+
+
- 3 - "isLoadscreen" - + 53 + "Game state" + 80000008 - Byte -
"TESV.exe"+EE3561
+ 1 + + + 1 + "isLoading" + + 80000008 + Byte +
"TESV.exe"+17337CC
+
+ + 3 + "isLoadscreen" + + 80000008 + Byte +
"TESV.exe"+EE3561
+
+ + 5 + "IsInFadeOut" + + 80000008 + Byte +
TESV.exe+172EE2E
+
+ + 27 + "isInEscapeMenu" + + 80000008 + Byte +
TESV.exe+172E85E
+
+ + 0 + "isPaused" + + 80000008 + Byte +
"TESV.exe"+172E85F
+
+ + 58 + "ArePlayerControlsDisabled" + + 80000008 + Byte +
TESV.exe+172EF30
+ + F + +
+ + 4 + "AreHandsTied?" + + 80000008 + Byte +
TESV.exe+172EE2C
+
+
- 5 - "IsInFadeOut" - + 48 + "Ingame Stats" + 80000008 - Byte -
TESV.exe+172EE2E
-
- - 4 - "AreHandsTied?" - - 80000008 - Byte -
TESV.exe+172EE2C
+ 1 + + + 51 + "General" + + 80000008 + 1 + + + 47 + "locationsDiscovered" + + 80000008 + 4 Bytes +
"TESV.exe"+00EE6C34
+ + 170 + +
+
+
+ + 49 + "Quest" + + 80000008 + 1 + + + 38 + "mainQuestsCompleted" + + 80000008 + 4 Bytes +
"TESV.exe"+00EE6C34
+ + 350 + +
+ + 31 + "darkBrotherhoodQuestsCompleted" + + 80000008 + 4 Bytes +
"TESV.exe"+00EE6C34
+ + 3B4 + +
+ + 29 + "collegeQuestsCompleted" + + 80000008 + 4 Bytes +
"TESV.exe"+00EE6C34
+ + 38C + +
+ + 28 + "companionsQuestsCompleted" + + 80000008 + 4 Bytes +
"TESV.exe"+00EE6C34
+ + 378 + +
+ + 34 + "thievesGuildQuestsCompleted" + + 80000008 + 4 Bytes +
"TESV.exe"+00EE6C34
+ + 3A0 + +
+ + 20 + "questLinesCompleted" + + 80000008 + 4 Bytes +
"TESV.exe"+00EE6C34
+ + 3F0 + +
+
+
+ + 50 + "Magic" + + 80000008 + 1 + + + 41 + "wordsOfPowerLearned" + + 80000008 + 4 Bytes +
"TESV.exe"+00EE6C34
+ + 558 + +
+
+
+
12 @@ -49,144 +255,6 @@ Byte
TESV.exe+1711608
- - 9 - "X world coord" - - 80000008 - 4 Bytes -
"TESV.exe"+0172E864
- - 64 - -
- - 11 - "Y world coord" - - 80000008 - 4 Bytes -
"TESV.exe"+0172E864
- - 68 - -
- - 18 - "isInTamriel" - - 80000008 - Byte -
TESV.exe+173815C
-
- - 20 - "questLinesCompleted" - - 80000008 - 4 Bytes -
"TESV.exe"+00EE6C34
- - 3F0 - -
- - 34 - "thievesGuildQuestsCompleted" - - 80000008 - 4 Bytes -
"TESV.exe"+00EE6C34
- - 3A0 - -
- - 26 - "Location ID" - - 1 - 80000008 - 4 Bytes -
"TESV.exe"+01738308
- - EC - 670 - 78 - 4 - -
- - 27 - "isInEscapeMenu" - - 80000008 - Byte -
TESV.exe+172E85E
-
- - 28 - "companionsQuestsCompleted" - - 80000008 - 4 Bytes -
"TESV.exe"+00EE6C34
- - 378 - -
- - 29 - "collegeQuestsCompleted" - - 80000008 - 4 Bytes -
"TESV.exe"+00EE6C34
- - 38C - -
- - 31 - "darkBrotherhoodQuestsCompleted" - - 80000008 - 4 Bytes -
"TESV.exe"+00EE6C34
- - 3B4 - -
- - 36 - "IslastDialogue???" - - 80000008 - Byte -
TESV.exe+1732BF2
-
- - 38 - "mainQuestsCompleted" - - 80000008 - 4 Bytes -
"TESV.exe"+00EE6C34
- - 350 - -
- - 41 - "wordsOfPowerLearned" - - 80000008 - 4 Bytes -
"TESV.exe"+00EE6C34
- - 558 - -
43 "Alduin 1 health" @@ -215,6 +283,14 @@ 74 + + 36 + "IslastDialogue???" + + 80000008 + Byte +
TESV.exe+1732BF2
+
From fbfcc009ff0f9ffd3bc813d6a7de47ea40647b43 Mon Sep 17 00:00:00 2001 From: Dalet Date: Thu, 23 Oct 2014 05:09:23 +0200 Subject: [PATCH 09/19] restored whiterun split i deleted by mistake --- GameMemory.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/GameMemory.cs b/GameMemory.cs index f4baa5c..851170e 100644 --- a/GameMemory.cs +++ b/GameMemory.cs @@ -523,6 +523,13 @@ void MemoryReadThread() { Split(SplitArea.Whiterun, frameCounter); } + // if loadscreen starts in whiterun and doesn't end in dragonsreach + else if (loadScreenStartLocationID == (int)Locations.WhiterunWorld && loadScreenStartWorld_X == 6 && loadScreenStartWorld_Y == 0 && + locationID != (int)Locations.WhiterunDragonsreach && + (_settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_MRWALRUS || _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_DALLETH)) + { + Split(SplitArea.Whiterun, frameCounter); + } // if loadscreen starts Thalmor Embassy and ends in front of its door else if (loadScreenStartLocationID == (int)Locations.ThalmorEmbassy02 && locationID == (int)Locations.Tamriel && world_X == -20 && world_Y == 28 && From d1d52b3191b80b026cdaf2e7243a1c8287a071bc Mon Sep 17 00:00:00 2001 From: Dalet Date: Thu, 23 Oct 2014 05:42:44 +0200 Subject: [PATCH 10/19] some more cleaning.... i suck at this --- GameMemory.cs | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/GameMemory.cs b/GameMemory.cs index 851170e..e1e1d14 100644 --- a/GameMemory.cs +++ b/GameMemory.cs @@ -459,13 +459,6 @@ void MemoryReadThread() // if loadscreen starts while in front of the door of Thalmor Embassy and doesn't end inside the Embassy if (loadScreenStartLocationID == (int)Locations.Tamriel && loadScreenStartWorld_X == -20 && loadScreenStartWorld_Y == 28 && - locationID == (int)Locations.Tamriel && - (_settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_MRWALRUS || _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_DRTCHOPS || _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_DALLETH)) - { - Split(SplitArea.ThalmorEmbassy, frameCounter); - } - // if loadscreen starts while in front of the door of Thalmor Embassy and doesn't end inside the Embassy - else if (loadScreenStartLocationID == (int)Locations.Tamriel && loadScreenStartWorld_X == -20 && loadScreenStartWorld_Y == 28 && locationID != (int)Locations.ThalmorEmbassy02 && (_settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_MRWALRUS || _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_DRTCHOPS || _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_DALLETH)) { @@ -519,7 +512,8 @@ void MemoryReadThread() // if loadscreen starts in dragonsreach and ends in whiterun if (loadScreenStartLocationID == (int)Locations.WhiterunDragonsreach && - locationID == (int)Locations.WhiterunWorld && world_X == 6 && world_Y == 0 && _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_GR3YSCALE) + locationID == (int)Locations.WhiterunWorld && world_X == 6 && world_Y == 0 && + _settings.AnyPercentTemplate == SkyrimSettings.TEMPLATE_GR3YSCALE) { Split(SplitArea.Whiterun, frameCounter); } From adf47994d6c42009cc7e5d31932661f880b7e0f9 Mon Sep 17 00:00:00 2001 From: Dalet Date: Thu, 30 Oct 2014 04:33:49 +0100 Subject: [PATCH 11/19] Remove alternate timing method thingy --- SkyrimComponent.cs | 72 +++++--------------------------------- SkyrimSettings.Designer.cs | 55 +---------------------------- SkyrimSettings.cs | 5 --- 3 files changed, 10 insertions(+), 122 deletions(-) diff --git a/SkyrimComponent.cs b/SkyrimComponent.cs index 54360ab..1f00bf7 100644 --- a/SkyrimComponent.cs +++ b/SkyrimComponent.cs @@ -11,15 +11,13 @@ namespace LiveSplit.Skyrim { - class SkyrimComponent : IComponent + class SkyrimComponent : LogicComponent { - public string ComponentName + public override string ComponentName { get { return "Skyrim"; } } - public IDictionary ContextMenuControls { get; protected set; } - protected InfoTimeComponent InternalComponent { get; set; } public SkyrimSettings Settings { get; set; } public bool Disposed { get; private set; } @@ -28,7 +26,6 @@ public string ComponentName private TimerModel _timer; private GameMemory _gameMemory; private LiveSplitState _state; - private GraphicsCache _cache; public SkyrimComponent(LiveSplitState state, bool isLayoutComponent) { @@ -36,11 +33,8 @@ public SkyrimComponent(LiveSplitState state, bool isLayoutComponent) this.IsLayoutComponent = isLayoutComponent; this.Settings = new SkyrimSettings(); - this.ContextMenuControls = new Dictionary(); - this.InternalComponent = new InfoTimeComponent(null, null, new RegularTimeFormatter(TimeAccuracy.Hundredths)); - _cache = new GraphicsCache(); - _timer = new TimerModel { CurrentState = state }; + _timer = new TimerModel { CurrentState = state }; _gameMemory = new GameMemory(); _gameMemory.OnFirstLevelLoading += gameMemory_OnFirstLevelLoading; @@ -54,7 +48,7 @@ public SkyrimComponent(LiveSplitState state, bool isLayoutComponent) _gameMemory.StartMonitoring(); } - public void Dispose() + public override void Dispose() { this.Disposed = true; @@ -71,47 +65,6 @@ void state_OnReset(object sender, TimerPhase e) _gameMemory.resetSplitStates(); } - public void Update(IInvalidator invalidator, LiveSplitState state, float width, float height, LayoutMode mode) - { - if (!this.Settings.DrawWithoutLoads) - { - return; - } - - this.InternalComponent.TimeValue = - state.CurrentTime[state.CurrentTimingMethod == TimingMethod.GameTime - ? TimingMethod.RealTime : TimingMethod.GameTime]; - this.InternalComponent.InformationName = state.CurrentTimingMethod == TimingMethod.GameTime - ? "Real Time" : "Without Loads"; - - _cache.Restart(); - _cache["TimeValue"] = this.InternalComponent.ValueLabel.Text; - _cache["TimingMethod"] = state.CurrentTimingMethod; - if (invalidator != null && _cache.HasChanged) - { - invalidator.Invalidate(0f, 0f, width, height); - } - } - - public void DrawVertical(Graphics g, LiveSplitState state, float width, Region region) - { - this.PrepareDraw(state); - this.InternalComponent.DrawVertical(g, state, width, region); - } - - public void DrawHorizontal(Graphics g, LiveSplitState state, float height, Region region) - { - this.PrepareDraw(state); - this.InternalComponent.DrawHorizontal(g, state, height, region); - } - - void PrepareDraw(LiveSplitState state) - { - this.InternalComponent.NameLabel.ForeColor = state.LayoutSettings.TextColor; - this.InternalComponent.ValueLabel.ForeColor = state.LayoutSettings.TextColor; - this.InternalComponent.NameLabel.HasShadow = this.InternalComponent.ValueLabel.HasShadow = state.LayoutSettings.DropShadows; - } - void gameMemory_OnFirstLevelLoading(object sender, EventArgs e) { if (this.Settings.AutoStart) @@ -164,29 +117,22 @@ void gameMemory_OnSplitCompleted(object sender, GameMemory.SplitArea split, uint } } - public XmlNode GetSettings(XmlDocument document) + public override XmlNode GetSettings(XmlDocument document) { return this.Settings.GetSettings(document); } - public Control GetSettingsControl(LayoutMode mode) + public override Control GetSettingsControl(LayoutMode mode) { return this.Settings; } - public void SetSettings(XmlNode settings) + public override void SetSettings(XmlNode settings) { this.Settings.SetSettings(settings); } - public float VerticalHeight { get { return this.Settings.DrawWithoutLoads ? this.InternalComponent.VerticalHeight : 0; } } - public float HorizontalWidth { get { return this.Settings.DrawWithoutLoads ? this.InternalComponent.HorizontalWidth : 0; } } - public float MinimumWidth { get { return this.InternalComponent.MinimumWidth; } } - public float MinimumHeight { get { return this.InternalComponent.MinimumHeight; } } - public float PaddingLeft { get { return this.Settings.DrawWithoutLoads ? this.InternalComponent.PaddingLeft : 0; } } - public float PaddingRight { get { return this.Settings.DrawWithoutLoads ? this.InternalComponent.PaddingRight : 0; } } - public float PaddingTop { get { return this.Settings.DrawWithoutLoads ? this.InternalComponent.PaddingTop : 0; } } - public float PaddingBottom { get { return this.Settings.DrawWithoutLoads ? this.InternalComponent.PaddingBottom : 0; } } - public void RenameComparison(string oldName, string newName) { } + public override void Update(IInvalidator invalidator, LiveSplitState state, float width, float height, LayoutMode mode) { } + public override void RenameComparison(string oldName, string newName) { } } } diff --git a/SkyrimSettings.Designer.cs b/SkyrimSettings.Designer.cs index cce91a7..5fc674d 100644 --- a/SkyrimSettings.Designer.cs +++ b/SkyrimSettings.Designer.cs @@ -40,16 +40,11 @@ private void InitializeComponent() this.chkCompanions = new System.Windows.Forms.CheckBox(); this.chkThievesGuild = new System.Windows.Forms.CheckBox(); this.chkDarkBrotherhood = new System.Windows.Forms.CheckBox(); - this.gbDisplayAlternateTiming = new System.Windows.Forms.GroupBox(); - this.tlpDisplayAlternateTiming = new System.Windows.Forms.TableLayoutPanel(); - this.chkDisplayWithoutLoads = new System.Windows.Forms.CheckBox(); this.tlpMain.SuspendLayout(); this.gbStartSplits.SuspendLayout(); this.tlpStartSplits.SuspendLayout(); this.gbEndSplits.SuspendLayout(); this.tlpEndSplits.SuspendLayout(); - this.gbDisplayAlternateTiming.SuspendLayout(); - this.tlpDisplayAlternateTiming.SuspendLayout(); this.SuspendLayout(); // // tlpMain @@ -58,12 +53,10 @@ private void InitializeComponent() this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); this.tlpMain.Controls.Add(this.gbStartSplits, 0, 0); this.tlpMain.Controls.Add(this.gbEndSplits, 0, 1); - this.tlpMain.Controls.Add(this.gbDisplayAlternateTiming, 0, 2); this.tlpMain.Dock = System.Windows.Forms.DockStyle.Top; this.tlpMain.Location = new System.Drawing.Point(0, 0); this.tlpMain.Name = "tlpMain"; - this.tlpMain.RowCount = 3; - this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpMain.RowCount = 2; this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); @@ -208,45 +201,6 @@ private void InitializeComponent() this.chkDarkBrotherhood.Text = "[EXPERIMENTAL] Dark Brotherhood questline completion"; this.chkDarkBrotherhood.UseVisualStyleBackColor = true; // - // gbDisplayAlternateTiming - // - this.gbDisplayAlternateTiming.AutoSize = true; - this.gbDisplayAlternateTiming.Controls.Add(this.tlpDisplayAlternateTiming); - this.gbDisplayAlternateTiming.Dock = System.Windows.Forms.DockStyle.Top; - this.gbDisplayAlternateTiming.Location = new System.Drawing.Point(3, 214); - this.gbDisplayAlternateTiming.Name = "gbDisplayAlternateTiming"; - this.gbDisplayAlternateTiming.Size = new System.Drawing.Size(470, 42); - this.gbDisplayAlternateTiming.TabIndex = 9; - this.gbDisplayAlternateTiming.TabStop = false; - this.gbDisplayAlternateTiming.Text = "Show Alternate Timing Method"; - // - // tlpDisplayAlternateTiming - // - this.tlpDisplayAlternateTiming.AutoSize = true; - this.tlpDisplayAlternateTiming.ColumnCount = 1; - this.tlpDisplayAlternateTiming.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tlpDisplayAlternateTiming.Controls.Add(this.chkDisplayWithoutLoads, 0, 0); - this.tlpDisplayAlternateTiming.Dock = System.Windows.Forms.DockStyle.Fill; - this.tlpDisplayAlternateTiming.Location = new System.Drawing.Point(3, 16); - this.tlpDisplayAlternateTiming.Name = "tlpDisplayAlternateTiming"; - this.tlpDisplayAlternateTiming.RowCount = 1; - this.tlpDisplayAlternateTiming.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpDisplayAlternateTiming.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tlpDisplayAlternateTiming.Size = new System.Drawing.Size(464, 23); - this.tlpDisplayAlternateTiming.TabIndex = 0; - // - // chkDisplayWithoutLoads - // - this.chkDisplayWithoutLoads.AutoSize = true; - this.chkDisplayWithoutLoads.Checked = true; - this.chkDisplayWithoutLoads.CheckState = System.Windows.Forms.CheckState.Checked; - this.chkDisplayWithoutLoads.Location = new System.Drawing.Point(3, 3); - this.chkDisplayWithoutLoads.Name = "chkDisplayWithoutLoads"; - this.chkDisplayWithoutLoads.Size = new System.Drawing.Size(59, 17); - this.chkDisplayWithoutLoads.TabIndex = 0; - this.chkDisplayWithoutLoads.Text = "Enable"; - this.chkDisplayWithoutLoads.UseVisualStyleBackColor = true; - // // SkyrimSettings // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -264,10 +218,6 @@ private void InitializeComponent() this.gbEndSplits.PerformLayout(); this.tlpEndSplits.ResumeLayout(false); this.tlpEndSplits.PerformLayout(); - this.gbDisplayAlternateTiming.ResumeLayout(false); - this.gbDisplayAlternateTiming.PerformLayout(); - this.tlpDisplayAlternateTiming.ResumeLayout(false); - this.tlpDisplayAlternateTiming.PerformLayout(); this.ResumeLayout(false); } @@ -284,10 +234,7 @@ private void InitializeComponent() private System.Windows.Forms.CheckBox chkAutoStart; private System.Windows.Forms.CheckBox chkDarkBrotherhood; private System.Windows.Forms.CheckBox chkCompanions; - private System.Windows.Forms.CheckBox chkDisplayWithoutLoads; private System.Windows.Forms.CheckBox chkThievesGuild; private System.Windows.Forms.CheckBox chkCollege; - private System.Windows.Forms.GroupBox gbDisplayAlternateTiming; - private System.Windows.Forms.TableLayoutPanel tlpDisplayAlternateTiming; } } diff --git a/SkyrimSettings.cs b/SkyrimSettings.cs index ea79068..33fc1ee 100644 --- a/SkyrimSettings.cs +++ b/SkyrimSettings.cs @@ -7,7 +7,6 @@ namespace LiveSplit.Skyrim { public partial class SkyrimSettings : UserControl { - public bool DrawWithoutLoads { get; set; } public bool AutoStart { get; set; } public bool AlduinDefeated { get; set; } public bool Helgen { get; set; } @@ -29,7 +28,6 @@ public SkyrimSettings() { InitializeComponent(); - this.chkDisplayWithoutLoads.DataBindings.Add("Checked", this, "DrawWithoutLoads", false, DataSourceUpdateMode.OnPropertyChanged); this.chkAutoStart.DataBindings.Add("Checked", this, "AutoStart", false, DataSourceUpdateMode.OnPropertyChanged); this.chkAlduinDefeated.DataBindings.Add("Checked", this, "AlduinDefeated", false, DataSourceUpdateMode.OnPropertyChanged); this.chkHelgen.DataBindings.Add("Checked", this, "Helgen", false, DataSourceUpdateMode.OnPropertyChanged); @@ -39,7 +37,6 @@ public SkyrimSettings() this.chkCollege.DataBindings.Add("Checked", this, "CollegeOfWinterhold", false, DataSourceUpdateMode.OnPropertyChanged); // defaults - this.DrawWithoutLoads = DEFAULT_DRAWWITHOUTLOADS; this.AutoStart = DEFAULT_AUTOSTART; this.AlduinDefeated = DEFAULT_ALDUINDEFEATED; this.Helgen = DEFAULT_HELGEN; @@ -55,7 +52,6 @@ public XmlNode GetSettings(XmlDocument doc) settingsNode.AppendChild(ToElement(doc, "Version", Assembly.GetExecutingAssembly().GetName().Version.ToString(3))); - settingsNode.AppendChild(ToElement(doc, "DrawWithoutLoads", this.DrawWithoutLoads)); settingsNode.AppendChild(ToElement(doc, "AutoStart", this.AutoStart)); settingsNode.AppendChild(ToElement(doc, "AlduinDefeated", this.AlduinDefeated)); settingsNode.AppendChild(ToElement(doc, "Helgen", this.Helgen)); @@ -69,7 +65,6 @@ public XmlNode GetSettings(XmlDocument doc) public void SetSettings(XmlNode settings) { - this.DrawWithoutLoads = ParseBool(settings, "DrawWithoutLoads", DEFAULT_DRAWWITHOUTLOADS); this.AutoStart = ParseBool(settings, "AutoStart", DEFAULT_AUTOSTART); this.AlduinDefeated = ParseBool(settings, "AlduinDefeated", DEFAULT_ALDUINDEFEATED); this.Helgen = ParseBool(settings, "Helgen", DEFAULT_HELGEN); From 8900f4a2f8eb5ae2954de1618ca2ae26c2083976 Mon Sep 17 00:00:00 2001 From: Dalet Date: Thu, 30 Oct 2014 04:36:39 +0100 Subject: [PATCH 12/19] MrWalrus radio button checked by default if no setting exists --- SkyrimSettings.Designer.cs | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/SkyrimSettings.Designer.cs b/SkyrimSettings.Designer.cs index df1142a..c407476 100644 --- a/SkyrimSettings.Designer.cs +++ b/SkyrimSettings.Designer.cs @@ -61,6 +61,7 @@ private void InitializeComponent() this.chkClearSky = new System.Windows.Forms.CheckBox(); this.chkHorseClimb = new System.Windows.Forms.CheckBox(); this.chkCutsceneStart = new System.Windows.Forms.CheckBox(); + this.chkCutsceneEnd = new System.Windows.Forms.CheckBox(); this.chkAlduin1 = new System.Windows.Forms.CheckBox(); this.chkHighHrothgar = new System.Windows.Forms.CheckBox(); this.chkSolitude = new System.Windows.Forms.CheckBox(); @@ -70,7 +71,6 @@ private void InitializeComponent() this.chkEnterSovngarde = new System.Windows.Forms.CheckBox(); this.chkAlduinDefeated = new System.Windows.Forms.CheckBox(); this.llCheckAll = new System.Windows.Forms.LinkLabel(); - this.chkCutsceneEnd = new System.Windows.Forms.CheckBox(); this.tlpMain.SuspendLayout(); this.gbStartSplits.SuspendLayout(); this.tlpStartSplits.SuspendLayout(); @@ -345,10 +345,12 @@ private void InitializeComponent() // rbMrwalrus // this.rbMrwalrus.AutoSize = true; + this.rbMrwalrus.Checked = true; this.rbMrwalrus.Location = new System.Drawing.Point(3, 3); this.rbMrwalrus.Name = "rbMrwalrus"; this.rbMrwalrus.Size = new System.Drawing.Size(70, 17); this.rbMrwalrus.TabIndex = 0; + this.rbMrwalrus.TabStop = true; this.rbMrwalrus.Text = "MrWalrus"; this.rbMrwalrus.UseVisualStyleBackColor = true; this.rbMrwalrus.CheckedChanged += new System.EventHandler(this.templateRadioButtonChanged); @@ -382,7 +384,6 @@ private void InitializeComponent() this.rbGr3yscale.Name = "rbGr3yscale"; this.rbGr3yscale.Size = new System.Drawing.Size(70, 17); this.rbGr3yscale.TabIndex = 3; - this.rbGr3yscale.TabStop = true; this.rbGr3yscale.Text = "gr3yscale"; this.rbGr3yscale.UseVisualStyleBackColor = true; this.rbGr3yscale.CheckedChanged += new System.EventHandler(this.templateRadioButtonChanged); @@ -536,6 +537,16 @@ private void InitializeComponent() this.chkCutsceneStart.Text = "Cutscene Start"; this.chkCutsceneStart.UseVisualStyleBackColor = true; // + // chkCutsceneEnd + // + this.chkCutsceneEnd.AutoSize = true; + this.chkCutsceneEnd.Location = new System.Drawing.Point(165, 72); + this.chkCutsceneEnd.Name = "chkCutsceneEnd"; + this.chkCutsceneEnd.Size = new System.Drawing.Size(93, 17); + this.chkCutsceneEnd.TabIndex = 22; + this.chkCutsceneEnd.Text = "Cutscene End"; + this.chkCutsceneEnd.UseVisualStyleBackColor = true; + // // chkAlduin1 // this.chkAlduin1.AutoSize = true; @@ -646,16 +657,6 @@ private void InitializeComponent() this.llCheckAll.Text = "Activate/Deactivate All"; this.llCheckAll.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.llCheckAll_LinkClicked); // - // chkCutsceneEnd - // - this.chkCutsceneEnd.AutoSize = true; - this.chkCutsceneEnd.Location = new System.Drawing.Point(165, 72); - this.chkCutsceneEnd.Name = "chkCutsceneEnd"; - this.chkCutsceneEnd.Size = new System.Drawing.Size(93, 17); - this.chkCutsceneEnd.TabIndex = 22; - this.chkCutsceneEnd.Text = "Cutscene End"; - this.chkCutsceneEnd.UseVisualStyleBackColor = true; - // // SkyrimSettings // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); From 6bf54f5156696c56d4bc45e5f7146710d6ba6ca1 Mon Sep 17 00:00:00 2001 From: Dalet Date: Thu, 30 Oct 2014 07:57:55 +0100 Subject: [PATCH 13/19] Cutscene end no longer split when you load a save while in the cutscene --- GameMemory.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GameMemory.cs b/GameMemory.cs index e1e1d14..cea0f53 100644 --- a/GameMemory.cs +++ b/GameMemory.cs @@ -641,7 +641,7 @@ void MemoryReadThread() } } - if (arePlayerControlsDisabled != prevArePlayerControlsDisabled) + if (arePlayerControlsDisabled != prevArePlayerControlsDisabled && !isInEscapeMenu) { if (arePlayerControlsDisabled) { From e2ef8527bd0edd32736bf65249d89eb34e4ee470 Mon Sep 17 00:00:00 2001 From: Ian Robinson Date: Sat, 1 Nov 2014 20:08:35 -0400 Subject: [PATCH 14/19] fixes and cleanup --- GameMemory.cs | 81 ++++++++++++------------------- SkyrimComponent.cs | 16 +------ SkyrimSettings.Designer.cs | 98 +++++++++++++++++++------------------- SkyrimSettings.cs | 24 +++++----- 4 files changed, 93 insertions(+), 126 deletions(-) diff --git a/GameMemory.cs b/GameMemory.cs index 8ec886e..57667ce 100644 --- a/GameMemory.cs +++ b/GameMemory.cs @@ -14,10 +14,10 @@ public enum SplitArea : int { None, Helgen, - DarkBrotherhoodQuestlineCompleted, + CollegeOfWinterholdQuestlineCompleted, CompanionsQuestlineCompleted, + DarkBrotherhoodQuestlineCompleted, ThievesGuildQuestlineCompleted, - CollegeQuestlineCompleted, AlduinDefeated } @@ -43,8 +43,8 @@ public enum SplitArea : int private DeepPointer _world_YPtr; private DeepPointer _isAlduinDefeatedPtr; private DeepPointer _questlinesCompleted; + private DeepPointer _collegeOfWinterholdQuestsCompletedPtr; private DeepPointer _companionsQuestsCompletedPtr; - private DeepPointer _collegeQuestsCompletedPtr; private DeepPointer _darkBrotherhoodQuestsCompletedPtr; private DeepPointer _thievesGuildQuestsCompletedPtr; private DeepPointer _isInEscapeMenuPtr; @@ -89,10 +89,10 @@ public GameMemory() // Game state _isAlduinDefeatedPtr = new DeepPointer(0x1711608); // == 1 when last blow is struck on alduin _questlinesCompleted = new DeepPointer(0x00EE6C34, 0x3F0); // number of questlines completed (from ingame stats) + _collegeOfWinterholdQuestsCompletedPtr = new DeepPointer(0x00EE6C34, 0x38c); // number of college of winterhold quests completed (from ingame stats) _companionsQuestsCompletedPtr = new DeepPointer(0x00EE6C34, 0x378); // number of companions quests completed (from ingame stats) - _collegeQuestsCompletedPtr = new DeepPointer(0x00EE6C34, 0x38c); // number of college of winterhold quests completed (from ingame stats) _darkBrotherhoodQuestsCompletedPtr = new DeepPointer(0x00EE6C34, 0x3b4); // number of dark brotherhood quests completed (from ingame stats) - _thievesGuildQuestsCompletedPtr = new DeepPointer(0x00EE6C34, 0x3a0); // number of thieves' guild quests completed (from ingame stats) + _thievesGuildQuestsCompletedPtr = new DeepPointer(0x00EE6C34, 0x3a0); // number of thieves guild quests completed (from ingame stats) _isInEscapeMenuPtr = new DeepPointer(0x172E85E); // == 1 when in the pause menu or level up menu resetSplitStates(); @@ -156,8 +156,8 @@ void MemoryReadThread() bool prevIsInFadeOut = false; bool prevIsAlduinDefeated = false; int prevQuestlinesCompleted = 0; + int prevCollegeOfWinterholdQuestsCompleted = 0; int prevCompanionsQuestsCompleted = 0; - int prevCollegeQuestsCompleted = 0; int prevDarkBrotherhoodQuestsCompleted = 0; int prevThievesGuildQuestsCompleted = 0; bool prevIsInEscapeMenu = false; @@ -201,12 +201,12 @@ void MemoryReadThread() int questlinesCompleted; _questlinesCompleted.Deref(game, out questlinesCompleted); + int collegeOfWinterholdQuestsCompleted; + _collegeOfWinterholdQuestsCompletedPtr.Deref(game, out collegeOfWinterholdQuestsCompleted); + int companionsQuestsCompleted; _companionsQuestsCompletedPtr.Deref(game, out companionsQuestsCompleted); - int collegeQuestsCompleted; - _collegeQuestsCompletedPtr.Deref(game, out collegeQuestsCompleted); - int darkBrotherhoodQuestsCompleted; _darkBrotherhoodQuestsCompletedPtr.Deref(game, out darkBrotherhoodQuestsCompleted); @@ -266,30 +266,18 @@ void MemoryReadThread() loadScreenFadeoutStarted = true; } - // nothing currently - // _uiThread.Post(d => - // { - // if (this.OnLoadScreenStarted != null) - // { - // this.OnLoadScreenStarted(this, EventArgs.Empty); - // } - // }, null); - // if it isn't a loadscreen from loading a save - if (!isInEscapeMenu) + // and loadscreen starts while leaving helgen + if (!isInEscapeMenu && locationID == (int)Locations.HelgenKeep01 && world_X == -2 && world_Y == -5) { - // if loadscreen starts while leaving helgen - if (locationID == (int)Locations.HelgenKeep01 && world_X == -2 && world_Y == -5) + // Helgen split + _uiThread.Post(d => { - // Helgen split - _uiThread.Post(d => + if (this.OnSplitCompleted != null) { - if (this.OnSplitCompleted != null) - { - this.OnSplitCompleted(this, SplitArea.Helgen, frameCounter); - } - }, null); - } + this.OnSplitCompleted(this, SplitArea.Helgen, frameCounter); + } + }, null); } } else @@ -299,15 +287,6 @@ void MemoryReadThread() if (loadingScreenStarted) { loadingScreenStarted = false; - - // nothing currently - // _uiThread.Post(d => - // { - // if (this.OnLoadScreenFinished != null) - // { - // this.OnLoadScreenFinished(this, EventArgs.Empty); - // } - // }, null); } } } @@ -372,16 +351,10 @@ void MemoryReadThread() lastQuestCompleted = SplitArea.None; } - if (darkBrotherhoodQuestsCompleted > prevDarkBrotherhoodQuestsCompleted) - { - Debug.WriteLine(String.Format("[NoLoads] A Dark Brotherhood quest has been completed - {0}", frameCounter)); - lastQuestCompleted = SplitArea.DarkBrotherhoodQuestlineCompleted; - lastQuestframeCounter = frameCounter; - } - else if (thievesGuildQuestsCompleted > prevThievesGuildQuestsCompleted) + if (collegeOfWinterholdQuestsCompleted > prevCollegeOfWinterholdQuestsCompleted) { - Debug.WriteLine(String.Format("[NoLoads] A Thieves' Guild quest has been completed - {0}", frameCounter)); - lastQuestCompleted = SplitArea.ThievesGuildQuestlineCompleted; + Debug.WriteLine(String.Format("[NoLoads] A College of Winterhold quest has been completed - {0}", frameCounter)); + lastQuestCompleted = SplitArea.CollegeQuestlineCompleted; lastQuestframeCounter = frameCounter; } else if (companionsQuestsCompleted > prevCompanionsQuestsCompleted) @@ -390,10 +363,16 @@ void MemoryReadThread() lastQuestCompleted = SplitArea.CompanionsQuestlineCompleted; lastQuestframeCounter = frameCounter; } - else if (collegeQuestsCompleted > prevCollegeQuestsCompleted) + else if (darkBrotherhoodQuestsCompleted > prevDarkBrotherhoodQuestsCompleted) { - Debug.WriteLine(String.Format("[NoLoads] A College of Winterhold quest has been completed - {0}", frameCounter)); - lastQuestCompleted = SplitArea.CollegeQuestlineCompleted; + Debug.WriteLine(String.Format("[NoLoads] A Dark Brotherhood quest has been completed - {0}", frameCounter)); + lastQuestCompleted = SplitArea.DarkBrotherhoodQuestlineCompleted; + lastQuestframeCounter = frameCounter; + } + else if (thievesGuildQuestsCompleted > prevThievesGuildQuestsCompleted) + { + Debug.WriteLine(String.Format("[NoLoads] A Thieves' Guild quest has been completed - {0}", frameCounter)); + lastQuestCompleted = SplitArea.ThievesGuildQuestlineCompleted; lastQuestframeCounter = frameCounter; } @@ -418,8 +397,8 @@ void MemoryReadThread() prevIsInFadeOut = isInFadeOut; prevIsAlduinDefeated = isAlduinDefeated; prevQuestlinesCompleted = questlinesCompleted; + prevCollegeOfWinterholdQuestsCompleted = collegeOfWinterholdQuestsCompleted; prevCompanionsQuestsCompleted = companionsQuestsCompleted; - prevCollegeQuestsCompleted = collegeQuestsCompleted; prevDarkBrotherhoodQuestsCompleted = darkBrotherhoodQuestsCompleted; prevThievesGuildQuestsCompleted = thievesGuildQuestsCompleted; prevIsInEscapeMenu = isInEscapeMenu; diff --git a/SkyrimComponent.cs b/SkyrimComponent.cs index 1f00bf7..5930efc 100644 --- a/SkyrimComponent.cs +++ b/SkyrimComponent.cs @@ -41,8 +41,6 @@ public SkyrimComponent(LiveSplitState state, bool isLayoutComponent) _gameMemory.OnPlayerGainedControl += gameMemory_OnPlayerGainedControl; _gameMemory.OnLoadStarted += gameMemory_OnLoadStarted; _gameMemory.OnLoadFinished += gameMemory_OnLoadFinished; - // _gameMemory.OnLoadScreenStarted += gameMemory_OnLoadScreenStarted; - // _gameMemory.OnLoadScreenFinished += gameMemory_OnLoadScreenFinished; _gameMemory.OnSplitCompleted += gameMemory_OnSplitCompleted; state.OnReset += state_OnReset; _gameMemory.StartMonitoring(); @@ -91,24 +89,14 @@ void gameMemory_OnLoadFinished(object sender, EventArgs e) _state.IsGameTimePaused = false; } - // void gameMemory_OnLoadScreenStarted(object sender, EventArgs e) - // { - // // Nothing to do - // } - - // void gameMemory_OnLoadScreenFinished(object sender, EventArgs e) - // { - // // Nothing to do - // } - void gameMemory_OnSplitCompleted(object sender, GameMemory.SplitArea split, uint frame) { Trace.WriteLineIf(split != GameMemory.SplitArea.None, String.Format("[NoLoads] {0} Split - {1}", split, frame)); if (!_gameMemory.splitStates[(int)split] && ((split == GameMemory.SplitArea.Helgen && this.Settings.Helgen) || - (split == GameMemory.SplitArea.DarkBrotherhoodQuestlineCompleted && this.Settings.DarkBrotherhood) || + (split == GameMemory.SplitArea.CollegeOfWinterholdQuestlineCompleted && this.Settings.CollegeOfWinterhold) || (split == GameMemory.SplitArea.CompanionsQuestlineCompleted && this.Settings.Companions) || - (split == GameMemory.SplitArea.CollegeQuestlineCompleted && this.Settings.CollegeOfWinterhold) || + (split == GameMemory.SplitArea.DarkBrotherhoodQuestlineCompleted && this.Settings.DarkBrotherhood) || (split == GameMemory.SplitArea.ThievesGuildQuestlineCompleted && this.Settings.ThievesGuild) || (split == GameMemory.SplitArea.AlduinDefeated && this.Settings.AlduinDefeated))) { diff --git a/SkyrimSettings.Designer.cs b/SkyrimSettings.Designer.cs index 5fc674d..c956148 100644 --- a/SkyrimSettings.Designer.cs +++ b/SkyrimSettings.Designer.cs @@ -36,19 +36,19 @@ private void InitializeComponent() this.gbEndSplits = new System.Windows.Forms.GroupBox(); this.tlpEndSplits = new System.Windows.Forms.TableLayoutPanel(); this.chkAlduinDefeated = new System.Windows.Forms.CheckBox(); - this.chkCollege = new System.Windows.Forms.CheckBox(); + this.chkCollegeOfWinterhold = new System.Windows.Forms.CheckBox(); this.chkCompanions = new System.Windows.Forms.CheckBox(); - this.chkThievesGuild = new System.Windows.Forms.CheckBox(); this.chkDarkBrotherhood = new System.Windows.Forms.CheckBox(); + this.chkThievesGuild = new System.Windows.Forms.CheckBox(); this.tlpMain.SuspendLayout(); this.gbStartSplits.SuspendLayout(); this.tlpStartSplits.SuspendLayout(); this.gbEndSplits.SuspendLayout(); this.tlpEndSplits.SuspendLayout(); this.SuspendLayout(); - // + // // tlpMain - // + // this.tlpMain.ColumnCount = 1; this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); this.tlpMain.Controls.Add(this.gbStartSplits, 0, 0); @@ -62,9 +62,9 @@ private void InitializeComponent() this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); this.tlpMain.Size = new System.Drawing.Size(476, 365); this.tlpMain.TabIndex = 0; - // + // // gbStartSplits - // + // this.gbStartSplits.AutoSize = true; this.gbStartSplits.Controls.Add(this.tlpStartSplits); this.gbStartSplits.Dock = System.Windows.Forms.DockStyle.Top; @@ -74,9 +74,9 @@ private void InitializeComponent() this.gbStartSplits.TabIndex = 5; this.gbStartSplits.TabStop = false; this.gbStartSplits.Text = "Start Auto-splits"; - // + // // tlpStartSplits - // + // this.tlpStartSplits.AutoSize = true; this.tlpStartSplits.BackColor = System.Drawing.Color.Transparent; this.tlpStartSplits.ColumnCount = 1; @@ -91,9 +91,9 @@ private void InitializeComponent() this.tlpStartSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); this.tlpStartSplits.Size = new System.Drawing.Size(464, 46); this.tlpStartSplits.TabIndex = 4; - // + // // chkHelgen - // + // this.chkHelgen.AutoSize = true; this.chkHelgen.Location = new System.Drawing.Point(3, 26); this.chkHelgen.Name = "chkHelgen"; @@ -101,9 +101,9 @@ private void InitializeComponent() this.chkHelgen.TabIndex = 7; this.chkHelgen.Text = "Helgen"; this.chkHelgen.UseVisualStyleBackColor = true; - // + // // chkAutoStart - // + // this.chkAutoStart.AutoSize = true; this.chkAutoStart.Checked = true; this.chkAutoStart.CheckState = System.Windows.Forms.CheckState.Checked; @@ -113,9 +113,9 @@ private void InitializeComponent() this.chkAutoStart.TabIndex = 4; this.chkAutoStart.Text = "Start / Reset"; this.chkAutoStart.UseVisualStyleBackColor = true; - // + // // gbEndSplits - // + // this.gbEndSplits.AutoSize = true; this.gbEndSplits.Controls.Add(this.tlpEndSplits); this.gbEndSplits.Dock = System.Windows.Forms.DockStyle.Top; @@ -125,15 +125,15 @@ private void InitializeComponent() this.gbEndSplits.TabIndex = 7; this.gbEndSplits.TabStop = false; this.gbEndSplits.Text = "End Auto-splits"; - // + // // tlpEndSplits - // + // this.tlpEndSplits.AutoSize = true; this.tlpEndSplits.BackColor = System.Drawing.Color.Transparent; this.tlpEndSplits.ColumnCount = 1; this.tlpEndSplits.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); this.tlpEndSplits.Controls.Add(this.chkAlduinDefeated, 0, 0); - this.tlpEndSplits.Controls.Add(this.chkCollege, 0, 1); + this.tlpEndSplits.Controls.Add(this.chkCollegeOfWinterhold, 0, 1); this.tlpEndSplits.Controls.Add(this.chkCompanions, 0, 2); this.tlpEndSplits.Controls.Add(this.chkThievesGuild, 0, 4); this.tlpEndSplits.Controls.Add(this.chkDarkBrotherhood, 0, 3); @@ -148,9 +148,9 @@ private void InitializeComponent() this.tlpEndSplits.RowStyles.Add(new System.Windows.Forms.RowStyle()); this.tlpEndSplits.Size = new System.Drawing.Size(464, 115); this.tlpEndSplits.TabIndex = 4; - // + // // chkAlduinDefeated - // + // this.chkAlduinDefeated.AutoSize = true; this.chkAlduinDefeated.Checked = true; this.chkAlduinDefeated.CheckState = System.Windows.Forms.CheckState.Checked; @@ -160,49 +160,49 @@ private void InitializeComponent() this.chkAlduinDefeated.TabIndex = 5; this.chkAlduinDefeated.Text = "Alduin\'s Defeat (Main Quest)"; this.chkAlduinDefeated.UseVisualStyleBackColor = true; - // - // chkCollege - // - this.chkCollege.AutoSize = true; - this.chkCollege.Location = new System.Drawing.Point(3, 26); - this.chkCollege.Name = "chkCollege"; - this.chkCollege.Size = new System.Drawing.Size(318, 17); - this.chkCollege.TabIndex = 10; - this.chkCollege.Text = "[EXPERIMENTAL] College of Winterhold questline completion"; - this.chkCollege.UseVisualStyleBackColor = true; - // + // + // chkCollegeOfWinterhold + // + this.chkCollegeOfWinterhold.AutoSize = true; + this.chkCollegeOfWinterhold.Location = new System.Drawing.Point(3, 26); + this.chkCollegeOfWinterhold.Name = "chkCollegeOfWinterhold"; + this.chkCollegeOfWinterhold.Size = new System.Drawing.Size(318, 17); + this.chkCollegeOfWinterhold.TabIndex = 10; + this.chkCollegeOfWinterhold.Text = "College of Winterhold questline completion"; + this.chkCollegeOfWinterhold.UseVisualStyleBackColor = true; + // // chkCompanions - // + // this.chkCompanions.AutoSize = true; this.chkCompanions.Location = new System.Drawing.Point(3, 49); this.chkCompanions.Name = "chkCompanions"; this.chkCompanions.Size = new System.Drawing.Size(275, 17); this.chkCompanions.TabIndex = 8; - this.chkCompanions.Text = "[EXPERIMENTAL] Companions questline completion"; + this.chkCompanions.Text = "Companions questline completion"; this.chkCompanions.UseVisualStyleBackColor = true; - // - // chkThievesGuild - // - this.chkThievesGuild.AutoSize = true; - this.chkThievesGuild.Location = new System.Drawing.Point(3, 95); - this.chkThievesGuild.Name = "chkThievesGuild"; - this.chkThievesGuild.Size = new System.Drawing.Size(284, 17); - this.chkThievesGuild.TabIndex = 9; - this.chkThievesGuild.Text = "[EXPERIMENTAL] Thieves\' Guild questline completion"; - this.chkThievesGuild.UseVisualStyleBackColor = true; - // + // // chkDarkBrotherhood - // + // this.chkDarkBrotherhood.AutoSize = true; this.chkDarkBrotherhood.Location = new System.Drawing.Point(3, 72); this.chkDarkBrotherhood.Name = "chkDarkBrotherhood"; this.chkDarkBrotherhood.Size = new System.Drawing.Size(301, 17); this.chkDarkBrotherhood.TabIndex = 7; - this.chkDarkBrotherhood.Text = "[EXPERIMENTAL] Dark Brotherhood questline completion"; + this.chkDarkBrotherhood.Text = "Dark Brotherhood questline completion"; this.chkDarkBrotherhood.UseVisualStyleBackColor = true; - // + // + // chkThievesGuild + // + this.chkThievesGuild.AutoSize = true; + this.chkThievesGuild.Location = new System.Drawing.Point(3, 95); + this.chkThievesGuild.Name = "chkThievesGuild"; + this.chkThievesGuild.Size = new System.Drawing.Size(284, 17); + this.chkThievesGuild.TabIndex = 9; + this.chkThievesGuild.Text = "Thieves Guild questline completion"; + this.chkThievesGuild.UseVisualStyleBackColor = true; + // // SkyrimSettings - // + // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Controls.Add(this.tlpMain); @@ -232,9 +232,9 @@ private void InitializeComponent() private System.Windows.Forms.TableLayoutPanel tlpStartSplits; private System.Windows.Forms.CheckBox chkHelgen; private System.Windows.Forms.CheckBox chkAutoStart; - private System.Windows.Forms.CheckBox chkDarkBrotherhood; + private System.Windows.Forms.CheckBox chkCollegeOfWinterhold; private System.Windows.Forms.CheckBox chkCompanions; + private System.Windows.Forms.CheckBox chkDarkBrotherhood; private System.Windows.Forms.CheckBox chkThievesGuild; - private System.Windows.Forms.CheckBox chkCollege; } } diff --git a/SkyrimSettings.cs b/SkyrimSettings.cs index 33fc1ee..591c2d8 100644 --- a/SkyrimSettings.cs +++ b/SkyrimSettings.cs @@ -10,19 +10,19 @@ public partial class SkyrimSettings : UserControl public bool AutoStart { get; set; } public bool AlduinDefeated { get; set; } public bool Helgen { get; set; } - public bool DarkBrotherhood { get; set; } + public bool CollegeOfWinterhold { get; set; } public bool Companions { get; set; } + public bool DarkBrotherhood { get; set; } public bool ThievesGuild { get; set; } - public bool CollegeOfWinterhold { get; set; } private const bool DEFAULT_DRAWWITHOUTLOADS = true; private const bool DEFAULT_AUTOSTART = true; private const bool DEFAULT_ALDUINDEFEATED = true; private const bool DEFAULT_HELGEN = false; - private const bool DEFAULT_DARKBROTHERHOOD = false; + private const bool DEFAULT_COLLEGEOFWINTERHOLD = false; private const bool DEFAULT_COMPANIONS = false; + private const bool DEFAULT_DARKBROTHERHOOD = false; private const bool DEFAULT_THIEVESGUILD = false; - private const bool DEFAULT_COLLEGEOFWINTERHOLD = false; public SkyrimSettings() { @@ -31,18 +31,18 @@ public SkyrimSettings() this.chkAutoStart.DataBindings.Add("Checked", this, "AutoStart", false, DataSourceUpdateMode.OnPropertyChanged); this.chkAlduinDefeated.DataBindings.Add("Checked", this, "AlduinDefeated", false, DataSourceUpdateMode.OnPropertyChanged); this.chkHelgen.DataBindings.Add("Checked", this, "Helgen", false, DataSourceUpdateMode.OnPropertyChanged); - this.chkDarkBrotherhood.DataBindings.Add("Checked", this, "DarkBrotherhood", false, DataSourceUpdateMode.OnPropertyChanged); + this.chkCollegeOfWinterhold.DataBindings.Add("Checked", this, "CollegeOfWinterhold", false, DataSourceUpdateMode.OnPropertyChanged); this.chkCompanions.DataBindings.Add("Checked", this, "Companions", false, DataSourceUpdateMode.OnPropertyChanged); + this.chkDarkBrotherhood.DataBindings.Add("Checked", this, "DarkBrotherhood", false, DataSourceUpdateMode.OnPropertyChanged); this.chkThievesGuild.DataBindings.Add("Checked", this, "ThievesGuild", false, DataSourceUpdateMode.OnPropertyChanged); - this.chkCollege.DataBindings.Add("Checked", this, "CollegeOfWinterhold", false, DataSourceUpdateMode.OnPropertyChanged); // defaults this.AutoStart = DEFAULT_AUTOSTART; this.AlduinDefeated = DEFAULT_ALDUINDEFEATED; this.Helgen = DEFAULT_HELGEN; - this.DarkBrotherhood = DEFAULT_DARKBROTHERHOOD; - this.Companions = DEFAULT_COMPANIONS; this.CollegeOfWinterhold = DEFAULT_COLLEGEOFWINTERHOLD; + this.Companions = DEFAULT_COMPANIONS; + this.DarkBrotherhood = DEFAULT_DARKBROTHERHOOD; this.ThievesGuild = DEFAULT_THIEVESGUILD; } @@ -55,10 +55,10 @@ public XmlNode GetSettings(XmlDocument doc) settingsNode.AppendChild(ToElement(doc, "AutoStart", this.AutoStart)); settingsNode.AppendChild(ToElement(doc, "AlduinDefeated", this.AlduinDefeated)); settingsNode.AppendChild(ToElement(doc, "Helgen", this.Helgen)); - settingsNode.AppendChild(ToElement(doc, "DarkBrotherhood", this.DarkBrotherhood)); + settingsNode.AppendChild(ToElement(doc, "CollegeOfWinterhold", this.CollegeOfWinterhold)); settingsNode.AppendChild(ToElement(doc, "Companions", this.Companions)); + settingsNode.AppendChild(ToElement(doc, "DarkBrotherhood", this.DarkBrotherhood)); settingsNode.AppendChild(ToElement(doc, "ThievesGuild", this.ThievesGuild)); - settingsNode.AppendChild(ToElement(doc, "CollegeOfWinterhold", this.CollegeOfWinterhold)); return settingsNode; } @@ -68,10 +68,10 @@ public void SetSettings(XmlNode settings) this.AutoStart = ParseBool(settings, "AutoStart", DEFAULT_AUTOSTART); this.AlduinDefeated = ParseBool(settings, "AlduinDefeated", DEFAULT_ALDUINDEFEATED); this.Helgen = ParseBool(settings, "Helgen", DEFAULT_HELGEN); - this.DarkBrotherhood = ParseBool(settings, "DarkBrotherhood", DEFAULT_DARKBROTHERHOOD); + this.CollegeOfWinterhold = ParseBool(settings, "CollegeOfWinterhold", DEFAULT_COLLEGEOFWINTERHOLD); this.Companions = ParseBool(settings, "Companions", DEFAULT_COMPANIONS); + this.DarkBrotherhood = ParseBool(settings, "DarkBrotherhood", DEFAULT_DARKBROTHERHOOD); this.ThievesGuild = ParseBool(settings, "ThievesGuild", DEFAULT_THIEVESGUILD); - this.CollegeOfWinterhold = ParseBool(settings, "CollegeOfWinterhold", DEFAULT_COLLEGEOFWINTERHOLD); } static bool ParseBool(XmlNode settings, string setting, bool default_ = false) From 217e3047b368a525e902e4c2ea5137abd7924e6d Mon Sep 17 00:00:00 2001 From: Ian Robinson Date: Sat, 1 Nov 2014 20:11:26 -0400 Subject: [PATCH 15/19] missed one --- GameMemory.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GameMemory.cs b/GameMemory.cs index 57667ce..23ca20c 100644 --- a/GameMemory.cs +++ b/GameMemory.cs @@ -354,7 +354,7 @@ void MemoryReadThread() if (collegeOfWinterholdQuestsCompleted > prevCollegeOfWinterholdQuestsCompleted) { Debug.WriteLine(String.Format("[NoLoads] A College of Winterhold quest has been completed - {0}", frameCounter)); - lastQuestCompleted = SplitArea.CollegeQuestlineCompleted; + lastQuestCompleted = SplitArea.CollegeOfWinterholdQuestlineCompleted; lastQuestframeCounter = frameCounter; } else if (companionsQuestsCompleted > prevCompanionsQuestsCompleted) From 16f067fe37f13bfb7495d62d672fc82f1341400d Mon Sep 17 00:00:00 2001 From: Ian Robinson Date: Sat, 1 Nov 2014 20:23:48 -0400 Subject: [PATCH 16/19] rename and redorder addresses --- config/TESV.CT | 72 +++++++++++++++++++++++++------------------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/config/TESV.CT b/config/TESV.CT index d84b5c9..8114455 100644 --- a/config/TESV.CT +++ b/config/TESV.CT @@ -1,14 +1,6 @@ - - 0 - "isPaused" - - 80000008 - Byte -
"TESV.exe"+172E85F
-
1 "isLoading" @@ -25,6 +17,22 @@ Byte
"TESV.exe"+EE3561
+ + 0 + "isPaused" + + 80000008 + Byte +
"TESV.exe"+172E85F
+
+ + 27 + "isInEscapeMenu" + + 80000008 + Byte +
TESV.exe+172E85E
+
5 "IsInFadeOut" @@ -45,12 +53,27 @@ 12 - "IsAlduinDead?" + "IsAlduinDead" 80000008 Byte
TESV.exe+1711608
+ + 26 + "Location ID" + + 1 + 80000008 + 4 Bytes +
"TESV.exe"+01738308
+ + EC + 670 + 78 + 4 + +
9 "X world coord" @@ -93,28 +116,16 @@ - 26 - "Location ID" + 29 + "collegeOfWinterholdQuestsCompleted" - 1 80000008 4 Bytes -
"TESV.exe"+01738308
+
"TESV.exe"+00EE6C34
- EC - 670 - 78 - 4 + 38C
- - 27 - "isInEscapeMenu" - - 80000008 - Byte -
TESV.exe+172E85E
-
28 "companionsQuestsCompleted" @@ -126,17 +137,6 @@ 378 - - 29 - "collegeQuestsCompleted" - - 80000008 - 4 Bytes -
"TESV.exe"+00EE6C34
- - 38C - -
31 "darkBrotherhoodQuestsCompleted" From 778d84286cc05db56fcaddd3ef9a06e0d5bf2b93 Mon Sep 17 00:00:00 2001 From: Ian Robinson Date: Sat, 1 Nov 2014 21:15:25 -0400 Subject: [PATCH 17/19] fix up more merge problems --- SkyrimSettings.Designer.cs | 57 ++------------------------------------ SkyrimSettings.cs | 2 -- config/TESV.CT | 24 ++++++++-------- 3 files changed, 14 insertions(+), 69 deletions(-) diff --git a/SkyrimSettings.Designer.cs b/SkyrimSettings.Designer.cs index f22414c..acbe52c 100644 --- a/SkyrimSettings.Designer.cs +++ b/SkyrimSettings.Designer.cs @@ -39,9 +39,6 @@ private void InitializeComponent() this.chkCompanions = new System.Windows.Forms.CheckBox(); this.chkDarkBrotherhood = new System.Windows.Forms.CheckBox(); this.chkThievesGuild = new System.Windows.Forms.CheckBox(); - this.gbDisplayAlternateTiming = new System.Windows.Forms.GroupBox(); - this.tlpDisplayAlternateTiming = new System.Windows.Forms.TableLayoutPanel(); - this.chkDisplayWithoutLoads = new System.Windows.Forms.CheckBox(); this.gb_AnyPercentSplits = new System.Windows.Forms.GroupBox(); this.tlpAnyPercentSplits = new System.Windows.Forms.TableLayoutPanel(); this.gbAnyPercentTemplate = new System.Windows.Forms.GroupBox(); @@ -76,8 +73,6 @@ private void InitializeComponent() this.tlpStartSplits.SuspendLayout(); this.gbGuildsSplits.SuspendLayout(); this.tlpGuildsSplits.SuspendLayout(); - this.gbDisplayAlternateTiming.SuspendLayout(); - this.tlpDisplayAlternateTiming.SuspendLayout(); this.gb_AnyPercentSplits.SuspendLayout(); this.tlpAnyPercentSplits.SuspendLayout(); this.gbAnyPercentTemplate.SuspendLayout(); @@ -93,7 +88,6 @@ private void InitializeComponent() this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); this.tlpMain.Controls.Add(this.gbStartSplits, 0, 0); this.tlpMain.Controls.Add(this.gbGuildsSplits, 0, 2); - this.tlpMain.Controls.Add(this.gbDisplayAlternateTiming, 0, 3); this.tlpMain.Controls.Add(this.gb_AnyPercentSplits, 0, 1); this.tlpMain.Dock = System.Windows.Forms.DockStyle.Top; this.tlpMain.Location = new System.Drawing.Point(0, 0); @@ -202,7 +196,7 @@ private void InitializeComponent() this.chkCollegeOfWinterhold.Name = "chkCollegeOfWinterhold"; this.chkCollegeOfWinterhold.Size = new System.Drawing.Size(318, 17); this.chkCollegeOfWinterhold.TabIndex = 10; - this.chkCollegeOfWinterhold.Text = "[EXPERIMENTAL] College of Winterhold questline completion"; + this.chkCollegeOfWinterhold.Text = "College of Winterhold questline completion"; this.chkCollegeOfWinterhold.UseVisualStyleBackColor = true; // // chkCompanions @@ -232,50 +226,9 @@ private void InitializeComponent() this.chkThievesGuild.Name = "chkThievesGuild"; this.chkThievesGuild.Size = new System.Drawing.Size(284, 17); this.chkThievesGuild.TabIndex = 9; - this.chkThievesGuild.Text = "[EXPERIMENTAL] Thieves\' Guild questline completion"; + this.chkThievesGuild.Text = "Thieves Guild questline completion"; this.chkThievesGuild.UseVisualStyleBackColor = true; // - // gbDisplayAlternateTiming - // - this.gbDisplayAlternateTiming.AutoSize = true; - this.gbDisplayAlternateTiming.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.gbDisplayAlternateTiming.Controls.Add(this.tlpDisplayAlternateTiming); - this.gbDisplayAlternateTiming.Dock = System.Windows.Forms.DockStyle.Top; - this.gbDisplayAlternateTiming.Location = new System.Drawing.Point(3, 444); - this.gbDisplayAlternateTiming.Name = "gbDisplayAlternateTiming"; - this.gbDisplayAlternateTiming.Size = new System.Drawing.Size(444, 42); - this.gbDisplayAlternateTiming.TabIndex = 9; - this.gbDisplayAlternateTiming.TabStop = false; - this.gbDisplayAlternateTiming.Text = "Show Alternate Timing Method"; - // - // tlpDisplayAlternateTiming - // - this.tlpDisplayAlternateTiming.AutoSize = true; - this.tlpDisplayAlternateTiming.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.tlpDisplayAlternateTiming.ColumnCount = 1; - this.tlpDisplayAlternateTiming.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tlpDisplayAlternateTiming.Controls.Add(this.chkDisplayWithoutLoads, 0, 0); - this.tlpDisplayAlternateTiming.Dock = System.Windows.Forms.DockStyle.Fill; - this.tlpDisplayAlternateTiming.Location = new System.Drawing.Point(3, 16); - this.tlpDisplayAlternateTiming.Name = "tlpDisplayAlternateTiming"; - this.tlpDisplayAlternateTiming.RowCount = 1; - this.tlpDisplayAlternateTiming.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpDisplayAlternateTiming.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F)); - this.tlpDisplayAlternateTiming.Size = new System.Drawing.Size(438, 23); - this.tlpDisplayAlternateTiming.TabIndex = 0; - // - // chkDisplayWithoutLoads - // - this.chkDisplayWithoutLoads.AutoSize = true; - this.chkDisplayWithoutLoads.Checked = true; - this.chkDisplayWithoutLoads.CheckState = System.Windows.Forms.CheckState.Checked; - this.chkDisplayWithoutLoads.Location = new System.Drawing.Point(3, 3); - this.chkDisplayWithoutLoads.Name = "chkDisplayWithoutLoads"; - this.chkDisplayWithoutLoads.Size = new System.Drawing.Size(59, 17); - this.chkDisplayWithoutLoads.TabIndex = 0; - this.chkDisplayWithoutLoads.Text = "Enable"; - this.chkDisplayWithoutLoads.UseVisualStyleBackColor = true; - // // gb_AnyPercentSplits // this.gb_AnyPercentSplits.AutoSize = true; @@ -674,10 +627,6 @@ private void InitializeComponent() this.gbGuildsSplits.PerformLayout(); this.tlpGuildsSplits.ResumeLayout(false); this.tlpGuildsSplits.PerformLayout(); - this.gbDisplayAlternateTiming.ResumeLayout(false); - this.gbDisplayAlternateTiming.PerformLayout(); - this.tlpDisplayAlternateTiming.ResumeLayout(false); - this.tlpDisplayAlternateTiming.PerformLayout(); this.gb_AnyPercentSplits.ResumeLayout(false); this.gb_AnyPercentSplits.PerformLayout(); this.tlpAnyPercentSplits.ResumeLayout(false); @@ -707,8 +656,6 @@ private void InitializeComponent() private System.Windows.Forms.CheckBox chkCompanions; private System.Windows.Forms.CheckBox chkDarkBrotherhood; private System.Windows.Forms.CheckBox chkThievesGuild; - private System.Windows.Forms.GroupBox gbDisplayAlternateTiming; - private System.Windows.Forms.TableLayoutPanel tlpDisplayAlternateTiming; private System.Windows.Forms.GroupBox gb_AnyPercentSplits; private System.Windows.Forms.TableLayoutPanel tlpAnyPercentSplits; private System.Windows.Forms.CheckBox chkWhiterun; diff --git a/SkyrimSettings.cs b/SkyrimSettings.cs index a919036..707d27f 100644 --- a/SkyrimSettings.cs +++ b/SkyrimSettings.cs @@ -39,7 +39,6 @@ public partial class SkyrimSettings : UserControl public const string TEMPLATE_GR3YSCALE = "gr3yscale"; public const string TEMPLATE_DALLETH = "Dalleth"; - private const bool DEFAULT_DRAWWITHOUTLOADS = true; private const bool DEFAULT_AUTOSTART = true; private const bool DEFAULT_ALDUINDEFEATED = true; private const bool DEFAULT_HELGEN = false; @@ -166,7 +165,6 @@ public void SetSettings(XmlNode settings) { var element = (XmlElement)settings; - this.DrawWithoutLoads = ParseBool(settings, "DrawWithoutLoads", DEFAULT_DRAWWITHOUTLOADS); this.AutoStart = ParseBool(settings, "AutoStart", DEFAULT_AUTOSTART); this.AlduinDefeated = ParseBool(settings, "AlduinDefeated", DEFAULT_ALDUINDEFEATED); this.Helgen = ParseBool(settings, "Helgen", DEFAULT_HELGEN); diff --git a/config/TESV.CT b/config/TESV.CT index 0a47c7a..bf4539e 100644 --- a/config/TESV.CT +++ b/config/TESV.CT @@ -168,20 +168,9 @@ 350 - - 31 - "darkBrotherhoodQuestsCompleted" - - 80000008 - 4 Bytes -
"TESV.exe"+00EE6C34
- - 3B4 - -
29 - "collegeQuestsCompleted" + "collegeOfWinterholdQuestsCompleted" 80000008 4 Bytes @@ -201,6 +190,17 @@ 378 + + 31 + "darkBrotherhoodQuestsCompleted" + + 80000008 + 4 Bytes +
"TESV.exe"+00EE6C34
+ + 3B4 + +
34 "thievesGuildQuestsCompleted" From bf17fc9ffd0e3cdb5b72dd9d6de75db8acd15dc0 Mon Sep 17 00:00:00 2001 From: Ian Robinson Date: Sat, 1 Nov 2014 22:48:06 -0400 Subject: [PATCH 18/19] update readme and version --- Components/update.LiveSplit.Skyrim.xml | 16 ++++++++++++++++ Properties/AssemblyInfo.cs | 4 ++-- README.md | 18 +++++++++++------- 3 files changed, 29 insertions(+), 9 deletions(-) diff --git a/Components/update.LiveSplit.Skyrim.xml b/Components/update.LiveSplit.Skyrim.xml index 04a0b9c..91b0bd7 100644 --- a/Components/update.LiveSplit.Skyrim.xml +++ b/Components/update.LiveSplit.Skyrim.xml @@ -1,4 +1,20 @@ + + + + + + + Added autosplits for every split in any%. + + + Removed the Alternate Timing layout component. It's now its own component and works for all games. + + + Redesigned settings. + + + diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs index 92103b5..daf1d24 100644 --- a/Properties/AssemblyInfo.cs +++ b/Properties/AssemblyInfo.cs @@ -33,7 +33,7 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.4.2.0")] -[assembly: AssemblyFileVersion("1.4.2.0")] +[assembly: AssemblyVersion("2.0.0.0")] +[assembly: AssemblyFileVersion("2.0.0.0")] [assembly: ComponentFactory(typeof(SkyrimFactory))] diff --git a/README.md b/README.md index 57cba6f..a665e01 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -LiveSplit.Skyrim v1.4.2 -======================= +LiveSplit.Skyrim v2.0 +===================== LiveSplit.Skyrim is a [LiveSplit](http://livesplit.org/) component for The Elder Scrolls V: Skyrim. @@ -7,7 +7,7 @@ Features -------- * Keeps track of Game Time to get rid of loading times. * Auto start/stop/reset the timer. - * Splits when you finish Helgen and default Alduin 2. (configurable) + * Splits when you finish each split in Any%. (configurable) # Splits when you finish each guild. (configurable) Install @@ -16,17 +16,21 @@ Starting with LiveSplit 1.4, you can download and install LiveSplit.Skyrim autom If the plugin is not working with this process, download the plugin from the [releases page](https://github.com/drtchops/LiveSplit.Skyrim/releases) and place the LiveSplit.Skyrim.dll in your Components directory of LiveSplit. +Upgrade +------- +You may have issues when upgrading from a version prior to 2.0. Try deactiving the autosplitter from the splits editor, removing it from the layout editor, and restarting LiveSplit before upgrading. If the problem persists, delete the LiveSplit.Skyrim.dll from your Components folder and try again. + Configure --------- -Due to bugs in LiveSplit 1.4.0, it's recommended to deactivate LiveSplit.Skyrim in the Splits Editor after activating (downloading) it the first time. Instead, you should activate it in the Layout Editor, under the "Control" category. Double-click "Skyrim" after adding it to your layout to bring up the settings. +Open your Splits Editor and active the autosplitter. If this is not working, leave it deactivated and manually add it in the Layout Editor. You can configure the settings in whichever editor it has been enabled in. -After configuring everything you'll most likely want to turn on game time as primary timing, so that your splits will run off game time. You can do this by right-clicking LiveSplit and going to Compare Against->Game Time. +After configuring everything you'll most likely want to turn on game time as primary timing, so that your splits will run off game time. You can do this by right-clicking LiveSplit and going to Compare Against -> Game Time. #### Auto Split -The default settings are to automatically reset, start, and end the splits (the first and last splits). You can enable Helgen and guild autosplitting here. +The default settings are to automatically reset, start, and end the splits (the first and last splits). You can enable individual splits here. #### Alternate Timing Method -This makes it show Real Time when comparing against Game Time, and vice versa. Doesn't work when LiveSplit.Skyrim is activated via the Splits Editor. +If you wish to show Real Time on your layout, download AlternateTimingMethod from the [LiveSplit Components page](http://livesplit.org/components/) or its own [Github page](https://github.com/Dalet/LiveSplit.AlternateTimingMethod/releases). Change Log ---------- From dd05ef1079c2e5be8f12fa8495f4c781215ff1b4 Mon Sep 17 00:00:00 2001 From: drtchops Date: Sat, 1 Nov 2014 22:50:47 -0400 Subject: [PATCH 19/19] Update DLL --- Components/LiveSplit.Skyrim.dll | Bin 36864 -> 53248 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Components/LiveSplit.Skyrim.dll b/Components/LiveSplit.Skyrim.dll index 6ecdad70fc69158649f67260ac8753f9feb2b502..23089ade5b028931683197875f9cbfc6f484c658 100644 GIT binary patch literal 53248 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

R40*SdrqTh7m{h7el^lt(q}i4C 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 literal 36864 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 V|4)AISHBO9SM2})=f9x^{ud!zV;cYf