Introduction: Hackear Juego Clicker Heroes Con Arduino
Hace poco descubrimos en Steam un juego llamado "Clicker Heroes" en el que por medio de clicks obtienes monedas en el juego para mejorar habilidades de monstruos.
Gabo un amigo del hackerspace realizo un pequeño hack con el Arduino Micro (o Leonardo) y su emulación de USB HID de un mouse en el que automatiza los click que se requieren y con eso te ahorras miles de horas perdidas obtenido monedas.
Este hack se puede aplicar a otros juegos, espero ver sus mods ;)
Step 1: Material
Lo único que necesitamos en esta ocasión es
- Arduino Micro o Leonardo
- Cable USB
Step 2: Codigo Y USB HID
Los Arduino Micro o Leonardo tienen un microcontrolador 32u4 que a diferencia del 328p del Arduino UNO, el 32u4 tiene integrada la emulación USB HID (human interface device) que nos permite emular un teclado o mouse como el que usamos cotidianamente en nuestra computadora.
Arduino nos proporciona unas librerías para que podamos manejar la emulación de una manera sencilla, este es el código usado para automatizar los clicks
<br><p>/*<br>By Gabo Redfield - The inventors House programa para el arduino leonardo</p><p>Manda pulsaciones y mueve el raton de forma cuadrangular en la pantalla del juego presentado. Los procesos no son seriales, así que en el instante que se active o se desactive, va a estar en el estado que se quedo hasta que se reanude.</p><p>*/ short int bot = 8; // declaramos variable de cuál va a ser nuestro botón para que trabaje int endw = 250; // declaramos cuánto va a medir la longitud de "pixeles" hacia los lados int endh = 70; // declaramos cuánto va a medir la longitud de "pixeles" en altura int tmp = 0; // una variable donde va a guardar el conteo de movimientos int led = 13; // indicamos el pin del led del arduino (por default es 13) int step1 = 0; // bandera del proceso que va a ejecutar(mover mouse x/y dirección) void setup() { //Serial.begin(9600); // opción de imprimir en el puerto serial pinMode(bot, INPUT); // Creamos el botón que va a controlar el proceso pinMode(led, OUTPUT); // prenderá el led 13 en caso de que se active el proceso digitalWrite(13, 0); // empieza el led del arduino apagado Mouse.begin(); // llamamos llamar a las clase del mouse }</p><p>void loop(){ if(digitalRead(bot) == 1){ // si está activo el estado del botón, procede a trabajar digitalWrite(led, 1); //Mouse.move(xDistance, yDistance, 0); // opcion de enviar las coordenadas al puerto serial //Serial.print(tmp); //Serial.print(","); //Serial.println(step1); // a base de banderas, indica la acción que va a ejecutar if(step1 == 0) Mouse.move(1, 0, 0); // mover uno a la derecha else if(step1 == 1) Mouse.move(0, 1, 0); // mover uno abajo else if(step1 == 2) Mouse.move(-1, 0, 0); // mover uno a la izquierda else if(step1 == 3) Mouse.move(0, -1, 0); // mover uno arriba if((tmp >= endw) && (step1 == 0)){ // espera a que el contador TMP sea menor al ancho puesto, si lo cumple y la bandera es 0 (mover uno a la derecha) hace lo sigueinte: step1 = 1; // Cambia la bandera a 1 (mover abajo) tmp = 0; // Cambia el valor de la variable contador TMP a 0 }else if((tmp >= endh) && (step1 == 1)){ // espera a que cumpla la condición similar a la anterior, solo que esta vez con la bandera en 1(mover abajo) step1 = 2; // // Cambia la bandera a 2 (mover a la izquierda) tmp = 0; }else if((tmp >= endw) && (step1 == 2)){ step1 = 3; // Cambia la bandera a 3 (mover hacia arriba) tmp = 0; }else if((tmp >= endh) && (step1 == 3)){ step1 = 0; tmp = 0; }else tmp++; // la variable va a aumentar uno if((tmp == 50)||(tmp == 100)||(tmp == 90)||(tmp == 80)||(tmp == 85)){ // indicamos en que valores del contador va a precionar el boton izquierdo del mouse Mouse.press(MOUSE_LEFT); // mantiene precionado el botón izquierdo del mouse Mouse.release(MOUSE_LEFT); // ya no mantiene precionado el botón izquierdo del mouse } }else{ digitalWrite(led, 0); // como no está activo, mantiene el led(arduino) apagado } }</p>
Attachments
Step 3: Trabajando
Una vez cargado nuestro sketch empezaremos a ver como nuestro mouse empieza con los clicks y moverse en una área de nuestra pantalla, ahora solo debemos iniciar nuestro juego y colocarlo en el área adecuada como se puede ver en el vídeo y empezara a generar monedas para nosotros :D.
Espero les sirva este pequeño truco para otros juegos, espero sus coemtarios
Hasta la próxima