-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMainFile.cs
More file actions
84 lines (69 loc) · 3 KB
/
Copy pathMainFile.cs
File metadata and controls
84 lines (69 loc) · 3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
using System;
using System.Runtime.InteropServices;
using Godot;
using HarmonyLib;
using MegaCrit.Sts2.Core.Modding;
using TheSpireChronicles.Contracts;
using TheSpireChronicles.Data;
using TheSpireChronicles.Patches;
using TheSpireChronicles.Registration;
using TheSpireChronicles.UI;
namespace TheSpireChronicles;
[ModInitializer(nameof(Initialize))]
public static class MainFile
{
public const string ModId = "TheSpireChronicles";
public static MegaCrit.Sts2.Core.Logging.Logger Logger { get; } = new(ModId, MegaCrit.Sts2.Core.Logging.LogType.Generic);
public static bool IsModEnabled { get; private set; }
public static void Initialize()
{
IsModEnabled = true;
try
{
string modVer = ModVersionInfo.GetInformationalVersion();
string compiledAgainst = ModVersionInfo.GetCompiledAgainstVersions();
Logger.Info($"The Spire Chronicles: mod loading (version {modVer}, Godot {GameCompatibility.GetGodotVersionSummary()}, compiled-against {compiledAgainst}).");
}
catch (Exception ex)
{
Logger.Info($"The Spire Chronicles: mod loading (version unknown: {ex.Message}).");
}
if (!GameCompatibility.IsSupportedGameBuild(out string compatDetail))
{
Logger.Error($"The Spire Chronicles: game build differs from validated compiled-against versions. Continuing with caution. {compatDetail}");
GD.PrintErr($"[{ModId}] Game build differs from validated compiled-against versions. Continuing with caution. {compatDetail}");
}
else
{
Logger.Info($"The Spire Chronicles: game compatibility OK. {compatDetail}");
}
Logger.Info("The Spire Chronicles: core data model (capture, aggregation, persistence, contracts).");
ChroniclesApiRegistry.Register(ChroniclesDataApi.Instance);
Logger.Info(
$"The Spire Chronicles: contract ready ({ChroniclesContractInfo.CurrentVersion}), capabilities={string.Join(",", ChroniclesContractInfo.Capabilities)}.");
var harmony = new Harmony(ModId);
EventSourceRegistrationManifest.RegisterAll(harmony);
CombatTelemetryPatch.RegisterMomentumTimelineProvider();
var tree = (SceneTree)Engine.GetMainLoop();
CombatIdleMouseTracker.Initialize(tree);
Logger.Info("The Spire Chronicles: initialized.");
Libgcc();
}
[DllImport("libdl.so.2")]
private static extern IntPtr dlopen(string filename, int flags);
[DllImport("libdl.so.2")]
private static extern IntPtr dlerror();
private static IntPtr _holder;
private static void Libgcc()
{
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
{
Logger.Info("Running on Linux, manually dlopen libgcc for Harmony");
_holder = dlopen("libgcc_s.so.1", 2 | 256);
if (_holder == IntPtr.Zero)
{
Logger.Info("dlopen libgcc: " + Marshal.PtrToStringAnsi(dlerror()));
}
}
}
}