Have you ever wanted to automate your movements on places like GatherTown? You can use xdotool combined with shell scripting to do so, as this allows you to emulate keystrokes.
On Ubuntu, you can install xdotool using,
$ sudo apt install xdotool
For example, executing
$ xdotool keydown a
will emulate the "a" key being pressed down, and will type "a" continuously.
On GatherTown, there are four direction of movements, which are up (using "w"), down (using "s"), left (using "a"), right (using "d"). In addition to the movements, you can dance (using "z") and go through people (using "g").
We will be using a shell script to randomise the movements on GatherTown.
We want to randomise the direction of the movement, and we will use the following to generate a number between 0-3 randomly:
randdirec=$((RANDOM%4))
If $randdirec is 0, xdotool key w
is executed, which causes the avatar to go up.
If $randdirec is 1, xdotool key s
is executed, which causes the avatar to go down.
If $randdirec is 2, xdotool key a
is executed, which causes the avatar to go left.
If $randdirec is 3, xdotool key d
is executed, which causes the avatar to go right.
We also want to randomise the amount of steps we take in that particular direction, and will use the following to generate a number between 1-7 randomly.
x=$(((RANDOM%7)+1))
The minimum amount of steps we take in that direction will be 1, and the maximum amount of steps we take in that direction will be 7.
The direction and the number of steps will be randomised at every iteration of the infinite loop.
The code until this point looks like this:
#!/bin/bash
while true
do
i=0
#generate random number between 1-7
x=$(((RANDOM%7)+1))
#generate random number between 0-3
randdirec=$((RANDOM%4))
while [ $i -lt $x ]
do
case $randdirec in
0)
#go up
xdotool key w
;;
1)
#go down
xdotool key s
;;
2)
#go left
xdotool key a
;;
3)
#go right
xdotool key d
;;
*)
;;
esac
#wait 0.01 seconds until the next iteration
sleep 0.01
i=$((i+1))
done
done
To execute the script, we first give execution permission,
$ chmod +x auto.sh
Then we can execute the script,
$ ./auto.sh
Next, we can add random dance movements. If we want the avatar to dance with a probability of 3/200 at every iteration, we can use the following,
#generate random number between 0-199
dance=$((RANDOM%200))
#3/200 chance of dancing
if [ $dance -gt 196 ]
then
#dance
xdotool key z
#dance for 2 seconds
sleep 2
fi
Finally, we can randomly activate the "go through people" key, namely the "g" key, which can be useful when our avatar gets stuck. If we want the avatar to activate the "g" key with a probability of 5/100, we can use the following,
#generate random number between 0-99
g=$((RANDOM%100))
#5/100 chance of activating go through people key
if [ $g -gt 94 ]
then
#hold down the go through people key
xdotool keydown g
flag=1
fi
Then at the end of the iteration, we will release the "g" key using the following,
if [ $flag == 1 ]
then
#release the go through people key
xdotool keyup g
flag=0
fi
This script can be used to pretend that you're online on GatherTown, or play a game of tag which will require multiple people to work together and surround you (and hope the "g" key won't be activated)!
The whole code can be found on my Github here: https://github.com/LambdaMamba/KeystrokeInjection/blob/main/shellscript_gathertown/auto.sh
Top comments (0)