Iron ChIF: Season One Episode 2 (Lancelot vs. SomeOne2, using ZIL)

Post-match interview with Challenger Lancelot

Lancelot was quick to answer some post-match questions despite feeling somewhat battle-worn…


Q: When you signed on as a challenger last year, you indicated that you planned to spend time learning ZIL to get ready, and you didn’t say anything to the contrary in your pre-match interview. Is it really the case that the first time you tried to compile something in ZIL was after the start of the match?

OB: Yes. I spent a few months going through the material available to me: Learning ZIL by Steve Meretzky, ZIL by Marc Blank, and a few other PDFs I could get hold of. I think all are available through https://zilf.io or https://intfiction.org.

I was originally planning to install the ZILF software on my laptop along with VSCode, but a change in corporate policy a few months ago made that impossible, so I turned to online tooling like https://zilf.io and https://borogove.app.

I did play a bit with REPL to figure out how some commands would be evaluated, because the documentation was not always very clear to me, or gave different interpretations. Now I understand why Tara McGrew decided to put together her own standard library, because apparently there was no real consensus on how things should actually work.

But yeah, actually starting to build a complete program was after the start of the comp, because at that time I was still not aware of differences between ZILF and what Infocom used. If I had known I would have taken the time to learn about ZILF, not learn about ZIL.


Q: What advice would you offer to someone else who wants to get started using ZIL?

OB: Forget about the Infocom manuals which are quite a bit dated. They also turned out to be missing crucial bits which would have been helpful during the comp. Far more useful would be documentation on how ZILF actually works, and of course learn about its standard library. If there is one thing which is important about learning a new programming language (apart from syntax and related semantics, of course) is how its ecosystem functions (how does one make use of libraries, how does one create their own libraries, is there any community of shared libraries, etc.).


Q: You described ZIL as “a very elegant language indeed once one gets used to it.” What kinds of power do you see in it compared to the other platforms you’ve tried?

OB: Well, I do not know a lot of programming languages which have simple yet powerful ways of constructing software. For languages like ZIL, in the end it almost all boils down to making use of list constructs. Which allows LISP like languages to process not only data, but also programs (which are also lists). I once wrote a LISP interpreter which needed very little memory to run, because all it had to do was to be able to parse tokens and construct lists.

A major disadvantage (at least for ZIL), is that in the end, everything is numbers; I was caught several times this week in making typos (forgetting a comma is a nice one) which were extremely hard to debug, because no errors or warnings were shown, it just accepted it all. But of course did not work at all and gave surprising results.


Q: As the challenger, you had the final choice between challenge ingredient candidates. What drew you to the one that you selected?

OB: Interaction! The other option seemed more focused on conversation handling (“A talking door? Sirius Cybernetics Corporation possibly? Stay away from that door!”). [editor’s note: One of the two non-selected challenge ingredient candidates was a talking door that won't open.]

I was playing with a Rubik’s Cube when thinking about what to do with the challenge ingredient and then the swapping one needs to do to solve the cube sounded like the perfect mechanic to express that SPACE == TIME, when treating each of the 6 planes as different time periods. After that selection was made, I literally considered to make an IF version of a Rubik’s Cube. Total madness of course, it would be MUCH harder to solve than an actual Cube. But the idea stuck and in the end was tweaked to make it more suitable for parser play.


Q: With such a broad premise, surely there are some ideas that you had to leave out due to time pressure. Do you plan to expand this game later?

OB: Oh definitely! I basically made a list of things I wanted to do and more or less tried to order them in increasing complexity, so I could tackle the easy stuff and try to have something ready for testing as soon as possible. It did not turn out that way, but the list still stands.

Things like:

  • Customizing library messages (especially the x me answer)
  • Some interaction with an NPC. I had one in mind which would have been perfect for teaching the ropes of the game to the new player, like a built-in tutorial. That definitely had to go, but in most of my games so far I always try to put a walkthrough or something similar in, so I will definitely add that once I get the basics out of the way.
  • Roaming NPCs to keep things more lively, instead of the static entities they are now.
  • Handling default commands. I had no time whatsoever to even try anything but the most basic commands.
  • Handling input in a more flexible way than just VERB OBJECT. I tried to use objects for the time periods so the player could refer to them, but that did not work at all (standard commands would also try to process those objects); so in the end I turned to a number scheme where the player picks a number to select a time period.
  • and others…

Q: What advice would you offer to future challengers?

OB: Get a good toolset! That includes getting a good code editor which is aware of the language you are programming in. Finding missing commas, brackets etc. in Borogove was a pain in the backside.

https://borogove.app kinda worked but was limited in the versions it could handle (and also went down a while for me during the challenge. Always have a backup plan…). I also tried https://zilf.io but then I had to download each build because I could not run the results directly in my browser. No doubt a corporate setting interfering.


16 Likes