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

Wow. I never knew Force Move works like this. Actually I thought it was not working for me because itā€™s working completely differently in i.e. Diablo 3. Now I want to use it with my scripts as well and think how to use it. For example if you want to Forcewave just in between monster and not target lock on any of them. Thanks a lot.

Vireā€™s Might is a movement skill that leaves a trail of fire behind it. The skill can target an enemy or the ground. If your mouse pointer (cursor) is near an enemy, the game treats it as if the cursor was on the enemy. So, if your cursor is just past an enemy, but not a good bit past, the game will treat it as being on the enemy and instead of going past, you will hit the enemy. If you press your Forced Move key, the game doesnā€™t do the bit of treating near as being on the enemy and you will go right to the cursor (or as far as the power can go).

Note that you have to hold the Forced Move key when you press the Vireā€™s Might key.

1 Like

Iā€™m jumping in a little late in the documentation convo but I would mention if it hasnā€™t been already that if you know programming already AHK is really easy overall and the documentation on its website is very good and easy to follow and shouldnā€™t take extensive reading to understand what to do.

1 Like

[Edit] I overdid it. There was more complicated config before with [combo holds].
Simply bind periodic cast to Force Move and wellā€¦ press Force Move :slight_smile:

[periodic casts]
cast1=FM_BUTTON:VM_BUTTON

even initial_delay is not needed

Iā€™m guessing that the colon means to do both at once.

Powbam,

Yes, if you can do programming, you can do AHK. I wasnā€™t asking about AHK documentation, I was asking about documentation of what is in GDAutocasterā€™s .ini files.

GDAutocaster doesnā€™t work like that.
VM_BUTTON is pressed by the script.
FM_BUTTON only works and is pressed by you, not GDAutocaster. Hereā€™s itā€™s just a trigger for VM_BUTTON.
I preferred this behavior while testing and developing the program.

If youā€™d like to have more control over it and FM_BUTTON pressed by the program, you would write it like that (same result):

[combo holds]
combo1=YOUR_BUTTON:FM_BUTTON
delay1=0

[periodic casts]
combo1=YOUR_BUTTON:VM_BUTTON
initial_delay1=50
delay=100

initial_delay1 for FM to be ahead of VM

Oh, right, thatā€™s just normal behavior in the specification of a combo hold/periodic cast. The colon separates the initiating key and the results, so your initial example:

[periodic casts]
cast1=FM_BUTTON:VM_BUTTON

pressing the FM_button will result in the program seeing FM_BUTTON and then GDAutocaster will make the vireā€™s might go off immediately. The problem with that is it make the FM_button always result in a VM, but I want to be able to use the key for other things, so your second example, with both the periodic and hold is much better for my needs.

This is a pretty good example of just how versatile GDAutocaster is. My compliments again.

1 Like

You can also solve this problem in a different way. See the following code.

We use in-game keybinding Force Move for Vireā€™s Might just as in the shorter code before,
but we also create a new button for just Force Move.

Surprisingly the new Force Move doesnā€™t trigger Vireā€™s Might in a chain reaction.

[periodic casts]
cast1=IN_GAME_FM_BUTTON:VM_BUTTON

[combo holds]
combo1=NEW_VIRTUAL_FM_BUTTON:IN_GAME_FM_BUTTON
delay1=0

I added no_dialog command line argument (without ā€œ-ā€)

GDAutocaster.exe no_dialog

https://github.com/kowariantny/GDAutocaster/raw/master/GDAutocaster.exe

About the comments, it looks like IniRead will just store ā€œERRORā€ or what was specified for default if a line isnā€™t in the format [text] or sometext=someothertext, so any line that doesnā€™t start with a ā€œ[ā€ or have an equal sign in it will be ignored by GDAutocaster.

I also think you will probably ignore anything that has a keyword you donā€™t recognize, so a line that starts with something like Comment= will be look valid to IniRead, but will be ignored by you, so a convention of starting lines with something like that would work fine and solve the problem of putting in an equal sign in a comment by mistake and it having unexpected affects.

Hereā€™s my current config with comments.

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

[autocasting]
CMT= ` temporarily stops repeating stuff (holds and toggles)
master_hold=`
master_toggle=`

[camera]
CMT= 60 seems closer to 22.5 degrees for me. Not sure why.
angle=60					
counter_clockwise=Numpad7
clockwise=Numpad9
rotation_key=Mbutton
delay=40

[combo presses]
CMT= pressing h causes all my toggles to go on (or off)
combo1=h:y,0,9,8,7,y		
delay1=650					

CMT= pressing right button makes plague, CoF, pox, and Devouring Swarm go off in that order immediately
combo2=RButton:5,1,7,9		
delay2=100					

CMT= pressing f makes Wendigo Totem go off right away
combo3=f:4					
initial_delay=0


[periodic casts]
CMT= pressing f makes Storm Totem and SoC go off over and over, but after Wendigo Totem
cast1=f:2,3					
delay1=100
initial_delay=100			

CMT= pressing f makes Wendigo Totem go off every 4.5 seconds (the extra 0.5 makes it consistent).
cast2=f:4					
delay=4500					
initial_delay=4500			

CMT= pressing right button makes plague, CoF, pox and DS go off every 1/2 second (if they are ready).
cast3=RButton:5,1,7,9		
delay=500					
Initial_delay=500

[6]
CMT= t toggles Blood of Dreeg going off every 15second
toggle_key=t			
delay=15000	
initial_delay=100

I tested this and it works fine with the comments.

1 Like

You can write ā€œanythingā€ in those comment lines, CMT= is not needed.
It will not make IniRead not read values properly.
(of course it shouldnā€™t start like any of the parameters)

Maybe because I only use IniRead to read single values in the program (not sure)
I donā€™t read whole section although it is possible.

I only use the first one
IniRead, OutputVar, Filename, Section, Key , Default
IniRead, OutputVarSection, Filename, Section
IniRead, OutputVarSectionNames, Filename

So it searches only for keywords= within [section] I guess

I understand completely. I was suggesting the use of the convention and using CMT to make sure that even putting delay=99 in a comment canā€™t have any affect.

1 Like

Ok, sorry, although I thought for a while it might be your convention for clarity.
Btw I added this no_dialog option in case you missed my earlier post because we posted simultaneously so you couldā€™ve missed it.

[edit] maybe instead of no_dialog it would be better if you just specified config file

GDAutocaster.exe config.ini

I like the idea of being able to specify the config file as a command line parameter. How about if nothing is specified, you look for GDAutocaster.ini and if something is specified, you use that as the config file name. If nothing is specified and there is no GDAutocaster.ini, you pop up the input file dialog.

Another related idea, is to add a way to refresh or change the current configuration by right clicking on the GDAutocaster icon in the system tray and selecting some new options(s). That would remove the need to shut down GDAutocaster just to restart it with a new configuration.

  1. If you run the program normally, you get config selection dialog window
  2. If you specify a command line param, it will treat it as config name and try to read it
  3. Thereā€™s Load Config in Tray [displays Config Selection Window]
  4. Thereā€™s Restart in Tray [restarts the program with the current config]

Done. I also implemented what I said ealier because I needed it for Restart in the tray :wink: To pass config_name parameter so that the program knows that it should read the same config instead of displaying config file selection dialog.

@RedPriest You wanted these things
https://github.com/kowariantny/GDAutocaster/raw/master/GDAutocaster.exe

Screenshot%20(220)


1 Like

You should consider making a bunch of your config files available for download as examples for people. :slight_smile: Even better if you comment them, but that would be a bit of work.

Thanks again for being so responsive and willing to consider suggestions.

1 Like

Wendigo Totem casting
Maybe also for Inquisitor Seal

W - Wendigo Totem
X, Y - other stuff

[combo presses]
combo3=RButton:X,Y,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W
delay3=200
stop_on_release3=true

[periodic casts]
cast1=RButton:Some_Spam_Attack

What it does is it:

  • attempts press Wendigo button multiple times to

    • ensure itā€™s cast even if interrupted for some reason

    • even if it was on cooldown at the moment of pressing RButton
      it may be available later

    • the number of Wā€™s x delay is so that itā€™s less than Wendigo Totem cooldown

      • so that itā€™s cast once during every press and hold of RMB
    • stop_on_release - stops the combo when releasing RButton

  • why not spam Wendigo Totem in Periodic Cast all the time

    • itā€™s unnecessary since Wendigo Totem has 15 second duration

    • means more availability when moving between packs

    • you donā€™t lose performance / DPS by casting it multiple times unnecessarily

Ā 

I may play Flames of Ignaffar with Force Move. May be better.

Ā 

Drop item from inventory with one button press

[combo presses]
combo2=NEW_BTN:LButton,DROP_BTN
delay2=0

Ā 

Bugfix in Periodic Casts if having multiple trigger/held keys
If having something like that

[periodic casts]
cast1=Shift,LButton:1

It didnā€™t work if you pressed & hold Shift first and LButton after that (but it would if you did it in reverse).
Now itā€™s fixed and the last XK in X1,X2,ā€¦XK:Y activates the cast and checks if all Xā€™s are held.

Ā 

Update: Display config loaded in tray

Screenshot%20(221)

1 Like

Added an option to block native key function to combo presses.

combo5=CapsLock:m
key_native_function5=false

Normal behaviour of the program is that all native key functions are not blocked. Itā€™s consistent with that you cannot block skills on 0-9, LMB, RMB anyway when you press these buttons (even if you override them in AutoHotkey like this: Rbutton::Something).

In the example above I use it just to have CapsLock diode not light up when I press it to show Map window.

https://github.com/kowariantny/GDAutocaster/raw/master/GDAutocaster.exe

1. New icon


Screenshot%20(223)
(might need to reset icon cache / explorer - I had huge issue of displaying the new icon in my .git folder)

2. Ultimate hotkeys not working at first fix

  • done by silently restarting the program every time 3s after the Gameā€™s Window / Process becomes active

Yes, itā€™s super shitty programming but it gets the job done.

I tested the program in Titan Quest and I needed to add hooks to Suspend & Master Keys for them to work.

After that the hotkeys never worked if you start GDAutocaster and then the game.
(you had to restart the program while the gameā€™s active). Before it was occasional.

Iā€™m hoping for this ultimate fix to prevent this issue completely
(which I tried to solve in a million ways since the beginning versions of the program).

I would be always grateful if you download the latest version after reading such posts.