Postmortem (initial release)


This is my first postmortem on itch.io. The little things add up quickly. The formatting, being able to save a draft, and so forth. So if the length intimidates you, blame itch.io for making it so easy to write all I wanted. That's how it works, right?

It sure beats writing up postmortem.txt, then formatting it and noticing a few tweaks, then copying it back to make sure, and wondering whether or not to include it in my project. It's handy to be able to fire off a Windows task once a day to look at the post, too. All this helps me get ahead of things and not scramble at the last minute. So that's nice. Because I really enjoy writing postmortems, and I want them to be useful even for someone who might've disliked my game. But it's a surprisingly hard task on its own. Even the act of creating POSTMORTEM-NOTES.TXT before the game is released feels a bit pretentious.

IF you participated in ParserComp, I'd be interested in reading yours. It doesn't have to be super technical. I was worried I didn't have time to play all the game with all the fixes I had to do, but once done, I wished there were more. And to me, postmortems help give a bit more without dragging it out. I often learn from them, too.

Anyway, to my game.

The superbrief take:

Fivebyfivia and ParserComp got me back in a programming groove. I thought I wanted to write a big game, but I think a small but challenging game was what I needed. I was positively suprprised with the engagement.

The (formerly much more) short takeaway:

I'm glad Adam Sommerfield took time to organize things and write out the rules, and I'm glad fos took the reins when Adam needed to step away. They answered questions quickly and effectively. I remember the first ParserComp, which I wasn't able to enter (and the theme didn't suit my tastes anyway,) but it had some good entries and I was able to judge. I wondered if there would be another. There was, and it was a worthy sequel. I'd rather not compare the two explicitly. It was neat to  see new faces writing and judging and reviewing. The spoiler threads were lively, itch.io's comment sections for all the entries were a great resource, and I was glad people wrote maps of the bigger games.

Part of the fun was just trading works with other competitors, because we can always use that reminder these competitions shouldn't be too serious. And I find that when I see bugs in others' work, it makes me feel less bad about my own. Sure, you can be mean and say "X should've seen that," but what you're really seeing is "Here's something X catches 90% of the time, and they didn't there, and you don't see all the things they already fixed." Or "Yeah, okay, it's a typo they'd have seen in isolation, but this game has a lot of moving parts to keep track of!" And I just like the feeling of being a part of a community you hope to improve (however small). I'm not just throwing stuff at a contest to see what sticks. I mean, I don't mind if it sticks, but I'm doing more than just being a perennial candidate.

I took a concept I'd always wanted to deal with and, although the concept may be simple to experienced chess players, I think/hope I got a lot out of it. Implementing user-friendliness was rewarding. The knight-moves were probably a bit self-indulgent, but I liked the final puzzle. And I was pleased with the interaction I got on my entry. Whether that's due to the relatively small number of entrants (so people are more likely to give a detailed look,) the oddness of my entry, or just that itch.io is a welcoming platform for this sort of thing, I don't know. Not to knock IFComp, but for me there is still a lingering shadow effect from the days you did not discuss things publicly. Even though we KNOW that rule's been repealed, we still partially act as if it's there. Also, Itch.io has a full-time paid staff to implement social media stuff.

Fivebyfivia also came to me late, two weeks before the deadline. But I wasn't really jumping in blind because I knew about chess, and also because I didn't try to do too much. I don't suppose discussing that famous (to chess players) Marshall-Capablanca game that showed the power of a Queenside majority would capture the attention of people who just knew how pieces move for too long. I'd bounced chess ideas around in my head for a while, from "oh no that's too tough to program" to "someone already did it, it's nowhere near as complex as a chess engine" to "but I have no story" to finally, okay ... let's get the knight on the board. Let's do trivial stuff like not placing the kings next to each other. Let's throw in the queen. Let's throw in the rook. And now, let's sort out the bugs and user-unfriendliness. Testers and judges helped point out some important things to me, and it was rewarding to be able to do more than just write a program that checked (ahem) for checks, stalemates, and illegal positions.

I also knew I could never replace YouTube presentations or lichess's handy free practice tools, but I'd like to think I provided a useful new different angle.

I wrote this all not worrying where I placed and just happy that I regularly made changes, was able to make bug fixes in-comp, and am able to have a release with a useful new ease-of-play feature post-comp. But it was nice to make it to the top half.

The long takeaway:

Fivebyfivia wasn't my original game for ParserComp, but I think the other might've been too long-winded. The other game is ... related to a previous game I had. I don't want to spoil it. It might be nice for another competition, but not ParserComp. I remember feeling some despair as this game, which I'd banged in my head for months, just wasn't gelling. Wouldn't it be great if I had a simpler game I could bang out? I'd been watching chess videos a lot, so chess sprang to mind. The time constraints dictated that I keep it simple. I took a walk, and ideas fell into place. The internal dialogue went something like: well, I doubt that sort of game is worth it, but if it is, you'd have to do this. Okay, that's not too bad. But you'd need to do this, too. And this. And this. Okay, that's pretty robust. But that's just an abstract puzzle. It'd be more fun as a story. Okay, that story's adequate--but you'll need to add details later. And yeah, there are a few other things, I'm sure, but I'd have to see and run the code to figure it out and sleep on it.

That's roughly how a lot of games start, for me. A good idea is followed by a trickle of things I see, and suddenly I realize I've got something -- maybe not something to shake the world, but something worth chipping away at. Maybe I see how the game ends, or a critical point that hopefully makes the reader laugh.

I'm thankful to GitHub for helping me track the dates things happened, or started to, via the remote repo. You don't want to notarize everything you did when that first wave of Doing Stuff starts, but you would like a reminder. And after a tough bit of programming, you forget to note this happened now, etc. Then you see, oh, that's when Tester X did something, and I saw their transcript. I know source control was intimidating for me -- so much complex stuff to learn! But in retrospect, the simple stuff is rather big. I don't think I've ever used my commit logs for a postmortem as I did here. That may be a bit too meta, but ... for me, it's great to know something is keeping track of your history or daily progress or whatever, and you don't have to check any boxes.

I've already mentioned that trading with other entrants, and having people willing to test, was a big help to me. The specter of maybe saying HERE, RANDOM INTERNET PERSON, YOU GO PLAY MY GAME, YOU HAVE NOTHING BETTER TO DO is always there. Participating and cooperating helps dispel that. I enjoy looking at a genre I'd have otherwise ignored and doing a dive into a game. Sometimes I'll need a walkthrough, but I enjoy skimming it and seeing where I get stuck. I enjoy trading with someone in a different time zone, too--it's neat to wake up to a transcript, and maybe have them wake up to one, too, so they spend less time waiting for data. Anyway, this is a nonsequitur, but I do enjoy trading work with testers, and I appreciate the time and effort they put in for me. Even if they think "I was just kind of confused--" they work more than hard enough for me to see HOW they were confused.) Trading stuff with testers gives me assurance that if and when I run out of game ideas, I can still contribute.

My initial ideas for ParserComp were that other game -- and, after seeing a video from Implementors, a memory of Zork Zero. It had that chessboard puzzle that always made me want to try to make another. Zork Zero had a lot of canonical puzzles, and it deliberately steered away from chess rules, but ... I figured it missed a few! This was probably more due to lack of disk space, or realizing other canonical puzzles had wider appeal, than overlooking anything.

I'd already written a game where one puzzle was three pawns vs. three pawns. I figured implementing four vs. four, while interesting in its own right, wouldn't really be breaking new ground. (Note: if you're interested in chess, these puzzles are neat.) And so for a while I always wondered what would be interesting without being too tricky? Stuff like placing eight queens that can't attack each other on the same board is canonical but tricky. So is the 64-square non-repeating knight tour.

But I had been watching a lot of online chess during the pandemic. I used to play in college. But I was impressed how there were pretty smart adults out there who were quite pleased they'd figured out checkmate with queen and rook, called "ladder mate." Some were even confident enough to pre-move (make moves ahead of time.) Some were even pretty confident they could mate with a rook. So it gave me some confidence that sort of thing could work, with the right story.

I didn't want to do a straight-out chess game, though. It might be a bit boring to walk around the board and bark out directions. I also wanted to do something unusual with the parser, since this was ParserComp. What would be unusual? Well ... what if you moved unusually? With a knight? I'm not sure if this is a good design idea in general, but having the knight moves allowed me to create what I think are interesting timed puzzles. (Incidentally, if you want a game with lots of directions to move beyond the usual compass, try Brian Rushton's Ether.)

I'm not sure which came first--the mates or the final puzzle where you need to traverse the 5x5 board, touching every square. But once I saw the solution to the second, I was happy. It seemed like a fitting conclusion with an obvious bit of story: a victory tour! And it was a lot less painful than the 8x8 traversal puzzle. When writing it on scratch paper the first few times, I messed it up, but then I saw the thing to remember. I think this is a very good puzzle in general, since you can work backwards from the places where you get stuck. It's not trivial, but it's something you can genuinely forget and enjoy remembering. Or at least I can.

The name was Knight's Errand at that point, which is a bit generic. But ... you have to trust placeholders, as long as you don't have too many. And I find the more details I put into a story, the more accurate my guesses at its real title become. So I found an intermediate name: "Conquering Fivebyfivia" on June 17th. But I didn't know why or how Fivebyfivia should be conquered ... beyond the techy "well, you're in a 12x12 place that has a 5x5 piece cut out of it, so it makes sense." I'm not the first person to write a because-it-is-there game, and I wanted something less generic. With time running out, I was worried nothing would show up. So I asked on intfiction. Sometimes asking does the trick--well, along with having a good place to ask.

I can't break down the details of how and why I found the final name. I'll only mention this little thought experiment. Let's say each new original guess has a 1% chance of yielding the "real" title of a game. That means, after 70 guesses, you have a 1/2 chance. In my case, that meant about 5 guesses a day. So I started throwing stuff at a wall. I also think that percent was a SWAG and totally variable, but it increased with each interesting failure. I tried to balance serious and jokey guesses. Sometimes bad jokey guesses inspire the sort of "Of course not, it has to be this way. Oh wait. But does it?" that starts you going  in an interesting direction. Or you go with the old reliable "What would someone creative call it, or say you should've called it?" Which to me is a lot nicer refresher than, say, "Where did you last see your keys?"

For some reason my mind turned to Asterix and the Laurel Wreath. He was on trial for something or other. The prosecutor started "Carthago Delenda Est!" Asterix's lawyer jumped up and yelled "but that's how I was going to start!" It was one of my favorite scenes of some great ones. But I couldn't appropriate it, could I?

My ambivalence didn't last long. After midnight June 18th, it got changed to Delanda Fivebyfivia Est. Then I fixed Delenda later that day after rudimentary Googling. Then I fixed the word order. Progress! It sounds silly, but I think I needed some trivial hoops like this to jump through after the technical stuff of programming how chess pieces moved. Even without having to deal with en passant. Of course, things slipped through with this rebranding. I needed a tester to tell me the "delanda" item I created to help the player needed its abbreviations renamed. I eventually settled on having X/EXAMINE examine that item by default, because that sort of simplicity is probably needed in a game like chess.

Even before testing, I realized I needed more in-game clues than I had, to help the non-chessplayer. But I didn't know what! Unfortunately that involved asking people to potentially be quite frustrated with my beta builds. Testers obliged. Their travails gave me hints, but I missed a few obvious things. I added a queen/rook tutorial. (I forgot to clear the board when it was done. You had to fail.) But I knew one thing I couldn't do was say, it's okay, it may be a tough puzzle, but you can fail as much as you want. But it never feels this way. This TedX talk has details--even when there's no material penalty for failing, failure feels like failure.

And given the bloodthirsty nature, I never did quite reason why the enemy king would keep coming back for more even though you kept failing. Suspension of disbelief, I guess. However, one thing I got out of this was to have you place the king last. That, with the map, seemed to give some nudge towards guarding all squares for a checkmate.

But there were other things. How do we hint the player is on the right track? Do we want the player to be able to duplicate solutions? What if they stalemate the opposing king? (Note: this is hidden in the walkthrough, and I may release a new one showing you how to stalemate.) At first I had the game reject stalemate, but then I saw it as an ideal way for a nonviolent takeover, a bit counter to the rules of chess ... but some stalemate positions are absurd and harder to find than checkmates!

I decided on timed puzzles, but not to be cruel. A queen can mate a king a bunch of different ways, but with only 3-4 moves, you can't just zoom around carelessly. That seems restrictive and demanding, yet at the same time, the timed puzzles cut down on possibilities--which cuts down on false trails. The player may figure an enemy king is best put in the corner.

Then I wondered, how do I eliminate the clearest duplicate solutions? I was thinking of the case of: kings 2 squares from each other, losing king on the edge, queen/rook perpendicular to the kings. The knight actually did this nicely.

The last few days, maybe I was burned out from the initial burst I had in the first week. I gave myself the time to check for big errors, and I didn't. I had things I clearly should've checked more (or at all,) like the web build. I in fact uploaded the 1.0.0 blorb to the 1.0.1 and 1.0.2 .zip files until I fixed my build script, but thankfully, not many people check that to play the blorb.

Sometimes I still feel like I go in slow motion for any sort of aesthetic considerations. As if saying "oh that's not me, I've always been the technical sort" helps me with the technical side. Maybe it does, but it also provides a huge ceiling.

And my big mistake was probably transferring some debug code into a core module to use later.

Then not marking that code section as debug. Oops.

I had a feeling this sort of bug would slip through. It's sort of like playing a chess game where you're pretty sure you did well, and heck, you won and beat a pretty decent player, but the computer will point out all your errors afterwards. But you just don't want to look at the bad news right away! With programming, of course, the computer pans your bad syntax, but it hides the subtler runtime bugs, and it has no clue about user-friendliness.

Still, I can't be too upset of the bugs that slipped through, from a project/programmer's perspective. Being upset about judges' confusion is another matter. I'm still not sure why I didn't activate map-view for the first three scenarios as well as the final one, where you need to cover all 25 squares without repeating. But I didn't, and a reviewer pointed it out, and it was a quick fix. But of course once I saw that, I saw other things.

I was worried I "only took two weeks" to write it, but it was something I'd been thinking about for a long time, and it reminded me of how proud I was to figure the canonical endgames and, later, how to win them quickly in competitive games' time pressure. (Protip: for a queen, cut the enemy king's squares down, until he has just two to shuffle between, then bring your king in. For a rook--well, several heuristics help, but Youtube has lots of videos.)

The Greeks had concepts of chronos and kairos and I found a bit of kairos and was able to take it. Nothing world-shaking, but I think I'd have been a fool to turn it down or say "A chess text adventure? Nah, too weird."

The future:

There will be a post-comp release.

Early on in the competition, Robin Johnson, who wrote the deservedly acclaimed Gruesome, mailed me a simple idea I feel silly missing: why not just let the player type the square they want to go to? I thought shortening southsoutheast to SSE was quite efficient. A 78% reduction in letters to type! Beat that!

But of course, having a map with possible squares marked (again, I did something at least as tough for the final quest) and maybe even allowing multiple jumps would be ideal. I'll detail the coding in a devlog later.

The thing is, I want the player to think. But I want that thinking not to be busy-work. So if they're able to picture the board and squares, we should allow them that shortcut so we can concentrate on the puzzles. And maybe with more time I'd have seen it.

And I'd used the GT syntax elsewhere. But it seemed inefficient to type, say, GT A4 ... and there were other details that probably made me say "no, not right now." But the more I looked at it, the more I missed it.

So while I made mistakes in FDE, I'd like to think it was in good enough shape that someone could easily say "hey, why not do this" instead of thinking "pfft, they could do this, but the game's not worth saving."

Between this suggestion and the testing I was able to trade, the whole event did feel more like collaboration than heavy-duty competition. And even though I started late, and I felt a bit burned out with 3 days left, I never felt terrible pressure. It was good to be almost ahead of schedule.

There are other things, like how I struggled to get a proper ZIP file for the web build, but this time I think I finally got it right, so it'll be easier later. I've always bailed and said "oh, I don't understand that," but with all of itch's handy features--well, I'd like to do my part to help rollout of my games (past or present) go smoothly. I spent part of an evening with this--and also with setting up a password for the sequel to Fivebyfivia's workspace, because I don't want any last-minute annoyances with the web presentation, and also I want to make it easy to (finally) import both blorb and web versions of older games.

Yes, Twelvebytwelvia isn't content to stay as Twelvebytwelvia. It's not the sequel the world needs, but once I saw a few puzzles, I thought why not. The major story, with side stories for each scenario, dropped in place.

The board will still be 5x5. But you won't have to make knight moves, and the "c3" syntax will be available right away. I've used a few of Zarf's regression testing scripts to find the big errors. Perhaps it will be in time for IFComp, though I don't know if it's a good fit. (I wonder if any of my games are. Still, the IFComp deadline each year has been a fantastic fit for me to write something.)

Advanced players may guess what some of the puzzles are. None are repeated from Fivebyfivia, but the mechanics are similar. They lend themselves to more of a story. I like the working title, too, though it's not in Latin. And I hope less advanced players may look, say "Wait, that's impossible" and enjoy the solutions even if they can't figure them out.

Years ago, I wouldn't have expected to wind up writing one text adventure game, much less two.

Get Fivebyfivia Delenda Est

Download NowName your own price

Leave a comment

Log in with itch.io to leave a comment.