[Tool] GD save file editor

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.

TLDR:

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

Prefix

  • 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

Suffix

  • 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

records/items/lootaffixes/prefixunique/d101_conduiteldritchsecrets_03a.dbr
<omitted>
	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

<omitted>
	skillDisplayName: Sigil of Consumption
<omitted>

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

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

<omitted>
            basename : records/items/gearaccessories/necklaces/d113c_necklace.dbr
<omitted>

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

<omitted>
records/items/loottables/gearaccessories/tdyn_craft_necklace_d101c_conduiteldritchsecrets.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
<omitted>
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

<omitted>
	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
<omitted>

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!

2 Likes

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.

https://odie.github.io/gd-edit-docs/commands/#command-mod

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

Howdy!

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

Deathspade

            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

C:\Users\PJ\Downloads>gd-edit
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
ā€¦
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.
    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$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)

Howdy!

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?

@RedPriest

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!

cant find Runes :frowning:

Can you show me the exact command youā€™re running and its output?

Same issue here, have never used this editor before though.

Not great with cmd, but had a crack at trying to manually open it from cmd:

ā€œC:\Users\alexm>C:\Users\alexm\Downloads\gd-edit.exe
Error occurred during initialization of VM
Could not reserve enough space for 2097152KB object heapā€

Not sure if this helps

That looks like itā€™s saying it doesnā€™t like it that the program is trying to reserve 2GB of memory.
This matches a change I made in the last published version that says it could (but not always) use up to 2GB of memory.

Maybe this has something to do with the version of java youā€™re running?

Can you run

java -version

on the commandline and see what the output is?
It should say something like this:

java version "1.8.0_112"
Java(TM) SE Runtime Environment (build 1.8.0_112-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.112-b15, mixed mode)

If it says 32 bit, that might be the problem. In that case, can try installing the 64 bit version?

Thanks!