Ailihphilia Postmortem

Short version: source control worked great! I recommend it to all, even people who think they’re not technical enough. Python helped with the grunt work for finding palindromes. And starting last November gave me lots of time to fill in details I meant to.

I probably originally got the idea from Kingdom of Loathing’s Palindome and Nick Montfort’s I Palindrome I. Palindromes had been on my radar for a while, but I always figured there wasn’t enough there, or someone would already have done it. But there was always a “what if” question. Or, could you actually make a full-blown game? And that’s where a lot of ideas start.

But during the 2017 IFComp, I wasn’t hugely worried about updates to my game. So I thought ahead to the next competition. I wondered if palindromes would be a nice fit for the small side area. Not enough to make a game, of course!

I had good luck with one-word palindromes. I could have a guy named Otto, maybe. The three seven-letter “-er” machines popped up early on. Not enough for a game, but there were some good jokes. The redivider might be something vicious down the line.

As it turned out, writing the script to track 2-word palindromes gave enough for a side area and then some. Python was a big help here. It was powerful and simple and got me off to a huge start. Even if you don’t know Python, you can probably guess what this does:

for a in words:
for b in words:
x = a + b
if x == x[::-1]: print(a, “+”, b, “= potential palindrome”)

There was enough I created a new project for a game tentatively titled “Put it Up” on November 25. And I made a commitment to add something every day and track it in source control. Source control was great. It helped me make sure I did a bit each day, and also it provided a fallback in case a feature I wanted to try fizzled. Doing something every day helped me make the game more robust. I’d meant to use source control more consistently the past few years for an IFComp entry, but starting early helped here. I got up to almost 1000 commits. I’ll hit four digits post-comp.

I forget when I figured out Ailihphilia and Aibohphobia were possible, but I think I discovered one and then googled it and discovered the other. Elihphile and tsilihphilist, alas, remained unused for the comp version. I need to add them for post-comp! But just knowing a word like Ailihphilia existed made me happy, and it just predisposed me to look for fun odd jokes to throw in, much more than the bland “Put it Up” would have.

Having such a big jump allowed me a lot of time to tune up utilities. These included reading the notes files to see if any of the ideas were already in the source, as well as seeing if my walkthrough and test scripts matched up with a table in the main file. For instance, one line in the table of goodacts (the core table that flags what to use on what to score points) was:

trap art reifier party trap – – true true false Yelpley “…”

This could be 1. converted to > USE TRAP ART ON REIFIER and 2. tracked in order, or sent to a test file, or checked against my Inform test scripts(“e/e/s/w/use trap art on reifier/e/n/w/etc”). Again, thanks, Python! I wound up writing a bunch of scripts I was able to use for previously released games to tweak code as well as to start on some new ones. I also created scripts to use with Zarf’s python regression test. They really helped to make sure the basics were down, and my testers didn’t have to prioritize game-breaking bugs.

The first wave of testing in March or so noted (diplomatically) the game was a bit long, and some puzzles were poorly clued, and I think having things technically straight allowed my testers to focus on this. (Also, there was a problem where some of them got locked out of the final room. Ouch, and it showed that testing scripts have their limits, but better then than in September.)

It took a few months for me to crank out the warp commands, which I’d never really done before, and I was pleased I’d arranged the code well enough that warping through to several checkpoints wasn’t too bad, but still, I needed a tester in the last week to help bash some bugs I was blind to during programmer-testing.

And testing the ways through Ailihphilia was a new challenge: with 77 different things to do to get through the game, that’s a lot of combinations! Testers found alternate ways through, or ways to get stuck, and they found bugs and inspired scripts that helped me check extreme cases (e.g. focusing on the west whenever possible, or on the east.) I had a lot to think about, but I had time, too. I even managed to get a list of 3-word palindromes. This was tipped off when I say “ark okra” and really wanted to make it work. I wondered what two letter words began with o, and … voila!

At first the script looked like it would take a full day to run, until I found a way to organize dictionaries of words (“this” would be a key for the following dictionaries: starts[“this”]/starts[“thi”]/starts[“th”]/starts[“t”]/ends[“s”]/ends[“is”]/ends[“his”]/ends[“this”] and so I didn’t have to compare very many word pairs.)

I was proud of this technical achievement. But I had a lot of practical work ahead.

Another thing I really enjoyed (and I hope my testers did too–they found some good “why didn’t I think of that” stuff) was the USE X ON Y commands that didn’t progress the story. I figured there’d be a lot to try, and there were 240 in the final table. Most of the combinations found were theirs. I don’t know if I’ve ever had testers add that much optional content to a game. Given that the game was USE X ON Y heavy, I figured I needed ways to keep people entertained if things did not work ASAP.

I was able to keep dumping stuff in daily. Maybe it was just a funny palindrome I noticed, or maybe it was a way to hint a particularly tricky puzzle. Perhaps even a misspelling. I was tremendously pleased with the KAOS Oak and spent several minutes giggling at it, as well as at the command SHUTTUHS that closed off areas once you were done with them, or the Xile Helix, X-it Stix, and Tix Exit (I think the letter X is funny. I hope you do, too.)

Or maybe it was a general overhaul of how to label rooms. I had some room names left over because I did not want to make the map bigger than 7x5, so I got the idea to change room names once things were done. Of course, there were a few big ones: Ms. Ism was originally Madam/La Gal, but I always thought I could do better.

I also figured it might be neat to have appropriate scenery to block people’s ways out and replace “YOU CAN’T GO THAT WAY.” Slowly, I filled all the borders. And an opportunity for a list of random text would present itself–I might have a fixed text of 3 things, but then I could run a small script to derive a bunch. For instance, King Nik didn’t talk about his predecessors at all until one day I figured roman numerals might give something. Then I found a few quick ones. Then I wrote a script.

And I had a lot of fun discoveries along the way, some computer-aided, some not. I think “Walla Walla W” as a random Diktat Kid goon and “Iolo I” as one of Nik’s ancestors were my favorites. Because my scripts didn’t figure them out. It seemed like the hinting inched forward, too, but it never got to where I covered everything. I think I got close–but the moor broom was probably the biggest problem.

I put in a lot of effort and enjoyed it and so I didn’t really worry about reviews. But all the same, it was good when they popped up.

One review that particularly interested me had nice things to say but didn’t find the political bit so hot. This is a tough one for me. I know some of my previous games got criticized for not really being about anything. And for the most part, Ailihphilia is that way, too. But seeing the opportunity for the Guy was just too good. And if and when I am political, I don’t want it to be just cutting down people I don’t agree with. I wanted to at least add a description or humor or give people something to apply non-politically. And I hope I did: the Yuge Guy looks physically impressive because he is so noisy, but he’s smoke and mirrors. Ms. Ism is a smooth confusing talker. Being pushed from opposite sides by people like that is something we need to deal with, politics or no. I meant them to be fun and funny to pack back off to obscurity. I suppose the Knife Fink and Verses Rev could represent general greedy trollishness and moralism, but maybe that is reading too much into things.

Unfortunately there were a few pitfalls. I didn’t do nearly as much as I’d like with parser tricks. I figured the guess the verb would be fun, but there was not as much to do there as I hoped. I also had big problems with the hint system. The first was room-based, and it said “go to room X, then see,” and it misfired, even when I was able to test it. Having my first really nonlinear game created problems that way–my testers found good alternative orderings for what to do, which inspired more scripts, but the hint system was a bear.

I patched things up before release, but I wasn’t fully happy. There was so much else to do. Several testers came back for a second round and helped me nail down newer features. Most of them were fellow competitors, and I was able to help them back, and that was cool to see. It was such a huge relief to say “Hey, can you check this with one week left?” and someone did, and even though the bug was obvious to a player, I’d have been mystified. I was also flattered by a fellow contestant who beat the game up and slipped me a few bugs to fix. Unfortunately, I wasn’t able to return the favor–many real life goals got in the way, as well as plans for IFComp 2019. It’s an offshoot of the original game that spawned Put it Up/Ailihphilia.

So an item-based hint system will be in the post-comp release. Along with more stuff in the mistake file and more random text in the tables file.

I hope the people who saw it enjoyed the semi-esoteric humor and uniqueness. Maybe there is a reason a game like Ailihphilia was unique and not done yet beyond “nobody thought of it enough.” But I enjoyed the challenge of making an odd world, and while it was probably too long for the competition, even that opened up neat engineering puzzles like the warp commands. Unfortunately I may have gone down the rabbit hole having fun with these. It’s not the first time.

Overall, though, I just wanted people to enjoy the game and stretch their brain a bit or appreciate that one odd detail they weren’t expecting, and if I helped other people shake their head and say, well, Ailihphilia came together ok despite being weird, so I should give my idea a shot–well, that’d be pretty cool, too. While I don’t strive for oddness for its own sake, I remember a quote from James Thurber’s “The 13 Clocks”:

Something very much like nothing anyone had seen before came trotting down the stairs and crossed the room.
“What was that?”
“I don’t know, but it’s the only one that ever was.”

I’d like to get as close to that as I can each time I write something while still being coherent. And I hope I always respect others’ works that try for the same, even if they baffle me. I’m not always in the mood to appreciate them fully, because it takes energy, but when I do, it’s rewarding. And I understand if it takes energy for other people to hack through my stuff. So I try to minimize the energy they need to waste, and I appreciate those who took the time to poke through my latest offering.