June 2014 was my ten-year anniversary married to my high school sweetheart, Katrina. Shortly after our ninth anniversary, I realized that the next one would be a big First Decade event, so I knew that my husband-ly duty called for something a little more than the average anniversary gift. And indeed I went even beyond the usual ten-year gift of diamonds to something that caused several people to scoff and roll their eyes at me about.
Since Katrina loves puzzles and strategy computer games, I decided to make a scavenger hunt for her as a tenth-anniversary present. We have a bit of history of designing scavenger hunts for each other; she created one for me as a means to tell me she was pregnant for the first time, so I figured she’d enjoy it. Since Katrina’s favorite number is 4 (since she was born the fourth day of the fourth month), I decided I should aim for 44 clues.
With a year to plan, I started brainstorming clue ideas. I keep a personal MediaWiki instance as a notetaking tool (in addition to Evernote and StackEdit notes synced to my DropBox account; haven’t found a single notetaking tool that satisfies all my needs for software code-fragments, data tables, and embedding images, but that’s another story…), and started an article there with ideas.
As my ideas started to flesh out, I realized that 44 clues wouldn’t really be solve-able in a single day unless the clues were really easy, and that wasn’t much fun. So, I decided to go the other end of the spectrum:
I would make a super-hard, 44-clue scavenger hunt for my wife to solve!
Some of my ideas revolved around sharing childhood memories of mine with her that I hadn’t previously, and guiding her through reliving some of her own, so they would be geographically spread out a bit. Since those would slow her down (to have to travel around to find them), I planned for it taking a while, but not long enough for snow to start falling (since then my outdoor clues would need to be pretty durable). If she started in late June, that gave around 4 months to solve them all. I figured that was plenty long to enjoy the hunt without being unreasonable!
As I came up with ideas for clues, I attempted to tackle the hardest ones to set up first, thinking if I could get them out of the way first, that would prove this whole thing was viable. Or, if I could only get one or two of the big clues done, they could maybe stand as a present on their own (and I’d never tell her about this foolish idea I had about a huge scavenger hunt…).
One of the most difficult clues I dreamed up was to create an easter egg/clue for Katrina in one of her favorite strategy games, MYST. I had read several stories previously about romantic geeks hacking games for their true loves, and this one seemed do-able.
The MYST game is old enough that a lot of it has been reverse-engineered, and I spent several months working on my own parser for MOHAWK files (the compressed data format the MYST game uses; source code for the parser I implemented can be found here, if you’re interested). Since most modern computers can’t run the binary application that MYST used originally, I used the ScummVM application to make the game playable again on Katrina’s computer. However, once I modified the MYST game’s source files, ScummVM didn’t recognize it as a valid installation of the MYST game when trying to add it to your local list of playable games! Luckily, I found out that check is only done the first time it was added to the list. I added the MYST game to ScummVM using the original source files, and then modified them to insert my own picture into the game, and then it launched just fine!
The original MYST game is a slideshow-like game engine, which the player navigates through various “cards” by clicking hotspots on the scene. In my brainstorming of ideas for where to hide my easter egg, I came up with a few ideas:
Behind the dock by the waterside in-game is a video-playing device, that only has a few of its 99-possible video slots filled. If I could create a video file that looked like it fit into that scene, I could fill one of the usually-unused slots with my video. However, I found the video codec needed to match the other videos and make it playable wasn’t easy to render to using modern renderers (there’s so many better codecs now, why support an archaic movie format?), so this didn’t get fleshed out.
The observatory in MYST has a console where you enter dates and it pans a starfield around to show how the sky looked at that point. Since the date ranges for the console input have a really large range, I figured I could chose a date very different than the ones used in the game, and hide an object in that location on the starfield. However when I looked at the game assets, I found the starfield was only ~500 pixels square; large date ranges just overflow and wrap multiple times around that smaller image. So, I figured that wasn’t ideal, since I wanted to make sure she didn’t run into the clue by accident before she was supposed to.
The bookshelf in the library has many bunt books, and a few intact books that the player can leaf through. I originally figured I could replace one of the burnt books with an intact book page of my own creation, but realized that would involve editing the hotspot for that book in addition to adding the new image assets, so I opted to just “write in the margin” of an existing book.
But which one? In evaluating the books in MYST, I realized they had quite a low resolution (compared to this day-and-age!). Riven, the sequel to MYST also used the MOHAWK data format, and had plenty of books in it, and might have a larger resolution since it was created later? No dice; both games run at 640x480 resolution.
So, I decided to place my secret in the Fireplace Code book, since that book had numbered pages, it would be easy to refer to them in the clue leading to it. Since the user has to flip through all the pages previous to the one they want, I knew I had to hide it beyond the clue actually needed for the game, which was #158. So, I chose #202 (since 2 + 0 + 2 = 4) and crafted my image to overlay on top of that book page.
Now, that book image is not only starting at the small size of 640x480, but the game leaves a border around the book to continue showing the Library room (so you can click outside the book to go back). Also, that book is partially burnt on the edges, leaving only a tiny spot in the middle of the pages that the codes get drawn onto. You can see it in the screenshots of the game; the background color of the code diagrams is slightly more pink than the book page itself.
So I knew this clue couldn’t be that verbose, else it would become illegible. In the final version, you can see the top-right corner of the clue “post-it-note” is at the top of the draw-able area for the diagram, so can’t get much bigger!
So, that was the first clue I actually got done. You’ll note that there’s no clue number in the final representation, since I hadn’t nailed down where in the 44-clue sequence it would fall yet.
So, with that clue set, I moved on to another big (in terms of prep required) clue:
As a “introduce you to something I do that you don’t do” sort of clue, I had in mind to create something in Minecraft and have her walk/explore/puzzle her way through it. She knew I played Minecraft both solo and with my college buddies online, but open sandbox games aren’t her sort of thing, so I figured showing off something creative I built for her in-game she would appreciate. But what to build…
The city of Tar Valon is a fictional city from the Wheel of Time Series by Robert Jordan. The city centers around the White Tower, home of the magic-weilding women of that book series, the Aes Sedai. Katrina and I read through that book series (or rather, listened through it together on audiobook) so I knew she’d be familiar with it to make the connection between a Minecraft representation of it and the book descriptions.
The primary reason the White Tower appealed to me as a scavenger hunt target was the book describes it as being able to house three thousand Aes Sedai, so it’s got a large number of rooms that could be used to hide something in.
The White Tower is circular, and the Minecraft world is all cubes, so I had to do some planning to lay out the tower floors. The books describe the White Tower as around 600 feet high, and each floor has sections for each of the seven colored Ajahs the Aes Sedai belong to. A standard Minecraft world is only 255 blocks high, with each block being one meter in height. So, the White Tower should be about 200 blocks high, which does fit within the world size, but only in a custom map where the sea level is dropped down (typical maps in Minecraft have ground height at about 62 blocks up, leaving not quite enough height to get a 200-block tower in there).
The biggest issue I ran into making this Minecraft representation is that walls in Minecraft have to be a full meter thick, so actually take up a lot of the surface area of a tower level. In order to make each Aes Sedai not just have a minimal sleeping cell, I settled on a layout where each Aes Sedai has a sleeping room and a sitting room, plus desk and end table. With that room module, I could fit 8 of each colored Ajah into a circular floor layout without the tower being stupidly wide. The tower ended up having a diameter of 75 blocks, so combined with the 200-block height, it still looked like a tower from the outside (rather than a wide, squat building).
I built one layer of the tower, and then used the MCEdit map-editing tool to clone it 50 times, which got me the majority of the tower set!
Then I created the just-above-ground-level floors (which are described as audience chambers and rooms for visiting petitioners to stay in), and the underground levels, including library, magical testing chamber, dungeons, and dining halls. And I made more lavish apartments on the uppermost floor for the Amyrlin Seat (head of the Aes Sedai) to occupy.
And to cap it off, I designed a custom texture for the Minecraft game to turn the stone brick blocks from the default gray to white (making it really a White Tower), as well as customizing the carpet textures to have the Flame of Tar Valon on them, to further set the tone of the books.
And with those two big clues set, and with half a year left, I figured I could go for it and make 42 more clues in time for our Anniversary…
To be continued…