Farmer Against Potatoes Idle: AutoHotKey Script Guide

Why use the games intended Auto Play feature when you can use an AutoHotKey Script

Installing AutoHotKey

If you don’t know AutoHotKey, it’s software that allows you to move your move, click and press keys automatically, analyse stuff that happens on your screen and loads more. Very nice.

Just download and install the latest version here:
https://www.autohotkey.com/download/

First thing about AutoHotKey Scripts

This script will only work with the game as the active window, fully visible and with the cursor free to move.
It basically only works when left to do it’s thing.
You can pause and unpause it whenever you want, so for example, you let it play the minigame, pause it, do your own thing and after 5 minutes manually unpause it to play the minigame again and repeat.

If at any point anything goes wrong, F11 will pause the script.
If the symbol on the taskbar is red its paused

if its green its running.

You can fully shut off script by right clicking the symbol on the the taskbar and clicking exit.

Creating the Script – The Setup

Create a new Folder, right click and create a new file and call it “setup.ahk”.
Right-click and edit setup.ahk and copy this in:

;create a txt file to store the coordinates in
FileDelete, %A_WorkingDir%\coords.txt
FileAppend, Coordinates for the Toilets are`n, %A_WorkingDir%\coords.txt

;setup where we move the mouse in the right places and save the Positions
MsgBox,
(
Move the cursor to the Top of the black circle inside the Toilet
Top Row Far Left Toilet
Press Enter if you did it
)
click
sleep, 50
;Store the coordinates in the txt file, repeat this a bunch of times
MouseGetPos, MouseX, MouseY
FileAppend, %MouseX%`n, %A_WorkingDir%\coords.txt
FileAppend, %MouseY%`n, %A_WorkingDir%\coords.txt


MsgBox,
(
Move the cursor to the Top of the black circle inside the Toilet
Middle Row Second Toilet from the Left
Press Enter if you did it
)
click
sleep, 50
MouseGetPos, MouseX, MouseY
FileAppend, %MouseX%`n, %A_WorkingDir%\coords.txt
FileAppend, %MouseY%`n, %A_WorkingDir%\coords.txt

MsgBox,
(
Move the cursor to the Top of the black circle inside the Toilet
Bottom Row Middle Toilet
Press Enter if you did it
)
click
sleep, 50
MouseGetPos, MouseX, MouseY
FileAppend, %MouseX%`n, %A_WorkingDir%\coords.txt
FileAppend, %MouseY%`n, %A_WorkingDir%\coords.txt

MsgBox,
(
Move the cursor to the Top of the black circle inside the Toilet
Top Row Second Toilet from the Right
Press Enter if you did it
)
click
sleep, 50
MouseGetPos, MouseX, MouseY
FileAppend, %MouseX%`n, %A_WorkingDir%\coords.txt

MsgBox,
(
Move the cursor to the Top of the black circle inside the Toilet
Top Row Far Right Toilet
Press Enter if you did it
)
click
sleep, 50
MouseGetPos, MouseX, MouseY
FileAppend, %MouseX%`n, %A_WorkingDir%\coords.txt

Missedit:
MsgBox,
(
Move the Cursor over the white Part of the second "s" in "Press Start"
Press Enter if you did it
)
click
sleep, 50
MouseGetPos, MouseX, MouseY
    PixelGetColor, color, MouseX, MouseY
    if (color != 0xFFFFFF)
    {
    goto, Missedit
    }
FileAppend, %MouseX%`n, %A_WorkingDir%\coords.txt
FileAppend, %MouseY%`n, %A_WorkingDir%\coords.txt

MsgBox,
(
Move the Cursor over the Start Button
Press Enter if you did it
)
MouseMove, 0, -200, 0, R
sleep, 50
click
sleep, 50
MouseMove, 0, 200, 0, R
sleep, 50
MouseGetPos, MouseX, MouseY
FileAppend, %MouseX%`n, %A_WorkingDir%\coords.txt
FileAppend, %MouseY%`n, %A_WorkingDir%\coords.txt

ExitApp 

;Pause button
F11::
Pause
Suspend
return
When you start the file a messagebox will pop up telling you where to put your cursor and then press enter. This is done so the script knows where the toilets are, because on different resolutions they may be in different locations.
If pressing Enter doesn’t do anything, click into the messagebox and then move the cursor back into the position it’s asking for.
You can also drag the Messagebox out of the way.

Should anything break or go wrong F11 pauses the script.

First you will be asked to put your cursor on top of the black circles in the toilets, like you can see in the picture.
This will repeat 5 times, so we get all the toilet locations.
These locations will later be checked for potatoes.

After that you will be asked to put your cursor on the white part of the second s in the word “press”, like in the picture.
It does this, so later on it will be able to tell when the 5 minute cooldown is over and it can restart the game.

Lastly you will have to move your cursor over the start button so it knows where the start button is.

And that is the setup done!

Creating the Script – Main Script

In the same folder where the setup.ahk file is you will now also see a coords.txt, this is where the positions from the setup are saved.

In this folder create a new file called “script.ahk”.
Right-click to edit and copy in this code:

#IfWinActive ahk_exe Farmer Against Potatoes Idle.exe

Pause
Suspend

;Set Toilet coordinates from setup file
FileReadLine, LineX1, %A_WorkingDir%\coords.txt, 2
FileReadLine, LineX2, %A_WorkingDir%\coords.txt, 4
FileReadLine, LineX3, %A_WorkingDir%\coords.txt, 6
FileReadLine, LineX4, %A_WorkingDir%\coords.txt, 8
FileReadLine, LineX5, %A_WorkingDir%\coords.txt, 9
FileReadLine, LineY1, %A_WorkingDir%\coords.txt, 3
FileReadLine, LineY2, %A_WorkingDir%\coords.txt, 5
FileReadLine, LineY3, %A_WorkingDir%\coords.txt, 7
FileReadLine, LinePressX, %A_WorkingDir%\coords.txt, 10
FileReadLine, LinePressY, %A_WorkingDir%\coords.txt, 11
FileReadLine, LineStartX, %A_WorkingDir%\coords.txt, 12
FileReadLine, LineStartY, %A_WorkingDir%\coords.txt, 13


coordsX := [LineX1,LineX2,LineX3,LineX4,LineX5]
coordsY := [LineY1,LineY2,LineY3]

;Base Color to compare against and allowed tolerance
targetColor=0xFDC118
tolerance := 85

;split target color into rgb
tr := format("{:d}","0x" . substr(targetColor,3,2))
tg := format("{:d}","0x" . substr(targetColor,5,2))
tb := format("{:d}","0x" . substr(targetColor,7,2))


;the main Loop that runs
loop {
    ;check if the game is the active window, if not pause
    if !WinActive("ahk_exe Farmer Against Potatoes Idle.exe")
    {
        Pause
        Suspend
    }
    
    ;Check if whack-game can be started
    PixelGetColor, color, LinePressX, LinePressY
    if (color = 0xFFFFFF)
    {
    MouseClick, left, LineStartX, LineStartY
    }

    ;outer loop to set Y coordinates
    loopcount := 1
    loop 3 {
        ;inner loop to set X coordinates
        loop 5 {
            ;check pixel color at a toilet
            PixelGetColor, color, coordsX[a_index], coordsY[loopcount], Alt RGB

            ;split pixel color into rgb
            pr := format("{:d}","0x" . substr(color,3,2))
            pg := format("{:d}","0x" . substr(color,5,2))
            pb := format("{:d}","0x" . substr(color,7,2))

            ;check distance between pixel and target color to get the tolerance
            distance := sqrt((tr-pr)**2+(tg-pg)**2+(pb-tb)**2)
            if(distance<tolerance)
            {
                ;Click the toilet if the tolerance is right
                MouseClick, left, coordsX[a_index], coordsY[loopcount]
                sleep, 20
                ;move mouse out of the way
                MouseMove, 0, 15, 0, R
            }
        }
    loopcount++
    }
}


;Pause button
F11::
Pause
Suspend
return
The Script will start paused.
Open the Whack-A-Potato minigame and press F11 to start it.

If you did everything right and you aren’t on cooldown the game should now play itself.
To open the shop just press F11 to pause, buy whatever you want and then resume by pressing F11 once more.

If you tab out the script will pause automatically, you will have to manually unpause it by pressing F11.


Thanks to Pix for his excellent guide, all credits belong to his effort. if this guide helps you, please support and rate it via Steam Community. enjoy the game.

Leave a Comment