Skip to main content

Exapunks HACK*MATCH Bot

Project description

Cross-platform Exapunks HACK*MATCH bot

Yet another bot for Exapunks' amazing (and annoyingly hard) HACK*MATCH arcade minigame.

Want to score 100,000 points and grab the hardest of its achievements and join the 0,7% club? Look no further!

Don't feel frustrated if you, like me, have no skills for a NES-like reflex game and think such arcade game have no place in a logic/puzzle programming game such as Exapunks.

Why create another bot? Well, I felt it would not be cheating if I programmed the bot myself! Exapunks is all about coding and hacking, so creating a bot to hack it fits in perfectly!


Features

  • Cross Platform, works on Windows, macOS and Linux
  • Works on several resolutions, from 1920x1200 to 1366x768
  • Read and write game settings to get user's current keyboard mapping and to automatically turn off CRT effects.
  • Launch the game if needed, using Steam's steam://rungameid/716490 game URI.
  • Pure Python: easy to understand, install and run, no compiler or other tools needed.
  • Command-line arguments to benchmark, debug, watch-only and more.

Heavily inspired by and adapted from:

  • Fidel-solver's exapunks-hack-match bot

    • C++, X11 and 1600x900 only, requires custom keys, has fuzzy tolerance on colors.
    • Arguably the most well-known reference, possibly the first bot published.
    • +500K points recorded on YouTube.
  • Laelath's hack-match-bot

    • Rust, X11 and 1920x1080 only, requires default keys and no CRT, no fuzziness.
    • An elegant code with great insights on image parsing and board solving.
    • +8M points recorded on YouTube.

Special thanks to Dissecting fidelSolver's Game Bot for Playing Hack*Match, an amazing presentation by Alan Shen that helped me understand the basic concepts and building blocks of both above projects.


Installing

Run this to install the bot and its dependencies, preferably in a virtual environment:

pip3 install hackmatch

This bot is written in Python and uses PyAutoGUI, which has some pre-requisites beyond its pip install. For Debian, Ubuntu and derivatives, just run:

sudo apt install python3-tk

For instructions on all platforms, see the PyAutoGUI documentation.

I've also included a tool to automatically create the python virtual environment, apt-install the requirements and pip-install dependencies and the bot itself, all in a single step:

./install.sh

Note: even if code itself is compatible with earlier Python versions, some dependencies require Python 3.7. It was fully tested on Python 3.8.

Usage

For basic usage, just run:

hackmatch-bot
  • If the game is installed in Steam, it will automatically launch Exapunks if not already running.
  • Keep the bot running (i.e., leave the terminal open), and manually enter and start the HACK*MATCH minigame.
  • Profit!

Debugging, testing or fine-tuning?

$ hackmatch-bot --help
usage: hackmatch-bot [-h] [-q | -v] [--benchmark] [--watch] [--solve-time TIME]
                                    [--board TEXT | IMAGE]

positional arguments:
  IMAGE              Ignore game window and solve IMAGE instead.
                     Useful when debugging with --verbose.

optional arguments:
  -h, --help         show this help message and exit
  -q, --quiet        Suppress informative messages.
  -v, --verbose      Verbose mode, output extra info.
  --benchmark        Benchmark mode, run for 30 seconds.
                       Best used with --quiet and game already launched.
  --watch            Watch mode, read and solve board but do not play.
  --solve-time TIME  Time in milliseconds to solve each parsed board,
                       0 for unlimited. [Default: 850 ms]
  --board TEXT       Ignore game window and solve TEXT instead.

Copyright (C) 2023 Rodrigo Silva (MestreLion) <linux@rodrigosilva.com>
License: GPLv3 or later, at your choice. See <http://www.gnu.org/licenses/gpl>

Contributing

Patches are welcome! Fork, hack, request pull!

See the To-Do List for more updated technical information and planned features.

If you find a bug or have any enhancement request, please to open a new issue

Author

Rodrigo Silva (MestreLion) linux@rodrigosilva.com

License and Copyright

Copyright (C) 2023 Rodrigo Silva (MestreLion) <linux@rodrigosilva.com>.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hackmatch-1.3.tar.gz (35.9 kB view details)

Uploaded Source

Built Distribution

hackmatch-1.3-py3-none-any.whl (36.5 kB view details)

Uploaded Python 3

File details

Details for the file hackmatch-1.3.tar.gz.

File metadata

  • Download URL: hackmatch-1.3.tar.gz
  • Upload date:
  • Size: 35.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.8.0

File hashes

Hashes for hackmatch-1.3.tar.gz
Algorithm Hash digest
SHA256 ef6a639a949bc3eee1b972ca81dcd5e80e9e97e7009476d811c17860c0b1b9d0
MD5 ebf48904a099cfc34b1cebf51ff1ab86
BLAKE2b-256 e1bb39c2818474a1ef07c52db09cbe047618edb34370181e018618d0fe234d9e

See more details on using hashes here.

File details

Details for the file hackmatch-1.3-py3-none-any.whl.

File metadata

  • Download URL: hackmatch-1.3-py3-none-any.whl
  • Upload date:
  • Size: 36.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.8.0

File hashes

Hashes for hackmatch-1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 7a88f60fedcd6f78f3bd301511c1711f1bee346197ab912336902a094b189cdc
MD5 687ca1dcea5a410deb39f6550f002339
BLAKE2b-256 dbbdb07de94f04abe2670607c2e42518343d84518cab89c5a74cacbee66a1df5

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page