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

Tired of begging for builds that use few skills?
Didn’t have piano lessons as a child?
Suffering from rheumatism or tendinitis?
Maybe even missing a few fingers?
Don’t worry, we have a solution…

GDAutocaster - have the piano play for you!

Credits to klasperstanze, ncience, Garfunkel, Dlightfull, Danut, Nico_Pootato, GaeanC, tippytam, CaiusMartius, wulunzun, Hagritty, Vlad_Ahmedyanov and others from AHK threads

Write if you

  • need help with specific config (or just describe how you play and I’ll propose a config)
  • would like some additional features
  • something doesn’t work as expected

Main features

  • designed to work with all games
  • making 10 buttons piano builds into 3 buttons builds without using DPS / efficiency
  • autocasting skills like Blood of Dreeg / Pneumatic Burst / Wind Devils
  • combos (press one button for multiple debuffs / casting all pets / permabuffs)
  • spamming multiple cooldown skills while holding one button
  • automatic camera rotation following the character
  • fast manual camera rotation (one button press → i.e. 60 degrees rotation)
  • holding one button to have other buttons held
  • press one button to have button(s) held
  • centered Inquisitor Seal and other skills (also with :video_game: )
  • controls GDHacker that can currently
    • freeze Tributes
    • toggle game speed
    • show DPS / Stats window
  • automatic hiding of items
  • prevent autocasting while you’re holding some button(s)
  • clicking multiple points on the screen by pressing a button
    • you can make 1-button summoning + changing behavior to aggressive combo with this
    • you can generate 20 rings in GDStash with one press of a button
  • binding skill to buttons that are not normally possible
  • skills spam or combos on double LMB press / hold
  • merging all these things together so that i.e. when you press and hold RMB
    • first your 2 debuffs fire
    • than inquisitor seal
    • than spamming of your cooldown skills starts and channeling of continuous skill

Some clever usage samples:

  • using skills actively from the 2nd hotbar
  • ensuring you don’t lose casts because of Grim Dawn skill interruption
    • your skill not registering / buffering while other skills animations are in progress
  • multiple movements skills while holding one button
  • World Map instead of just Local Map with one button press
  • Aether Ray on LMB
  • making a (movement) skill use Force Move automatically so that it doesn’t lock on enemies
  • pick up all items around by holding a button instead of pressing it repeatedly
  • drop item from inventory with one button press (clicking with mouse not needed)

Only Left Mouse Button was used in the video but there’s moving and 5 skills used!


Download GDAutocaster! (652.4 KB)

How to use it

  • launch GDAutocaster.exe

  • load a config file

  • launch / un-minimize Grim Dawn

    • or other game if configured properly
    • the program starts working after ~3 seconds
  • you don’t need to reload the config after you make changes to it

    • the program reloads it automatically

      • because it restarts every time you go back to the game

Command line arguments

The program reads command line / shortcut arguments


GDAutocaster.exe config.ini     (reads config.ini and skips file selection dialog)


GDAutocaster.exe config.ini BIT_MASK

  • reads config.ini

  • skips file selection dialog

  • BIT_MASK

    • first bit is for whether keys are Suspended after you first launch the game

    • if BIT_MASK=

      • 0 it means none of the bits are set
      • 1 it means 1st bit it set
      • 2 it means 2nd bit is set
      • 3 it means both bits are set
        …

How to make the program start automaically with Windows


Documentation - excessive config explained
List of buttons to use in the config / what their names are: Key List

All sections and individual settings in this extensive config are optional.

[general]
comment=//
game_window_id=ahk_exe Grim Dawn.exe
kill_on_exit=false
press_duration=-1
suspend_key=Tab
suspend_stops_autocast=false
title_match_mode=3

[autocast by toggle]
autocast_on_launch=false
delay=1000

cast1=`:2,4,5
delay1=3000

cast2=`:6
not_hold_keys2=LButton,RButton
delay2=500

cast3=`:1
delay3=18000
reset_key3=1

cast4=T:3,4
delay4=2000
alternate4=true

cast5=`:7,7,7,7
inner_delay5=1000

[combo presses]
delay=300
initial_delay=0

combo1=j:7,3,6

combo2=h:t,1,2,t
delay2=200
initial_delay2=200

combo3=Space:1,1,1,1,1
delay3=2000
stop_on_release3=true

combo4=RButton:1,2
delay4=200
double_press4=true
double_press_time_gap4=300

combo5=CapsLock:m
key_native_function5=false

combo6=Tab:+LButton,#^!Z

[autocast by hold]
delay=100
key_native_function=true

cast1=RButton:0,9
delay1=200

cast2=Space:2
initial_delay2=500

cast3=LButton:1
delay3=500
double_press3=true
double_press_time_gap3=300

cast4=Shift,A:1

cast5=CapsLock:5
key_native_function5=false

cast6=RButton:7,7,7,7
delay6=4000
inner_delay6=200

cast7=RButton:1,1,1
delay7=100
time_out7=4000
inner_delay7=100

[combo holds]
initial_delay=0

combo1=LButton:7
initial_delay1=150
double_press1=true
double_press_time_gap1=300

combo2=RButton:6
initial_delay2=0

combo3=CapsLock:m
key_native_function3=false

combo4=Space:3
interrupt_delay4=3000
interrupt_duration4=200

[toggle holds]
initial_delay=0
key_native_function=true

toggle1=Q:1
toggle2=Q:2

toggle3=A:1,2
key_native_function3=false

toggle4=LButton:7
initial_delay4=150
double_press4=true
double_press_time_gap4=300

[center casts]
center=500,500
screen_width=1920
screen_height=1280
off_center=true

cast1=RButton:7,6
initial_delay1=0
delay1=200
delay_after_cursor1=40
off_center1=false

[fixed clicks]
delay=25
initial_delay=0
go_back=true

clicks1=(75,165)(80,90)[234,234]
delay1=25
initial_delay1=0
repeat1=5
translation1=200,200
button1=CapsLock
key_native_function1=false

[relative clicks]
delay=0

button1=1
rows1=2
columns1=10
width1=32
height1=32

button2=2
rows2=2
columns2=5
width2=64
height2=64
is_left2=false

[hold toggles]
hold1=RButton:Space

hold2=RButton,Space,A:RAlt
time_out2=2000

[camera]
angle=60
clockwise=d
counter_clockwise=a
delay=40
drag_delay=0
rotation_key=k

[automatic camera]
delay=200
ignore_area_shape=circle
ignore_area_size=30
ignore_segment_angle=20
initial_delay=200
rotate_key=LButton
rotate_left=b
rotate_right=n

[hacker]
faster_camera=4
freeze_tributes=true
speed_initial=1.5
speed_initial_delay=30000
speed_toggle=Q
speeds=2,1
stats_toggle=Tab

[gamepad]
button_nr=6
delay=40
key=RButton
vertical_shift=-20

Click sections below to show specific documentations for them

general settings

[general]
comment=//
game_window_id=ahk_exe Grim Dawn.exe
kill_on_exit=false
press_duration=-1
suspend_key=Tab
suspend_stops_autocast=false
title_match_mode=3
  • comment [optional]

    • indicates a comment after a config entry, i.e. in suspend_key=Tab//tralala
    • in lines without config entries you can still comment however you want
    • don’t comment in this particular line though
  • game_window_id [optional] {ahk_exe Grim Dawn.exe by default}

    • the default value is ahk_exe Grim Dawn.exe

      • this identifies the window by process that’s attached to it
    • you need to change it if you’d like to use the program in other games

    • can also identify by just window’s name: game_window_id=Grim Dawn

    • multiple identifiers / games are supported with the use of comma:

      • game_window_id=Grim Dawn,Diablo 3
  • kill_on_exit [optional]

    • kills the program after you exit the game

    • false by default

  • press_duration [optional]

    • “Certain games and other specialized applications may require a delay inside each keystroke; that is, after the press of the key but before its release.” For example Slormancer that I played. SetKeyDelay - Syntax & Usage | AutoHotkey v1

    • I added PRESS_DURATION config entry in [general] for that (-1 by default). I set it to 50 for Slormancer.

  • suspend_key [optional]

    • turns off/on all the hotkeys except itself

    • doesn’t turn off/on Autocast by toggle feature just hotkeys that do it

    • you can also have multiple Suspend keys if you write

      • suspend_key=Tab,Enter
        or
        suspend_keys=Tab,Enter
  • suspend_stops_autocast [optional]

    • if you set it to true
      • autocasts on toggle (i.e. Blood of Dreeg) will stop when you suspend
        Hotkeys / Features / Combos with Suspend Key (i.e. Tab)

      • it will resume it you press it again

  • title_match_mode [optional]

    • see SetTitleMatchMode - Syntax & Usage | AutoHotkey v1

      1 : A window’s title must start with the specified WinTitle to be a match.
      2 : A window’s title can contain WinTitle anywhere inside it to be a match.
      3 : A window’s title must exactly match WinTitle to be a match.

autocast by toggle (buttons pressed periodically w/o user’s interaction on toggle)

  • only option for autocasting without touching the keyboard/mouse for skills like Blood of Dreeg all the time or for skills like Storm Totem when you don’t hold any buttons

    • for fighting when I hold RMB I usually disable it with not_hold_keys and spam it with Autocast by Hold instead because it has more options like initial_delay

      • which allows you to squeeze in some debuffs with a certainty that they are not interrupted by your autocasts
  • Warning! Autocasting on toggle interrupts cinematics.


[autocast by toggle]
autocast_on_launch=false
delay=1000
  • delay [optional]

    • global delay in-between button presses for all the buttons/autocasts unless overridden by delayX for a specific button what I usually do

    • 100 ms is the default if you don’t specify it IIRC

      • it may be an overkill over spamming skills, maybe 200 ms is better
      • for skills like Blood of Dreeg asap cast maybe use 1s
  • autocast_on_launch [optional]

    • starts autocasting right away
    • done once by game launch, after that it’s in state you leave it in

cast1=`:2,4,5
delay1=3000
  • skills bound to 2, 4, 5 in-game (i.e. Wind Devil on 2 on hotbar) cast every 3000 ms by themselves

  • turned on/off by ` (button over Tab)

    • ` toggle button is a hotkey and thus it can be turned off/on by suspend_key

cast2=`:6
not_hold_keys2=LButton,RButton
delay2=500
  • skill bound to 6 in-game i.e. Ring of Steel cast automatically by itself every 0.5s if you pressed `

  • press it again to stop autocasting

  • not_hold_keys - this autocast is disabled if you’re holding LButton or RButton

    • I used it often to disable autocasting while I hold for example RMB and enable it then with different feature Autocast by Hold which has more options like initial_delay (time gap) to not interrupt other spells I’d like to cast just after pressing down RMB

cast3=`:1
delay3=18000
reset_key3=1

cast4=T:3,4
delay4=2000
alternate4=true
  • presses 3
  • after 2 seconds it presses 4
  • after 2 seconds it presses 3
  • etc.

cast5=`:7,7,7,7
inner_delay5=1000
  • presses 7 four times every delay but with inner_delay time gaps between the presses

combo presses (one-time sequences of button presses)

  • sequences of button presses / clicks, rebinding the key

  • I combine it with [autocast by hold], [combo holds] and [center casts] in the same button using initial_delay, usually 200 ms per button press

[combo presses]
delay=300
initial_delay=0

combo1=j:7,3,6

combo2=h:t,1,2,t
delay2=200
initial_delay2=200

combo3=Space:1,1,1,1,1
delay3=2000
stop_on_release3=true

combo4=RButton:1,2
delay4=200
double_press4=true
double_press_time_gap4=300

combo5=CapsLock:m
key_native_function5=false

combo6=Tab:+LButton,#^!Z
  • string of buttons presses activated by a button pressed

  • sample usages

    • casting all your permabuffs & pets with 1 button press, even if some of them are on the 2nd hotbar

    • casting multiple debuffs with i.e RMB before your other RMB (possibly) delayed spamming starts

    • actively casting a skill from the second hotbar (by swap, button, swap combo)

    • making a drop item button that doesn’t require you to pick an item before hands

  • delay [optional]

    • global delay in-between button presses for all the comboX unless overridden by delayX for a specific combo
  • initial_delay [optional]

    • global initial_delay before the combo starts for all the comboX unless overridden by initial_delayX for a specific combo
  • combo1=j:7,3,6

    • after pressing J, buttons 7, 3, 6 are pressed

      • 7 intstantly
      • 3 after 300 ms
      • 7 after another 300 ms (600ms in total from the start)
  • stop_on_release3=true [optional]

    • makes the 3rd combo stop if you release the button
    • you just make a short press, probably only the 1st press from the combo will be made
  • double_press4=true [optional]

    • activates the combo on a double press, useful for i.e. Pet Attack, Movement skills
  • double_press_time_gap4=300 [optional]

    • the time window you give yourself for the 2nd click/press after the 1st one to activate the combo
  • key_native_function5=false [optional]

    • blocks the key native function

    • I advise not to use it in general because you won’t block skills from Hotbars / in-game mouse action anyway I think

    • I used it here for Capslock to not light up when I use it for showing/hiding the map

  • combo6=Tab:+LButton,#^!Z

    • presses Shift + LMB and after that Windows Key + Ctrl + Alt + Z

autocast by hold (buttons pressed periodically while the user is holding some button(s))

  • your default spamming / autocasting while holding some button(s)

  • combine it with [combo presses], [combo holds] and [center casts] in the same button using initial_delay, usually 200 ms per button press

[autocast by hold]
delay=100
key_native_function=true

cast1=RButton:0,9
delay1=200

cast2=Space:2
initial_delay2=500

cast3=LButton:1
delay3=500
double_press3=true
double_press_time_gap3=300

cast4=Shift,A:1

cast5=CapsLock:5
key_native_function5=false

cast6=RButton:7,7,7,7
delay6=4000
inner_delay6=200

cast7=RButton:1,1,1
delay7=100
time_out7=4000
inner_delay7=100
  • your default autocasting while holding some buttons

  • first press is instant which might not be the case for [X] autocasting holding version

  • here the delay is not in between separate buttons but in-between full spams of multiple butons (will be explained below)

  • delay=100 [optional

    • the default delay 100 for spamming ASAP if I remember correctly
    • is overridden by delayK for specific castK
  • key_native_function=true [optional]

    • turn it off if for example you have Skill 1 bound to A in Grim Dawn
      and you want some autocast by hold bound to it in GDAutocaster
      yet you don’t want Skill 1 to activate

    • I don’t think you can turn if off for LMB / RMB in Grim Dawn

    • this is global option for the whole section,
      you can override it for specific casts, see below

  • cast1=RButton:0,9

    • when you press RMB, the buttons 0, 9 are instantly pressed

      • but in that order, so if for example they are movement skills, 0 will have higher priority
    • if you continue to hold RMB

  • initial_delay2=500

    • spamming starts with 500 ms delay with a default frequency of 100 ms
  • double_press3=true [optional]

    • activates the spam cast after a double press + holds
  • double_press_time_gap3=300 [optional]

    • the time window you give yourself for the 2nd click/press after the 1st one to activate the cast
  • cast4=Shift,A:1

    • you can also demand holding multiple buttons but I personally never use it
  • key_native_function5=false [optional]

    • blocks the key native function

    • I used it here for Capslock to not light up when I use it for showing/hiding the map

cast6=RButton:7,7,7,7
delay6=4000
inner_delay6=200
  • the new inner_delay option allows you to insert time delays between button sets of button presses

  • I use it i.e. to cast Amarasta only once per 4 seconds (not more often) but make multiple timed presses instead of one for the duration of 1 second for example to ensure it’s never interrupted by another skill animation (such interruption may or may not be possible depending on your config)

  • time_out7 is used for perfect ABB-Lethal Assault / Bone Harvest-Soul Harvest casts
    it’s described in the following post

combo holds (buttons held / pressed down while the user is holding / pressing down button(s))

  • holds down a button to have another button(s) held

  • combine it with [combo presses], [autocast by hold] and [center casts] in the same button using initial_delay, usually 200 ms per button press

[combo holds]
initial_delay=0

combo1=LButton:7
initial_delay1=150
double_press1=true
double_press_time_gap1=300

combo2=RButton:6
initial_delay2=0

combo3=CapsLock:m
key_native_function3=false

combo4=Space:3
interrupt_delay4=3000
interrupt_duration4=200
  • literally holds the button down

  • in the first combo

    • 7 is held if you hold LMB

    • some delay for pressing and holding 7 down is sometimes needed for it to work

      • for example for Aether Ray on LMB
  • but sometimes not, especially if you want non-skills to be held, i.e. Force Move, Stationary Attack

  • also the 1st combo was made to start working on the 2nd click + hold which has to be no more than 300 ms after the 1 click

  • hold after single button press is the default option

  • multiple buttons can be held IIRC

  • initial_delay=0 [optional]

    • is global for all the cast unless overridden by i.e. initial_delay1=300
  • key_native_function3=false [optional]

    • blocks the key native function

    • I advise not to use it in general because you won’t block skills from Hotbars / in-game mouse action anyway I think

    • I used it here for Capslock to not light up when I use it for showing/hiding the map

  • interrupt_delay4=3000, interrupt_duration4=200

    • pressed buttons are released for 200ms every 3s

toggle holds (buttons held / pressed down on toggle)

  • press a button once to have some button(s) held
  • press it again to release
[toggle holds]
key_native_function=true
initial_delay=0

toggle1=Q:1
toggle2=Q:2

toggle3=A:1,2
key_native_function3=false

toggle4=LButton:7
initial_delay4=150
double_press4=true
double_press_time_gap4=300

It works similarly to other features. Please check them for details.

center casts (button presses combined with moving cursor to the center of the screen)

  • like Combo Press but also moves your cursor under your character’s feet for i.e. Inquisitor Seal

  • combine it with [combo presses], [autocast by hold] and [combo holds] in the same button using initial_delay, usually 200 ms per button press

[center casts]
center=500,500
screen_width=1920
screen_height=1280
off_center=true

cast1=RButton:7,6
initial_delay1=0
delay1=200
delay_after_cursor1=40
off_center1=false
  • center [optional] - only use if needed, normally center of the screen should be calculated automatically

  • screen_width, screen_height [optional]

    • not needed because dimensions should be read correctly dynamically
      but some users has issues with it and it’s a potential fix
  • off_center=true [optional]

    • similar to the option off_center1 explain below but it’s global for a section and overwritten by off_center1

    CAMERA%20CODE

  • cast1=RButton:7,6

    • user’s mouse movement is blocked

    • cursor moves to the center of the screen

    • 7 and 6 are pressed with 200 ms delay in-between them

    • cursor goes back after that

    • user’s mouse movement is unlocked

  • delay_after_cursor1=40

    • should be as low as possible
  • off_center1=false

    • I normally use it with true

      • which makes cursor not go to the center but slightly further from it so that the character’s rotation is not changing randomly which can sometimes happen with false

camera (quick keyboard / wheel camera rotation)

[camera]
angle=60
counter_clockwise=a
clockwise=d
rotation_key=k
delay=40
drag_delay=0

fixed clicks (combination of clicks at defined pixels on the screen)

delay=25
initial_delay=0
go_back=true

clicks1=(75,165)(80,90)[234,234]
delay1=25
initial_delay1=0
repeat1=5
translation1=200,200
button1=CapsLock
key_native_function1=false
  • multiple clicks combos for changing pets to aggressive for example; can be combined with summoning them in 1 button

  • () means LMB click

  • [] means RMB click

  • go_back - moves cursor to initial position after the combo is finished

  • repeat - repeat the clicks from clicks that many times with optional translation

  • delay - time gap between clicks

    • increasing it might be needed if it doesn’t work properly
  • initial_delay - time gap before the whole combo starts

    • two combine it with summoning in 1 button
  • translation - next set of clicks (see repeat) is translated by this vector

    • this accumulates with multiple repeatings
  • button - press this to activate the combo

  • key_native_function3=false [optional]

    • blocks the key native function

    • I advise not to use it in general because you won’t block skills from Hotbars / in-game mouse action anyway I think

    • I used it here for Capslock to not light up when I use it for showing/hiding the map

hold toggles (press some button to have another one pressed and pressed again on release of the first one / timeout and multiple button option to delay button release)

[hold toggles]
hold1=RButton:Space

hold2=RButton,Space,A:RAlt
time_out2=2000
  • hold1: Space is pressed on RMB press and again on its Release

  • hold2:

    • RAlt is pressed on when you press RMB, Space or A
    • RAlt is pressed again after you stop pressing or holding each of these buttons for 2 seconds
  • Example 1 - after you hold CHOSEN_BTN

    • your Weapons are Swapped
    • 100 ms later Shadow Strike and another Movement skill are spammed
    • after that on CHOSEN_BTN release Weapons are Swapped again
      [hold toggles]
      hold1=CHOSEN_BTN:WEAPON_SWAP_BTN
      
      [autocast by hold]
      cast1=CHOSEN_BTN:SS_BTN,OTHER_MV
      initial_delay1=100 
      
  • Example 2 - if in Hold2 the RALt button hides items on the ground
    and you keep pressing or holding your attack buttons RMB, Space and A in every 2s internal
    items on the ground will be hidden during this “fight”

automatic camera (keeping the camera behind your back automatically)

[automatic camera]
rotate_left=b
rotate_right=n
initial_delay=200
rotate_key=LButton
delay=200
ignore_area_shape=circle
ignore_area_size=30
ignore_segment_angle=20
  • rotate_left [mandatory]

    • in-game button resposible for left camera rotation
  • rotate_right [mandatory]

    • in-game button reponsible for right camera rotation
  • initial_delay [optional] {200 by default}

    • rotation starts this many milliseconds after you hold the rotate_key
  • rotate_key [mandatory]

    • rotation activates when you hold this button
  • delay [optional] {100 by default}

    • cursor position is checked every this many milliseconds
  • ignore_area_shape [optional]

    • circle [default] or rectangle
    • shape of area centered at the middle of the screen where rotation doesn’t take place
  • ignore_area_size [optional] {50 by default}

    • this percentage of maximum area
      • which is either the whole screen

        • in case of rectangle
      • or the biggest circle than can be fit on the screen

        • in case of circle
  • ignore_segment_angle [optional] {20 by default}

    • half of the radius of a circular segment around 12 o’clock where rotations doesn’t take place

relative clicks (combination of clicks relative to current cursor position

[relative clicks]
delay=0

button1=1
rows1=2
columns1=10
width1=32
height1=32

button2=2
rows2=2
columns2=5
width2=64
height2=64

button3=3
rows3=2
columns3=5
width3=64
height3=96
  • for generating items in GDStash
  • better explained here

hacker (support for GDHacker)

[hacker]
speeds=2,1
speed_toggle=Q
speed_initial=1.5
speed_initial_delay=30000
freeze_tributes=true
stats_toggle=Tab
faster_camera=true
  • speed_initial [optional]
    • sets game’s speed to a given value once (on game’s launch)
  • speed_initial_delay [optional]
    • delay to the above

gamepad (center casts for gamepads)

Achieved by moving the cursor slightly which switches the game to :computer_mouse: & :keyboard: mode and then pressing :computer_mouse: or :keyboard: button with a skill. After that the user has to move the analog stick to go back to :video_game: mode. Works best if you put the skill on RMB.

[gamepad]
delay=40
vertical_shift=-20
key=RButton
button_nr=6
  • delay [mandatory]

    • delay in ms between :video_game: button press and :computer_mouse: or :keyboard: press
  • vertical_shift [mandatory]

    • correction of the y coordinate of the center center cast
  • key [mandatory]

    • :computer_mouse: or :keyboard: button which you bind your skill to in-game
  • button_nr [mandatory]

    • JoyDetect.zip (638.3 KB) (it’s from AutoHotkey official site to see which number X corresponds to your :video_game: button)
      image
      (the program displays this window near your cursor)
37 Likes

maybe make revere_hold non boolean and instead assign a key to it?

Dunno if it’s possible, but it would make the skill not be cast only when a particular key or mouse button is pressed. For example i have LButton assigned to moving and i make reverse_hold=LButton, so while i am moving, that skill is not cast, but it is cast when i hold other keys, if not holding LButton.

Off course more than one key should be assignable to reverse_hold, as with regular hold.

1 Like

looks wonderful, can’t wait to try this!

1 Like
  1. Is there a way to tell in which order the script will execute if i have a few buttons bound to RButton?
    For example i have both Shadow Strike and Ring of Steel bound to hold RButton. I would like the script to execute the Shadow Strike first and then the Ring of Steel.
    As it is right now it appears to do it in no particular order, sometimes casting SS and the RoS and other times RoS before SS, wasting the ROS basically. I might be wrong in my observations though, perhaps RoS always goes off before SS, but i don’t see it because there are mobs nearby?

  2. SS is casting when i hold RButton for a pretty long time, not instantly, is it because of my slow computer, or is there something that can be done to accelerate it?

  3. i run this script:

    [4]
    skill=Pneumatic Burst
    toggle_key=d
    hold_keys=RButton
    delay=23000

My intention is to cast Pneumatic Burst every 23 seconds while out of combat, and as often as possible during combat. But apparently, it only works as a toggle skill, not casting it while i hold RButton. And the toggle also doesn’t work permanently, something happens and it casts in a seemingly chaotic manner, or stops casting at all.

1 Like

I’ll try to investigate the issues one by one. Please answer in separate posts.

  1. I’ve tested it and everything’s fine. Are you sure you have the latest version of the program (I mean Update 2) because before there was a possibility of the skill casting chaotically (there were two timers) now there’s not because it’s basically one timer running constantly and checking evere Delay milliseconds whether the toggle is on or you hold buttons (you cannot stop the timer or do anything with it). Maybe it’s stopping because you click Alt + Tab to minimize and MasterHold or Toggle are set to Tab (don’t how if it’s toggled then btw)

The delay is both for hold_keys and toggle. Why do you want to have it 23 seconds out of combat?

Just set the delay to 100 (which is 100 ms). I also recommend the button you move your character with (left click?) without toggle key. Would this be ok for you? (or Right Click if you move with Right Click)

[4]
skill=Pneumatic Burst
hold_keys=LButton
delay=100
1 Like

I have 2-3 possible solutions for this, let’s try with the simplest and the following configuration.

[general]
game=Grim Dawn
master_toggle=`
master_hold=`

[1]
hold_keys=RButton
delay=100

[2]
hold_keys=RButton
delay=100

It’s probably due to the way I coded it but when Shadow Strike is bound to 1 and Ring of Steel to 2, Shadow Strike always goes first! And vice versa, when Ring of Steel is bound to 1 and Shadow Strike to 2, Ring of Steel always goes first! Please try this solution.

Do you move with Right Click because it’s kinda changes things. And just to be clear, you understand that when you holding Right Click on the ground

  1. Shadow Strike cannot be cast because nothing is targetted
  2. .Ring of Steel can be cast always
    so in that case (if you’re holding Right Click on the ground) Ring of Steel naturally fires earlier and no AHK program can prevent it because it cannot detect whether or not you’re targetting monster or ground?
1 Like

It costs more mana this way. When i spam it as soon as it gets off cooldown, my build is not mana-sustainable, while if i only cast it before the run out out of combat, it’s sustainable.

What’s your Delay for it?

1 Like

I move with LButton and attack with RButton.

I know that SS needs a target, so i only hold RButton when i have one. I could circumvent it by just casting SS manually, but i wanted the ultimate lazy playstyle :smiley:

What matters here, the number, or the order in which the skills are written in the .ini file?

i don’t have a delay in the script

i changed it to another button, because it messed up with my map (i have it on tab for easier reference)

Set the delay to 100 ms for Shadow Strike because the default is 1000 ms

` is good instead of Tab

Btw don’t you want Shadow Strike on Left Click? It works pretty well with moving.

Also I recommend you can do something like this

  • Shadow Strike on Right Click as it is now)
  • Ring of Steel when you hold Right Click + Shift (or maybe space) [you hold shift when near monster]

Or even

  • Shadow Strike + Movement on Left Click
  • Right of Steel on Right Click or something like that [you hold it when near monsters]
1 Like

No wait, again on the order of Shadow Strike and Ring of Steel
To be precise I guess it’s like that

  1. Shadow Strike needs to be bound to lower number than Ring of Steel
  2. Config position of these numbers shouldn’t matter but I’m not 100% sure of that (haven’t tested)
  3. They should have the same delay set I think (I recommend 100ms)

Literally on my computer 100% of the times SS goes first (if it’s not on cool-down of course)
During a fight there might be a situation where SS is on cool-down and RoS not and then of course RoS will fire first.

Just do something like that

[6]
skill=Shadow Strike
hold_keys=RButton
delay=100

[7]
skill=Ring of Steel
hold_keys=RButton
delay=100

and in-game SS bound to 6 and RoS bound to 7.

But this is honestly a happy coincidence because I haven’t expected or assumed any order.
I again recommend moving with SS on Left Click… If you want to reach ultimate laziness.

Btw if you have slow computer low FPS I recommend lowering res.
I play on Laptop Full HD but in Grim Dawn I have 1280 x 720 :slight_smile:

1 Like

So, i made the delay on SS lower than on other skills and it works just fine now. I don’t want SS on movement, because i want to choose the monster that i hit with SS (usually in the middle of a crowd) while having it on movement, it will go off with much less control.

I think i figured the problem with Pneumatic Burst. The hold key has the same delay as the toggle key. I tried to make two separate entries for that same skill, one for hold RButton without delay and another to toggle with d button with 23000 delay. Now it only casts on holding RButton, no reaction at all on the delay button.
What i did is to have the skill on toolbar on two different buttons, then i made one button in the script for hold RButton and another one for toggle. It didn’t want to work when i had the name of the skill written under the number, but then i deleted it and it works as i want it now.

1 Like

No no no the name of the skill does literally nothing.
Here’s a clean way how to configure Pneumatic Burst with different times during fighting and outside fights.

[1]
skill=Pneumatic Burst
toggle=d
delay=20000
not_hold_keys=RButton

[2]
skill=Pneumatic Burst
delay=100
hold_keys=RButton

un_hold_keys=RButton is not really needed but it’s recommended anyway
lines with skill are totally optional, program doesn’t read them
in Grim Dawn 1 and 2 should be occupied by Pneumatic Burst

2 Likes


Update 3

  • [camera] [Tool] Faster camera rotation using keyboard or scroll wheel merged into the program

  • [hiding items] on the ground while you’re holding some button

    • gd_toggle_hide_key is the key from GD Keybinding called Toggle Hide All Items
    • hold_to_hide_key is the key you need to hold
  • new suspend_hotkeys key

    • turns on/off all the hotkeys except itself, in current version these are (all [optional])
      • master_toggle
      • master_hold
      • all toggle_key keys
      • counter_clockwise
      • clockwise
      • hold_to_hide_key
      • capslock_remap
  • tray icon now always presents Wind Devil just like the .exe not the standard, ugly AHK icon

  • capslock_remap

    • changes capslock to some other key and keeps the light off
  • you can rename the .exe however you like, then config .ini has to be renamed in the same way

  • suspend_hotkeys, master_toggle and master_hold shouldn’t trigger if set to Tab and you press Alt + Tab

  • default delay changed from 1000 to 100 ms

  • game parameter is now [optional]

  • master_hold and master_toggle moved to new section [autocasting]

  • more extensive and readable config explanation

4 Likes

Is it possible to incorporate the camera following your char into this program as well? Or is there some separate mod that does that? Don’t want to install autohotkey just for that

1 Like

Sure, I could do that in Update 4 (I also need to make master_toggle, master_hold and suspend_hotkeys be able to be the same button because I just needed it today when I was shopping)

I’ve incorporated manual camera rotation because I’m using it myself but I was thinking about automatic as well because, although not as optimal as manual camera rotation for crucible for example, it’s very fun to play with and pleasant to look at everything slowly rotating according to where you’re going. It’s super chilling.

I need to rewrite it though from the ground up to use Timers (because now it works when you’re holding Left Click in a While Loop and I don’t write like that anymore) and think how to incorporate it nicely into the program. Also it’s needs to have a lot of configuration options like

  • the angle of the segment around 12 o’clock where there’s no camera rotation
  • inner region size where there’s no rotation
  • the shape of the inner region (circular, rectangle, maybe even eliptic)
  • also I need to implement reading the user’s resolution and expressing all those sizes in % instead of pixel so that it’s invariant to changing the resolution

@klasperstanze for example likes only to have automatic rotation at the edges of the screen, I prefer it more aggressive, present almost everywhere except small inner circle around the character and small segment near 12 o’clock

Also before all this I think I need to figure out and implement a scalable mechanism that would enable all hotkeys be the same key because I think it’s limiting me a bit right now.

For example something like hotkeys having a list of functions that they trigger instead of being bound to one function. I’ve already got anxiety thinking of all this :wink:

2 Likes

mate, thank you very much for putting so much time and effort into this!

I like it very much. I can play my build a lot easier thanks to your program!

The camera thing annoys me very much in this game. I hate using the scroll button and using any keys for that is also very annoying. It would be really neat if you’d manage to do it! If it’s not very difficult, having the camera point not exactly the way your character is looking, but at an angle would be really useful, to be able to set the best snipe angle :slight_smile:.

As far as automatic camera is concerned, I can only do it like this


(at this exact speed, changing it is impossible, rotation based on where you’re cursor is at)

And here’s super fast manual camera rotation I use


Check out how I’m snipping those mobs

I cannot really know where’s your character’s is looking, I only detect the cursor position
(when you’re holding Left Click in the base version but that’ll be configurable)

3 Likes