[Tool] GDAutocaster - play 🎹 builds with ease, autocasting of skills, combos, faster / automatic camera, autohiding of items, centered Inquisitor Seal and more for all games!

Thanks a bunch. I will try them all :slight_smile: This tool is a must for me along with GDstash for smoother gameplay. Thanks again for your effort :slight_smile:

No problem, if you have some questions or suggestions, just tell me :slight_smile:

Are we limited to N=1 to 9, in castN and comboN under each section?

Well it can be increased no problem if needed here: https://github.com/kowariantny/GDAutocaster/blob/master/Defaults.ahk

global _MAX_NUMBER_OF_COMBINATIONS := 9

I’m working on a build that has many skills and I’m trying to do a lot of different things with them. I ran into the limit and had to start removing some of my more basic binds (like holding down a key to keep picking stuff up) to allow for more combinations for skill affects.

Are you suggesting that I create my own version using the code in Github or just saying that it wouldn’t be hard for you to change?

P.S. Did you ever figure out how to make coordinates work right on a secondary monitor?

I can change it for your if you want it. I guess you could change it yourself and compile, it’s just a few clicks but I’d rather adapt to program’s users, have more universal program first than have them creating their own versions but first I’d like to see your config because there’s always a chance

  1. you don’t see a way to shorten it
  2. maybe I can change a program somehow to accommodate

I’m not stubborn however and even if you’re doing some gimmicks it’s fine for me. I just wanted to have a look.

I haven’t but I’m not sure if I searched for it / work on it too much.
I leave this task to you :slight_smile: Google and maybe you can make a simple script with
this simple function (that stores cursor position) to contain actual coordinates
on your second monitor.

MouseGetPos, xpos, ypos

It makes coordinates be stored in xpos and ypos. And you can display them by

MsgBox, %xpos% %ypos%

Hmm… or maybe I can change the fix I made for you that’s no longer needed (and was also not working I think) so that it contains constant corrections width_correction height_correction etc

Maybe you could check if there’s a fixed error based on your monitor resolution or something.

I use “autocast by hold” a lot, with the hold making the skill(s) it sets off repeat on appropriate timers. Using 3 skills on 1 key often requires cast1, cast2, and cast3, since each of the 3 skills is on a different timer (has a different duration). This isn’t a problem for skills that are cast on cooldown, but for stuff that lasts longer than its cooldown (lots of these), it is pretty much a requirement.

I haven’t done any programming, except GDAutocater scripts since 2012 when I retired (30 years doing software design and programming). Not so sure I want to start again, so I’ll just not use center casts. :smiley: I do think the secondary monitor correction is a fixed, but very large amount, but I didn’t figure out the exact numbers, just approximated it enough so that I could set up a key to set pets to aggressive.

I spent a little time adding some commentary to my .ini since my key set-up is a bit unusual. The build (lvl 95 and I’m in the middle of making some changes, but they won’t affect the keys): https://www.grimtools.com/calc/RZRwOWxN

The .ini is quite long. I’m sure there are many things that could be done differently. I’m not really happy with how Savagery/Primal Strike is set up, for example. Also, I’ve been playing with the build itself and how all of this is working together quite a bit. Everything does seem to be functioning at the moment.:

CMT= Number keys 1-0 are duplicated by a,s,d,f,q,w,z,x,c,v, repectively.

[general]
CMT= Tab stops most non-repeating stuff
suspend_key=Tab

[camera]
CMT= 60 seems closer to 22.5 degrees for me. Not sure why.
CMT= Not even sure this stuff is working any more. Haven’t been using it mostly.
angle=60
counter_clockwise=right
clockwise=left
rotation_key=Mbutton
delay=40

[combo presses]
delay=100
initial_delay=100

CMT= pressing h causes all my toggles to go on and does summons (or off)
CMT= “y” is swap bar key.
combo1=h:y,0,9,8,y
delay1=500

CMT= Pressing “F” makes Devouring Swarm (DS on f/4) and Curse of Frailty (CoF on s/2) go off
combo2=f:4,2
key_native_function2=false

CMT= Pressing RButton makes Savagery and Primal Strike (on the key) go off
combo3=RButton:c,c,c,RButton
key_native_function3=false

[autocast by hold]
delay=100
inner_delay=100
initial_delay=100

CMT= holding g repeatedly picks up items and interacts with stuff in the area (g is my pick-up key)
cast9=g:g,b
initial_delay9=200

CMT= holding b repeatedly interacts with stuff nearby (chests)
CMT= cast8=b:b
CMT= delay8=200
CMT= initial_delay9=200

CMT= CMT= Holding “F” makes CoF go off every 8.5 Sec
cast1=f:2
delay=8500
initial_delay1=8500

CMT= Holding “F” makes DS go off every 5 seconds
cast2=f:4
delay2=5000
initial_delay2=5000
key_native_function2=false

CMT= Holding “W” makes Bloodthirster go off on Cooldown
cast3=w:6,6,6,6

CMT= Holding RButton makes Savagery go off every 1.8 seconds (2 sec charge fade)
cast4=RButton:9
delay4=1800
initial_delay4=1500

CMT= Holding RButton makes Primal Strike go over and over
CMT= Tried not programming this and just using the games key hold functionality
CMT= and tried combo hold, neither worked well for some reason.
cast5=RButton:RButton
initial_delay5=100

CMT= Holding “A” makes Wendigo Totem go off every 13 seconds
cast6=a:1
delay6=13000
initial_delay6=13000

CMT= Holding “D” makes Sigil of Consumption go off whenever it is ready
cast7=d:3

CMT= holding z makes move fasts (move power on x/8) go off as soon as they are ready
cast8=z:8
delay8=350

[combo holds]
CMT= In addition to doing my move fasts via forced move (/), “Z” keeps me moving toward my cursor (Up)
combo1=z:Up,/
initial_delay1=100

[autocast by toggle]
CMT= t toggles Blood of Dreeg (on q/5) going off every 17 seconds
cast1=t:5
delay1=17000
autocast_right_away1=False
reset_key1=q

GDAutocaster supports having the camera turn to the direction your character is facing. See the [Automatic Camera] section. If you mean you’d like the camera to act like an MMORPG camera and follow you over the shoulder, there is a mod that lets you change the camera to lower the angle, but it doesn’t auto-follow your char facing. Unfortunately, that mod and this one are not compatible, so you can/t use them together. I know because I asked about that in an earlier post. :slight_smile:

Edit - To clarify, GDAutocaster actually makes your char face your cursor (mouse pointer) which changes the camera direction. Not the other way around. The other mod enables you to change the camera angle, but doesn’t turn your character or the camera automatically at all.

Well this has been fixed, you can delete that comment :smile:

Why global initial_delay for combos here?
This makes combo1, combo2 be initially delayed unnecessarily.

Also I think delay might be a bit too big here (100 ms between casting differrent spells).
But if it’s working you then ok. But if sometimes 2nd spell in combo doesn’t work it might be the reason.

This is kinda weird but if it works than fine.
There isn’t really a perfect solution for Primal Strike and Savagery I feel like.
That would be also appropriate for every playstyle.

I don’t think these key_native_function3=false does work here.
I mean RButton is clicked anyway if I remember correctly (due to game engine).
But for letters it might work so that for example F only activates the combo but is not pressed.

There are no inner_delay and initial_delay for this section.
The last two lines of the quote above do nothing.

I don’t think initial_delay is needed here but not sure as I haven’t combine these two into one button personally

I think you could remove this combo if you wanted to
and cast DS in your DS autocast by hold as follows

CMT= Holding “F” makes DS go off every 5 seconds
cast2=f:4
delay2=5000
initial_delay2=0
key_native_function2=false

instead of what you currently have

CMT= Holding “F” makes DS go off every 5 seconds
cast2=f:4
delay2=5000
initial_delay2=5000
key_native_function2=false

and CoF in your CoF autocast by hold as follows

CMT= CMT= Holding “F” makes CoF go off every 8.5 Sec
cast1=f:2
delay1=8500
initial_delay1=200

instead of what you have currently below.
btw YOU HAVE ERROR!!! delay instead of delay1 !!!

CMT= CMT= Holding “F” makes CoF go off every 8.5 Sec
cast1=f:2
delay=8500
initial_delay1=8500

This should be just cast3=w:6 here. It would work the same.

This is bad! You need to use combo_hold :smile:
If it’s not working we need to investigate it. You may be losing attacks this way.
I’ve never had problems with Combo Holds.
Although there might be problems because in Grim Dawn
you cannot really hold two skill button at the same time I think
(they won’t work). Maybe that was the reason.
Anyway, I encourage you to revisit it together and make combo holds work here.

I understand what you’re doing here.
Wendigo Totem is also bound to A.
But imo far more elegant is to to remove initial_delay here
and have all the casts including the initial one done by this cast.

Also since Wendigo Totem is crucial to our survival,
I highly recommend using inner_delay here (I dropped initial_delay):

CMT= Holding “A” makes Wendigo Totem go off every 13 seconds
cast6=a:1,1,1,1
delay6=13000
inner_delay6=200

Now it will press 1 multiple times every 13 seconds.
This is great when first cast of Wendigo Totem doesn’t work, i.e. is interrupted.
It’s does nothing when Wendigo is cast the first time because the skill has cooldown.

I even recommend even more presses, actually as many as possible
but so that NUMBER_OF_PRESSES X INNER_DELAY < WENDIGO_RECHARGE

Maybe it’s your preference to have so many buttons
but wouldn’t you like to incorporate it into your RButton for example
with some initial delay if needed if you don’t like it cast just after starting attacking trash monsters?

May I ask what’s that? I don’t get it :slight_smile:

Since you’re using Blood of Dreeg both manually (reset_key) and automatically
I recommend the delay to hold the following inequality (I hope I didn’t make mistake):

delay1 + blood_of_dreeg_recharge < blood_of_dreeg_duration

or

delay1 < blood_of_dreeg_duration - blood_of_dreeg_recharge

This assures that whenever you manually reset the Blood of Dreeg automatic clock
for example you manually press / reset when it’s still on cooldown
Blood of Dreeg is still guaranteed to be permenantly on

If this inequality is not held, there might be an unforunate moment where you don’t have
Blood of Dreeg on.

Tell me. Do A, S, D, F… are also bound to Skill1, 2, etc
in Grim Dawn keybindings? If that so I think this is a mistake
and it might make i.e. Combo Holds not working.

I think it’s best when A only casts i.e. SKILL1 using script not by the game.
Because then the button is unnecessarily held and it may cause problems
In Grim Dawn when holding 2 buttons bound to two skills in-game it won’t work.
They won’t be both spammed, only one, there’s blocking going one and we never want stuff like that.

I only have 1 - skill1, 2 - skill2 primary keybindings usually.
I don’t use secondary keybindings (sometimes I make an exception).


Not sure about having so many entries about Savagery / Primal Strike
seems unnecessarily complicated but not sure and if it works for you then fine.
But if you describe to me how you’d like it to work then maybe I can simplify it and make it work.

Also one more thing to consider - modding Savagery so that it has cooldown,
so that we can spam it without any issues.


I will increase the number of possible combo / casts (since your config looks legit for the post part)
and maybe log mouse position / screen width to the file so that we know how to correct it?
What do you think?

Just like @GaeanC mentioned. These are not compatible.
This is the author’s of the free camera (Grim Cam) / camera behind back possible fault
because his modification overwrites / deletes the in-game keyboard rotation that I need for automatic rotation. I’d gladly fix it but this is beyond my programming knowledge. I do have source code though.


Important update! Mouse Wheel

  • WheelUp
  • WheelDown
  • WheelLeft
  • WheelRight

was not working correctly in

  • Combos
  • CenterCasts
  • Fixed and Relative Clicks
  • Hacker (Speed / Stats toggles)
  • Hide Items

Basically the combos such as

[combo presses]
combo1=WheelDown:1

triggered only once and after that stopped working altogether.
The reason is Wheel {Up, Down, Left, Right} are not released, don’t send UP signals
which caused spam protection to not be turned off after 1st usage.
blocking every next usage as a consequence.

Also an interesting observation - don’t ever check Wheel state,
i.e. GetKeyState(“WheelUp”, “P”)

tqFan,

Somehow I missed your 2 posts about my scripts, but I found them now. :slight_smile: I’m going to have to take some time to go through them to understand and play with all the stuff you point out (and I’m going to have to play that build more. I set it aside as I wasn’t enjoying it. Perhaps I will like it more after making some of your suggested changes. :slight_smile:

1 Like

Just going to give more info on this one part of your comments, since it seems very important and is easily shown.

Below is a pic of my keybinds. Before I started using GDAutocaster, I only used the letter keys. When I started using it, I added the number key binds because all your examples were based on the number keys and at the start I didn’t fully understand it all. Now, it is like that because I have lots of GDAutocaster scripts and don’t want to have to change them all.

I never directly press the number keys and they are only mapped for use within GDAutocaster. If I were to only bind the number keys, I’d have to use GDAutocaster for every single power I use directly (yes, I do that sometimes. :grinning: ) and most certainly need more than 9 combos, just for a base set of combo presses.

Re: more binds. Oh yeah!

I’d be happy to do some testing with a version that logs screen position and width if it will help get the secondary monitor thing fixed. Switching which is main is rather annoying.

Ok. I’ll repeat again the basic fact about Grim Dawn skill usage you need to understand:

  • if you press and hold 2 buttons with skills bound to them in Grimi Dawn at once
    only one of them will be spammed and other will be blocked

That’s one of the main reason GDAutocaster is so useful, as you can go around this limitation if you instead hold some button that hasn’t got skill bound to it in Grim Dawn Keybinding but only in GDAutocaster (by Combo / AutocastByHold for example where it’s only pressed not spammed). You can have 10 buttons pressed down even and every skill is going to work assuming at most one of them is natively bound in Grim Dawn. But if you’re holding a button with native bound you cannot have ComboHold working at the same time (to another skill) because then you’d have 2 skills pressed down and held at the same - one natively, by autocaster.

You unnecessarily locking everything with the way how you do things.
For example let’s look at this

CMT= Holding “F” makes DS go off every 5 seconds
cast2=f:4
delay2=5000
initial_delay2=5000
key_native_function2=false

Devouring Swarm is bound to both F and 4 in-game.
But why? It makes no sense here, you’re supposed to be casting DS by GDAutocaster here
while you’re holding F not by Grim Dawn

  • see my changed version that doesn’t need F to be bound to DS in-game, only 4

Why this is a problem? Because of what I said - your basically pressing down button with skill bound to in Grim Dawn so theoretically spam it (like you would try if you didn’t use GDAutocaster at all) yet you’re trying to time it and cast with defined interval in GDAutocaster at the same time.

It doesn’t many any sense to combine these two at the same time:
(this is what you’re doing in the fragment of you config above)

  • holding down Devouring Swam button

    • telling Grim Dawn to spam it all the time
      • probably won’t work due to what I mentioned in the beginning
        but that’s an intention you’re sending to the game
  • casting it precisely at given intervals with GDAutocaster

F shouldn’t be bound in key-bindings here (unless its some your other spam attack and you know what you’re doing it for). This way it blocks other skills that you may be hold-spamming (i.e. something on Right Click in-game natively or some Combo Hold with GDAutocaster) are simply blocked by other skills that you hold at the moment.

You use GDAutocaster to precisely cast skills yet you’re holding their real buttons at the same time?

In my option you should delete all you LETTER keybinds.
Then you’ll better understand how you should use GDAutocaster better.

You pressing and holding RMB - some skills, etc 1, 2, 3 are cast in some defined, scripted way

You press and hold F - other skills 4, 5, 6 and maybe 1 again are cast in anther scripted way

You press and hold A - skills 7, 8, 9 are cast in a scripted way by GDAutocaster

ETC

But you shouldn’t have and don’t need to have skills bound to your letters in general

No, YOU WOULDN’T.
Because you’re not supposed to cast every single skill manually, not even close to that.
You’re missing the point of GDAutocaster here - to reduce numbers of buttons needed…

Ok you may have some of your letter bindings if needed

  • but absolutely don’t hold them while you’re casting the same skill by GDAutocaster at the same time

  • or don’t hold them if you’re holding other stuff at the same time

    • whether it’s combo hold or native hold of some other skill (or the same)

but you need to understand what you’re doing incorrectly in your config
(the DS example above) because it will cause problems / doesn’t make sense

No they not. They show initial_delayX and inner_delayX which is only cast specific.
I don’t have section-global versions of these parameters for autocast by hold

I now understand what you are saying about one key hold at a time in GD. That explains a lot of the odd behaviors I’ve experienced!!!

Some key points from how I use GD and GDAutocaster

  • I have many GD characters with different builds.
  • I think every one of them has a script, if only to do stuff like pickup all by holding one key
  • I do cast skills that have no scripting
  • I do not ever press the number keys
  • I do not want to have to remap my keybinds when I switch characters or skills
  • I often want to press and hold multiple keys to have GDAutocaster cast a set of skills over and over.

Since I don’t want to remap the keyboard differently and don’t want to press number keys, I think I either:

  1. only use letter to skill mapping and use “key_native_function=false” on every key I want to hold down, which I believe keeps GD from ever seeing the key being held down

or

  1. only use number to skill mapping and have every skill mapped to a letter key in the script for each character.

Is this correct or am I missing something?

1 Like