Releases: Mutagen-Modding/Mutagen
0.44
Lower FormID Range Fixes
- By default. mods will NOT use lower FormID Ranges
- The
forceUseLowerFormIDRanges
parameter in mod construction allows you to set tonull
for "auto" behavior, checking header versions, ortrue
to always use the new ranges (in the case of SKSE allowing usage artificially) - Optional
headerVersion
in mod ctors, allowing specification of header version at the time of construction - Extra protections added during mod writing that will throw if lower FormID ranges are used without a listed master. This is a not allowed situation that causes errors.
- BinaryWriteParameters updates
LowerRangeDisallowedHandler
lets you control what should happen in the above scenario. By default it throws, but you can useALowerRangeDisallowedHandlerOption.AddPlaceholder()
to specify a fallback ModKey or load order to look to for a fallback. In this case, it will add an "unnecessary" master if you are using lower range FormIDs w/o a master, which will sidestep the issue.MinimumFormID
lets you control what the minimum allowed FormID before it is considered "lower range"- IModHeaderCommon.MinimumCustomFormID removed, and replaced with
IModGetter.MinimumCustomFormID(bool? forceUseLowerFormIDRanges)
- LoadOrder.CreateReadonly
Other Fixes - Thanks Elscrux!
- Fix for Skyrim water flags
- Book TeachesNothing raw content default swapped to max int value
- MajorRecordTypeEnumerator.GetMajorRecorTypesFor(GameCategory) functionality added
- AssetLink equality improvements to look at DataRelativePath instead of RawPath
0.43.3
0.43
General
- Lowered default NextFormID for certain games/versions (Such as Skyrim headers v1.71)
- Removed 255 limit on counted lists
- Improved bootstrapping of passthrough test UI
- GameConstants now lists:
- DefaultFormVersion
- HasEnabledMarkers
- MyDocumentsString
- IniName
- StringsLanguageFormat
- Creation Club load order logic no longer throws on non esls
- SubrecordPinFrame.Shift and overflow record detection improvements
- MajorRecordFrame.TryFindSubrecordAfter and FindEnumerateSubrecordsAfter added
- Archive APIs expose IFileSystem
- GetArchiveIniListings returns empty bsa file list if ini missing
- ChineseSimplified added to Language enum
- FormKey picker hide entries with no editorID when searching
- FormKey
None
concept (-1) - InterfaceMappingResult now contains getter/setter type information
- IGetterTypeMapper added to help retrieve Getter typing information
- Improvement for lists /w a counter subrecord that is missing
- Handling of missing Plugins.txt more gracefully
- Added FormKey alternative parameter for DuplciateInAsNewRecord
- IKeyworded.HasKeywords overload /w IEnumerable
- WinningContextOverride naming standardization
- Ba2Reader upgrades to read Starfield strings and v2 format
- Improvement for passthrough testing suite to white/blacklist specific groups
- Fix for NextFormID being set to 1 higher than desired
- Stream.GetSubrecord(RecordType) convenience function
- MutagenEncodingProvider.GetEncoding recursion fix
- Strings lookups were matching with strings from other mods of similar name
- Fix mismatching length for encodings where the byte count and string length are different
- Some plain string fields were trimming null characters
- Missing length override handling in overlay parsing
- TranslatedString.NumLanguages fixes
- Fix for reflection UIs not handling meta interfaces
- Bugfix for Compressed items in Ba2 not getting correct lengths
- AssetLink default values fixed when nullable
Common Records
- LightMaster renamed to Light
- Removed ModHeaderCommonFlag
- MasterReference's FileSize member made nullable
- Fix for DialogTopic's defaults being applied to the wrong fields
- Removed Deleted flag from Static.MajorFlag. It's a common flag
- PlayerReceivesFavor spelling typo
- Fix for Weather.NAM4 default values
- Some Perk exception wording improvements
Fallout4
- Fo4VR added as a GameRelease
- Fix for Fo4 Weapon Property ImpactDataSet's value (was just wrong)
- Made APackageData's ctor public
- Fix for default FormVersion sometimes not being set on records
- Global records redone to follow existing patterns
- GameSetting/Global Group.AddNewFloat and similar extension functions added
- Fix for aspect interfaces not registering in some cases
- FilterKeywordChance uses Percent
- DestructionStageData subobject removed in favor of in-line fields on DestructionStage
- Cover/CoverTriangleMap records defined
- WeaponDamageType Amount -> Value
- Armor StaggerRating swapped to UInt8
- PlacedNpc/Object ragdoll fields defined
- RagDollBipedData -> RagdollBipedRotation
- DialogResponses.Flag updated to latest xEdit definitions
- Scene.ActorID -> AliasID
- DialogTopic.Quest made non-nullable
- PlacedNpc.StartsUnconscious enum value fix
- Npc.BaseHealth -> CalculatedHealth. BaseActionPoints -> CalculatedActionPoints
- Water.FogShallowColor typo
- Furniture.HasContainer added
- LeveledItem/Npc entry definitions updated to have ChanceNone
- NavigationMapInfo PreferredMergesFlag removed
- ActorValueInformation flags adjusted to latest definitions
- StoryManagerEventNode.Type now an enum
- ColorRecord major flag defined
- UnknownObjectModifiction now stores its target type better
- Weapon marked as IBindableEquipment link interface
- PlacedNpc/Object marked as IKeywordLinkedReference link interface
- Fix for Race BipedObject default values
Skyrim
- Updated Skyrim default header to 1.71
- LensFlare added to mod object
- ActorValueMapper.TryGetActorValue from major record to enum
- Worldspaces/Cell helper methods like AddCell/GetOrAdd(Sub)Block
- Light.Lens added
- Scene enum StopQuestOnEnd typo fix
- Landscape.AlphaLayer defined
- GetEventDataConditionData Value2 enum item renamed
- SkyrimVR Ini name fix
Skyrim VR
->SkyrimVR
Oblivion
- PlacedCreate.DistantLodData added
- Landscape LayerNumber made settable
Starfield
- All records parsed as a baseline, will get more definition over time
0.43-pr002
Improvements
- Starfield records parsed as a baseline
- Records will get more definition over time
- Fo4VR added as a GameRelease
- Updated Skyrim default header to 1.71
- Lowered default NextFormID for certain games/versions
- Removed 255 limit on counted lists
- Improved bootstrapping of passthrough test UI
- GameConstants now lists:
- DefaultFormVersion
- HasEnabledMarkers
- MyDocumentsString
- IniName
- StringsLanguageFormat
- Some Perk exception wording improvements
- Creation Club load order logic no longer throws on non esls
- SubrecordPinFrame.Shift and overflow record detection improvements
- MajorRecordFrame.TryFindSubrecordAfter and FindEnumerateSubrecordsAfter added
- Archive APIs expose IFileSystem
- GetArchiveIniListings returns empty bsa file list if ini missing
- ChineseSimplified added to Language enum
- FormKey picker hide entries with no editorID when searching
- FormKey
None
concept (-1) - InterfaceMappingResult now contains getter/setter type information
- IGetterTypeMapper added to help retrieve Getter typing information
- Improvement for lists /w a counter subrecord that is missing
Fixes
- SkyrimVR Ini name fix
Skyrim VR
->SkyrimVR
- Fix for NextFormID being set to 1 higher than desired
- Stream.GetSubrecord(RecordType) convenience function
- MutagenEncodingProvider.GetEncoding recursion fix
- Fix for Fo4 Race BipedObject default values
- Oblivion Landscape LayerNumber made settable
- Fo4 UnknownObjectModifiction now stores its target type better
- Fo4 Weapon marked as IBindableEquipment link interface
- Fo4 PlacedNpc/Object marked as IKeywordLinkedReference link interface
- Strings lookups were matching with strings from other mods of similar name
- Fix mismatching length for encodings where the byte count and string length are different
- Some plain string fields were trimming null characters
- Missing length override handling in overlay parsing
- TranslatedString.NumLanguages fixes
- Fix for reflection UIs not handling meta interfaces
- Bugfix for Compressed items in Ba2 not getting correct lengths
- AssetLink default values fixed when nullable
- Fix for Weather.NAM4 default values
Backwards Incompatible Changes
- LightMaster renamed to Light
- Removed ModHeaderCommonFlag
- MasterReference's FileSize member made nullable
- Fix for DialogTopic's defaults being applied to the wrong fields
- Removed Deleted flag from Static.MajorFlag. It's a common flag
- PlayerReceivesFavor spelling typo
Fo4
- FilterKeywordChance uses Percent
- DestructionStageData subobject removed in favor of in-line fields on DestructionStage
- Cover/CoverTriangleMap records defined
- WeaponDamageType Amount -> Value
- Armor StaggerRating swapped to UInt8
- PlacedNpc/Object ragdoll fields defined
- RagDollBipedData -> RagdollBipedRotation
- DialogResponses.Flag updated to latest xEdit definitions
- Scene.ActorID -> AliasID
- DialogTopic.Quest made non-nullable
- PlacedNpc.StartsUnconscious enum value fix
- Npc.BaseHealth -> CalculatedHealth. BaseActionPoints -> CalculatedActionPoints
- Water.FogShallowColor typo
- Furniture.HasContainer added
- LeveledItem/Npc entry definitions updated to have ChanceNone
- NavigationMapInfo PreferredMergesFlag removed
- ActorValueInformation flags adjusted to latest definitions
- StoryManagerEventNode.Type now an enum
- ColorRecord major flag defined
Skyrim
- Landscape.AlphaLayer defined
- GetEventDataConditionData Value2 enum item renamed
0.43-pr001
- General
- Handling of missing Plugins.txt more gracefully
- Added FormKey alternative parameter for DuplciateInAsNewRecord
- IKeyworded.HasKeywords overload /w IEnumerable
- WinningContextOverride naming standardization
- Ba2Reader upgrades to read Starfield strings and v2 format
- Improvement for passthrough testing suite to white/blacklist specific groups
- Added lastparsed as parameter for custom partial functions
- Fallout4
- Fix for Fo4 Weapon Property ImpactDataSet's value (was just wrong)
- Made APackageData's ctor public
- Fix for default FormVersion sometimes not being set on records
- Global records redone to follow existing patterns
- GameSetting/Global Group.AddNewFloat and similar extension functions added
- Fix for aspect interfaces not registering in some cases
- Skyrim
- LensFlare added to mod object
- ActorValueMapper.TryGetActorValue from major record to enum
- Worldspaces/Cell helper methods like AddCell/GetOrAdd(Sub)Block
- Light.Lens added
- Scene enum StopQuestOnEnd typo fix
- Oblivion
- PlacedCreate.DistantLodData added
- Starfield
- Some basic support
- Some decoding work done up until, but not including Race
0.42
- Float rounding error improvements
- Fix for ModKey not using same fields for Equality as its Hash
- Fix typo in Aggressive enum
- AutoFixture systems now sets properties of major records it returns and turns off compression, deleted flags, and FormKey
- Missing IFileSystem pass into parsing logic
- Fix for NavigationMeshData.Parent missing default value
- Fix for LocationTargetRadius.Target missing default value
- Fix for default values of bytes for fields after break
- Internal Thread safety fixes
- Target Net6/7
- ModInstantiator.Importer returns disposable interface
- Static Lod handling of overflow bytes internalized
- GameRelease.ToCategory extension function moved to kernel lib
- ClimateData swapped to use TimeOnly type
- More functions exposed on GameLocator
- Test suite CLI commands
- Oblivion
- EDIDLink.Null adjustments
- Default header version set to 1.0
- Fix for WeaponType Bow and Staff were swapped
- AssetLinks
- AutoFixture systems return AssetLinks
- AssetLink implicit operator from FilePath
- Voice Type Asset location fix for null speaker
- Voice Type Asset add exclusions to dialogue export for no export flag and sound overrides
- Fix for AssetType extension exposure not including "."
- Fix for IAssetType interfaces using virtual
- Remove inheritance from AssetTypes
- AssetTypeLocator.TryGetAssetType from release + path added
- GetInferredAssetLinks should return getter only interface
- RemapAssetLinks implemented
- EnumerateResolvedAssetLinks requires AssetLinkCache
- AssetLink equality comparers
0.41.1-pr002
Fix for ModKey equality to use the same StringComparison as the Hash
0.41.1-pr001
- Float divisor/multiplier revamp to hopefully be more accurate
- Boxing improvement for HeaderExport
0.41
General
- IFileSystem library updates
- Updated GameFinder library version
- Print string when ModKey.FromName fails to exception
- IGroupMixIns no longer requires IMajorRecordInternal
- Convert FormLinkOrAlias to FormLinkOrIndex to include package data
- FormLinkOrIndex Equality work
- IFormLinkOrIndex no longer implements IFormLink
- IIdentifierLinkCache.ResolveIdentifier with no Try
- Improvements on json parsing IFormLinkGetter on MajorRecord type
- UnmappableFormIDException exception for when exports have a ModKey that cannot be located
- ILinkCache API for getting the Type that a resolution connected with
- AutoFixture ModKey deterministically returns different modkeys
- FormLinkInformation.TryFactory from string
- List overflow exception improvements
- FormKey.ToFilesafeString
Asset Links
- Fix for EnumerateAssetLink extension method generic specifications
- AssetLink absolute file path detection
- Fixes for AssetLink DataRelativePath on linux systems
- FilePath to AssetLink implicit operator defined
- AssetLink.ConvertToDataRelativePath exposed
Autogenerated Settings UI
- Fix for default values not being set on subobjects within lists
- UI layout adjustments for list count and +/- buttons
- Shrink size of enum dictionary tabs to be reasonable
- Fix for missing styling import causing crashes in some circumstances
Skyrim/Fallout4
- AMagicEffectArchetype abstract base class added
- Region refactors to remove RegionDataHeader subobject
- Remove LocationTargetable link interface
- Npc RankPlacements should be signed
- StoryManagerNode.HoursUntilReset fix. Should be divisor
- Return UnknownObjectModification if not DATA subrecord
- Fix for MagicEffect.Archetype null ref errors
- Add Npc to IReferenceableObject
Skyrim
- Skyrim condition structures completely overhauled (bit more to come). Classes generated per condition function, with strongly typed parameters.
- Fixed wrong type for GetIsUsedItemEquipType
- Removed "Scroll" enum entry of CastType. This mistake was brought over by xEdit. There is no setting like this in the CK.
- Add IMagicItem
- Remove unused IEventDataTarget interface
- Renamed UnusedConditions to EventConditions as described in #413
- Fix #418 - IOwner interface being implemented by PlacedNpc instead of Npc
- Fix #420 - Use ILight instead of LightTemplate for LightTemplate
- Fix player controls parameter name
- Add Npc to IExplodeSpawn link interface
- Add addon node and art object to IPlaceableObject link interface
- Skyrim.LensFlare defined
- Skyrim Door shouldn't implement ILocationTargetable
- IsInCriticalStageConditionData first parameter defined to be CriticalStage enum
Oblivion
- DialogItem fixes. TIPC was missing. PreviousTopic renamed to PreviousItem
- RegionDataHeader removed
UI
- Reflection UI FormLink settings writes type if required
- AFormKeyPicker.SelectedType property
0.41-pr006
- FilePath to AssetLink implicit operator defined
- AutoFixture ModKey deterministically returns different modkeys
- Npc RankPlacements should be signed
- StoryManagerNode.HoursUntilReset should be divisor
- Return UnknownObjectModification if not DATA subrecord