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. It has 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 create a report
  • 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.
Run the TES4GeckoSharpened installer. It will create a start menu folder and a desktop shortcut.

Download: TES4GeckoSharpened.msi

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Create New...