hackmatch


Namehackmatch JSON
Version 1.3 PyPI version JSON
download
home_page
SummaryExapunks HACK*MATCH Bot
upload_time2023-09-08 07:28:25
maintainer
docs_urlNone
author
requires_python>=3.7
licenseGPL-3.0-or-later
keywords exapunks hackmatch game bot
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Cross-platform Exapunks HACK*MATCH bot

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

Want to score 100,000 points and grab the [hardest of its achievements][2]
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!

<div>
  <a href="https://www.youtube.com/watch?v=h5jue7T-gXk">
    <img src ="https://img.youtube.com/vi/h5jue7T-gXk/maxresdefault.jpg" />
    <p align="center">See it in action!</p>
  </a>
</div>

---
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](https://github.com/fidel-solver/exapunks-hack-match)
    - 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](https://github.com/laelath/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][3],
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][4].

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?

```console
$ 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][5] for more updated technical information and planned features.

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


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.
```

[1]: https://store.steampowered.com/app/716490/EXAPUNKS/
[2]: https://steamcommunity.com/stats/716490/achievements
[3]: https://sunzenshen.github.io/presentations/2018/12/08/dissecting-hackmatch-solver.html
[4]: https://pyautogui.readthedocs.io/en/latest/install.html
[5]: https://github.com/MestreLion/hackmatch/blob/main/TODO.md
[6]: https://github.com/MestreLion/hackmatch/issues

            

Raw data

            {
    "_id": null,
    "home_page": "",
    "name": "hackmatch",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": "",
    "keywords": "exapunks,hackmatch,game,bot",
    "author": "",
    "author_email": "\"Rodrigo Silva (MestreLion)\" <linux@rodrigosilva.com>",
    "download_url": "https://files.pythonhosted.org/packages/e1/bb/39c2818474a1ef07c52db09cbe047618edb34370181e018618d0fe234d9e/hackmatch-1.3.tar.gz",
    "platform": null,
    "description": "# Cross-platform Exapunks HACK*MATCH bot\n\nYet another bot for [Exapunks][1]' amazing (and annoyingly hard)\n**HACK*MATCH** arcade minigame.\n\nWant to score 100,000 points and grab the [hardest of its achievements][2]\nand join the 0,7% club? Look no further!\n\nDon't feel frustrated if you, like me, have no skills for a NES-like reflex game\nand think such arcade game have no place in a logic/puzzle _programming_ game\nsuch as Exapunks.\n\nWhy create another bot? Well, I felt it would not be cheating if I\n_programmed_ the bot myself! Exapunks is all about coding and hacking,\nso creating a bot to hack _it_ fits in perfectly!\n\n<div>\n  <a href=\"https://www.youtube.com/watch?v=h5jue7T-gXk\">\n    <img src =\"https://img.youtube.com/vi/h5jue7T-gXk/maxresdefault.jpg\" />\n    <p align=\"center\">See it in action!</p>\n  </a>\n</div>\n\n---\nFeatures\n--------\n- Cross Platform, works on Windows, macOS and Linux\n- Works on several resolutions, from 1920x1200 to 1366x768\n- Read and write game settings to get user's current keyboard mapping and to\n  automatically turn off CRT effects.\n- Launch the game if needed, using Steam's `steam://rungameid/716490` game URI.\n- Pure Python: easy to understand, install and run, no compiler or other tools needed.\n- Command-line arguments to benchmark, debug, watch-only and more.\n\n### Heavily inspired by and adapted from:\n\n- [Fidel-solver's exapunks-hack-match bot](https://github.com/fidel-solver/exapunks-hack-match)\n    - C++, X11 and 1600x900 only, requires custom keys, has fuzzy tolerance on colors.\n    - Arguably the most well-known reference, possibly the first bot published.\n    - +500K points recorded on YouTube.\n\n- [Laelath's hack-match-bot](https://github.com/laelath/hack-match-bot)\n    - Rust, X11 and 1920x1080 only, requires default keys and no CRT, no fuzziness.\n    - An elegant code with great insights on image parsing and board solving.\n    - +8M points recorded on YouTube.\n\nSpecial thanks to [Dissecting fidelSolver's Game Bot for Playing Hack*Match][3],\nan amazing presentation by Alan Shen that helped me understand the basic concepts\nand building blocks of both above projects.\n\n---\nInstalling\n----------\n\nRun this to install the bot and its dependencies, preferably in a virtual environment:\n\n    pip3 install hackmatch\n\nThis bot is written in Python and uses PyAutoGUI, which has some pre-requisites\nbeyond its `pip` install. For Debian, Ubuntu and derivatives, just run:\n\n    sudo apt install python3-tk\n\nFor instructions on all platforms, see the [PyAutoGUI documentation][4].\n\nI've also included a tool to automatically create the python virtual environment,\n`apt`-install the requirements and `pip`-install dependencies and the bot itself,\nall in a single step:\n\n    ./install.sh\n\n> _**Note**: even if code itself is compatible with earlier Python versions,\n> some dependencies require **Python 3.7**. It was fully tested on Python 3.8._\n\nUsage\n-----\n\nFor basic usage, just run:\n\n    hackmatch-bot\n\n- If the game is installed in Steam, it will automatically launch Exapunks\nif not already running.\n- Keep the bot running (i.e., leave the terminal open), and manually enter and\nstart the HACK*MATCH minigame.\n- Profit!\n\nDebugging, testing or fine-tuning?\n\n```console\n$ hackmatch-bot --help\nusage: hackmatch-bot [-h] [-q | -v] [--benchmark] [--watch] [--solve-time TIME]\n                                    [--board TEXT | IMAGE]\n\npositional arguments:\n  IMAGE              Ignore game window and solve IMAGE instead.\n                     Useful when debugging with --verbose.\n\noptional arguments:\n  -h, --help         show this help message and exit\n  -q, --quiet        Suppress informative messages.\n  -v, --verbose      Verbose mode, output extra info.\n  --benchmark        Benchmark mode, run for 30 seconds.\n                       Best used with --quiet and game already launched.\n  --watch            Watch mode, read and solve board but do not play.\n  --solve-time TIME  Time in milliseconds to solve each parsed board,\n                       0 for unlimited. [Default: 850 ms]\n  --board TEXT       Ignore game window and solve TEXT instead.\n\nCopyright (C) 2023 Rodrigo Silva (MestreLion) <linux@rodrigosilva.com>\nLicense: GPLv3 or later, at your choice. See <http://www.gnu.org/licenses/gpl>\n```\n\n---\nContributing\n------------\n\nPatches are welcome! Fork, hack, request pull!\n\nSee the [To-Do List][5] for more updated technical information and planned features.\n\nIf you find a bug or have any enhancement request, please to open a [new issue][6]\n\n\nAuthor\n------\n\nRodrigo Silva (MestreLion) <linux@rodrigosilva.com>\n\nLicense and Copyright\n---------------------\n```\nCopyright (C) 2023 Rodrigo Silva (MestreLion) <linux@rodrigosilva.com>.\nLicense GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\nThis is free software: you are free to change and redistribute it.\nThere is NO WARRANTY, to the extent permitted by law.\n```\n\n[1]: https://store.steampowered.com/app/716490/EXAPUNKS/\n[2]: https://steamcommunity.com/stats/716490/achievements\n[3]: https://sunzenshen.github.io/presentations/2018/12/08/dissecting-hackmatch-solver.html\n[4]: https://pyautogui.readthedocs.io/en/latest/install.html\n[5]: https://github.com/MestreLion/hackmatch/blob/main/TODO.md\n[6]: https://github.com/MestreLion/hackmatch/issues\n",
    "bugtrack_url": null,
    "license": "GPL-3.0-or-later",
    "summary": "Exapunks HACK*MATCH Bot",
    "version": "1.3",
    "project_urls": {
        "Homepage": "https://github.com/MestreLion/hackmatch",
        "Issue Tracker": "https://github.com/MestreLion/hackmatch/issues",
        "Source Code": "https://github.com/MestreLion/hackmatch"
    },
    "split_keywords": [
        "exapunks",
        "hackmatch",
        "game",
        "bot"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "dbbdb07de94f04abe2670607c2e42518343d84518cab89c5a74cacbee66a1df5",
                "md5": "687ca1dcea5a410deb39f6550f002339",
                "sha256": "7a88f60fedcd6f78f3bd301511c1711f1bee346197ab912336902a094b189cdc"
            },
            "downloads": -1,
            "filename": "hackmatch-1.3-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "687ca1dcea5a410deb39f6550f002339",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.7",
            "size": 36482,
            "upload_time": "2023-09-08T07:28:22",
            "upload_time_iso_8601": "2023-09-08T07:28:22.634268Z",
            "url": "https://files.pythonhosted.org/packages/db/bd/b07de94f04abe2670607c2e42518343d84518cab89c5a74cacbee66a1df5/hackmatch-1.3-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e1bb39c2818474a1ef07c52db09cbe047618edb34370181e018618d0fe234d9e",
                "md5": "ebf48904a099cfc34b1cebf51ff1ab86",
                "sha256": "ef6a639a949bc3eee1b972ca81dcd5e80e9e97e7009476d811c17860c0b1b9d0"
            },
            "downloads": -1,
            "filename": "hackmatch-1.3.tar.gz",
            "has_sig": false,
            "md5_digest": "ebf48904a099cfc34b1cebf51ff1ab86",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 35939,
            "upload_time": "2023-09-08T07:28:25",
            "upload_time_iso_8601": "2023-09-08T07:28:25.214427Z",
            "url": "https://files.pythonhosted.org/packages/e1/bb/39c2818474a1ef07c52db09cbe047618edb34370181e018618d0fe234d9e/hackmatch-1.3.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-09-08 07:28:25",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "MestreLion",
    "github_project": "hackmatch",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "hackmatch"
}
        
Elapsed time: 0.12451s