Illuminismo Iniziato post-mortem
This is really long and autobiographical so apologies if it’s not of interest to everyone.
When I entered Risorg in Comp03 and it did well, I felt really good. I knew I wanted to create a sequel.
Real life intervened–our corporate overlords had closed our local office in September of 2003, right when the competition was about to start. I was out of a job during the last couple of weeks leading up to the competition. It meant I had lots of time to finish Risorg, but also a crippling sense of worry with a wife and 7 month old baby to think about.
I found a new job in December of that year, one I didn’t really like–it was in the right field, but the environment was poor and it just didn’t really suit me.
But I had a job and some time on my hands, so Illum was born in early 2004 in the heady post-IF Comp 03 days when I was sure I’d knock out a sequel by the time IF Comp04 rolled around. It was around February of 2004 that I first started bouncing ideas around in my head. I’d learned about Inform in February of 2003, and managed to complete a game in time for Comp03, so surely Comp04 would be easy–I already knew the language and I had a complete working game with a lot of the essentials done already. No worrying about figuring out hints and so on.
With this in mind, I started work on a text file called “ideas.txt” that had ideas for the plot. I worked on sample gameplay transcripts. I coded up some bits. I wanted to make sure I did things like keep a Glulx target active during development. Risorg had come perilously close to Z8 limits, and had in fact blown past them in debug form, so I wanted to make sure I didn’t code in anything that I couldn’t also get to work in Glulx.
In about February of 2004 we found out there was another baby on the way. We’d had no idea, as my wife was suffering from hyper-thyroidism and hadn’t gained any weight as a result, but she was already 4 months along. So there was that to contend with… and then I changed jobs again in the summer to something I enjoyed far more.
All this meant the game fell by the wayside and I reluctantly accepted that Comp04 wasn’t going to happen for me.
I still banged away on ideas… that ideas.txt file is the only thing that stayed with me, because I emailed it to myself so I could work on it at lunch at work during the long winter months. These ideas show some of the bizarre notes I made early on. I was thinking maybe the professor from the start of Risorg would make an appearance in the end game. He’d defeat Renaldo with boredom. The player, long used to boring lectures, would be protected.
Some other ideas from ideas.txt… these are the exact notes in the file, current annotations follow in [ ]
- initial task of player: fetch something/run errand for Nin? Or something happens right away? Agent arrives from Vechlee with professor’s notes,
story of Renaldo working a massive spell. [ This is quite similar to what’s in the final game ]
- book-end with Risorg1… start in Blumph, get to Vechlee, get to caer, close rift by going back through and returning home [ the book-ending is still there in terms of going back to those locations… and in fact, the puzzles are designed to hearken back to Risorg ]
- have to get to Vechlee? Via ship? But there’s no port in Vechlee. How about airship? [And suddenly, a bunch of possibilities arose from that]
- Ned as NPC following player around? Maybe… ouch. [Ouch indeed! Ned’s Yorkshire dialect is not easy to write. I compromised by using his brother to guard the caer.]
- Conjuring Commodities: store in Blumph run by old crone from Sorcery Supply–she moved to Blumph after Wizard’s Guild was (largely) defeated in Vechlee.
- she will buy and sell things from/to the player. Anything she has for sale is described in wonderful glowing terms. Anything the player has to sell is described in disparaging terms, and priced at half (or 75%?) what she sells it at.
- player will have to buy a broomstick there to get from one roof to another, OR go to the carpet store to get the red carpet repaired. Either will use up the cash player has
- red carpet description will be similar to Spellbreaker [ kept that in there ]
- carpet merchant will be dressed like merchant in Spellbreaker but will be unfailingly honest [ and that ]
- hermit also runs a store called Lonely Mountaintop Tours, sells climbing/mountaineering equipment that player will need. This equipment will be
used (so player thinks) to climb over a wall into a house in town… in reality, when player uses the equipment, the wall will come tumbling down.
Player can ask hermit about rope, cable, etc. which he’s out of (humourous responses, a la Python cheese shop). Only thing left is a very fancy
auto-climber, fire it at thing you want to climb, push button, up you go. [ looking back, I’m very surprised how early this was in there ]
- Ninny says "you can stop by the post office and pick up my mail (“ask clerk about mail”, “ask clerk about ninario”, “ask clerk about ninario’s”).
Clerk is Betty, hands over Ninario’s mail, Wizarding Weekly… he really should fill out a change of address form (clerk is all out), the label on here still lists his old address. [ Some familiar things there… a theme of recurring characters from Risorg is developing ]
- label used later to direct Wizstrip vat
A short time after that, I came up with the prologue that’s largely in the game today, and coded that up as well. While writing that, I suddenly had Ninario mention “And you can take my junior apprentice.” I don’t know why, it just popped into my head. That was the first seed of Crystal, who would go on to become such an integral part of the game. In this early envision, you, the player, already knew of her and when Ninario mentions taking her “Cold fingers dance along your spine.” In that early draft, Ninario mentions that you taking Crystal along will be very helpful… to him.
At that point, I envisioned a Floyd-like (or Ramona-like, for those into Beverly Cleary) companion, fun but somewhat annoying… I started dreaming up scrapes for Crystal to run off and get into that would both be helpful some of the time and irritating some of the rest of the time. In the back of my mind was the thought that I didn’t really like that sort of character, of course.
I also didn’t like the idea of having to do the work of making Crystal move around independently–how to judge when to do that? How to deal with pacing? How to stop it happening when the player was in the middle of something else? So I thought up the snow globe. That solved a lot of those issues and it meant Crystal, because she wasn’t moving around actively causing trouble, had to become more talkative… and, as a result, more helpful.
So some of this was coded, some was in transcripts, some was just in text files. I was doing all this on a little old laptop my dad had given me, a cast-off that his office were getting rid of. I’d installed Linux on it and managed to eke some reasonable performance out of it.
Somewhere around 2005, there was a hard drive crash, and all the WIP on the game was lost. The only thing to survive intact was the ideas.txt that I’d been emailing around. I managed to get the hard drive to spin up, but with the partition table trashed, the best I could do was stroll through it with a hex editor looking for bits of the game. I managed to recover most of a game text dump I’d made from the Z5 file early on, but I really lost my enthusiasm for the game at that point. I was discouraged.
Fast forward to 2008 and with 4 kids and football, swimming, skating, piano, school plays, I seemed to have zero time to work on the game. We were always looking after the kids, driving them places, playing with them… normal parenting stuff.
I worked on the game off and on throughout 2008 and 2009. I was thinking vaguely that a 7 year gap between the games wasn’t too bad. Seven is sometimes considered a mystical number in wizarding literature, so I was thinking about IF Comp10. That didn’t happen either.
It was around this time, I think, that the newsgroups started to die a slow death. I stopped following them and lost interest in IF. I switched jobs again in 2011, shifting focus from hardware development and embedded software writing to being a pure embedded software developer. My old job pressed me to stick around so I compromised and started doing consulting work for them on the side. All this meant a lot of my free time was split between work and the kids–no time for IF. With 4 kids, the extra income was handy, but it didn’t leave a lot of time for anything else.
At this point, I had the game firmly planned out all the way to the end game. I just didn’t know how to get around to doing it. All the elements were in my head for the final showdown, all the bits along the way, Wizstrip, explosions and so on. But because I had it all planned out, all that stretched ahead of me was long amounts of coding with less of the joy of imagining. I couldn’t get started.
Fast forward again to 2017. I’d been working lots, either overtime at the regular job or consulting at the old job. But a retirement at the old place of work and a new boss there meant the consulting work started to dry up. Things stopped being so crazy at the regular job.
It was September. I dipped in to some of the Comp games. My eldest, now 14, was interested too. I showed him Risorg, introduced him to Inform7 and he made a few little games. That got me interested again too.
I became determined to get myself in gear and finish Illum. I worked steadily through October and November. The game changed drastically in that time. It ended at the airship–not because I saw that as the end game but because that was all I’d coded.
I’d always loved the idea of an automapping game. I love the way Beyond Zork works. I struggled for a long time to make the Beyond Zork font and an automap work for me. It’s quite a pain to do that sort of thing in the ZMachine easily. A lot of the help about status lines online doesn’t apply to later versions of the Inform 6 libraries and I never got it to work quite the way I wanted.
At the same time, I was still adding to the game–I wanted Risorg and Illum to be book-ended and found I was pulling in more and more locations and items from Risorg. There were locations in Risorg that had been written with a sequel in mind, rooms that seemed superfluous in Risorg but that would have a purpose in Illum–the area under the shed, the barren plot of earth behind the tower.
Anyway, I soon reached the limits of Z8 and could no longer compile to that target. That being the case, I figured there was no reason why I couldn’t try doing an automap in a more Glulx-friendly way with images.
Initially, I started by figuring out the area I wanted the map to be and how much of the map area I wanted to show at once. I (eventually) settled on the idea of a 13x13 grid with each “map” element being 24x24 pixels. I gave each room in the game a 169 element array with that room in the center and all the rooms that should be initially visible entered as elements in that array. I laid this linear array out in the room object like a grid:
map 0 0 0 0 0 0 0 0 0 0 0 0 0 ! 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ! 13 0 0 0 0 0 0 0 0 0 0 0 0 0 ! 26 0 0 0 0 0 0 0 0 0 0 0 0 0 ! 39 0 0 0 0 0 0 0 0 0 0 0 0 0 ! 52 0 0 0 0 0 0 6 0 0 0 0 0 0 ! 65 0 0 0 0 0 0 10 0 0 0 0 0 0 ! 78 0 0 0 0 0 0 0 0 0 0 0 0 0 ! 91 0 0 0 0 0 0 0 0 0 0 0 0 0 ! 104 0 0 0 0 0 0 0 0 0 0 0 0 0 ! 117 0 0 0 0 0 0 0 0 0 0 0 0 0 ! 130 0 0 0 0 0 0 0 0 0 0 0 0 0 ! 143 0 0 0 0 0 0 0 0 0 0 0 0 0, ! 156
The “6” and the “10” told me which graphics to draw in those spots in the map window. Well, this worked fine until I started traveling to rooms–my idea was that I’d add other rooms to each room’s map as I explored other rooms. In practice, this was a nightmare! If I visited a given room, I had to then patch every map that contained that room so that the room would appear on those maps. It was completely unmanageable.
My next solution was a massive 735 element array for just Blumph (Vechlee was its own map area, due to the airship neatly separating things). It contained every element of the map from the get-go, completely describing the game area. I used the most-significant-bit to track if an area had been visited or not, so I’d know if it needed to be drawn. Then, each room was given an offset value into that array to tell me which element to look at when drawing the map for the room. As the player visits rooms, the visited bit gets set on the global map and because of that, every room automatically picks up changes. Visiting a room marks that room as revealed, as well as the 8 elements around it so exits show up as well.
I was pretty pleased with the automap, but I was left with a wide area under it that was blank. The idea of pictures was appealing but without an artist on retainer, a picture for every location is a tall order. Then I hit on the idea of making the Tattler appear in the sidebar. I created an old newsprint style background in GIMP and then created all the stories and made it so you could click the articles to advance and read the stories that way.
Mike Spivey, who was a beta-tester, really liked this, but found clicking all the way through stories he’d already read to be a pain, so he suggested the addition of the “click for next article” link.
And that was really the last major change to the game. The rest was tweaks. The splitting of the map into a Vechlee and a Blumph map meant that all the rooms in the Blumph area were changed to a different class, resulting in an undiscovered bug when examining the floor in the wooden house. Sigh.
All in all, I’m pleased with how things turned out. I plan to do a post-comp release to fix a couple of bugs and implement a whole bunch of things. David Wellbourn kindly sent me a transcript of his playthrough and it turns out he’s a mad demon for examining things in tyromancy visions, and uncovered a lot of things that get mentioned in the visions, like Renaldo passing a key to Yekcal, or opening the safety deposit box and finding cheese, that turned out to not really be there. So most of that is fixed.
I suppose this is now far too ridiculously long, but I will just add that I plan to release the I6 source code to the game at some point. I realize not many people are coding in that anymore, but it’s what I’m comfortable with. As a programmer by trade, I find I6 far easier to wrap my head around than the pseudo-English of I7.