Skip to content

Releases: Mutagen-Modding/Mutagen

0.39.3

30 Jul 21:50
752be77
Compare
Choose a tag to compare
  • Fix for Fo4 translated string targets QuestLogEntry.Entry and Message.Description
  • Fix for null translated strings not exporting with index 0.
  • Mutagen.Bethesda.SourceGenerators targets netstandard2.0 again

0.39.2

24 Jul 08:29
bd69646
Compare
Choose a tag to compare
  • Fix for FormKey pickers in autogenerated settings not resolving
  • FormLinkInformation.Null convenience static member

0.39.1

23 Jul 19:20
a255b6b
Compare
Choose a tag to compare
  • Autogenerated Settings
    • FormLink members without generics can now have the FormLinkPickerCustomization attribute added to scope their target types to an arbitrary list of types.
  • Skyrim.IEnchantable aspect interface added for Armor and Weapons
  • Flag attribute and naming fixes and adjustments made to
    • Skyrim
      • LeveledList.Flags
      • DestructionStageData.Flag
      • CellGrid.Flag
    • Fallout4
      • AttackData.Flag
      • AddonNode.Flag
      • CellGrid.Flag
      • LeveledItem.Flag
      • LeveledNpc.Flag
      • TintTemplate.Flag
      • VoiceType.Flag
    • Oblivion
      • DialogItem.Flag
      • LogEntry.Flag
      • Quest.Flag
      • QuestTarget.Flag
      • Water.Flag
  • Fix for Fo4.ModStats.Version default value

PRs

  • Added missing Flags attribute to Skyrim leveled list records by @Elscrux in #340
  • Target Any Set of Types in FormLink Pickers by @Noggog in #342
  • Skyrim IEnchantable by @Noggog in #345
  • Fo4 ModStats.Version defaults to 1.0 instead of 1.7 by @Noggog in #350

0.39

16 Jul 20:38
132e87d
Compare
Choose a tag to compare

Fallout 4

  • Fix for parsing ObjectModifications that were marked as deleted
  • PlacedObject was missing LocationReference member

Backwards Incompatible

  • Globals simplified into just one: Global, without abstract subclasses
  • Weapon.DamageType swapped to be a list of DamageTypes, rather than just one
  • ObjectModification.Unknowns combined into one field

General

  • Fix for plain string parsing that was trimming null chars in places that concept did not apply
  • Improved some parse short circuiting and duplicate RecordType handling in DATA sections when versioning parameters were present
  • Fix for FormKeyPicker.ScopedTypes and MissingMeansNull binding two way by default

Backwards Incompatible

  • Lots of Mutagen.Bethesda.Core classes sealed for optimization

PRs

  • Fo4 Correctness Pass by @Noggog in #336
  • FormLink settings reset if target mod missing from LO by @Noggog in #337

0.38.2

07 Jul 02:44
98bc1f5
Compare
Choose a tag to compare

Fallout4

  • Lots of translated string member fixes to point to the proper strings files
  • Typos in Npc: AssistanceType and Aggression

0.38.1

06 Jul 06:47
ce148d6
Compare
Choose a tag to compare
  • Fix for encoding usage in binary overlays. (few more adjustments for non-english users to come)

0.38

06 Jul 04:10
e617130
Compare
Choose a tag to compare

General

  • Added json support for IFormLink (no generic), where the type is not known ahead of time and thus persisted in the json as data
  • IFormLinkIdentifier.ToStandardizedIdentifier extension method, to swap the associated type with the getter type
  • TranslatedString debug display

Backwards Incompatible

  • Changed default localizable but embedded encoding back to 1252 (off of UTF8)
    • BinaryWriteParameters.Encoding exposed to compensate, allowing callers to override with UTF8 as desired
  • Removed top level WinningOverride style calls for record types with abstract base classes. (eg, GlobalFloat removed, in favor of Global) These calls threw exceptions and were not intended to be exposed.
  • FormLinkInformation moved out of Internals sub-namespace
  • Swapped FormLink.ToString to end with generic type, rather than starting with to match typical C# generic patterns

Fallout4

  • VMAD supports length overflow
  • VMAD ScriptEntryStructs defined to fix parsing
  • Fixed some description fields looking to the wrong strings file
  • IDamageTypeTarget link interface removed. DamageTypeItem subrecord class defined instead
  • NavigationMapInfo.Parent fields refactored to use ANavigationMapInfoParent abstract subclassing
  • Defined IPreCutMapEntryReference which NavigationMesh.Reference links target
  • Defined IConstructibleObject which ConstructibleObject.CreatedObject links target
  • Fix for Furniture DeepCopy calls
  • Fix for ArmorAddon.WeightSliderEnabled parsing
  • Fix for Book.Teaches parsing
  • Fix for PlacedObject.LightingTemplate pointing to the wrong type
  • Fix for QuestReferenceAlias.DeathItem pointing to the wrong type

Backwards Incompatible

  • Removed some vestigial duplicate VMAD classes (ScriptEntryStruct, ScriptPropertyStruct)
  • Added Link Interface marking to many record types that were missing them
    • IPlaceableObject
    • INpcSpawn
    • IOwner
    • ILinkedReference
    • IExplodeSpawn
    • IAliasVoiceType
  • Holotape data content made optional

Oblivion

Backwards Incompatible

  • Removed Place abstract class for IPlaced LinkInterface
  • SpellUnleveled renamed to Spell
  • ISpellRecord Link Interface defined

0.37.1

26 Jun 20:04
2eec0fc
Compare
Choose a tag to compare

What's Changed

  • Fixed cancellation token being null to return early by @Elscrux in #313
  • ByteArray translation makes use of ReadOnlyMemorySlice.Empty by @Noggog in #315

Full Changelog: 0.37...0.37.1

0.37

26 Jun 06:04
Compare
Choose a tag to compare

General

Backward Incompatible Changes

  • Net5 support removed (Synthesis should handle some upgrading automatically for its users)
  • LinkCachePreferences simplification refactoring
  • MasterReferenceReader renamed to MasterReferenceCollection
  • IKeyValue generics flipped to be <Key, Value> to match other existing C# patterns
  • Boolean parsing tweaked slightly to allow for any value above 1 to be seen as true
  • Lots of internal classes marked internal and thus hidden from users
  • Header struct system refactors
    • Location calls return pin frames
    • Calls moved from PluginUtilityTranslation to RecordSpanExtensions
    • Renamed functions GetSubrecord -> GetSubrecordHeader, and GetSubrecordFrame -> GetSubrecord
  • FileGeneration renamed to StructuredStringBuilder, and refactored API a bit
  • TryLocateSubrecord low level API standardized to TryFindSubrecord
  • Removed unnecessary LinkCache parameter from simple context construction
  • ModListing concepts split into two:
    • LoadOrderListing. DTO representing an entry on a load order list, with no concept of anything on-disk within the Data folder
    • ModListing. DTO with some ExistsOnDisk component, and optionally a Mod object exposed and loaded from disk
  • GameEnvironmentBuilder.TransformLoadOrder refactored to two calls:
    • TransformLoadOrderListings -> exposes load order to be trimmed before loading any mods from disk
    • TransformModListings -> exposes load order with accessible mod objects
  • IGameEnvironmentState renamed to IGameEnvironment
  • IPrintable.ToString renamed to Print
  • AsLink marked Obsolete in favor of ToLink. (As suggests a cast, while this function was instead creating a new object)
  • GetContainedFormLinks property refactored to EnumerateFormLinks(), to be more consistent with other EnumerateMajorRecords() and similar calls
  • ILinkCacheExt -> LinkCacheConstructionMixIn rename
  • MajorRecord header extraction renamed to MajorRecordHeader. MajorRecord now returns a frame. Same with Group calls.
  • ListExt.Empty() call removed. Built in C# Array.Empty() call is what should be used instead
  • VariableHeader concepts fixed, but now require bool Subrecords parameter
  • Readonly interface of RecordCollection defined /w mutable calls added to the mutable version
  • IMasterReferenceReader renamed to IReadOnlyMasterReferenceCollection

Improvements

  • GameEnvironment.Typical.Builder starting point
  • GameEnvironmentBuilder.WithTargetDataFolder for mixing in custom data folder override
  • GameEnvironmentBuilder, MutableModLinkCache, MutableLoadOrderLinkCache options without generics
  • GameEnvironment.Construct alternative calls /w less generics
  • Warmup.Init only runs once, even if called multiple times
  • GameEnvironment bootstrap calls run Warmup
  • FormLinkInformation.ToString fix
  • IMajorRecordSimpleContextEnumerable.EnumerateMajorRecordSimpleContexts() with no typing information
  • LinkCache lookup calls that take IFormLinkGetter directly, instead of needing to get FormKey/Type passed in as parameters
  • More Group functions with no generics (AddNew, DuplicateInAsNewUntypedRecord)
  • Mutagen.Bethesda.Windows package depreciated in favor of in-code windows checks
  • More content migrated out of Mutagen.Bethesda to Mutagen.Bethesda.Core
  • Non generic MajorRecordInstantiator
  • IGroup.ContainedRecordRegistration
  • Better support for some types like GameSettings/Globals in lookup/enumeration and other tooling
  • TryResolve support for more aspect interfaces situations
  • TryResolve support for some abstract class edgecases like IAStoryManagerNode
  • AspectInterfaceMapper object to retrieve all concrete types implemented by an Aspect Interface
  • ModContext/LinkCache generics relaxed to allow anything that implements IMajorRecordQueryable to be Resolved
  • MajorRecord enumeration and LinkCaches should look up aspect interfaces (that implement IMajorRecordQueryable)
  • IGroupGetter.ContainedRecordType
  • Optimizations and improvements to warmup logic. Should be quicker. Warmup.Init is the only call now (vs many per-game variants)
  • List parsing no longer throws as eagerly when the count is wrong
  • MajorRecordFrame.Decompress call
  • Header struct EnumerateSubrecords now internally handle length overflow XXXX records
  • Point structs now mutable
  • Work to improve pathing issues for Linux
  • Work to build on Linux systems
  • RecordSpanExtension methods more able to handle record length overflow concepts
  • LinkCache TryResolves on IFormLinkGetter swapped to IFormLinkIdentifier for more compatibility
  • GameConstants have new GroupNesting structure to help with generic tooling regarding nested groups.
  • RecordLocator upgrade to new GroupNesting concepts to better parse Fo4 records
  • GroupPinHeader structs defined
  • Header struct ToStrings improved
  • Plugin reader puts plugin path it failed to find in exception
  • IHaveVirtualMachineAdapterGetter aspect interface defined
  • Stream.TryReadMajorRecordHeader (and similar) /w IRecordCollection parameter
  • Major Records /w deleted flag trim all subrecords on writing

Fixes

  • LinkCaches now throw exceptions more eagerly if they have been disposed
  • Fix for RecordException.Enrich absorbing RecordType improperly in some situations
  • Adjustments for how queries throw when accessing simple caches inappropriately
  • Fix for certain formlinks not being enumerated with the rest
  • Fix for equality call not passing translation masks to subobjects on lists
  • Small optimization for enumerating form links
  • Fix for writing UTF8 strings
  • Fix for subrecord length overflow handling in several situations
  • Removed extra decompression call in some circumstances

Fallout4

  • Fully parsed and tested against the base game .esms
  • Fix for plugins file location logic

Skyrim

  • MagicEffect HitVisuals/EnchantVisuals implemented
  • Landscape VertextNormals/VertexHeightMap/VertexColors parsed and exposed as Array2d objects
  • Cell MaxHeightData parsed and exposed as Array2d
  • PlacedTrap implements ILocationTargetable
  • IPositionRotation registerd as an aspect interface
  • Skyrim PlacedObject.Base targets IPlaceableObject link interface
  • Several adapter records had ExtraBindDataVersion defined
  • DialogBranch.TNAM defined to be Category enum
  • Explosion.PlacedObject had scoping improved with new IExplodeSpawn link interface
  • StoryManagerEventNode.XNAM defined to be MaxConcurrentQuests
  • SoundDescriptor.CNAM defined to be DescriptorType enum
  • PerkEntryPointModifyValues support for FloatFloat

Backwards Incompatible Changes

  • MagicEffect CounterEffectCount member made derivative
  • Some MagicEffect archetypes renamed to match the CK better
    • Spell -> Cloak
    • Enchantment -> EnhanceWeapon
    • Keyword -> PeakValueMod
    • Npc -> SummonCreature
  • Typo fix for Landscape.Flag.VertexNormalsHeightMap
  • Navmesh API refactor to have less abstract classes and require less type checking
  • Typo fix for Weather's Pleasant members
  • Ownership class removed. Fields are now inline
  • WorldMapOffset/WorldspaceObjectBounds absorbed into Worldspace
  • Quest ObjectWindowFilter field renamed to Filter
  • Quest AliasIndex renamed to AliasID
  • PackageEvent.Idle made non-nullable
  • EffectShader flags had some renaming
  • Some flags swapped to be booleans: ImageSpaceAdapter, Impact, and AssociationType
  • CameraShot TargetType/LocationType enums merged
  • StoryManagerEventNode.Type swapped to be enum
  • Some SoundDescriptor fields swapped to Percent type

Fixes

  • Fix for string condition parameter exporting
  • Fix for Landscape layer quadrant parsing more data than it should
  • VoiceType.Flag was missing Flags attribute
  • Fix for Navmesh API throwing NotImplementedException on certain operations
  • Several records had FormLinks that should've pointed to ImageSpace records were pointing to ImageSpaceAdapters.

0.37-pr013

23 Jun 04:29
Compare
Choose a tag to compare
0.37-pr013 Pre-release
Pre-release

Fallout4:

  • Tweaks in definitions and logic to make DLC parse

Skyrim

  • PerkEntryPointModifyValues support for FloatFloat

General

  • Removed extra decompression call in some circumstances
  • Fix for Warmup logic not doing its job
  • Stream.TryReadMajorRecordHeader (and similar) /w IRecordCollection parameter

Backwards Incompatible:

  • Major Records /w deleted flag trim all subrecords on writing
  • VariableHeader API refactor
  • IMasterReferenceReader renamed to IReadOnlyMasterReferenceCollection