Skip to content

0.27.2

Compare
Choose a tag to compare
@Noggog Noggog released this 22 Mar 00:24
· 2215 commits to release since this release

Fairly backwards incompatible release

FormLink Revamp:

  • IFormLinkGetter interface added, with IFormLink now representing the settable version
  • IFormLink.SetTo(...) exposed
  • IFormLink.SetToNull() exposed
  • FormLinks swapped to mutable classes to be mutated, rather than replaced during typical usage.
  • Lots of convenience functions: AsLink, AsNullableLink, Cast, etc.
  • AsLink() extension method for Major Record getters
  • FormLink.TypelessComparer static instance
  • MajorRecord <-> FormLink equality implemented. npcRecord.Equals(npcFormLink); // Could be true
  • FormLink.Null convenience static constant
  • == operators removed. formKey.Equals(otherFormKey) should be used, as it is a mutable class now.
  • FormLink.Resolve now will throw if not found. TryResolve /w a nullable return value and no out parameter exists instead, now.

Skyrim Conditions:

  • Data exposed on Skyrim.ICondition
  • FunctionConditionData now exposes RunOnType and Reference
  • FunctionConditionData.Function now exposed as enum (was previously just ushort)

FormKey Mapping Libraries:

  • Exposes FormLinks instead of FormKeys now
  • ModKey for the mods easily accessible, as well Skyrim.ModKey

Duplication:

  • Bugfix for Duplicate throwing internally, in some circumstances
  • Bugfix for Group.DuplicateInAsNewRecord throwing for abstract classes like Global

Implicits:
ImplicitRecords removed.
A new housing area for all the records and data implicit to a game:

  • BaseMods
  • Listings (what listing will be implicitly included in the load order)
  • RecordFormKeys (set of all the records embedded in the game, such as Player)

API now looks like Implicits.Get(GameRelease.SkyrimSE).BaseMasters or similar

Fixes:

  • SoundCategory.Parent's type was wrong
  • Bugfix for MagicEffect FormKey not being hooked into common systems, so not being handled properly
  • Fix for Skyrim.Statics not passing through their DATA records in certain circumstances
  • Some deep record enumerations were returning improper records (cells were being returned when querying for Landscapes, etc)

Other:

  • Net5 only
  • LoadOrder filtering convenience. TryGetIfEnabledAndExists. Resolve (converts LoadOrderListings, to TMod, and throws if a mod doesn't exist)
  • Abstract base classes like ASpell removed, in favor of Link Interface concepts
  • Writing mods now "cleans" null FormKeys, stripping thier ModKeys. (Can be turned off in writing options)
  • IConstructible implements IItem
  • Group.GetOrAddAsOverride(FormLink, LinkCache), which does the resolution internally
  • AlchemicalApparatus.Quality migrated to common enum
  • Globals/GameSettings have dedicated globalGroup.AddNewFloat() calls
  • NamedFieldsContain convenience method, which checks whether Name or EditorID contains a string
  • IKeyworded.HasKeyword that takes FormLink as parameter to check for
  • MissingRecordException added for failed lookups and such
  • Improved LoadOrder.PriorityOrder.Armor().WinningContextOverrides() to not need LinkCache as input for top level groups