FNVEdit by ElminsterAU
New Vegas » Utilities
Added: 19/10/2010 - 06:05PM
Updated: 27/12/2016 - 09:31AM

22,140 Endorsements

3.2 Latest version

234,688 Unique D/Ls

440,540 Total D/Ls

1,391,244 Total Views

Uploaded by ElminsterAU


Last updated at 9:31, 27 Dec 2016 Uploaded at 18:05, 19 Oct 2010

FNVEdit 3.2 EXPERIMENTAL by ElminsterAU. Updated for Skyrim by Hlp, Zilav and Sharlikran.

Self Help Resources:

Users are expected to use common sense, read previous posts, look through the Wiki pages, watch the videos, and look through the Training Manual before posting.  If it's already covered somewhere you may not get any answer to your question at all.

Wiki Pages:

Note: These are all a work in Progress.

TES5Edit Cleaning Guide
TES5Edit Mod Cleaning Tutorial
TES5Edit Skyrim Dirty Plugins List
TES5Edit Scripting Functions [Wip] - Thanks to Turulo for starting it. Last update 10-13-2013 by Mator

Current Documentation:

Fallout3 Training Manual for FO3Edit (applies to all game versions)
FNVEdit Training Manual for FNVEdit (applies to all game versions)

If you would like to contribute to the conversion of the Fallout New Vegas documentation please visit the TES5Edit Documentation pages on the CK Wiki. Your help is greatly appreciated.

Official Bethesda Forum: Best place to ask technical questions related to the inner workings of FNVEdit.

Version 3.2 contains the following changes:

- [SSE] Skyrim Special Edition support
- [SSE] SSELODGen mode
- [FO4] Fallout 4 support
- improved record definitions and error checking
- various bug fixes and optimizations
- new scripts

Version 3.1.2 contains the following changes:

- improved record definitions and error checking
- [TES5] LODGen support for glowing meshes
- [FO3/FNV] Fixed possible error when reading LOD meshes
- [TES5] TES5LODGen avoids generating trees LOD for duplicate FormID ref numbers, bug in Skyrim causes them to not switch off properly in the game

Version 3.1.1 contains the following changes:

- PBEA record type for FO3/FNV
- improved record definitions
- xLODGen fix reading BSA archives
- xLODGen impoved removing of mesh faces under landscape LOD

Version 3.1.0 contains the following changes:

- speed optimizations
- fixed memory leaks
- fixed sorting of INFOs in DIAL
- fixed float values rounding
- advanced ModGroups feature
- drag&drop and "Remove from selected records" support for individual flags
- fonts are changeable in Options
- new scripting functions
- new script auto execution mode with -script:"test.pas" switch or when renamed to (TES4|TES5|FO3|FNV)Script.exe
- xEdit associates itself with *.tes5pas, *.tes4pas, *.fo3pas and *.fnvpas extensions
- load Mod Organizer profile internally using command line parameter -moprofile:<profilename>
- faster -quickshowconflicts switch processing
- new -O: parameter to set the output folder for TES4LODGen generation (much faster), for example "-O:..\ModOrganizer\mods\Generated DistantLOD"
- [FO3/FNV] Optional hiding of templated actor fields
- [FNV] Don't undelete refs of TREEs with LOD, bug in the game engine causes a crash
- [TES5] TES5LODGen, in right click menu -> Other -> Generate LOD
- [TES5] Weapon/Armor/Ammunition spreadsheets
- [TES5] BODT/BOD2 and different VMAD version objects are now lined up for conflict resolution
- [TES5] Improved DOBJ handling
- [TES5] Record header flags depend on record type

Version 3.0.32 contains the following changes:

- issue 69: automatic updating of counter fields to reflect the proper amount of elements in containers
- issue 149: FormID indexes in master file header ONAM forms
- issue 162: reference rotation angle normalization (TES4LODGen hanging on several mods)
- hotkeys in plugins selection window (Enter - confirm, numpad '+' select all, '-' select none, '*' invert)
- hold Shift while starting xEdit to skip restoring window state (for users stuck with xEdit outside of viewable desktop area)
- hold Shift while clicking OK in plugins selection window for one time skipping of building references for all plugins
- exclude building references for plugins list available in options
- option to display integer values of flags and enumerations (off by default)
- Ctrl+C copies only Node text to clipboard, Esc closes the View window
- definitions update for all games to reduce false positives when checking for errors
- custom scripted filtering, demo 'Apply custom scripted filter.pas'
- new scripting functions and scripts: Weather Editor script (Ctrl+W), Worldspace Browser (Alt+F3)
- scripted persistent bookmarking of records: Ctrl+1..5 to set a bookmark, Alt+1..5 to go back
- removing offset data in WRLD is optional now, 'on' by default
- [TES5] TES5LODGen (beta version, has several issues)
- [TES5] renamed armor addon nodes (added slot numbers), please update your scripts if needed
- [TES5] Record definitions update (WTHR, DOBJ, NAVM, VMAD papyrus data, GetEventData condition), improved NavMeshes (thanks to jonwd7)
- [TES5] Added VMAD (papyrus scripts) to TREE, and LVLG (global) to LVLN. They can't be edited in CK, but it supports them and they confirmed to work in game
- [TES4] Added XRGD subrecord to REFR, INFO flags update
- [FO3] Do not remove PLD2 subrecord in PACK (as in FNV)
- [FNV] BPTD update to support body parts without BPTN name
- [FNV] Relocated CELL and WRLD groups at the end of file
- [TES4/TES5/FO3/FNV] WRLD offset data OFST definition (when 'Simple records' option is off)

Version 3.0.31 contains the following changes:

- esp files can be loaded before esm
- issue 136: no stack overflow and progress indication for long operations
- issue 137: added empty subrecords were treated as ITM leading to possible erroneous cleaning
- fixed bug when 8 chars in square brackets were treated as FormID giving errors in various places, i.e. [$PitStop]
- Ctrl+DblClick on FormID numbers in messages tab could previously not work on some of them
- INFO records sorting is now optional instead of disabled
- BSA files are loaded by exact matching with plugin names for TES5, and partial matching for previous games
- new scripting functions, UI controls and scripts: Assets manager, Assets browser (Ctrl+F3)
- [TES5] added XCZR (encounter zone reference?) subrecord in REFR
- [TES5] added PMIS record
- [TES5] removed obsolete model subrecords: MODB, MOSD, FGGA, FGGS, FGTS
- [TES5] updated LCTN definition (showed errors in USKP before)
- [TES5] optional switch to resolve aliases (show ID and name)
- [TES5] fixed error when copying PACK record
- [TES5] 'Default' water height instead of '-2147483648.00000' is being added to CELLs with water but no XCLW subrecord
- [TES5] renamed "WRLDObject bounds" element, please update scripts if needed
- [TES5] merged patch improvements and fixes
- [TES4] updated INFO record definition to fix flags
- [TES4] fixed PGRR subrecord corruption in pathgrids when saving
- [TES4] fixed error when copying MGEF and REFR with XLOC subrecord
- [TES4] fixed "Unsused data in XSED" warning
- [FO3/FNV] fixed issues when copying NPC_, definitions update.

Version 3.0.30 contains the following changes:

- Added Prev/NextMember for Record union. Use after adding a new one to select the apropriate.
- Search for required master extended upward.
- Added a second command line parameter to specify the game's ini file location.
- Ctrl+A to select all in editor window.
- "Jump to" option in record's header popup menu.
- Enable/disable autosaves in options.
- Log file is overwritten at 3MB.
- [xDump] Fatal exceptions are reported through ReportProgress to have a timestamp. It might be useful to track down the issue.
- [TES5] Blocks adding new script property and new scripts. Please use CK to create them.
- [TES4/TES5/FO3/FNV] Record definitions update (number of ITM counts may change).
- New scripts added.
- New scripting functions (including regular expressions).
- New UI controls (TLabeledEdit, TCheckListBox).
- Scripts can be accessed with hotkeys (Ctrl+Shift+F to call a new find cell script demo).
- Removed syntax highlighter from script editor.
- Variable size detection corrected.
- Out of bounds detection corrected.
- Issues 125, 126, 129, 128 (128 was "worked around").
- Code modified for compatibility with both Delphi XE and XE3 in the same source files.
- Added BaseName property so unsorted arrays can contain structured unions.
- ByteArray length increased to 64 bits.

Version 3.0.29 contains the following changes:

- New Icon provided by moiman100.
- [TES5] more information is decoded (Records ARMA, NVSI, MOD2, LVLO).
- [TES5] Every string value gets own ID when localizing plugin
- [TES5] Fixed error when copying VMAD scripts using drag & drop
- issue 104 : Files others than esp and esm (and ghost) are timestamped.
- issue 88 : Delete from the view pane column title contextual menu is disabled (due to a hard to reproduce bug). This is a workaround, not a fix.
- issue 119 : [TES5] The CK adds useless XLRL records when reverting a change. Those XLRL are considered benign and the record ITM.
- issue 110 : Check for errors now checks for invalid FormIDs. Also, new "Check for errors" sample script.
- Options are processed when they matter, not at the beginning.
- issue 82 : [TES5] Capitalization fixed in text are being treated as dirty edits. Description fields are case sensitive now.
- Scripts can use other scripts with standard pascal "uses" keyword.
- New functions available.
- New sample scripts.
- Compare to will not overwrite an existing file, nor will it leave temporary files behind.
- issue 125 : Condition added are no longer empty.
- issue 121 : Changing FormID of Region causes severe bugs. Reference building is delayed to after the change is done. Non region reference XCLR record are no longer removed.
- issue 120/118 : Reference not updated while adding a master. Reference lookup during the addition was sometimes unreliable.
- issue 117 : Bug in script Undelete and Disable References.pas
- issue 112 : Option "Simple Record" malfunctioning.
- issue 111 : AV when saving subrecords with prefixed arrays. Sizing and memory allocation are done properly during every phase.
- issue 108 : Very slow saving after editing ESM flag. Background updating limited as much as possible during saves.
- issue 107 : Copying a quest record causes extraneous script fragment data to be generated. Sizing and memory allocation issue.
- issue 106 : Error adding a new master to plugin with own navmeshes. Fire Union decider when they can effectively properly work, not before.
- issue 105 : Overwriting quest fragments or Quest Aliases may produce exceptions. During copy, memory is initialized properly before being used.
- issue 100 : Voice Type EditorID disappears. Memory sizing issue.
Known issue:
- issue 123 : Using Check for errors after sort master, before saving and reloading: the Cell FormID will not be updated. (that is a display issue only).
- issue 102 : Objects with property names but no assigned values don't display the names. The CK does not save the property name in the plugin in that case so it is correct.
- issue 115 : "Backup plugin" checkbox anchored to bottom of form.
- avoid firing some cached exception (to ease debugging).

Version 3.0.28 contains the following changes:

- [TES5] Papyrus (VMAD subrecord) support and other misc record updates including Dragonborn DLC
- [TES5] "Next Object ID" error when copying records
- Text fields in records are case sensitive when matching
- Ability to change references to FormID < 800h
- Changeable conflict colors and default column width in options
- "Simple records" option for concise displaying of LAND, NAVM and NAVI records (excluding references). On by default to speed up xEdit, customizable in options
- Improved scripting functions, new demo scripts

Version 3.0.27 contains the following changes:

- [TES5] Updated dialogue subtypes for patch 1.8
- Localize/delocalize utf8 strings. Translation is disabled, highly recommended to use StrEdit or other specialized tools instead
- Search by FormID/EditorID skips hidden elements

Version 3.0.26 contains the following changes:

- 3.0.26 includes the changes in 3.0.25
- TES5Edit 3.0.25 was removed from Nexus because of potential issues caused by converting BODT to BOD2. Sorry if that version caused any issues for anyone.
- [TES5] BODT is unchanged (Caused issues with Dawnguard.esm)
- [TES5] Fixed bug in RACE with sorted biped object names. If you modified race records with previous versions, drag & drop biped object names from master to restore them.
- Additional internal functions accessible from scripts
- New demo scripts in the Edit Scripts Folder
- Install the Edit Scripts folder in the same place as the xxxEdit.exe.

Version 3.0.25 contains the following changes:

- [TES5] Impact data set IPDS is now sorted
- [TES5] Added DEST data to ALCH (for "Destructible bottles")
- [TES5] BODT subrecord is autoreplaced with BOD2 in ARMA, ARMO and RACE records to conform CK 1.8 format
- [TES5] Additional decoding in WRLD and RACE for new data saved with CK 1.8
- [TES5] Added back records to Merged Patch (removed in 3.0.24) but only when the winning record has no scripts
- [FNV] Updated missing INFO flags
- [TES4] Fixed error when copying SPEL record
- Pascal-based scripting system and "Apply Script" menu (check available demo scripts on how to)
- "Options" menu
- "Analyze Log" menu, currently supports
* Skyrim papyrus log
* Oblivion RuntimeScriptProfiler by shadeMe logs
- Moved several not so often used menus to the "Other" submenu (Build ref/reachable, Merged Parch, Seq File, Localization, etc.)
- Full expand key modifier changed to ALT

Version 3.0.24 contains the following changes:

NOTE Changes to Merged Patch: 3.0.24 of TES5Edit only adds Containers and Leveled Lists to Merged Patches.

- [TES5] Updated load order handling when plugins.txt is empty and no BOSS info is available
- [TES5] Fixed event name definition in QUST
- [TES5] CELL water level fixup for better conflicts detection
- [TES5] Autoremoving legacy RNAMs from WRLD; empty keywords from NPC_, ARMO, AMMO, WEAP, ALCH, MISC
- [TES5] Removed NPC_, ARMO, AMMO, WEAP records from Merged Patch (unsafe to copy possible scripts to a new plugin)
- [FO3] No sorting of DIAL groups
- [FO3/FNV] Fixed record definition for ragdolls which crashed game after cleaning several DLCs
- Copy "Compare to" selected file to the game's data folder if it is not there
- Improved registry handling on x64 systems
- Hold CTRL key when expanding a node for full expand

Version 3.0.23 contains the following changes:

- [TES5] Merged patch updated for Skyrim, currently it merges:
* Leveled NPCs, Items, Spells
* NPC: Items, Spells, Head Parts, Factions
* Race: Hairs, Eyes, Spells
* Containers
* Relations
* Form Lists
* Keywords on: Armor, Weapon, Ammo, NPC
- [TES5/FNV/FO3] When performing UDR there will be a warning message for deleted NavMeshes.
- [TES5] Updated record definitions.
* BPDT was sorted by a localized name which is inconsistent for different languages (now sorted by a node name)
* NPC's tints are now sorted by tint index for better conflicts detection
* QUST aliases are no longer sorted by index
* QUST stages are now sorted by stage index
* Improved NavMeshes (thanks to Divstator)
- [TES5] FaceFX phonemes where empty after copying RACE record.
- [TES5] Fixed bugs when copying RACE and QUST (empty model was created for RACE; QUST location aliases were turning into ref ones).
- [TES5] Create start-enabled quests sequence SEQ file (you can select several files at once).
- [TES5] Improved error checking.
- [FNV] CHAL record was missing some challenge types from Dead Money DLC.
- [FNV] Disabled DIAL sorting, was causing errors when copying INFO records.
- No autosaves when "you know what you are doing".
- Compare with external tool option in Edit window.
- "Apply Filter for Cleaning" menu. Note that xEdit saves filter settings when you press OK button in filter window, so if you clean plugin and exit the program, your filter settings will be preserved.
- Filter option for deleted records.
- Saving messages to [TES5/FNV/FO3/TES4]Edit_log.txt upon exit.
- Fixed minor bug when Edit can't find game's folder. If your registry settings is invalid due to a Steam bug and Edit is unable to find your game, put it in the game's root folder where the game executable file is (Oblivion.exe, TESV.exe, etc).
- Reason: The game's Registry entry is missing. This happens to a lot of people, because Steam likes to remove it whenever the game is updated or its game cache is verified. Run the game's launcher to add the Registry entry back again.

Version 3.0.22 contains the following changes:

- Skyrim Support.
- New exceptions handler.
- Optional backups in a separate directory.
- Remember position and state of the main window.
- Fixed bug when editing with Shift+DblClick.
- [All] Wrye Bash ghosted plugins (*.esp.ghost) in plugin selection window.
- [ALL] FLST form list is no longer sorted.
- [ALL] EDID affects conflict detection.
- [TES5] Localization editor, plugin localization/delocalization with optional translation.
- [TES5] -l:language command line switch to chose default localization files.
- [TES5] Adding missed plugin files from plugins.txt/loadorder.txt to the end of plugins list.
- [FNV] WeaponModKit IMOD record support for various subrecords.
- [FNV] PLD2 subrecord is no longer removed in package.
- [FNV/FO3] Quest stage signed value overflow fix.
- [Oblivion] Fixed ownership record order in CELL.
- [Oblivion] Snowy weather definition fix (thanks to Arthmoor).

Version 3.0.19 contains improves record definitions to handle DeadMoney.esm better

Version 3.0.15 contains the following changes:

- double click on a FormID in the message view while holding CTRL jumps to that record
- fixed crash when changing perk effect type to Entry Point
- Quest Stage field for Quest + Stage Perk Effect Type now has a drop down with all stages available for the selected quest
- single click on an already selected field now opens the editor again
- fixed in-place editor to properly cover the complete field and have it's text align exactly with the text normally displayed

Version 3.0.13 syncs up the engine with the most current version of TES4Edit, TES4LODGen and FNVEdit.

What's new in Version 2.5.3:

- Fixes assert error when copying certain subrecords.
- Adds support for "Sound 2" field in Impact records (used by EVE)

What's new in Version 2.5.2:

Minor change to the record definition of TACT's for compatibility with Point Lookout.

What's new in Version 2.5.1:

Bug Fix: floating point comparison is now less "fuzzy". This can result in some floating point numbers now comparing as unequal even though they are within the limit of the accuracy of single (4 byte) floating point values. But it will prevent cases where floats that should be unequal compared as equal.

What's new in Version 2.5.0:

Some minor record definition fixes.

Merged Patch creation and FO3MasterUpdate are now considered stable.

What's new in version 2.4.9 EXPERIMENTAL:

  • Merged Patch generation has been overhauled. It should now correctly handle RACE records (and in general any record with 2 or more mergeable lists) and OrderedList FLSTs.
  • MIC2 subrecords are now supported in ARMA and ARMO records
  • DEST(ruction) subrecords are now correctly handled in WEAP and CONT records

What's new in version 2.4.3 BETA:

  • DEST(ruction) subrecords are now support in NPC record
  • MICO subrecords are now supported in ARMA records
  • Context Menu on file node in navigation treeview -> Renumber FormIDs from...

Renumber FormIDs from will change all FormIDs of records belonging to that file (but not any override records which might be contained in that file) so that they start at the specified value.

This is useful if you have multiple modules that you plan to update in the future, but also want to always provide a merged version (e.g. using FO3Plugin). By assigning non overlapping FormIDs to the different modules, you can make sure that no FormID reassignment of conflicting FormIDs has to take place when merging.

WARNING: changing the FormIDs of an existing module will make it savegame incompatible and will break any other module that uses this module as master. If you have any dependant modules, you need to have them all loaded into FO3Edit at the time you change to FormIDs so that they will all be updated accordingly.

What's new in 2.4.1 BETA:

FO3MasterUpdate is now considered BETA. No problems specific to FO3MasterUpdate have been reported in the last couple of days.

Fallout3.Hardcoded.esp has been renamed.

What's new in 2.4.0 EXPERIMENTAL:

This version adds a support for FO3MasterUpdate mode.

MasterUpdate mode is the solution to the bugs introduced in Patch 1.5 in regards to plugins.

When running in MasterUpdate mode, the following operations are performed without further user interaction:
  • all modules in the Data folder are assigned into 2 groups, masters and plugins, based on their file extension (.esm or .esp)
  • the modules in each group are sorted by file modification date/time
  • all module files are redated, first all masters, then all plugins, in 1 minute intervals
  • all active modules are then loaded, the ESM flag set in the file header if not yet present, the ONAM subrecords build if required
  • any temporary overriding worldspace record that have at least one previous version that is persistent are marked as persistent
  • all modified modules are saved.

This makes it possible to take an existing setup using patch 1.4 or older which contains mods that are broken by the bugs in patch 1.5 to be updated to patch 1.5, and used with existing savegames without being messed up by the bugs in Patch 1.5.

As this function is still considered EXPERIMENTAL, please make sure you have a full backup of your Data folder and your save games before using it.

I'll not take any responsibility if your computer explodes, gains sentience and start chasing you around the room or anything else that might happen.

You can run it in MasterUpdate mode by passing the parameter "-masterupdate" when running FO3Edit.exe or you can simply rename the exe to FO3MasterUpdate.exe

There is also a MasterRestore mode which removes the ESM flag again from all .esp files. You can run in MasterRestore mode by passing "-masterrestore" as parameter or renaming the exe to FO3MasterRestore.exe

What's new in 2.3.5 EXPERIMENTAL:

Minor update only adding support for DEST(ruction) subrecord in TERM(inal) records.

What's new in 2.3.0 EXPERIMENTAL:

  • support for BrokenSteel.esm and Patch 1.5
  • large number of small fixes to record definition, resulting in many more cases of records correctly identified as "identical to master" and a very significant reduction in potential false positives in the "Check for Errors" function.
  • on the fly conversion of outdated records to the most current format. This means that you will see fields show up as modified that you didn't modify yourself (mainly in Fallout3.esm and the DLC.esm's, GECK created files should already be up to date). It is possible to disable this function by starting FO3Edit with -nofixup as parameter. It is also possible to just these modifications (but still keep the fixups) by starting FO3Edit with -hidefixup as paramter.
  • Automatically update ONAM subrecord when saving ESM's (header flag, not file extension)
  • New function to copy idle animations:
  • Complete overhaul of the "build unreachable info" function
  • Bugfix to prevent dialogue choices from being sorted by FormID
  • The "Remove 'Identical to Master' Record" function will now remove also the NAVM records (but only NAVM records) that show up as benign conflict, so there is no longer a need to do that manually
  • The Undelete and Disable function will set the Player ACHR [00000014] as Enable Parent with the "Set Enable State to Opposite of Parent" flag set. Given that the player should never end up being disabled, that should properly remove them from the gameworld, even if they are persistent references and the enabled state has already been stored in the savegame.
  • The Undelete and Disable function will also now properly list all affected references, just like the "Remove 'Identical to Master' Record" function does.
  • The selection dialogue now allows double clicking an entry, this will automatically select that entry, deselect all others and close the dialogue as if the OK button had been pressed.

Some important notes about the "Build Reachable Info" function

After you've run that function, you'll see that some records are displayed striked-through. These records are considered to be "not reachable".

There are some limits to this. The "not reachable" classification is only true if you:
  • start a new game with exactly the mods you've currently loaded
  • do not use the console in any way
  • there are no FOSE scripts involved that use some dirty tricks to get hold of a reference to something without that something showing up in the SCRO's of the script.

Also the meaning of "reachable" is sometimes a bit gray. e.g. for Activator's, Statics, Weapons, Armor, and so on it means that the player character should be able to get somewhere from where he can see the object and/or somehow get it into his inventory. For Quests it means that the quest either starts enabled or that there is probably some way how it can become enabled or at least that somewhere the variables belonging to the quest script get accessed. For DIAL's and INFO's it means that it's probably possible to select the topic somewhere or hear the response somewhere. For CELL's and WRLD's it means that the player character is probably somehow able to enter it. And so on.

Now, in the FormLists you might see some things marked as unreachable which do technically have an effect on the player character. e.g. the repair lists will show up as unreachable. The reason for that is that if the repairlist was marked as reachable, it would automatically mark all contained records as reachable. But that's not really right. Just because something can possibly be used to repair an object that the character has doesn't meant that this something can actually ever be acquired by the player. So really, for FormLists the reachable status doesn't mean much either way.

Outside of FormLists, there shouldn't be any false negatives (meaning something marked as unreachable which has an influence on the game).

There can be false positives (something marked as reachable while it's not). e.g. it's possible for a CELL to be considered reachable even though the only way to get there is through a door which can only be opened with a key and the key is not reachable.

Or for an INFO record to be reachable even though non of the conditions attached to the responses could ever possible be true. Or the quest that the INFO belongs to will never be enabled.

Or any type of object could be reachable even though it's just used in an GetIsID check in some script (not in a CTDA, objects referenced from conditions never become reachable through that).

But overall, even with all these shortcomings and gray areas, if someone ends up being marked as not reachable, that's a very strong indication that the particular thing will not normally effect the game.

If you apply a filter after the "build reachable info" you can filter "by not reachable status" and then "only not reachable" to just see what's considered to be not reachable.

What's new in 2.2.3:

  • Game Settings (GMST) will now be properly resolved based on EditorID, not FormID.
  • Navigation Mesh Info Map (NAVI) will no longer be compared between different modules. While this record has always the same FormID in all modules, it is not actually handled by the engine in the same way as normal records. Instead it contains information that are always only specific to the file that contains it.
  • Navigation Mesh (NAVM) records that are logically identical but physically different are now easier to recognize.

That last point about the NAVMs requires some explanation.

A NAVM record starts off with a list of Vertices. Each Vertex being a 3D point (x/y/z). An identifier for each vertex is implicitly given by it's position in this list of vertices.

This is followed by a list of triangles. Again, an identifier for each triangle is implicitly given by it's position in this list of triangles.

For each triangle there are 3 vertices, specified by their position in the vertex list. And there are 3 triangles which touch this triangle along the 3 edges, specified by their position in the triangle list.

The edges are a bit more complex because it is possible that a triangle borders a triangle that is defined in another NAVM. To support this there are 3 flags on each triangle (for the 3 edges) which specify if the triangle on that edge is an external connection. If this flag is set, then the number stored for that edge is NOT an index into the triangle list, instead it's an index into the "External Connections" list.

Each entry in the External Connections list contains the FormID of another NAVM and the index for a triangle in the triangle list of that other NAVM.

GECK has the annoying habit of switching around the order of the entries in this External Connections list. As a result it is possible to have 2 versions of the same NAVM record that "look" different (the External Connections will not match up and the triangles with the index into the external connections list will not match up) but are actually identical.

I've implemented 2 changes:
  • When comparing the values for triangle edges which have the "external" flag set, I don't compare the index number, instead the external connection entry is resolved using the index number and the NAVM FormID and the Triangle from that entry are compared. So even if the index numbers in the external connection list have changed, as long as they resolve to the same external triangle they will show up as identical.
  • The complete external connections list has been marked as being "benign conflicts". This is not a problem if there are REAL relevant changes to this list because they will also show up in the triangles list where the relevant edges will now compare as a conflict or override.

With these changes in place it is now possible to find these NAVMs that are identical but not automatically found using the 'Remove "Identical to Master" Records' function by applying a filter and choosing "by conflict status overall" and only "Benign Conflict". It is still necessary to have a look at these records and make sure that they really fit this pattern (the only parts of these records that show up yellow should be the external connections) before deleting them manually. But it's a lot easier to find them now then it was before.

It's important to point out here that the interaction between the NAVMs and the NAVI record is so far poorly understood and I can't guarantee that removing NAVM records while leaving the NAVI record untouched is not going to cause problems. Any feedback/experience on this topic would be very welcome.

What's new in 2.2.0:

This version contains no major new functionality, but a number of bugfixes. Update is highly recommended.

What's new in 2.1.0:

  • All records with the exception of IMAD and a couple of fields in NAVI and NAVM are fully decoded (non of the undecoded fields contain FormIDs so adding/removing/changing masters is now fully supported)
  • When setting/resetting the persistent flag on references in exterior cells the record is correctly moved between the main worldspace cell and the appropriate (based on position) grid cell
  • Undeleting a record (removing the deleted flag) now copies all values from the master record and (in case of a reference record) correctly moves the record into the correct child group
  • New function "Undelete and Disable References" finds all reference records marked as deleted and:
  • - Undeletes it- Sets "Initially Disabled" flag- Sets Z Position to -30000- Removes Persistent flag if present (this makes sure that the Initially "Initially Disabled" flag and changed Z Position is not overridden by values already stored in the save game. Also makes sure that if the mod is uninstalled the object gets reset to vanilla position and enable state).- Removes the XESP (Enable Parent) subrecord (this is required to make sure that the "Initially Disabled" flag has any effect)- Removes the XTEL (Teleport/Door Portal) subrecord (this is required to prevent GECK/CS from complaining about references to non-persistent objects)
  • Records in child groups (exterior CELLs in WRLDs, References in CELLs, INFOs in DIALs) now show an additional "virtual" field in the first row which specifies the Record that owns the child group they are contained in. This has 2 functions:
  • - Records that are moved into a different owner (e.g. a Reference moved from a child worldspace into the parent worldspace) but without any changes to their contents will no longer be classified as "Identical to Master" as this virtual field takes part in normal conflict detection. This prevents problems where such records have been faultily removed by the "Remove "Identical to Master" Records" function- The virtual field is editable. This allows moving records to a different owner.
  • Lots of small changes and enhancements all over the place that I've forgotten to write down ;)

What's new in 2.0.10:

  • Inplace Editors for Flags, Enums and FormIDs (MAJOR improvement)
  • FormID of DIAL, WRLD and CELL records can now be changed
  • Adding new DIAL, WRLD and CELL records is possible
  • Extensive updates to FO3 record definitions
  • Using the FormID search box now adds a history entry
  • When holding SHIFT while double clicking in the detail view editable elements can be edited
  • IMAD records are now supported
  • FormID references to any value < 0x800 will no longer result in an error (The game engine defines objects with FormIDs < 0x800 implicitly in code)
  • Insert and Delete Key are working in both navigation treeview and detail view (under the same conditions under which Add and Remove is available in the context menu)
  • F2 is working on the navigation treeview and opens the "Change FormID" dialogue

When started it will automatically find your Fallout 3 Data directory. You then get a dialogue to select which modules you want to load with the current selection from your plugins.txt as default value. Once you have confirmed that dialogue the selected modules will start loading in the background. Depending on your system it should take 30 seconds to a few minutes (!) for all modules to load. You can follow the progress in the message window. (Don't panic if it seems to freeze, it just takes time).

The tree view on the left side now shows all active modules in their correct load order. By navigating that tree view you can look at every single record in any of your modules.

Once a record has been selected the detailed contents of that record is shown on the right side. The detail view shows all versions of the selected record from all modules which contain it. The left most column is the master. The right most column is the module that "wins". This is the version of the record that Fallout 3 sees.

Both the detail view and the record list use the same color coding to signal the conflict state of individual fields (in the detail view) and the record overall (in the record list).

Background color:
White - Single Record
Green - Multiple but no conflict
Yellow - Override without conflict
Red - Conflict

Text color:
Black - Single Record
Gray - Hidden by Mod Group
Purple - Master
Gray - Identical to Master
Orange - Identical to Master but conflict Winner
Green - Override without conflict
Orange - Conflict winner
Red - Conflict loser

Conflict detection is not simply based on the existence of multiple records for the same FormID in different modules but instead performs a comparison of the parsed subrecord data.

The record tree view on the left side has a context menu where you can activate filtering. Filtering is based on the same conflict categorization as the background and text color.

Yes, filtering will take a while. It has to decode and compare the contents of every single record which turns up more then once.

Be warned, this program uses a lot of memory. Performance on a system with less then 2GB of RAM will most likely be sub-optimal. Activating the filtering uses even more memory.

It's based on the same parsing engine and converts any given module into a text representation. (No conflict detection or funky colors here though I'm afraid).