Jump to content

[WIP/Preview] TES4Gecko - Sharpened


Recommended Posts


This is a preview release to get some feedback on what you'd like to see. The GUI is rough and we're looking for some comments on it. Currently the only features are viewing the contents of plugins (and you'll see that we haven't made all the groups nice and pretty yet) and the advanced search. You can save your search results as a file that you can load into a spreadsheet, for example.

Here's our first attempt at a readme/release thread. Looking for comments on this too. :P

TES4Gecko - Sharpened

GeckoWithSharp.pngThis is a rewrite of TES4Gecko in C#. It is not a port, rather we have rewritten it from the ground up based on the documentation from the Unofficial Elder Scrolls Pages (UESP) as well as the source code from TES4Gecko. The source code is for a newer version of Gecko than what was uploaded to Nexus and was provided by Steve Carrow. Explicit permission for the new release was granted by Aubrey K McAuley.

What's TES4Gecko?

TES4Gecko was one of the first modding tools that supplied extra functions not available in the Construction Set (CS). Its primary purpose is to merge plugins, whether merging a patch into a master or simply merging unrelated plugins. It's also used to move worldspaces, compare plugins, convert to a master or to a plugin along with a few other features that aren't used very often.

TES4Gecko - Sharpened

The new version will offer the following features:

  • merge plugins
  • advanced search with the ability to save results in a text file
  • move worldspaces
  • compare plugins
  • convert to master and convert to plugin
  • editing of plugins

 Unlike the old Gecko, this version will display and provide access to the entire record, rendered in a fashion similar to the CS.

Also, Gecko Sharp will use optimistic locking so you don't need to close Gecko when opening your plugin in another program. You can open the CS, change your plugin, save it and then go back to Gecko, right-click on your plugin and select Reload. It will reload the files with the changes you just made.

Download: Link in thread below

Run the TES4GeckoSharpened installer. It will create a start menu folder and a desktop shortcut.

REQUEST: Could you grab screenshots of the dialogue boxes that pop up during installation? We don't see the prompts since we have all the files already so it would be helpful if we could see what you are being prompted for during installation.

Link to comment
Share on other sites

Jimi diGriz

This is a short (perhaps not so short) walk-through to demonstrate the features of TES4Gecko Sharpened.

Basic Navigation

To view the plugin, launch the application and click on the View button on the splash screen.

TES4Gecko Sharpened will automatically locate your Oblivion installation if you have installed the game from CD or from Steam.  

If you have used another installation method such as GOG please let me know as I don't have an example of that type of installation to test.

After you click on View you should see a list of plugin files.

Click on Oblivion.esm.  You should see the plugin details from the file header at the bottom of the screen:


Click on the Open button to open the plugin.  This will take several seconds.  You can also double-click on the file in the list to open.

You should see Oblivion.esm listed in a tree on the left of the screen.

Expand Oblivion.esm by clicking on the triangular arrow to the left of the name.

Expand Landscape Textures (LTEX).

Click on CHTerrainGrass01.  You should see the details of the record in the right pane:


Contrast this with what the Construction Set shows:


You will note that the names of the Grasses in the Landscape Texture details show up looking like hyperlinks.  You can click on them to navigate to the related record:


Clicking the Backwards button at the top left will navigate back to the Landscape Texture.

One of the goals of TES4Gecko Sharpened is to provide a consistent presentation of the different record types.

At present there are eight record types that have been at least partially "decoded" to show the detail attributes contained:

  • Enchantments (ENCH)
  • Grass (GRAS)
  • Landscape Textures (LTEX)
  • Magic Effects (MGEF)
  • Regions (REGN)
  • Sound (SOUN)
  • Weather (WTHR)
  • Worldspaces (WLRD)

If you view other record types in TES4Gecko Sharpened you will see the field structures in a fashion similar to that shown by the old Gecko.

Advanced Search

TES4Gecko Sharpened includes a basic search mechanism that supports looking for records by Form ID or Editor ID. 

If you enter Form ID 00043de5 and click on the search button, you will be shown the DementiaDarkSand01Grass record:



The tool also supports a more sophisticated search that allows searching for records with certain attribute values.

Click on the Advanced Search button image.png to the right of the basic area.

This will open the Advanced Search window where you can specify your search criteria.

The Object type selection provides a list of record types that have been decoded so far (see above).  Select Grass from this list.

Select Bound Radius from the Property list.  The next drop-down shows a list of operators.  Since Bound Radius is a number, operators appropriate to numbers will appear.  Select Greater Than and put the value 80 in the last box:


Click on the Search button at the bottom of the window.  Note that the Search results at the bottom of the window shows 47/108.  This means that of the 108 Grass records in the plugin, only 47 of them have a Bound Radius greater than 80.  These Grass records will appear in the tree in the main window.

You may wish to know which Landscape Textures make reference to these Grass records.

Click the Clear button at the bottom of the Advanced Search window.  This clears the current search allowing all records to be viewed in the main window.

Select Landscape Texture from the Object type list.

Select Grasses from the Property list.  You may recall that the Grasses property of the Landscape Texture record has a list of Grass records that you can navigate to.

Select References from the operator list.  Since the Landscape Texture Grasses property can only reference Grass records this object type is selected automatically.  The next Property list is indented to show that it "belongs" to the Grass object type referenced above.

The new Property list shows properties for Grass records.  Select Bound Radius and specify that you want values greater than 80.


Click the Search button at the bottom of the window.  The Search results now show 58/229, which indicates that it found 58 Landscape Texture records of the possible 229 that have references to Grass records with Bound Radius greater than 80.

Note that the search results show Landscape Texture records that have at least one reference to a Grass record with a Bound Radius greater than 80.  They could also reference Grass records with a smaller Bound Radius.

Export Search Results

Now that you can see 58 Landscape Texture records that match your search, you can export the list to a file.

Click on the Export Results button image.png in the main window.

This will open another window that allows you to specify the report structure.

The top of the window shows the object properties to include in the report.  By default the Editor Id for the found Landscape Texture records is shown.

In the drop-down list below the Name (Editor Id) property select Material Type.  This adds the Material Type to the report.

Next, select Grasses.  Notice that since the Grasses property refers to a list of Grass records a new section is added to allow you to include Grass properties in the report.  Select Name (Editor Id) and Bound Radius in this section to add them to the report.


Upon close inspection you will see that the Name (Editor Id) for the Landscape Texture records now contains duplicate values.  This is because these records reference more than one Grass record.  To make this clearer, select the Suppress Repeats checkbox for those properties in the report control area.  You should now be able to see the breaks for Landscape Texture records.


The Export button at the bottom of the window will allow you to save the report to a file.  You have the option of using commas, tabs, or vertical bars to separate the columns, allowing for import into a spreadsheet.

This shows the basic capabilities so far.

As you explore you will no doubt discover bugs and important features missing.  We are hoping to get some feedback on the overall approach and an idea of what to do next.

Link to comment
Share on other sites

A good start!

Don't forget to include a Requirements section (e.g. Microsoft.NETCore.App v 6+ x64).

When prompted to download the above, you provide a link to learn about framework resolution, however this link is not clickable or selectable, would be handy if it could be for those interested.

I would recommend setting the list of ESM/Ps to default-sort by Last Modified date, and to place ESMs always before ESPs, just like the game does.

The Plugin Header container is redundant to the viewer so as in xEdit, it would be more efficient to skip it and just display the only record possible to exist within, Header Record.

In the left Navigation pane, full row select would be more user friendly.

Dark Mode please.

Link to comment
Share on other sites

Jimi diGriz

I wasn't aware of the download link.  I will have to create a virtual machine without the latest .Net stuff to see what the installer does.

I am looking at an option to sort the plugin list by load order, which would also indicate which plugins are currently selected.

I don't know what you mean by "full row select".  Could you provide an example of what that is?

I will look into Dark Mode.  There must be a way as Visual Studio does it using the same framework.

Thanks for having a look.

Link to comment
Share on other sites

Currently, if you want to select a record from the left pane, you have to click on the text itself. However several times I tried to click in the white space in line with the letters, only to find nothing happened. Full row select means being able click anywhere within the horizontal limits of a row of text and it still be recognised as clicking the text itself.

Link to comment
Share on other sites

We've got an update on its way. We're just battling through the installer. If someone knows of a free installer that can work with source code projects that are dependent on Windows components, please let us know! It needs to scan the Visual Studio project and figure out what needs to be included. It looks like you have to pay a hefty sum to get stuff like that these days.

Link to comment
Share on other sites

I have uploaded the installer for the latest version of TES4Gecko-Sharpened.

We have decoded more records:

  • Ammunition (AMMO)
  • Armour (ARMO)
  • Cells (CELL)
  • Doors (DOOR)
  • Ingredient (INGR)
  • Weapons (WEAP)

The main work, however, is in getting the structures working for cells and world spaces. 

In the main tree the Cell node is just for internal cells.  I have put them in as a big list for now which is awkward for large mods.  TESxEdit puts internal cells under a block and sub-block hierarchy which doesn't make sense to me.  If someone has a suggestion for how to group the internal cells I am listening.  Under each of the internal cells are three new levels: Persistent Children, Temporary Children, and Visible Distant Children.  These are lists of things like object references, NPC references, and creature references.

External cells are found under WorldSpaces.  If you open a WorldSpace such as Tamriel you will see two new levels: Persistent Cell and Cell Blocks.  There should also be a Road record in there but I haven't fully decoded that yet.  The Persistent Cell is a dummy cell that holds all of the persistent children.  This is how the mod file is structured and is also how xEdit portrays it.  That doesn't mean that we have to do it that way.  One option is to move the persistent children under the appropriate external cells.  Under Cell Blocks are the blocks and sub-blocks.  Under the sub-blocks are the external cells.  These cells have the same three levels as for internal cells.  The temporary children for external cells should also contain Landscape and Path Grid records but I haven't decoded them yet.

Right now Gecko displays the blocks, sub-blocks, and external cells in the order they appear in the mod file.  We couldn't figure out what xEdit uses for sorting so we just left it that way.  If you would prefer a specific ordering please let us know.  If you would like these items sorted numerically remember that the X and Y coordinates can be both positive and negative.  So, for example, for Tamriel blocks (0, 0), (1, 0), (-12, 0), (1, -2) what order should they be shown?

Link to comment
Share on other sites

Blocks and sub-blocks are defined in the ESM/P files, see UESP for reference. It would make sense to use the same method of display as xEdit as it matches the records and is what modders will be used to.



Do you really need to do all this record decoding work, can't you just request this data from the xEdit team, who have already decoded around 95-99% of the TES4 records?

Edited by Vorians
Link to comment
Share on other sites

I can show the interior cells in blocks and sub-blocks as they are organized in the mod file if that is what is desired.  It seems rather obtuse to me to have to parse the cell formid to get this info.  The CS doesn't help by providing the formid in hex rather than decimal.

As well as using the UESP I have been using the source code from xEdit to help figure out the record structures.  It takes some effort because xEdit is written in a variant of Pascal whereas the new Gecko is written in C#.  I have also been cross checking with what I see in the CS as I have discovered a number of errors and omissions in xEdit.

Link to comment
Share on other sites

Are they still supporting it?  I don't know if Delphi Pascal is still maintained these days.  Borland went out of business a long time ago.

Link to comment
Share on other sites

9 hours ago, Vorians said:

Ooh, I hope you're letting them know so they can make corrections.

After Elminster humiliated me on Discord? Err... no.

Also, did you grab the latest version?

Link to comment
Share on other sites

xEdit is still receiving updates, especially for Starfield but also for all currently supported titles. Andalay, it isn't about Elminster or for his benefit, it's for the benefit of people like myself who use xEdit. I hadn't downloaded but will do now.

Link to comment
Share on other sites

Well one of the bugs was in a script and it was pretty bloody obvious. It was a script that was supposed to fix the mismatched placement bug, as I explain here. If you run that script, it will not only mess up your plugin, but Oblivion as well, which it will add to your plugin. Since no one has complained, then I'd say no one is using that script and the underlying code isn't in xEdit itself.

Other stuff is listed an "unknown" in xEdit and we've "decoded" it. I don't remember if there were other errors or not. We're focused on Gecko, not finding stuff in xEdit.

Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in

Sign In Now
  • Create New...