Releases: Mutagen-Modding/Mutagen
Releases · Mutagen-Modding/Mutagen
0.39.3
0.39.2
0.39.1
- Autogenerated Settings
- FormLink members without generics can now have the
FormLinkPickerCustomization
attribute added to scope their target types to an arbitrary list of types.
- FormLink members without generics can now have the
- 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
- Skyrim
- Fix for Fo4.ModStats.Version default value
PRs
0.39
Fallout 4
- Fix for parsing
ObjectModification
s that were marked as deleted PlacedObject
was missingLocationReference
member
Backwards Incompatible
- Globals simplified into just one:
Global
, without abstract subclasses Weapon.DamageType
swapped to be a list ofDamageType
s, rather than just oneObjectModification.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 inDATA
sections when versioning parameters were present - Fix for
FormKeyPicker.ScopedTypes
andMissingMeansNull
binding two way by default
Backwards Incompatible
- Lots of Mutagen.Bethesda.Core classes
sealed
for optimization
PRs
0.38.2
0.38.1
0.38
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
0.37
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
toRecordSpanExtensions
- Renamed functions
GetSubrecord
->GetSubrecordHeader
, andGetSubrecordFrame
->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 toIFormLinkIdentifier
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 toImageSpaceAdapters
.
0.37-pr013
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