Identifying method to create a mod that can adjust player stats

Hi All,

Editing this main post to further clarify intent and provide an update on what I’ve found so far - thank you to everyone for the replies and feedback and looking forward to further discussion.

Objective:
To identify a method that can be used to track experience gained and provide a pseudo infinite leveling experience. Leveling up would allow you to allocate points to different categories that would apply changes to the player’s stats (physical damage, offensive ability, etc.) The objective is that these changes would work in a multiplayer / custom game session.

Methods:
TBD as potential methods are identified and researched


Original Post:

Good afternoon! I am looking to identify the best approach to creating a mod that would have the capability to adjust player stats on the fly, or after a single reload of the game. For example, modifying the damage % of a certain damage type, modifying the total life pool, etc.

So far I’ve learned adjusting a dbr file would not be a feasible way to accomplish this as it requires a rebuild of a mod.

Looking for the communities thoughts!

I don’t have much of an idea of how to do all that but I’m going to guess it is very possible but would require “reverse-engineering” GD, maybe with something like Cheat Engine.

If you run down GDTH (GD Trained Hard)'s feature-list, you can see evidence of the capability to do many similar things…

[Tool] Grim Dawn Trained Hard

…unfortunately this tool is long dead now. It appears the original author tapped @GlockenGerda for advice way back, so, who knows?

Essentially tho, what you want to do is beyond a “mod” and would more than likely require you to have some programming knowledge and ability.

Game hacking as mentioned above or

I think it’s possible to automate it. You could make some program that builds a mod and/or edits the save file using [Tool] GD save file editor and/or hacks the game depending on what you’re trying to change. Maybe start with some GUI that’s using this save file editor.

@powbam Thank you for the reply! This is a great starting point for me.

@tqfan thank you for the reply! I did look into the save file and what I’m looking to update it seems is not contained within the save data. Rebuilding a dbr file even if automated is not ideal as I’m hoping I can get this working in multiplayer.

For all - to further add context , what I’m essentially working to build is a third party app or modification that would hook into/monitor xp gained and based on that data would allow the user to increment and modify damage and other player stats on the fly as they gain experience. It would be an implementation of like a D3 paragon or ESO champion point system.

Thank you again for the discussion and looking forward to thoughts :slight_smile:

1 Like

look also at lightweight mod for speedleveling. He just put an option in his bat so you could change level requirements or devotion pts. So its possible to create a bat for what you are after.

Hi everyone,

I’ve updated the main post just to provide some more details at what I’m looking to build. Wanted to provide an update to this group as the feedback shared has been very helpful so far.

@powbam Have continued to do research into your feedback of “reverse-engineering” and so far have found that GI, GDTH (as you called out), and GDIA likely are using dll injection. GDIA is open source so I have been doing some research into their hook dll - I think what I’m missing so far is just understanding what specifically I’d need to hook into to build a mod like this. Ideally would love a simpler solution but this may have to be the play. With Gerda moving on from Grim Dawn I may not get lucky to get her feedback, but as you said, you never know!

@Violesta Appreciate the reply - this was a useful mod to look into as it seems they’ve utilized the in-game spell/buff system to create a buff that provides a damage and xp boost. I would be open to doing something similar. Or possibly even a component?

At this point I need to identify a few different things -

  • What capabilities are there to track xp gained - does the save file continue to track xp gained beyond 100?
  • What options exist to send a command to the game to buff the player or give them an item based on a set of criteria?

Will continue googling…

1 Like

Might ask in his thread, the nonlight weight mod goes over 100. I dont know how he is about answering peeps on modding but he does responds. Also if I understand correctly theres also a discord channel. Ive never been on but supposedly they discuss modding there too.

Ok, if I am understanding this you want an infinite level progression, where skill points past lvl 100 can be invested into several stat boosting skills. Lets just assume that the skills available are 10.

So first lets look at existing solution. Both Nydiamar and Lightweight mod offer an increased max level, one to 125, the other to 200. Features can differ between the 2. but they are essentially the same thing. Skill points and/or devotions points on level. It is missing that “stat altering” feature that you called it. And enemies will scale with you and unless you add gear you might fall behind.

Here are solutions I think fit what you desire (without increasing the max level):
I will start with the skills since I think I have the most flexible solution for your need, that at most require Lua scripting and general game files modding, no need to hack in the game.

  1. On level up you will get an item that you can spend on an NPC.
  2. The NPC will offer conversation options to increase one of the 10 “skills” of your choice, consuming the “leveled up item” from 1.
  3. The chosen skills will be applied by a Lua script, that would summon a creature/s to apply the skills as buffs each time the player spawns in/loads into an area.
    Note: You will need 1 creature for each skill and Lua would have to handle summoning the creature at the correct level and for the skills chosen by the player.
  4. Lua will have to track each skill level with quest tags, as that is the only thing that can persist between game session, that modders have access to.
    Another option is to keep a stackable item as a counter for each skill level, but then you carry 10 extra items that will be deleted if the character is loaded into a different mod. The item will be given to the player when choosing a skill at step 2.

Now ideas for your “infinite level scaling”:

  1. Utilize skills that track experience ( like the devotion ones)
    1.1. Such a skill will have to be available in the devotion tree. Maybe give the player the 56th devotion point to use on the skill once they reach level 100. The devotion tree might support non procs skills as well, which would make things easier. In either case this will have to be a summon skill, that the monster can trigger a Lua script to handle the once per level item reward for step 1 of Skills.
    Cons to this method is that skill can be picked as soon as the player has access to it in the devotions.
    1.2. IF leveling skills can be granted and WORK to items or consumable items then that will be a better solution than a devotion skill, as this item can be given to the player at level 100.

  2. Have the experience tracking happen in LUA.
    2.1.Here is the first limitation to this approach. You cannot track experience gained. You will either have to base it on raw number of enemies killed, or have Lua calculate exp based on enemy level.
    2.2.How do we track kills? For that you can add a onKill script for the character, but that will not distinguish between bosses, heroes, and trash and wont have access to enemy information (such as level, great if you go with # of kills approach). Upside is, you will only have to edit 2 files.
    Or you can add a ondie script for every enemy in the game, then monsters can give more “exp” if they are a boss.
    Both approaches might fail however at determining who of the players landed the killing blow, or if you are in different zones “exp” with this method will be global. Some experimentation is required to determine the exact limits of this method.
    And finally you will have to store the “exp” for next level in a quest tag. Storing the raw number will be a nightmare when you have to read it back, as you would have to try every value under the sun. So you will have to convert the number to binary and have 2 quest tags for each bit.

1 Like