Recently I have been revisiting projects from the past – hundreds of little toys, gadgets, fragments of code. One example of that I’m going to talk about here…
In the infamous MMORPG that is World of Warcraft, there are many vanity items that are intentionally a massive time sink to acquire. Obtaining these items can make your character stand-out from the crowd, even if it means you’ve spent 3 weeks of your game-life trying to obtain them.
Being a programmer / hacker by nature I am particularly averse to doing anything manually when I think I can automate it – even if writing the code to automate something will take longer than just doing the boring task itself.
Our friend the Sea Turtle is a classic example of this, I wanted my character to trot around the virtual world on-top of this slow but cute virtual creature.
In order to obtain the Sea Turtle, you need to fish him from ephemeral ‘pools’ of fish that flit in and out of watery areas within the game. Normally a player would have to fly around a zone within the game that has a lot of open water – keeping eye out for these transient ‘pools’ of fish. When the player spots one, they must land on the shore nearby and then cast with their fishing rod into the pool to hopefully fish out the prize among other more common items.
The chance of getting the Sea Turtle from a fishing pool is about 0.02%. Obviously I didn’t fancy spending time trying to get this the old fashioned way.
So, what do I need to do…
- Patrol an area looking for these transient pools as they appear
- When I spot one, I need to land and fish in that pool
Sounds simple enough, I had already implemented a simple Waypoint navigation system and could easily Patrol an area. Next I need to look for Fishing Pools, that’s also simple they can be found by reading from the Object Manager in the games’ process memory. Lastly I need to land nearby – close enough to reach the pool with my fishing rod… well I looked at a couple of ways I could do this using fancier navigation and opted to manually set ‘landing spots’ for each pool that appeared in the area I patrol. Fishing Pools appear in specific places, their locations are fixed by the game designers. Admittedly a bit of a cop-out but I was looking for a simplez solution.
So, piecing it all together…
- I created a simple Waypoint path to patrol around,
- When I got the character to fly around the route I had it stop at every Fishing Pool I hadn’t already set a ‘landing spot’ for,
- I soon had ‘landing spots’ for all the Fishing Pool locations I needed,
- Some simple code to actually fish the pool and return to patrol when the pool vanishes,
Viola, we have a flying fishing character! After a couple of days leaving my character running 24/7 I finally obtained the hallowed Sea Turtle! The video below shows my one of my characters demonstrating this working. All the character movement and action is done in code, I just used the mouse a couple of times to reposition the camera angle for the video.