Skip to content

Instantly share code, notes, and snippets.

@trienow
Created April 8, 2023 13:46
Show Gist options
  • Select an option

  • Save trienow/bf3a448f29fa9df71dba1b9d6cb1f3a9 to your computer and use it in GitHub Desktop.

Select an option

Save trienow/bf3a448f29fa9df71dba1b9d6cb1f3a9 to your computer and use it in GitHub Desktop.
AutoHotkey Scripts to solve painfully annoying puzzles in the Game DARQ - Might be useful for speedrunning too.
#Requires AutoHotkey v2.0
#Warn All ;Enable warnings to assist with detecting common errors.
SendMode "Input" ;Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir A_ScriptDir ;Ensures a consistent starting directory.
#SingleInstance force
#HotIf WinActive("ahk_exe DARQ.exe")
^1::
{
;Chapter 5 - Spinning Labyrith puzzle
sleepyTime := 250
SendWithDelay("D", sleepyTime)
SendWithDelay("RRRD", sleepyTime)
SendWithDelay("RRRRRRRD", sleepyTime)
SendWithDelay("RRRU", sleepyTime)
SendWithDelay("RRRD", sleepyTime)
SendWithDelay("RRD", sleepyTime)
SendWithDelay("LLLLLLLD", sleepyTime)
SendWithDelay("RRRRD", sleepyTime)
}
SendWithDelay(strokes, sleepyTime)
{
releaseSpace := False
Loop StrLen(strokes)
{
instruction := SubStr(strokes, A_Index, 1)
switch instruction
{
case "U": Send "{Up}"
case "L": Send "{Left}"
case "D": Send "{Down}"
case "R": Send "{Right}"
case "_":
Send "{Space down}"
releaseSpace := True
case "F": Send "F"
}
Sleep sleepyTime
}
if (releaseSpace)
{
Send "{Space up}"
Sleep sleepyTime
}
}
#Requires AutoHotkey v2.0
#Warn All ;Enable warnings to assist with detecting common errors.
SendMode "Input" ;Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir A_ScriptDir ;Ensures a consistent starting directory.
#SingleInstance force
Sd := "{LShift down}"
Su := "{LShift up}"
F := "F"
L := "L"
R := "R"
#HotIf WinActive("ahk_exe DARQ.exe")
^1::
{
SendWithDelay("LDDRRDDLULD", 250)
SendWithDelay("URDRUURRDRRRDRRURD", 250)
SendWithDelay("ULDLLULURURRUUR", 250)
}
return
^2::
{
sleepyTime := 300
SendWithDelay("_UL", sleepyTime)
SendWithDelay("R", sleepyTime)
SendWithDelay("_URRRR", sleepyTime)
SendWithDelay("LLLL", sleepyTime)
SendWithDelay("_URRR", sleepyTime)
SendWithDelay("L", sleepyTime)
SendWithDelay("_ULLD", sleepyTime)
SendWithDelay("RUU", sleepyTime)
SendWithDelay("_URD", sleepyTime)
SendWithDelay("L", sleepyTime)
SendWithDelay("_UR", sleepyTime)
SendWithDelay("DDDL", sleepyTime)
SendWithDelay("_ULD", sleepyTime)
SendWithDelay("RUU", sleepyTime)
SendWithDelay("_LD", sleepyTime)
SendWithDelay("RUU", sleepyTime)
SendWithDelay("_ULD", sleepyTime)
SendWithDelay("R", sleepyTime)
SendWithDelay("_ULD", sleepyTime)
SendWithDelay("DDR", sleepyTime)
SendWithDelay("_ULLD", sleepyTime) ;Ankhs are done
SendWithDelay("RRU", sleepyTime)
SendWithDelay("_LLL", sleepyTime)
SendWithDelay("RR", sleepyTime)
SendWithDelay("_ULD", sleepyTime)
SendWithDelay("RR", sleepyTime)
SendWithDelay("_LLD", sleepyTime)
SendWithDelay("R", sleepyTime)
SendWithDelay("_UR", sleepyTime)
SendWithDelay("L", sleepyTime)
SendWithDelay("_ULD", sleepyTime)
SendWithDelay("R", sleepyTime) ;Eyes are done
SendWithDelay("_LD", sleepyTime)
SendWithDelay("LLL", sleepyTime)
SendWithDelay("UUU", sleepyTime)
SendWithDelay("_RRRR", sleepyTime)
SendWithDelay("DL", sleepyTime)
SendWithDelay("_URRD", sleepyTime)
SendWithDelay("LL", sleepyTime)
SendWithDelay("_UL", sleepyTime)
SendWithDelay("DDDR", sleepyTime)
SendWithDelay("_URRD", sleepyTime)
SendWithDelay("R", sleepyTime)
SendWithDelay("_LLLD", sleepyTime) ;789
SendWithDelay("RRUU", sleepyTime)
SendWithDelay("_UR", sleepyTime)
SendWithDelay("L", sleepyTime)
SendWithDelay("_ULLD", sleepyTime)
SendWithDelay("RR", sleepyTime)
SendWithDelay("_ULLD", sleepyTime)
SendWithDelay("L", sleepyTime)
SendWithDelay("_RRRD", sleepyTime)
SendWithDelay("LLLUUU", sleepyTime)
SendWithDelay("_RRRRD", sleepyTime)
SendWithDelay("R", sleepyTime)
SendWithDelay("_LD", sleepyTime)
}
^3::
{
;Coffin up-down thing
sleepyTime := 550
SendWithDelay("RD", sleepyTime)
SendWithDelay("RU", sleepyTime)
SendWithDelay("LD", sleepyTime)
SendWithDelay("RU", sleepyTime)
SendWithDelay("RRD", sleepyTime)
SendWithDelay("LLU", sleepyTime)
SendWithDelay("RRD", sleepyTime)
SendWithDelay("LLU", sleepyTime) ;coffin opens
Sleep 3000
SendWithDelay("RD", sleepyTime)
SendWithDelay("LLLU", sleepyTime)
SendWithDelay("RRRRD", sleepyTime)
SendWithDelay("RRU", sleepyTime)
SendWithDelay("LD", sleepyTime)
SendWithDelay("RU", sleepyTime)
SendWithDelay("LD", sleepyTime)
SendWithDelay("LLLLU", sleepyTime)
SendWithDelay("F", sleepyTime)
}
^4::
{
;Bells - Stand far left
;|=========---|
;|--=========-|
;|---=========|
Send Sd
Movement(R, 900)
Send Su
SendWithDelay(F, 1200)
Send Sd
Movement(L, 1200)
Send Su
SendWithDelay(F, 200)
;Now Music
Sleep 1000
SendWithDelay("UUR", 200)
Sleep 1700
SendWithDelay("LDDL", 200)
Sleep 3000
SendWithDelay("RF", 200)
}
;Push thing puzzle
;Start UP
; 01 R
; 02 R
; 03 L
; 04 R
; 05 L
; 06 L
; 07 R (Left Wall)
; 08 R
; 09 L
; 10 L
; 11 L
; 12 L
; 13 R (Eye)
; 14 R (Key)
^5::
{
;Coin Game
;Start on the far right
;Head on the right above the player right next to the first button
;The head's shadow should be just slightly on the rim
SendWithDelay(F, 1200)
Send Sd
Movement(L, 1750)
Send Su
SendWithDelay(F, 300)
Sleep 2000 ;Transition time
Send Sd
Movement(R, 800) ;1 2,1
Movement(L, 300)
Movement(R, 300) ;2,2
Movement(L, 300)
Movement(R, 400) ;2,3
Movement(R, 1500) ;3,1 4,1
Movement(L, 300)
Movement(R, 300) ;4,2
Sleep 12000
;Now let's make our way back.
Movement(L, 300) ;4,1
Movement(R, 300)
Movement(L, 1000) ;4,3 3,1
Movement(R, 300)
Movement(L, 300) ;3,2
Movement(R, 300)
Movement(L, 1500) ;3,3 2,1 1,1
Movement(R, 300)
Movement(L, 300) ;1,2
Movement(R, 300)
Movement(L, 300) ;1,3
Send Su
Send F
}
^ESC::
{
Reload
}
Movement(stroke, pressTime)
{
switch stroke
{
case "U": key := "Up"
case "L": key := "Left"
case "D": key := "Down"
case "R": key := "Right"
}
Send("{" key " down}")
if (pressTime >= 0)
{
Sleep pressTime
}
Send("{" key " up}")
if (pressTime < 0)
{
pressTime *= -1
Sleep pressTime
}
Sleep 200
}
SendWithDelay(strokes, sleepyTime)
{
releaseSpace := False
Loop StrLen(strokes)
{
instruction := SubStr(strokes, A_Index, 1)
switch instruction
{
case "U": Send "{Up}"
case "L": Send "{Left}"
case "D": Send "{Down}"
case "R": Send "{Right}"
case "_":
Send "{Space down}"
releaseSpace := True
case "F": Send "F"
}
Sleep sleepyTime
}
if (releaseSpace)
{
Send "{Space up}"
Sleep sleepyTime
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment