Pages

Monday, May 30, 2011

Project Unison

Unison is a programming project I am pursuing over the summer to automatically control a character in a popular online game. I wish to use this project to put something of size and meaning on my resume in the AI sub-field of computers.

I'll come right out and address the elephant in the room when talking about this project. Unison does not comply with the EULA of the MMO game (speaking of that, the enforceability is questionable). That is why I will not publish the game's name; there are many popular MMOs out there—they cannot sue me on the grounds that I might be doing something in their game.

Now that the large animal has been ushered out, we can get on to the fun stuff. On a high-level, Unison makes use of a custom-built addon to get information out of the game and the plan is to use the standard Windows messaging system (that's a mysterious Windows API thing, not a chat program) to get instructions back into the game by simulating key-presses and clicks. If necessary, I can make use of VMs to completely abstract away any way for the MMOG to sniff around the system for the bot.

The ultimate goal is to have a system where a full group of bots takes down the hardest dungeons with no human intervention. Of course, that is a long way from where I am at currently. So far, I have only been able to get a few messages out of the game here and there, but considering how many things have to line up just to get that, I'm proud of the progress.

Unfortunately, that progress has backpedaled lately: I wrote most of the C# code during Spring Break, and I completely failed on documentation. I have no idea how some of the code sections work; or, in some cases, I understand, but I ask myself, "Who wrote that crap?" Therefore, I have learned my lesson: put a comment everywhere, to the point of excess.

My current road map:
  1. Take screenshots within a program. Done.
  2. *Get messages out of the MMOG. Buggy, but it was done.
  3. *Get messages into the MMOG. I know the how, but lots of work to get it to work.
  4. Click buttons.
  5. Be able to have the game at any location on the screen. The framework already has this in mind.
  6. *Control movement. I can already move, just not controllably.
  7. Combat.
  8. Chat.
  9. *AI goal system.
  10. Network with other bots.
Wow, when I write it all out like that, this project just gets bigger and bigger, and more milestones will probably have to be added. The asterisks denote which parts I think will be hard to implement. The messaging is touchy since it is timing dependent—off by a fraction of a second and the whole message is lost. In addition, the message system requires pretty much modeling the TCP/IP system (the protocols used by the Internet to send data reliably) in both the addon's language and C#. Movement will also be hard because it will require tracking quite a few variables and changing the input into the "driving" system very quickly. I consider the AI system hard because, well, it is AI.

I will get it done; but, at the moment, it is slightly overwhelming. That is why I have done the road map and those smaller goals. I hope that will help with the large amount of things to do.

The name was chosen because of the goal to have many copies of the bot working in unison together.

It will all be worth it when my bot sends me a text message saying, "The big boss in the really hard dungeon has been killed. He dropped: The Super-Duper Sword and The Scepter of Awesome."

No comments:

Post a Comment