[Tool] GD save file editor

They are not being displayed, but they are very much affecting the item.

I assume the tool can do this, but I have no idea how :wink:

Is that right? I’ll look into it again then. :slight_smile:

No, I mean Conduit of Whispers.

I just checked and Conduit of Whispers appear without any prefix/suffix at all. It can be fixed? At least make it random?

That is not really a bug as this is a save file editor. So if you want affixes, you will need to include them with the edit. No idea how this is done with this tool (or whether it can), but that is the only solution.

Looked into this for a bit.
You can put in the unique prefixes, but the editor doesn’t have any smarts about this yet. So… you’re going to have to do a bit of manual & detective work.


Just set the prefix or suffix of the item to one of these:


  • records/items/lootaffixes/prefixunique/d101_conduiteldritchsecrets_03a.dbr
  • records/items/lootaffixes/prefixunique/d101_conduiteldritchsecrets_03b.dbr
  • records/items/lootaffixes/prefixunique/d101_conduiteldritchsecrets_03c.dbr
  • records/items/lootaffixes/prefixunique/d101_conduiteldritchsecrets_03d.dbr
  • records/items/lootaffixes/prefixunique/d101_conduiteldritchsecrets_03e.dbr
  • records/items/lootaffixes/prefixunique/d101_conduiteldritchsecrets_03f.dbr
  • records/items/lootaffixes/prefixunique/d101_conduiteldritchsecrets_03g.dbr
  • records/items/lootaffixes/prefixunique/d101_conduiteldritchsecrets_03h.dbr
  • records/items/lootaffixes/prefixunique/d101_conduiteldritchsecrets_03i.dbr


  • records/items/lootaffixes/suffixunique/d101_conduitofeldritchwhispers_01a.dbr
  • records/items/lootaffixes/suffixunique/d101_conduitofeldritchwhispers_01b.dbr
  • records/items/lootaffixes/suffixunique/d101_conduitofeldritchwhispers_01c.dbr
  • records/items/lootaffixes/suffixunique/d101_conduitofeldritchwhispers_01d.dbr
  • records/items/lootaffixes/suffixunique/d101_conduitofeldritchwhispers_01e.dbr

Setting a prefix or suffix

Find the location of the item you want to change with the “find” command, like so:

> find "Eldritch Whispers"

Conduit of Eldritch Whispers: inventory-sacks/0/inventory-items/80

Change the prefix like so:

set inv/0/items/80/prefix records/items/lootaffixes/prefixunique/d101_conduiteldritchsecrets_03a.dbr

How do I tell which prefix/suffix does what?

You can use the editor to explore the game database to find out what those affixes actually do.

> db records/items/lootaffixes/prefixunique/d101_conduiteldritchsecrets_03a.dbr

	modifiedSkillName1: records/skills/playerclass03/sigilofdestruction1.dbr
	modifierSkillName1: records/skills/itemskillsgdx1/skillmodifiers/legendarygdx1/eldritchwhispers/set1_occultist1.dbr

Looks like this says it modifies a skill, “sigilofdestruction1.dbr”. It isn’t entirely clear what that is, so…

> db records/skills/playerclass03/sigilofdestruction1.dbr

	skillDisplayName: Sigil of Consumption

Great, so that prefix changes something about the Sigil of Consumption.

How the heck did you find those affixes in the first place?

First, examine the item…

> show inv/0/items/80

Conduit of Eldritch Whispers

            basename : records/items/gearaccessories/necklaces/d113c_necklace.dbr

So item is mostly defined by this db record with quite a long path. Does any other record refer to this item?

> q value~records/items/gearaccessories/necklaces/d113c_necklace.dbr

	lootName1: records/items/gearaccessories/necklaces/d113c_necklace.dbr
	prefixTableName1: records/items/lootaffixes/prefix/prefixtables/prefixd02_conduiteldritchsecrets_occultist.dbr
	suffixTableName1: records/items/lootaffixes/suffix/suffixtables/suffixd02_conduiteldritchwhispers.dbr
0-3 / 3 matched records

So 3 records have some field containing that references our item of interest. One of them happens to be a loot table! Let’s take a look at the possible prefixes.

> db records/items/lootaffixes/prefix/prefixtables/prefixd02_conduiteldritchsecrets_occultist.dbr

	randomizerName1: records/items/lootaffixes/prefixunique/d101_conduiteldritchsecrets_03a.dbr
	randomizerName2: records/items/lootaffixes/prefixunique/d101_conduiteldritchsecrets_03b.dbr
	randomizerName3: records/items/lootaffixes/prefixunique/d101_conduiteldritchsecrets_03c.dbr
	randomizerName4: records/items/lootaffixes/prefixunique/d101_conduiteldritchsecrets_03d.dbr
	randomizerName5: records/items/lootaffixes/prefixunique/d101_conduiteldritchsecrets_03e.dbr
	randomizerName6: records/items/lootaffixes/prefixunique/d101_conduiteldritchsecrets_03f.dbr
	randomizerName7: records/items/lootaffixes/prefixunique/d101_conduiteldritchsecrets_03g.dbr
	randomizerName8: records/items/lootaffixes/prefixunique/d101_conduiteldritchsecrets_03h.dbr
	randomizerName9: records/items/lootaffixes/prefixunique/d101_conduiteldritchsecrets_03i.dbr

Not sure if that made any sense to you. If it all looks like a bunch of gibberish, you can always just manually set the affixes onto the item, then start the game to check how it changed the item.

Hope this helps!


Thanks a lot!

Diablo 2 mod items implented ?

I’m not familiar with the mode, but the editor does support mods that comes with its own db and localization files.

You’ll want to use the “mod pick” command to tell the editor which mods you want to use. After that, the editor ought be to able to create items defined in the mod’s database. There isn’t a whole lot of documentation for this feature. The related commands are listed here.


hmmm doesnt seem to find the items

“item could not be constructed”

Lemme take a look.
Where can I get the mod? A quick google search didn’t turn up any usable links somehow.

Reign of terror , mod that makes your game look like D2 , has a database also


A new build is available! The editor can be found at the usual link or via a self-update.
The editor is now ever so slightly less dumb about finding database files. This makes mod supports better! (Hopefully without breaking anything in the process.)

This was minimally tested against the Diablo 2 mod. But the editor is now able to do this:

> set inv/1/items "deathspade"

Item placed in inventory-sacks/1/inventory-items/23


            augment-name : ""
            augment-seed : 0
                basename : records/items/d2items/gearweapons/axe1h/c002_axe.dbr

Note that the “basename” field indicates that this is a “d2item”.

Lemme know if there are any issues with this!

1 Like

Hi Odie,

I downloaded the latest version today to use with my GoG based copy of GD. I’m using the latest 64-bit JVM and running the cmd as administrator). The app runs, however it spews out a bunch of errors that look like it is looking for the steam directories, despite the fact I’ve explicitly set the savedir and gamedir paths to where it should be looking.

When I run savedir I get the following (as I should) - C:\Users\PJ\Documents\My Games\Grim Dawn\save\main
Gamedir shows - C:\Program Files (x86)\GOG Galaxy\Games\Grim Dawn
Diag shows it can find everything it needs - ? JVM version: 1.8.0_241-b07
? Game directory exists
? File exists: C:\Program Files (x86)\GOG Galaxy\Games\Grim Dawn\database\database.arz
? File exists: C:\Program Files (x86)\GOG Galaxy\Games\Grim Dawn\resources\Text_EN.arc
? File exists: C:\Program Files (x86)\GOG Galaxy\Games\Grim Dawn\resources\Items.arc
Looks good! The editor should be ready to go!

After the errors I get to edit my character. I can then do things such as set iron (though I can’t rename my character)

Is the issue due to the latest GD update or something I’ve missed in setup ? Note that JVM is not part of my path settings - could this be the problem ? Would greatly appreciate guidance in how to resolve and avoid the errors messages at startup (maybe this will resolve the issue of not being able to rename a character too !)

In case it helps here is a partial the screen dump I get at app startup

Caught exception: The system cannot find the file specified.
com.sun.jna.platform.win32.Win32Exception: The system cannot find the file specified.
at com.sun.jna.platform.win32.Advapi32Util.registryGetStringValue (Advapi32Util.java:555)
gd_edit.game_dirs$get_steam_path.invokeStatic (game_dirs.clj:23)
gd_edit.game_dirs$get_steam_path.invoke (game_dirs.clj:18)
gd_edit.game_dirs$standard_game_dirs.invokeStatic (game_dirs.clj:56)
gd_edit.game_dirs$standard_game_dirs.invoke (game_dirs.clj:44)
gd_edit.game_dirs$get_game_dir_search_list.invokeStatic (game_dirs.clj:75)
gd_edit.game_dirs$get_game_dir_search_list.invoke (game_dirs.clj:67)
gd_edit.game_dirs$get_game_dir_search_list.invokeStatic (game_dirs.clj:72)
gd_edit.game_dirs$get_game_dir_search_list.invoke (game_dirs.clj:67)
gd_edit.game_dirs$get_game_dir.invokeStatic (game_dirs.clj:149)
gd_edit.game_dirs$get_game_dir.invoke (game_dirs.clj:147)
gd_edit.game_dirs$get_file_override_dirs.invokeStatic (game_dirs.clj:174)
gd_edit.game_dirs$get_file_override_dirs.invoke (game_dirs.clj:171)
gd_edit.game_dirs$get_file_and_overrides.invokeStatic (game_dirs.clj:208)
gd_edit.game_dirs$get_file_and_overrides.invoke (game_dirs.clj:195)
gd_edit.inventory$bind_texture_slot_dims_fn.invokeStatic (inventory.clj:84)
gd_edit.inventory$bind_texture_slot_dims_fn.invoke (inventory.clj:72)
gd_edit.inventory$fn__14766.invokeStatic (inventory.clj:103)
gd_edit.inventory/fn (inventory.clj:101)
clojure.lang.ARef.notifyWatches (ARef.java:81)
clojure.lang.Atom.reset (Atom.java:157)
clojure.core$reset_BANG_.invokeStatic (core.clj:2373)
clojure.core$reset_BANG_.invoke (core.clj:2368)
gd_edit.command_handlers$load_settings_file.invokeStatic (command_handlers.clj:1233)
gd_edit.command_handlers$load_settings_file.invoke (command_handlers.clj:1229)
gd_edit.core$initialize.invokeStatic (core.clj:491)
gd_edit.core$initialize.invoke (core.clj:487)
gd_edit.core$start_editor.invokeStatic (core.clj:535)
gd_edit.core$start_editor.invoke (core.clj:532)
gd_edit.core$_main.invokeStatic (core.clj:567)
gd_edit.core$_main.doInvoke (core.clj:549)
clojure.lang.RestFn.invoke (RestFn.java:397)
clojure.lang.AFn.applyToHelper (AFn.java:152)
clojure.lang.RestFn.applyTo (RestFn.java:132)
gd_edit.core.main (:-1)

20-02-29 16:19:35 PaulsPC INFO [gd-edit.game-dirs:?] -

gd-edit.core/-main core.clj: 549
gd-edit.core/-main core.clj: 567
gd-edit.core/start-editor core.clj: 535
gd-edit.core/initialize core.clj: 491
gd-edit.command-handlers/load-settings-file command_handlers.clj: 1233
clojure.core/reset! core.clj: 2373

gd-edit.inventory/fn inventory.clj: 103
gd-edit.inventory/bind-texture-slot-dims-fn inventory.clj: 84
gd-edit.game-dirs/get-file-and-overrides game_dirs.clj: 208
gd-edit.game-dirs/get-file-override-dirs game_dirs.clj: 174
gd-edit.game-dirs/get-game-dir game_dirs.clj: 149
gd-edit.game-dirs/get-game-dir-search-list game_dirs.clj: 72
gd-edit.game-dirs/get-game-dir-search-list game_dirs.clj: 75
gd-edit.game-dirs/standard-game-dirs game_dirs.clj: 56
gd-edit.game-dirs/get-steam-path game_dirs.clj: 23
com.sun.jna.platform.win32.Advapi32Util.registryGetStringValue Advapi32Util.java: 555
com.sun.jna.platform.win32.Win32Exception: The system cannot find the file specified.
HR: -2147024894

gd-edit 0.1.9-SNAPSHOT [build 749177e]

save directories:
C:\Users\PJ\Documents\My Games\Grim Dawn\save\main

game directory:
C:\Program Files (x86)\GOG Galaxy\Games\Grim Dawn

Please choose a character to load:
Caught exception: The system cannot find the file specified.

  1. BobyourUncle (local save)
    com.sun.jna.platform.win32.Win32Exception: The system cannot find the file specified.

com.sun.jna.platform.win32.Advapi32Util.registryGetStringValue (Advapi32Util.java:555)
gd_edit.game_dirs$get_steam_path.invokeStatic (game_dirs.clj:23)
gd_edit.game_dirs$get_steam_path.invoke (game_dirs.clj:18)
gd_edit.game_dirs$get_steam_library_folders.invokeStatic (game_dirs.clj:30)
gd_edit.game_dirs$get_steam_library_folders.invoke (game_dirs.clj:27)
gd_edit.game_dirs$standard_game_dirs.invokeStatic (game_dirs.clj:56)
gd_edit.game_dirs$standard_game_dirs.invoke (game_dirs.clj:44)
gd_edit.game_dirs$get_game_dir_search_list.invokeStatic (game_dirs.clj:75)
gd_edit.game_dirs$get_game_dir_search_list.invoke (game_dirs.clj:67)
gd_edit.game_dirs$get_game_dir_search_list.invokeStatic (game_dirs.clj:72)
gd_edit.game_dirs$get_game_dir_search_list.invoke (game_dirs.clj:67)
gd_edit.game_dirs$get_game_dir.invokeStatic (game_dirs.clj:149)
gd_edit.game_dirs$get_game_dir.invoke (game_dirs.clj:147)
gd_edit.game_dirs$get_gdx2_dir.invokeStatic (game_dirs.clj:164)
gd_edit.game_dirs$get_gdx2_dir.invoke (game_dirs.clj:161)
gd_edit.game_dirs$get_file_override_dirs.invokeStatic (game_dirs.clj:176)
gd_edit.game_dirs$get_file_override_dirs.invoke (game_dirs.clj:171)
gd_edit.game_dirs$get_file_and_overrides.invokeStatic (game_dirs.clj:208)
gd_edit.game_dirs$get_file_and_overrides.invoke (game_dirs.clj:195)
gd_edit.command_handlers$load_localization_files.invokeStatic (command_handlers.clj:966)
gd_edit.command_handlers$load_localization_files.invoke (command_handlers.clj:964)
gd_edit.command_handlers$load_db_in_background$fn__17896.invoke (command_handlers.clj:995)
clojure.core$binding_conveyor_fn$fn__5476.invoke (core.clj:2022)
clojure.lang.AFn.call (AFn.java:18)
java.util.concurrent.FutureTask.run (:-1)
java.util.concurrent.ThreadPoolExecutor.runWorker (:-1)
java.util.concurrent.ThreadPoolExecutor$Worker.run (:-1)
java.lang.Thread.run (:-1)

Please choose a character to load:

  1. BobyourUncle (local save)


At first glance, it looks like it’s throwing an exception when it was trying to read the install path for steam from the windows registry… I guess that means you don’t have steam installed at all? I’ll try to fix this tomorrow. =)

Hi - I don’t have steam at all, just the GoG version ! Thanks for looking in to it so quickly !

Hey Odie, I’ve used this editor before, it worked like a charm but now, the updated version doesn’t work. I still have the older version which works fine but not the latest version.
It just starts and exits in under a sec, like a program with no pause function.
Please HELP!!!

1 Like

cant find Runes :frowning:

Hi @MSoniSama

I can’t reproduce the problem you’re describing. Does manually downloading the editor make this go away?


A wild New Version has appeared!
The editor will now silently accept the fact that steam may not be installed without constantly yammering about it.

Lemme know if you run into any more problems!