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.1.tar.gz (34.5 kB view details)

Uploaded Source

Built Distribution

hackmatch-1.1-py3-none-any.whl (35.3 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for hackmatch-1.1.tar.gz
Algorithm Hash digest
SHA256 4ec64673972939e4d070330e81db0c6b495fce4c830cc04d1e0d3a0024e1e615
MD5 5f59afebca6f4fe4f375bdd7024dacec
BLAKE2b-256 a145d114ae6141431d2478d4d1e0b06cb53dffb31e37bb57a0018cf9d9074b44

See more details on using hashes here.

File details

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

File metadata

  • Download URL: hackmatch-1.1-py3-none-any.whl
  • Upload date:
  • Size: 35.3 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f0627d510577bfc465d8f0c29170b280272ff5c2a8c6f3e00a62e4bd7c858c01
MD5 b071b235a2c80d70febb868db34c8e49
BLAKE2b-256 687fbf44eed7e964b3ca4ec4bb115875f79d1f6863e0831b3bd46d612ba1462a

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