In 2013, image processing on screenshots was state of the art for reading information from the Eve Online client.
Today, many programs get this information in a more efficient way — reading from the game client process memory.
What follows is my brief account of the developments which enabled this change.
Since I was a kid, I enjoyed playing video games and soon started to make some of my own too.
Eventually, I stumbled on an interesting game called Eve Online.
This game has qualities I did not yet find in any other game and thus make it unique in my perspective.
I also found its design incomplete, resulting in grind and boredom for players.
I wanted to improve on this, people should be able to skip the grind and enjoy more of the good parts of the game.
For the engineer in me, there is an obvious way to achieve that: Automate boring parts of the game. This way, the players’ experience can be improved incrementally.
In 2013, I started developing software performing this automation, a bot.
For this bot to be able to make good decisions about what to do next, it needs information about its environment — the state of the game — first. There already were software products which obtained information from this games client at runtime, by processing the image rendered on the screen by the game.
The image processing approach appeals through its conceptual simplicity — extracting the information from the same source as a human player. Human brains are good at learning to extract useful information from visual impressions. Large parts of this learning process happen unconsciously and appear as easy in the learners’ experience. But translating this powerful learning system to the machines we run our programs on is still hard today. Instead of making image processing work somehow, I went with a different approach this time.
The information of interest is also represented in the game process memory.
Figuring out the structure of that representation was interesting, it certainly helped that I found myself intrigued by the challenge itself.
Eventually, reading from the process memory turned out to be the more efficient way, regarding implementation effort and computation time. This was the inception of the Eve Online memory reading framework which was later named Sanderling.
In 2014, I published the Optimat bot which performed particular in-game activities to save players time. With feedback from first users, I improved this bot until it ran sessions of twelve hours straight, unattended.
While it performed well once set up, I learned that many potential users — though initially interested — did not make it that far, as configuring the software required too much effort upfront. The learning curve was too steep, and seeing how this inhibited adoption was an important lesson to me.
Applying my learnings from the Optimat bot, I created other bots for other in-game activities — reusing parts of the implementation of the first bot.
Requests from users showed a diversity of use cases, many of which were not covered yet with the configuration settings of bots I had implemented so far.
People asked for help with creating their own Eve Online bots. To support them, I compiled tutorials on how the memory reading works and built sample code to demonstrate how it can be integrated into other software.
The tools I used for development were not well suited for beginners though and many people had difficulties making use of the source code.
While I was helping others to develop bots, I saw room for improvement of the process of doing so.
I began to systemize the process of answering peoples’ questions about bot development.
In 2015, this systemization manifested in the introduction of development tools and the BotEngine forum.
I built tools to explore the Sanderling memory reading API and to develop, test and debug bots.
These tools are conveniently bundled in a single piece of software, the Sanderling IDE.
The second great change in 2015 was the establishment of the BotEngine forum, making it easier for users to share their experiences and collaborate.
Terpla and others got the conversation going on the forum, and since then it has become a rich aggregate of information on development and operation of bots.
Since people on the forum help each other with these things, I am able to spend more time on improving the framework.
Sanderling benefited from the forum also in another way, as discussions there informed its development, extending its functionality and making it simpler to use.
Over time, the framework has become a powerful helper, assisting players in farming anomalies, running missions, updating market orders, capturing complexes and other activities.
I want to use this opportunity to thank all the people who have contributed to Sanderlings development. Without you, it could not have reached this level of refinement and quality.
I am excited to see what we build next.