LED Heart Keeps Tabs On Your RuneScape Character

The MMORPG RuneScape holds a special place in the hearts of those who played it in the early 2000s. Sure it might seem exceptionally quaint by modern standards, but at the time it was groundbreaking stuff. Plus you could play it for free, which certainly helped get people onboard. While there’s a more modern build available, many who played the game from the early days prefer to stick with what they know, and continue to run a version of the game that has now become known as Old School RuneScape.

[Austin Blake] is one of those early adopters, and the work he put into this LED health indicator should tell you all you need to know about how dedicated he is to the classic game. The 3D printed heart holds an incredible 312 NeoPixel LEDs, which are controlled by a 5 volt compatible Arduino Nano Every located on the back side.  Both the color and “fill level” of the heart will change in real-time to correspond to the health of the player character.

Building the light itself was pretty straightforward, but getting the health value from the game was another story. As [Austin] explains in the video, his first attempt involved using Python and some image recognition routines to literally read the indicator off of the screen. The idea worked, and is frankly a fascinating hack worth keeping in mind on its own, but unfortunately it was too slow to provide the real-time feedback he was looking for.

Eventually he turned his attention to RuneLite, which is an open source client for Old School RuneScape. Thanks to its open source nature he could have hacked a routine to read the current health value and send it off to the Arduino, but thanks to a mature plug-in system, he didn’t have to.

The game’s API let him create a simple and reliable way of getting the data out of the game, similar to what we see in the flight simulator community for driving physical gauges and displays. RuneLite features a repository of community-developed plugins, and [Austin] says that he’d be happy to submit his for inclusion if others are interested in building similar indicators — a perfect match for this motion-sensing RuneScape axe.

8 thoughts on “LED Heart Keeps Tabs On Your RuneScape Character

  1. I was just researching the ‘read off the screen with Python’ procedure, so that a LED would inform me when Cast has been reloaded in Hades. It is a pity that it is not efficient enough…

    1. I have just watched the video and it might not be that bad, given that I will have just two or three images… Besides the method used was not very efficient and could be improved (e.g. by getting a checksum of the screen portion and comparing it with other checksums and not images themselves).

      1. I don’t know how this guy ended up with the method he was using. I’ve never used Python to read a screen, but I spent 5 minutes searching for a method and found Python MSS, which is actually designed for streaming and video games:
        https://python-mss.readthedocs.io/examples.html

        Something as common as reading the screen is likely to have multiple solutions in any language, and the more recent solutions are more likely to be optimized and well maintained.

  2. It would have been better of him to have stuck with trying to read the screen with Python, and work out the optimization issues. Most games don’t have a public API, and even if they do you can’t guarantee they’ll provide the features you’re looking for.

    Screen capturing and tracking for pixel changes is a highly valuable skill in the technology world, and given the broad range of solutions offered by Python packages it’s disappointing to see him giving up on it so quickly.

  3. I wonder if the game always stores the health bar information in the same place. Perhaps it could be located with a cheat engine and then pulled directly from the original game for use with this peripheral.

  4. You could write a custom runelite plugin that fetches the current health number and percentage. i have made one that grabs health and other stats like prayer and skilling levels then use a function to post it to a localhost on a port using http requests.

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.