[Tool] GD MultiStash


Tutorial videos:


Switch through stashes directly ingame
Download [ GDMultiStash (latest) ] [ Old GDMS (for GD 1.1.9.8) ]

Throubleshooting:

  • Add exclusion for DllInjector64.exe to your antivir
  • Run GDMultiStashUpdater.exe manually
  • Run GDMultiStashDebug.exe to check for any error
  • Check if GDMS logo appears in top left corner in game after startup
  • Make sure you disabled cloud sync in Steam and Grim Dawn

About:

  • English/German/Chinese (multilang support)
  • Requires Net 4.8
  • Portable (no setup)
  • x64 only
  • No admin rights required
  • Cloud saving must be turned OFF!
  • License: MIT

Works with (approved):

  • Grim Internals (stopped supporting for GD1.2 and onwards)
  • Grim Cam
  • Item Assistant
  • GD Stash

Not compatible with:

  • Does not work with mods and custom games!
  • Grim UI X (Stash window too large, no space for gdsm)
  • Steam Deck

The usage is pretty self explained:

  • Create/import your stashes by clicking the buttons on bottom menu
  • Edit stash names by double clicking a name
  • Select SC/HC, wherever you wanna use that stash
  • Start the game
  • Now when you open your transfer stash ingame the side window will appear
  • Just click the name of any stash to switch to it.
  • The stash window will close, the transfer files will be exchanged and the stash window will reopen

New Drag&Drop Feature:

  • Use Drag&Drop to reerange and change order of stashes
  • Drag&Drop transfer files into the window to import stashes
  • Drag&Drop stashes out of the window onto your desktop to export them

How to install?
You don’t need to install GDMS - It’s portable!
Just extract it to anywhere you want.

If GDMS doesn’t start up
Run GDMultiStashUpdater.exe manually. Maybe some important files got not extracted correctly because of antivir. Running the updater seems to fix that issue. If it’s still not working run GDMultiStash.debug.bat and send me the debug log (copy&paste or via screenshot)

Shared stashes for Normal AND Hardcore
Check out this tutorial: https://forums.crateentertainment.com/t/tool-gd-multistash/114617/24

Credits
GD Stash Changer - without that one I would have never started this project
GD Item Assistant - Using parts if it to detect stash status changes and reading transfer files
Direct3DHook - Finally made it possible for me to draw my own stuff inside Grim Dawn

Special thanks
Eclipsonaut - For testing, cheering me up and together kicking asses out of those nasty monsters
tt300 - For Chinese translation

So, well… I’m hoping I can make life easier for some ppl with that tool <3
Cheers!

12 Likes

If you change g_targetWnd = FindWindow( L"GDIAWindowClass", NULL); this one, then it should (theoretically) not interfere with Item Assistant.

The GDIAWindowClass specifically.
Will also need to change it in InjectionTargetForm.cs (the listener)

Another thing to be aware of is the .gst/gsh files, if you check ClassifyStashfile in TransferStashService (IA codebase), you’ll see the different extensions used when disabling expansions. Not uncommon for people to disable expansions to play with friends.

Looks nice though!

1 Like

Damn I never thought of it that different expansions use different extensions but it makes sense!

Thank you for your replay and your help :slight_smile: Your hook stuff is a nice opportunity for me getting into c++ :smiley:


Edit: Updated to v1.4

  • GDMultiStash now also supports the base game and Ashes of Malmouth expansion
  • Four additional new stashes are beeing created on startup (for missing expansions of old version)
  • GDMultiStash now should theoretically work with running GDItemAssistant
  • Added new column in listview to show stash expansions
  • Columns “last change” and “usage” are no more editiable by user
  • Added select box for expansion in “add stash” dialog
  • Added textbox for expansion in “import stash” dialog
  • Ingame list now only showing stashes for current mode AND expension
  • Updated export of single stashes to respect expansions and modes in extensions
  • Added new menu to main window in top right corner to change stash display
  • Changed localization (just delete “Locales” dir in your “Data” dir to update lang files)

v1.5

  • Fixed opacy bug of ingame stash list items
  • Fixed exception when right clicking empty listview area

Updated to v1.6
Now you can change the size of the overlay window <3

  • Text align of column ID is now left (makes it easer to read the names)
  • Font of ingame window is now getting clipped correctly if too large
  • Language files in “Data/Locales” are now getting updated automaticly on version update
  • Fixed a bug where overlay elements x/y/width/height did not get updated properly
  • Overlay scrollbar now getting updated properly when visible stashes changed
  • Added option to change overlay width
  • Added option to change overlay scaling
  • Updated itemsizes list
  • Updated localization:
    +label_overlay_width
    +label_overlay_scale

GD Multistash do not work with Grim Dawn 1.1.9.4, I have modded the game a little and I did not wanted to update.
Now I have updated to 1.1.9.5
It work and I love it.
Work with GD Internal and Grim Cam too!

Thank you YveOne, wonderful job.

The in-game “save” and “load” buttons are for backup and/or cheating alone.
If you want to create (or delete) a new stash, you have to switch back to desktop and add the new stash from the GD MultiStash window.
This was a bit confusing, but now I understand how it work.

Thank you again

One curiosity: Why host the sourcecode on mega instead of github/bitbucket/othergitprovider?

Why not? Mega’s used for a lot of hosting. And have you tried finding the download button on github? :crazy_face:

@ peval
Thanks for your reply. MultiStash is supporting Grim Internals from the beginning. You even can set up MultiStash to autostart Grim Internals which then will start Grim Dawn.

@ slipperypete
Well i was looking for a place to host the tool. Then I remembered I already got a mega account. Its very easy to use mega to share the tool. Just drag&drop, right click, export link, done. I also got a github account but I am not very used to it since I’m not professional dev and doing it just as a hobby.

@ medea_fleecestealer
Yeah :smiley: thats another reason :smiley:

1 Like

To get source code on Github is easy enough…

…and to download the built programs is also pretty straightforward…

You will usually find the latest builds under the Releases section, then click Assets once there to see what is available.

It is generally considered safer or more legit to use Github when doling out source code etc. Mega tends to be better if you are just providing the complete finished program, especially if it is of a large size.

No… I don’t use the download button on github, I clone the repository so that I can get the full version history… Compiled binaries will usually be under “Releases”, but the source code is generally cloned not downloaded as a zip.

Are you not using version control though…?

I use version control for pretty much anything. Even my Grim Dawn saves are in git. Version control is a lifesaver =)

1 Like

Well no I’m not :sweat_smile: If I gonna change something that could break the whole tool I create a backup of the whole folder first. And with gdms I got backups of my stashes, everyone marked with a last write time.
I know that git is essential for developing in a team. When I started this project I just did so for myself to play a lil bit around and to change my stashes ingame. The whole “share to puplic” part came afterwards as the tool seemed to be pretty useful.
Well gimme some time and I will upload it to github even though I dont see a point why I should start using version control right now :sweat_smile:


Edit: Okay now here it is: [ Sourcecode @GitHub ]
I just did my first commit and push… Whooooop whoooop! And it seems kinda comfortable

1 Like

Update v1.7

  • The usage of stashes is now getting updated correctly
  • Added autostart support for GrimCam
  • Updated setup window
  • Added option to automaticly switch back to main stash when ingame stash closed (enabled by default)
  • Improved stash changing - made it safier and faster
  • Updated localization
    +label_auto_back_to_main

Update v1.8

Now with Drag&Drop Power <3
Releases will be uploaded on GitHub from now on.

  • New feature: To import transfer files drag and drop them directly onto the window
  • New feature: Reerange stashes (change order of stashes) by using drag & drop
  • New feature: Drag&Drop stashes from listview to desktop (will create a zip file)
  • Added support for GOG version
  • Removed “up” and “down” buttons in listview - use new drag&drop feature
  • Added mutex to allow only one running instance of GDMultiStash at a time
  • Added buttons to select/unselect all stashes in listview
  • Main stashes are no more disabled in listview. Now they can be renamed but reordering or mode checkboxes are still disabled
  • Stashes with missing transfer file in Data/Stashes folder (corrupted) will get red highlight in listview
  • Updated localization
    +button_select_all
    +button_unselect_all

Update v1.9

  • Added Version check + Updater
  • Fixed dragging of stashes that got both sc and hc checked
  • Updated localization
    +label_check_for_new_version
    +label_auto_update_version
1 Like

I updated to 1.9, Thank you.

Updated localization: no, you did not :grinning_face_with_smiling_eyes:

multistash label

Can you make “Create a new stash” to have by default both HC & SC checked?
I always forgot to check the HC and I wonder how the new stash did not appear in game :sweat_smile:

There is a limit on how many stash I can have?
I have a quite elaborate GD Stash Changer 3.75 MB file on MEGA wich is nice and colorful but I want to use MultiStash for my new play and I wonder if I will break your code with too many stashes.

Again, thank YveOne for your work.

lol that looks weird :sweat_smile:

Yeah I can add a select box “Default selected mode” with Options “none”, “sc”, “HC”, “both”.

I’ve tested the ingame overlay window with 500 list entries - no problem. 1000 entries were finally to much and directx stopped rendering but I guess thats just because I was initializing all List entries in one frame. Using a queue could solve that😅 So there shouldn’t be a problem with using many stashes. Well maybe longer startup time or slower behaviors of the listview.


Edit: I dont know why your labels do not getting updated - can’t reproduce that weird bug.

Update v1.10

  • Now Stash will be switched to main only when whole ingame stash window closed
  • Updated whole overlay list system
  • Fixed Drag&Drop of files into listview
  • Fixed Drag&Drop of transfer files without extension
  • Added option for default mode of new stashes
  • The export feature in context menu is now using the zip system as well
  • Fixed lagging mouse… Mouse hook is getting unset while game window is not focused
  • Stash names can now be colored
  • Localization:
    +label_default_stash_mode
    +mode_none
    +mode_sc
    +mode_hc
    +mode_both
    -export_stash
    +context_export
    +column_color

Edit: I don’t like the idea of having 4k stashes to get all available items. It must be horrible to scroll through such a big list. So I’m wondering… there must be a better way! One idea is to create something like a tree view. Recursive groups that can be opened/closed like the “Details” box above. But how to maintain such a big list?

OK, Nein, Nope, NO!

  1. The “label1” will update and stay updated even after a restart after I move the scroll-bars for the first time, it is a minor bug with no real importance.

  2. Don’t worry about too many stashes, my GD Stash Changer was too cumbersome to be used, I use it only for reference. 500 stashes are more than enuff.

  3. GD MultiStash don’t work anymore!!!
    well, no, it’s still usable, but give me some errors :zap: :zap: :zap:

I had a v1.7, it worked fine.
I do not have v1.8.
I copied v1.9 over v1.7, apparently, worked fine, I played a bit yesterday.
I copied over a 1.10, work fine… but when I go to setting I get this error:

the parameter named “value” cannot be “null”.
Error

Click “Continue”, the Game Path is correct (I have GOG version), but the command field is empty, in v1.7 it showed the main executable, GD Internal and Steam path (I don’t have steam), now is all empty.
error1

In the “Behaviour” tab the cascading menu “Default mode for new stashes” is also empty.
(You can also see that “label1” disappear after moving the bar)
error2

I delete the entire directory.
Unzipped a fresh v1.10.
Got the same error, this time on start: the parameter named “value” cannot be “null”, I click “continue”.
Got the same error when clicking setting.
The command field for launching the game is empty and the default mode for new stashes is also empty.
I launch the game manually: all stashes from GD MultiStash work fine.

I delete the v1.10 directory
Unzipped a fresh v1.9, click cancel when asked for update.
Same result as above. I got the usual error on start and on clicking “setting”: the parameter named “value” cannot be “null”.

CONCLUSION: I get the error when starting GD MultiStash and when accessing the settings on v1.9 and v1.10, both versions cannot find my Grim Dawn (and Grim Internal) executables.
If I configure the program in v1.7 and then upgrade, GD MultiStash start without errors, Grim Dawn start automatically and I get the error only if click on “settings”, and, off course, I cannot change the 2 fields that are empty.
I have no problem with the stashes, they are listed in game and work fine in all versions.

I did not try the colors (nice addition, thanks), for now I’ll go with my backup of v1.9 installed over a v1.7.
Sorry for the long post, I hope to be useful.

1 Like

It realy was helpful. Thank you <3
And the error shall be fixed (there was only one line that could cause that error).

I guess you are using GOG version but without the GOG Galaxy Client, right?
Therefore the registry entry was empty (null).

v1.10.1

  • Fixed ArgumentNullException in settings window

v1.10.2

  • Fixed Game Crash when opening/closing devotion window before opening transfer stash

Add filters for damage types etc to find the items, then generate a new stash file based on the filters?
Or if you really got the hang of it, generate a virtual bag inside the game, not associated with any file.
Then you remove the item from the correct stash file when it’s transferred into the game.

(It’s an idea i’ve pondered a bit with IA, but never had an in-game UI for filtering)


Or if you want to keep it simple with stashes as is, the filter can filter out bags not containing items that fits a certain criteria.