Tours Roust Torus postmortem

So my goal with Tours Roust Torus wasn’t really about Spring Thing. I had my sights set elsewhere. And I knew I’d miss something. That’s not to say I blew this off. Well, I had some trepidation about whether I should go through with it and whether it should be in the main event. It felt like a bit of a throwaway, not as important as ARO/SA, but it was a neat challenge, and I’m glad I put it in the main event.

There’s always a danger when you say “I don’t want/expect to write something that blows people away,” but I’m pleased and proud of the work I put in and the process. This ties into a good reason why this postmortem is delayed, and maybe you’ll figure it out before this is over.

But first I’d like to thank the people who helped push me to make it the best. It’s not just about fixing bugs but also – this person had something to say, and they had suggestions for doing better, and I didn’t quite see how to right away, and I wish I could’ve fixed it. JJ Guest’s work on the cover art made TRT feel like a real actual production and not just some puzzles to code. I was pleased to see TRT be nominated for Best Cover Art. Maybe other entries were too. But this isn’t so much a “we’re number 1” as “man, it’s good 1) my work could inspire this and 2) someone would take the time to do this and listen to my suggestions for very minor tweaks.”

ClubFloyd offering help to beta test was huge. There were a lot of immediate bugfixes as well as some stuff I’d have to sit and think about, and I came up for answers with it. Dee Cooke, Olaf Nowacki and A Numb Scan Down (I mentioned in the credits that Person #3 offered this up as an additional totally optional puzzle, and I enjoyed it very much) had some very good testing ideas, and it struck me I got a lot out of their tries they didn’t comment on. Then Mike Russo gave an in-comp transcript and Art DiBianca sent one post-comp. So I was able to fix things up before Aaron Reed sent the final version to

All of this is very helpful not just to set me straight in the head and point out my bugs but to say, hey, it’s tricky to check everything, and the time they saved me, I can come up with a few legitimately creative ideas of my own, ones that wouldn’t have happened if I did all the testing by myself, due to mental exhaustion. And when people just Try Stuff, I take it as a compliment. It’s not just practical, but it shows me they had the time and energy to do more than just verify the walkthrough (note: anyone who just verifies the walkthrough does very good work. But seeing a good try I didn’t but could have considered opens so much up! More on a specific example of that later.)

I’d always wanted to make the Stale Tales Slate a proper series, but I didn’t know what was left. TRT was floated around as a name, maybe just Tours Torus at first. But the actual making something an idea happened out of left field. I’d meant to do a lot of touchups to Shuffling Around (#1) and A Roiling Original (#2) during IFComp 2021, but I wound up playing and reviewing the other entries, which was of course rewarding too, and I got nothing done on SA/ARO. (Ironically, in Spring Thing, I meant to play all the entries I could, but I wound up making huge progress on SA/ARO.) But one thing fell out. Some spoilers below for Roiling with an item called “coins.”

[spoilers]In the area after you beat the Big Baddie, you’re given a reward for finding anagrams. First a coin, then another, to make coins. One coin can become an icon, and two can become icons or sonic. Put them together, and you have SONIC ICONS, which are used to open up something otherwise closed.

In each game I have a huge table of nudges for good tries that say “No, focus elsewhere.” For instance, in the Swell Wells in ARO, the table of nudges checks for anagrams of SWELL and WELL and says something like “You usually don’t have to do anything with the location.” So I put “coinscoins” into the table of nudges, but I wondered if there would be a clever word for it. I have a batch script that points to the anagram finder, and it turns out CONCISIONS was indeed a word, at least in some dictionaries, and it fit into the final scene! This was actually the second time I found a double-letter word. Previously, it was the natant ant that you had to tan, which is referenced in TRT’s hints if you walk around a few times without scoring a point.

So seeing this happy accident, I wrote a Python script that detected such double-words. And then I added the restriction that they must be doubles of actual words. Some, like beriberi, were neat but too duplicated. Others, like redder, would also be too obvious. But some of them allowed for neat hints! There were a few six-letter words (or close to it) I was able to do more with than I thought. Saying YES summoned a SYS-EYE, and so forth. It wasn’t until a few days ago that I found a word to hint the dance-around-the-heptagon bit and give considerably more than “because it is there, and for variety beyond anagrams.”

As it turns out, I had about the right amount of words. Too many, and there’s be project creep. Too few, and obviously there’s no game at all. Some words were clear candidates. I had to force things a bit, but I was glad to. Sometimes forcing things slightly and saying hey, yeah, that works for me – well, it’s nice not to have to be perfect, and it helps me appreciate puzzles other people make that might not be 100% perfect.

A side note about the heptagon puzzle: it’s something I always wanted to do. I scratched out some ideas long ago for something different. I remember learning to draw a five-point star as a kid and being excited, then drawing an 8-point star (every three vertices over.) then trying to draw a 7-point star. But then I got confused, because there are two! One with two vertices over, one with three. So I had an idea that you’d be working between rival mortal enemy factions, one with the two-over star and one with three. That may happen, but I have my star game, sort of.

And I’m quite pleased with the puzzle. It’s a logic puzzle people haven’t seen before, and the feeling may be “Oh, it’s a guessing game” or maybe “there are 128 possibilities, and that’s a lot!” But I think a puzzle from Grandma Bethlinda’s Remarkable Egg may’ve pushed me to figure it out. You need to cool or heat an egg. It can go up 35 degrees or drop by half. You have so many turns. So it seems like a yes-no puzzle until you realize some combos don’t work. I actually got there a turn early, which didn’t count, and I enjoyed that dead end!

So I made my own puzzle with a fake dead end: it boils down to, you start at 0 and go forward 2 or 3 each time. You must cover 0-6 without touching any one twice, and you can’t just go forward the same number of steps every time. When I thought of the puzzle, I was worried there’d be no solution. So I wrote a script, and then I tried to reason things out. And I was glad to find there was exactly one solution. So I think this is a good puzzle in the abstract. Big puzzle fans may see that some combinations (2-2-3, 2-3-2, or 3-2-2 and 3-3-2-3-3) can’t happen, and that cuts things down in a hurry! The meta-puzzle of how to figure things quickly, and how to prove it mathematically, was very rewarding to me indeed. You can also do things quickly by trial and error if you know what to dismiss.

I originally just had the torus and the center room, and that was it, but I had a bunch of leftovers I wanted to use. They’d be there, and it wasn’t until March 31st (thanks, github, git and git -Sword_to_search_in_code) that I saw an interesting neologism with (TOURS TORUS)'s anagram. Some very good transcripts allowed me to have that time to sit back and wonder about things, and this fell out when I went back to

As for themes in the game? Well, there’s a definite theme of letting go and moving on. That’s for stuff you enjoyed or didn’t, stuff you need to move on to, to hit the next big project. And I hope it fit well into the puzzle mechanics, as I tried to mention “you don’t feel half as sharp as you used to.” I also wanted to have a lot of general satisfaction. I have a lot of emotional writing that’s important to me, but I’ve always found weird abstract puzzles that put a spin on what you know, and being able to figure them out, helps me feel competent, and I hope it helps others, too. So I was very pleased to get an award for “most satisfying.” I’d like to thank the person who gave me that, even if they were perhaps maybe sort of saying what I wanted to hear. There’s always that silly worry. But I find satisfaction to be a very underrated emotion.

And I think TRT was definitely a vehicle to help tie up SA/ARO and move on from the coding task. And that’s also why this postmortem took so long to write up! I just had a steady treadmill of SA and ARO fixes. I found a way to list test cases in Zarf’s scripts, so I knew I had covered everything. I’m aware some of the test cases may show up very rarely if at all in actual play, but often saying “hey, wait, the code here should be better” is a help.

I was able to release SA soon after, and the odd thing is, once you let go like that, sometimes you get other ideas. A DiBianca transcript with notes for SA (I’ve still not gotten through it yet) poked me to re-check if I’d really done all I could to speed things up in SA. But fixing a hang from Olaf’s SA transcript made me say “Hey, I need to do this for Roiling, too,” and rerunning tests for Roiling, the time taken dropped by 60%, leaving me to wonder if it was a bad run. It was not. In fact, the nudge- and error-checking, which took the bulk of the time, sped up so much that the really awful 40+ minute test script dropped to 8. So that was a big win.

I followed it up by breaking the “after reading a command” into rules by region, as SA and ARO use a hub structure–when I started with Inform, I didn’t really use rules beyond the basics much, but now it was pretty clear, stuff like:

Inform code

If the player’s command matches the regular expression “(whatever)” and player has item x: (special case reject text)

is slower than

If the player’s command matches the regular expression “(whatever)” and player has item x: (special case reject text)

and should be run as little as possible anyway.

“Only” a 20% speedup, but still very good for the effort involved.

So again, this sort of thing (the slowdown) was something I hoped to fix but managed to live with, until I realized I didn’t have to, and it gave me confidence I’d grown as a programmer from when I had the idea for Shuffling long ago. For the first time I believed and not just hoped there was little else to do.

But there was one more thing TRT got me to do in ARO and SA. It was my testers’ unwitting mistakes that turned this up, too! (I mentioned this above.) They would wind up misspelling the right word for, say, Tines Inset. Maybe 9 letters instead of 10, maybe too many of one letter and too little of another. So I rolled the dice with a late fix to detect misspellings. It wasn’t hard at all.

A few days ago I realized–I could do this for ARO/SA too! Most of the time, it’d be useless. For instance, SPAM would be hard to misspell with a double letter. But something like the MAGENTA NAMETAG, well, there’s a clear possibility someone might slip and type 2 E’s and not 2 A’s. And the code was not hard to backport! I just had to use a different sort of hash to detect maybe-anagrams instead of the real thing, and it was actually a lot easier and more precise.

how I used hashes

The basic idea is this: if a word has any number of occurrences of a, add 1. B, add 2. Letter X, add 2^(index of X - 1) to the total. After we’ve checked to see if it’s a straight anagram, we then check if it has all the right letters but in the wrong number. Since there are 26 letters, any one hash doesn’t go above the glulx limit of 2^32, just to 2^26-1.

TRT worked this way, to provide a small framework of features to add and tests to try, which I kicked back to SA and ARO, and I think it’ll make those games stronger. I wouldn’t have tackled things on their own with SA and ARO, but having TRT first gave me something small to try things on. With all I missed with TRT before the initial release, I don’t feel bad. The bugs/missed features were hardly nontrivial, and I’m glad the worry I was missing stuff didn’t stop me from entering. I think I ran the good race during and after the comp. And now I’ll be able to move on. TRT helped me balance some technical and creative goals very well. Maybe it will lead to something better and bigger.

That said, I’m disappointed I didn’t get through more Spring Thing entries. TALP is more my speed, so that took over as well, but I like to try to get outside my comfort zone when I can, and just reading reviews, there’s so much I’d like to see more in-depth. Maybe I’ll revisit the Spring Thing entries later. I think it’s important for IFDB to be active away from comp time. I was glad to have my mind clear to work, but I was disappointed I didn’t participate more, especially since there was a lot more chatter on this board than I expected!

But – one more thing. Why this postmortem was delayed? I suppose I was in a certain state of flow, getting things done for ARO, SA and TRT. So writing a postmortem might’ve put a lid on that in my own mind. There was one more thing to chase before the final writeup. I’ve had bad reasons for delaying, but I think this is a good one–TRT triggered bigger things I’d meant and wanted to do for a while, and they didn’t stop. And I hope I’m not the only one who’s ever had this distraction.


I have a hard time playing games when I’m deep into a project. Other voices and plot lines getting in my head is problematic for my own writing. I suspect this may be true for many people. All of this is to say that your being so busy with projects that will eventually bring me joy (I adore your games) is a great excuse for not being involved more in Spring Thing. And the ST games aren’t going anywhere, so it’s not like you missed the boat!


I enjoyed Tours Roust Torus. I think your wordplay games play more to my strengths than your logic and chess ones.

By the way I came across this anagram game—You Lose Good Day Sir— about a year ago and I guess this is as good a place to share it as any.

(If you play it, you need to go fullscreen because the embedded version cuts off part of the screen).

1 Like

Yes, we have to make time for ourselves, and it’s so tough to find a balance between doing for ourselves and, you know, contributing to the community! I’m glad you’ve jumped in the deep end and shared so much so quickly.

Yes, it seems like the best place to share things. Thanks so much for doing so! And thanks both of you for the nice words and support.

1 Like