Skip to content

Commit d8c689b

Browse files
authored
Merge pull request #520 from ow-mods/dev
2.9.0
2 parents 000e3b3 + 2ad95e6 commit d8c689b

File tree

15 files changed

+101
-41
lines changed

15 files changed

+101
-41
lines changed

src/OWML.Common/Interfaces/IModEvents.cs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,16 @@
33

44
namespace OWML.Common
55
{
6-
[Obsolete("Use HarmonyHelper instead.")]
76
public interface IModEvents
87
{
9-
[Obsolete("Use HarmonyHelper instead.")]
8+
[Obsolete("Use Harmony patches instead.")]
109
IModPlayerEvents Player { get; }
1110

12-
[Obsolete("Use HarmonyHelper instead.")]
1311
IModSceneEvents Scenes { get; }
1412

15-
[Obsolete("Use HarmonyHelper instead.")]
1613
IModUnityEvents Unity { get; }
1714

18-
[Obsolete("Use HarmonyHelper instead.")]
15+
[Obsolete("Use Harmony patches instead.")]
1916
event Action<MonoBehaviour, Events> Event;
2017

2118
[Obsolete("Use Event instead.")]

src/OWML.Common/Interfaces/IModPlayerEvents.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@
22

33
namespace OWML.Common
44
{
5+
[Obsolete("Use Harmony patches instead.")]
56
public interface IModPlayerEvents
67
{
7-
[Obsolete("Use HarmonyHelper instead.")]
8+
[Obsolete("Use Harmony patches instead.")]
89
event Action<PlayerBody> OnPlayerAwake;
910

1011
void Init(IModEvents events);

src/OWML.Common/Interfaces/IModSceneEvents.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,7 @@ namespace OWML.Common
44
{
55
public interface IModSceneEvents
66
{
7-
[Obsolete("Use HarmonyHelper instead.")]
87
event Action<OWScene, OWScene> OnStartSceneChange;
9-
10-
[Obsolete("Use HarmonyHelper instead.")]
118
event Action<OWScene, OWScene> OnCompleteSceneChange;
129
}
1310
}

src/OWML.Common/Interfaces/IModUnityEvents.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@ namespace OWML.Common
44
{
55
public interface IModUnityEvents
66
{
7-
[Obsolete("Use HarmonyHelper instead.")]
7+
[Obsolete("Use Harmony patches instead.")]
88
event Action OnUpdate;
99

10-
[Obsolete("Use HarmonyHelper instead.")]
10+
[Obsolete("Use Harmony patches instead.")]
1111
event Action OnFixedUpdate;
1212

13-
[Obsolete("Use HarmonyHelper instead.")]
13+
[Obsolete("Use Harmony patches instead.")]
1414
event Action OnLateUpdate;
1515

1616
void FireOnNextUpdate(Action action);

src/OWML.Launcher/App.cs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -177,8 +177,20 @@ void StartGameViaExe()
177177
return;
178178
}
179179

180-
var gameDll = $"{_owmlConfig.ManagedPath}/Assembly-CSharp.dll";
181-
var assembly = Assembly.LoadFrom(gameDll);
180+
var gameDll = Path.Combine(_owmlConfig.ManagedPath, "Assembly-CSharp.dll");
181+
182+
Assembly assembly = null;
183+
try
184+
{
185+
assembly = Assembly.LoadFrom(gameDll);
186+
}
187+
catch (Exception ex)
188+
{
189+
_writer.WriteLine($"Exception while trying to load game assembly: {ex}\nLaunching game directly...", MessageType.Error);
190+
StartGameViaExe();
191+
return;
192+
}
193+
182194
var types = assembly.GetTypes();
183195
var isEpic = types.Any(x => x.Name == "EpicEntitlementRetriever");
184196
var isSteam = types.Any(x => x.Name == "SteamEntitlementRetriever");

src/OWML.Launcher/GameVersionHandler.cs

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Windows.Forms;
23
using OWML.Common;
34

45
namespace OWML.Launcher
@@ -8,12 +9,14 @@ public class GameVersionHandler : IGameVersionHandler
89
private readonly IGameVersionReader _versionReader;
910
private readonly IModConsole _writer;
1011
private readonly IModManifest _owmlManifest;
12+
private readonly IProcessHelper _processHelper;
1113

12-
public GameVersionHandler(IGameVersionReader versionReader, IModConsole writer, IModManifest owmlManifest)
14+
public GameVersionHandler(IGameVersionReader versionReader, IModConsole writer, IModManifest owmlManifest, IProcessHelper processHelper)
1315
{
1416
_versionReader = versionReader;
1517
_writer = writer;
1618
_owmlManifest = owmlManifest;
19+
_processHelper = processHelper;
1720
}
1821

1922
public void CompareVersions()
@@ -25,21 +28,37 @@ public void CompareVersions()
2528
var minVersion = new Version(_owmlManifest.MinGameVersion);
2629
var maxVersion = new Version(_owmlManifest.MaxGameVersion);
2730

31+
var showPopup = false;
32+
var reason = "";
33+
2834
if (!isValidFormat)
2935
{
30-
_writer.WriteLine("Warning - invalid game version format", MessageType.Warning);
36+
showPopup = true;
37+
reason = "Invalid game version format.";
38+
_writer.WriteLine("Warning - Invalid game version format", MessageType.Warning);
3139
}
3240
else if (gameVersion > maxVersion)
3341
{
34-
_writer.WriteLine("Potentially unsupported game version found, continue at your own risk", MessageType.Warning);
42+
showPopup = true;
43+
reason = $"New Outer Wilds version. This version of OWML was built for {maxVersion}.";
44+
_writer.WriteLine($"New Outer Wilds version. This version of OWML was built for {maxVersion}.", MessageType.Warning);
3545
}
3646
else if (gameVersion < minVersion)
3747
{
38-
_writer.WriteLine("Unsupported game version found, custom menus won't work.", MessageType.Warning);
48+
showPopup = true;
49+
reason = $"Outdated Outer Wilds version. The oldest compatible version is {minVersion}.";
50+
_writer.WriteLine($"Outdated Outer Wilds version. The oldest compatible version is {minVersion}.", MessageType.Warning);
3951
}
40-
else
52+
53+
if (showPopup)
4154
{
42-
_writer.WriteLine("Game version is supported", MessageType.Success);
55+
var result = MessageBox.Show($"OWML could not verify if it will work on this version of Outer Wilds ({gameVersionString}).\n\n" +
56+
$"Reason: {reason}\n\n" +
57+
$"Do you want to continue?", "OWML.Launcher.GameVersionHandler", MessageBoxButtons.YesNo);
58+
if (result == DialogResult.No)
59+
{
60+
_processHelper.KillCurrentProcess();
61+
}
4362
}
4463
}
4564
}

src/OWML.Launcher/OWML.DefaultConfig.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@
22
"gamePath": "C:/Program Files (x86)/Steam/steamapps/common/Outer Wilds",
33
"debugMode": false,
44
"forceExe": false,
5-
"incrementalGC": false,
5+
"incrementalGC": true,
66
"socketPort": 0
77
}

src/OWML.Launcher/OWML.Launcher.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@
1111
<ProjectReference Include="..\OWML.Patcher\OWML.Patcher.csproj" />
1212
</ItemGroup>
1313

14+
<ItemGroup>
15+
<Reference Include="System.Windows.Forms" />
16+
</ItemGroup>
17+
1418
<ItemGroup>
1519
<None Update="game-versions.json">
1620
<CopyToOutputDirectory>Always</CopyToOutputDirectory>

src/OWML.Launcher/OWML.Manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"author": "Alek",
44
"name": "OWML",
55
"uniqueName": "Alek.OWML",
6-
"version": "2.8.0",
6+
"version": "2.9.0",
77
"minGameVersion": "1.1.13.393",
88
"maxGameVersion": "1.1.13.456"
99
}

src/OWML.ModHelper.Events/ModEvents.cs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,16 @@
66

77
namespace OWML.ModHelper.Events
88
{
9-
[Obsolete("Use HarmonyHelper instead.")]
109
public class ModEvents : IModEvents
1110
{
12-
[Obsolete("Use HarmonyHelper instead.")]
11+
[Obsolete("Use Harmony patches instead.")]
1312
public IModPlayerEvents Player { get; }
1413

15-
[Obsolete("Use HarmonyHelper instead.")]
1614
public IModSceneEvents Scenes { get; }
1715

18-
[Obsolete("Use HarmonyHelper instead.")]
1916
public IModUnityEvents Unity { get; }
2017

21-
[Obsolete("Use HarmonyHelper instead.")]
18+
[Obsolete("Use Harmony patches instead.")]
2219
public event Action<MonoBehaviour, Common.Events> Event;
2320

2421
[Obsolete("Use Event instead.")]
@@ -62,7 +59,7 @@ private void OnPatchEvent(MonoBehaviour behaviour, Common.Events ev)
6259
}
6360
}
6461

65-
[Obsolete("Use HarmonyHelper instead.")]
62+
[Obsolete("Use Harmony patches instead.")]
6663
public void Subscribe<T>(Common.Events ev) where T : MonoBehaviour
6764
{
6865
SubscribeToEvent<T>(ev);

src/OWML.ModHelper.Events/ModPlayerEvents.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@
44

55
namespace OWML.ModHelper.Events
66
{
7+
[Obsolete("Use Harmony patches instead.")]
78
public class ModPlayerEvents : IModPlayerEvents
89
{
9-
[Obsolete("Use HarmonyHelper instead.")]
10+
[Obsolete("Use Harmony patches instead.")]
1011
public event Action<PlayerBody> OnPlayerAwake;
1112

1213
public void Init(IModEvents events)

src/OWML.ModHelper.Events/ModSceneEvents.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,7 @@ namespace OWML.ModHelper.Events
55
{
66
public class ModSceneEvents : IModSceneEvents
77
{
8-
[Obsolete("Use HarmonyHelper instead.")]
98
public event Action<OWScene, OWScene> OnStartSceneChange;
10-
[Obsolete("Use HarmonyHelper instead.")]
119
public event Action<OWScene, OWScene> OnCompleteSceneChange;
1210

1311
public ModSceneEvents()

src/OWML.ModHelper.Events/ModUnityEvents.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@ namespace OWML.ModHelper.Events
77
{
88
public class ModUnityEvents : MonoBehaviour, IModUnityEvents
99
{
10-
[Obsolete("Use HarmonyHelper instead.")]
10+
[Obsolete("Use Harmony patches instead.")]
1111
public event Action OnUpdate;
1212

13-
[Obsolete("Use HarmonyHelper instead.")]
13+
[Obsolete("Use Harmony patches instead.")]
1414
public event Action OnFixedUpdate;
1515

16-
[Obsolete("Use HarmonyHelper instead.")]
16+
[Obsolete("Use Harmony patches instead.")]
1717
public event Action OnLateUpdate;
1818

1919
public void FireOnNextUpdate(Action action) =>

src/OWML.ModHelper.Menus/ModConfigMenu.cs

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using OWML.Common;
1+
using Newtonsoft.Json.Linq;
2+
using OWML.Common;
23
using OWML.Common.Menus;
34
using System;
45
using System.Linq;
@@ -23,8 +24,32 @@ protected override void AddInputs()
2324
var index = 3;
2425
foreach (var setting in ModData.Config.Settings)
2526
{
26-
AddConfigInput(setting.Key, setting.Value, index++);
27+
if (setting.Value is not JObject obj)
28+
{
29+
AddConfigInput(setting.Key, setting.Value, index++);
30+
continue;
31+
}
32+
33+
if (Convert.ToBoolean(obj["dlcOnly"]))
34+
{
35+
var ownsDlc = EntitlementsManager.IsDlcOwned();
36+
if (ownsDlc == EntitlementsManager.AsyncOwnershipStatus.NotReady)
37+
{
38+
Console.WriteLine("Tried to add inputs while DLC ownership status was not determined.", MessageType.Error);
39+
AddConfigInput(setting.Key, setting.Value, index++);
40+
}
41+
42+
if (ownsDlc == EntitlementsManager.AsyncOwnershipStatus.Owned)
43+
{
44+
AddConfigInput(setting.Key, setting.Value, index++);
45+
}
46+
}
47+
else
48+
{
49+
AddConfigInput(setting.Key, setting.Value, index++);
50+
}
2751
}
52+
2853
UpdateNavigation();
2954
SelectFirst();
3055
}

src/OWML.ModLoader/GameVendorGetter.cs

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,9 @@
22
using OWML.Common.Enums;
33
using OWML.Common.Interfaces;
44
using System;
5-
using System.Collections.Generic;
5+
using System.IO;
66
using System.Linq;
77
using System.Reflection;
8-
using System.Text;
9-
using System.Threading.Tasks;
108

119
namespace OWML.ModLoader
1210
{
@@ -30,8 +28,19 @@ public GameVendor GetGameVendor()
3028
return _gameVendor;
3129
}
3230

33-
var gameDll = $"{_owmlConfig.ManagedPath}/Assembly-CSharp.dll";
34-
var assembly = Assembly.LoadFrom(gameDll);
31+
var gameDll = Path.Combine(_owmlConfig.ManagedPath, "Assembly-CSharp.dll");
32+
33+
Assembly assembly = null;
34+
try
35+
{
36+
assembly = Assembly.LoadFrom(gameDll);
37+
}
38+
catch (Exception ex)
39+
{
40+
_console.WriteLine($"Exception while trying to load game assembly to determine vendor: {ex}", MessageType.Error);
41+
return _gameVendor = GameVendor.None;
42+
}
43+
3544
var types = assembly.GetTypes();
3645

3746
if (types.Any(x => x.Name == "EpicEntitlementRetriever"))

0 commit comments

Comments
 (0)