Skip to content

v3.0.0

Choose a tag to compare

@github-actions github-actions released this 10 Oct 05:01
· 77 commits to main since this release

3.0.0 (2026-10-10)

⚠ BREAKING CHANGES

  • Patcher: DataSet's properties are now readonly. As a result, DataSet instances must be constructed via the primary constructor. Assignments to properties in a constructor call will error.
  • File: Attempts to instantiateHXE.File will fail without setting Path. Set Path when instantiating or use HXE.File.GetTemporary().
  • CLI, HCE, Installer, Manifest, MCC, Net, Options, Process, Update: Many property types are now explicitly nullable. This should have been done when support for C# 8 and later was first introduced.

Features

  • add CLI argument --silent to suppress all console output (8c1d542)
  • add Resume values for firefight maps Bridge, Hangar, Lobby, and Swamp Tower (5deb5ce)
  • File: add simple wrapper for System.IO.File.Exists (b13fad2)

Bug Fixes

  • add DynamicallyAccessedMembers attributes to some OptionSet methods (0a52e5c)
  • add check in Test to access embedded 343I cert (e56b6ce)
  • add internal "GetTemporary" method to get a File instance whose path does not exist; use it for (c5605fb)
  • change version variables used in CLI banner's version- and commit-related messages to make them make sense (c440204)
  • CLI, HCE, Installer, Manifest, MCC, Net, Options, Process, Update: add nullable annotations and checks (4466616)
  • Common: run xrandr via Start(string, string) for legacy compatibility; throw if it returns null (c5f15d0)
  • Compiler: prevent null assignment to Path relative-path string (b2fc86d)
  • Compiler: throw exceptions when package name or package entry name are impossibly null (712c42a)
  • deps: bump XmlSourceGenerator to a97ef26 "fix: explicitly define PolymorphicMapping's properties; add PublicParameterlessConstructor to the Type property" (aed3780)
  • deps: bump XmlSourceGenerator to e530301 "test: update tests' expectations regarding PolymorphicMapping, PublicParameterlessConstructor annotations, and null-forgiveness" (26b9152)
  • deps: upgrade System.Text.Json in .NET Framework 4 (dc5f772)
  • Difficulty: annotate with PublicParameterlessConstructor (70226e1)
  • Difficulty: set XML root and namespace (937d93c)
  • File: if null, derive File.Name from File.Path (b9554bb)
  • File: require Path be set in before exiting constructor (4ba25f9)
  • File: use GetFullPath in File.Path setter (828c116)
  • HCE: fall back to GetPathRoot when GetDirectory returns null (2f0b591)
  • HCE: prefer the generic overload 'System.Enum.GetValues()' to prevent Reflection use (7395cd5)
  • Installer: throw when properties and variables are impossibly null (04320ce)
  • Kernel: change "ignoreing" in a MAIN.OPEN message to "ignoring" (1c88879)
  • Kernel: increase max log file size from 1MiB to 8MiB (43465c6)
  • Kernel: reduce amount of times "dinput8.dll" and "mods/opensauce.dll" are checked if they exist (abbb8e9)
  • Latest, OpenSauce, Positions, Update: initialize properties to safe, non-null defaults (697c4e0)
  • Net: initialize DefaultHttpClient in a way that doesn't cause a crash immediately (7518948)
  • Net: prevent dereference of maybe-null fileStream (d484946)
  • Net: resolve HttpClient crash; decrease timeout from insane 24 hours to runtime-default 30 seconds (a48b4cf)
  • Paths: default StartDirectory to current working directory if the current process's executable path cannot be determined (4b496dc)
  • Paths: expand (GetGullPath) steamexepath when setting Steam paths (f3edcc8)
  • Positions, Settings: use Selawik Light, Inter Light, and Roboto Light as fallbacks when Segoe UI Light is unavailable (e.g. Non-Windows platforms) (46ef277)
  • Process: initialize LastResult to new instance (979dafe)
  • Registry: add null checks for opened keys, subkeys (482ea1d)
  • Registry: deprecate CreateKeys (4b90bd8)
  • remove unused CLI argument --registry; it did nothing; use reg.exe, instead (d86c050)
  • request compressed HTTP responses (ea17aef), closes #185
  • return early if a campaign's Missions or Difficulty lists are null (8f3d3cd)
  • rotate log files so old logs are not immediately overwritten (7fd6147), closes #574
  • Settings: prefer Enum.GetValues<T>(..) to resolve warning IL3050 (1e6bb4a)
  • Steam: remove invalid default value of argument libraryFoldersVdf of method ParseLibrary (dd8352b)
  • Update: annotate Commit parameter progress as nullable (3d35882)
  • Update: handle exceptions from failed http requests; fixes TaskCanceledException in Wine Mono (7c9179e)
  • Update: when totalFileSize is null, use invalid -1 (d1c875f)
  • use PInvoke for NTFS compression; previous implementation did nothing (0327183)

Performance Improvements

  • Manifest: source-generate XML (de)serializers (e9d6070)
  • OpenSauce: source-generate XML (de)serializers (d8e0738)
  • Patcher: change DataSet from a class to a readonly-struct (1c07329)
  • replace patches.crk read with static definitions (345f711)
  • Update: auto-generate XML serialization implementations for Update, Asset (7a61475)

Reverts

  • deps-dev): "build(deps-dev: update dependency typescript to v7 (#537)" (f4d36c2)

This release is also available on:

  • v3.0.0