in items
untradeable,1,

records\ui\inventor\convertpanel\convert_table.dbr
blacklistedSets,records/items/lootsets/itemset_d119.dbr;records/items/lootsets/itemset_d101.dbr;records/storyelements/signs/signset.dbr;records/items/lootsets/itemset_d201.dbr;records/items/lootsets/itemset_d202.dbr;records/items/lootsets/itemset_c018a.dbr;records/items/lootsets/itemset_c018b.dbr;records/items/lootsets/itemset_c018c.dbr;records/items/lootsets/itemset_d027.dbr;records/items/lootsets/itemset_d027b.dbr,




import com.sun.jna.platform.win32.Advapi32Util;
import com.sun.jna.platform.win32.Win32Exception;
import static com.sun.jna.platform.win32.WinReg.HKEY_CURRENT_USER;
import static com.sun.jna.platform.win32.WinReg.HKEY_LOCAL_MACHINE;

/**
 *
 * @author hermannm
 */
public class GDRegistry {
  // https://github.com/java-native-access/jna#download
  // Needs 2 jars : jna-x.y.z.jar and platform-x.y.z.jar
  
  // https://github.com/marius00/iagd/blob/master/IAGrim/Utilities/GrimDawnDetector.cs

  public static void main(String[] args) {
    try {
      System.out.println(Advapi32Util.registryGetStringValue(HKEY_CURRENT_USER,
        "Software\\Valve\\Steam", "SteamPath"));
      // subdir steamapps\\common\\Grim Dawn
    }
    catch (Win32Exception ex) {
      System.out.println("Steam not found");
    }

    try {
      System.out.println(Advapi32Util.registryGetStringValue(HKEY_LOCAL_MACHINE,
        "Software\\Microsoft\\Windows\\CurrentVersion\\App Paths\\AcroRd32.exe", ""));
    }
    catch (Win32Exception ex) {
      System.out.println("Acrobat Reader not found");
    }

    try {
      System.out.println(Advapi32Util.registryGetStringValue(HKEY_LOCAL_MACHINE,
        "Software\\Microsoft\\Windows\\CurrentVersion\\App Paths\\AcroRd32.exe", "Path"));
    }
    catch (Win32Exception ex) {
      System.out.println("Acrobat Reader Path not found");
    }

    try {
      System.out.println(Advapi32Util.registryGetIntValue(HKEY_LOCAL_MACHINE,
        "Software\\Wow6432Node\\Javasoft\\Java Update\\Policy", "Frequency"));
    }
    catch (Win32Exception ex) {
      System.out.println("Javasoft not found");
    }

    System.out.println("Internet Settings keys");
    try {
      String [] keys = Advapi32Util.registryGetKeys(HKEY_CURRENT_USER,
        "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings");
      for (String key : keys) {
        System.out.println(key);
      }
    }
    catch (Win32Exception ex) {
      System.out.println("Internet Settings not found");
    }

    System.out.println("Internet Settings as Map<String, Object>");
    try {
      Map <String, Object>values = Advapi32Util.registryGetValues(HKEY_CURRENT_USER,
         "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings");
      for (String value : values.keySet()) {
        System.out.println(value);
      }
    }
    catch (Win32Exception ex) {
      System.out.println("Internet Settings not found");
    }

    //System.out.println(Advapi32Util.registryKeyExists(HKEY_CURRENT_USER, "Software\\RealHowTo"));
    //Advapi32Util.registryCreateKey(HKEY_CURRENT_USER, "Software\\RealHowTo");
    //System.out.println(Advapi32Util.registryKeyExists(HKEY_CURRENT_USER, "Software\\RealHowTo"));
    //Advapi32Util.registrySetStringValue(HKEY_CURRENT_USER, "Software\\RealHowTo", "url", "http://www.rgagnon.com");
    //System.out.println(Advapi32Util.registryValueExists(HKEY_CURRENT_USER, "Software\\RealHowTo", "url"));
    //System.out.println(Advapi32Util.registryValueExists(HKEY_CURRENT_USER, "Software\\RealHowTo", "foo"));
  }

}

=====================================================================

RNG:

affixes have lootRandomizerJitter,30.000000, which I assume defines the range
items have attributeScalePercent,30.000000,which I assume does the same for them

add maxStackSize to item table ?
get records/game/gameengine.dbr: itemMaxStackSize,1000, to base stack size on ?

records/game/gameengine.dbr
factionValue1,-20000,
factionValue2,-8000,
factionValue3,-1500,
factionValue4,0,
factionValue5,1500,
factionValue6,5000,
factionValue7,10000,
factionValue8,25000,

factionTag1,tagFactionStateEnemy5,
factionTag2,tagFactionStateEnemy4,
factionTag3,tagFactionStateEnemy2,
factionTag4,tagFactionStateNeutral,
factionTag5,tagFactionStateFriend1,
factionTag6,tagFactionStateFriend2,
factionTag7,tagFactionStateFriend4,
factionTag8,tagFactionStateFriend5,

in tags_ui.txt

tagFactionStateEnemy5=Nemesis
tagFactionStateEnemy4=Hated
tagFactionStateEnemy3=Loathed
tagFactionStateEnemy2=Despised
tagFactionStateEnemy1=Hostile
tagFactionStateNeutral=Tolerated
tagFactionStateFriend1=Friendly
tagFactionStateFriend2=Respected
tagFactionStateFriend3=Trusted
tagFactionStateFriend4=Honored
tagFactionStateFriend5=Revered

instead of hard-coding them ?

ui\riftgatemap\locations\riftgate*.dbr

description,tagRiftBurrwitchRoad,

records\interactive\devotionshrine*.dbr

journalTag,tagDevotionShrineA02,
epicDisabled,0,
epicLocked,0,
legendaryDisabled,0,
legendaryLocked,0,
normalDisabled,0,
normalLocked,0,

disabled determines whether the shrine is available in that difficulty,
e.g. devotionshrinea05.dbr is disabled in legendary, devotionshrinea06.dbr
in epic and legendary
(tagDevotionShrineA05=Burrwitch Estates
tagDevotionShrineA06=Devil's Aquifer}
no idea what locked does

devotionshrines01.dbr:

FileDescription,Secret Ritual,
journalTag,tagDevotionShrineS01,
epicDisabled,0,
epicLocked,1,
legendaryDisabled,0,
legendaryLocked,0,
normalDisabled,0,
normalLocked,1,

did not find the GUIDs anywhere....

"Debuff over x seconds" is shown completely different in-game.
in game: 150 Reduced target's Defensive Ability for 2 Seconds
in tool: 300 Reduced target's DA Over 2 Seconds (150 Per Second)

Chris for providing standard C++ code that can read and write the new encrypted Grim Dawn stash format.

His implementation can be found here

C++ code to read and write save files (http://www.lost.org.uk/grimdawn/)

Blueprint ingredients

In blueprint, the following tags

for the loot table which contains the craftable items:

artifactName,records/items/loottables/gearshoulders/tdyn_craft_shoulders_c01_decoratedpauldrons.dbr,
artifactCreationCost,45000,

for the ingredients (-> new table):

reagent1BaseName,records/items/materia/compb_ancientarmorplate.dbr,
reagent1Quantity,1,
reagent2BaseName,records/items/materia/compb_ancientarmorplate.dbr,
reagent2Quantity,1,
reagent3BaseName,records/items/materia/compa_runestone.dbr,
reagent3Quantity,1,
reagent4BaseName,records/items/materia/compa_scalyhide.dbr,
reagent4Quantity,1,
reagent5BaseName,records/items/materia/compa_wardstone.dbr,
reagent5Quantity,1,
reagentBaseBaseName,records/items/questitems/scrapmetal.dbr,
reagentBaseQuantity,25,

In the loottable, you then have

lootName1,records/items/gearshoulders/c008_shoulder.dbr,

or multiple items

-------------------------------------------------------------------

fillAttribLootTable

  