Well here it is, the first installment of Silent Running, a text adventure created using Inform. The initial idea was to create something that would run on my Epson PX-8 which is a CP/M based machine. The first speed bump was locating a Z-machine interpreter for CP/M until it was pointed out to me that as I had the original Zork games for CP/M I had a suitable interpreter.
The Zork games typically came as two files, for instance, Zork1.com and Zork1.dat, the .com file being the interpreter and the .dat file the story file. The interpreter supports version 3 story files and if you create a compatible story file you can rename it Zork1.dat then run Zork1.com and your game will load and run.
Needing to create version 3 story files I opted for Inform 5 as the compiler and was of course free to write the source code in any suitable text editor. Thus development has taken place on a variety of machines including the Atari Portfolio, Epson PX-8, Epson Equity LT and some more modern machines. I had hoped to compile the code on the Equity but I still haven’t had any success.
The game itself is heavily influenced in tone by Snowball from Level 9 which remains my fondest memory of text adventuring, that and Melbourne House’s The Hobbit. I would estimate that I’ve completed about a quarter of what I’d hoped, therefore there are a number of elements within the game that may currently seem like red herrings. The current goal is to achieve access to the biodome area of the freighter.
There will of course be many bugs, not the crash your system type, but responses to player input that are not catered for and the like. Once you’re in the world creating it it’s difficult to jump outside and imagine how others are going to interact with it, reports would be welcome.
I’ve been quite absorbed by this process which has been enjoyable although it has meant I haven’t had as much time to keep up with all the other entries as I’d have liked and I’m looking forward to doing that now.
You’ll need an interpreter should you wish to try the game, you should be able to find one here:-
If like me you need an interpreter for CP/M you can download Zork and the included interpreter here.
Finally resolved the issue that I’d passed on a few days ago. With some help from the chaps over at the interactive fiction forum I finally found a method to return the location of Huey, Dewey and Louie to the player when the player examines some monitors that are found around the Valley Forge. The final code was:-
Object monitors “bank of monitors”
with name “monitors” “monitor”,
description “There are three monitors, each one showing a live feed from the freighter’s maintenance drones.”,
found_in droneroom crewsmess,
[; examine: Print "^Huey is in:- ";Print (name)parent(drone1);Print "^Dewey is in:- ";Print (name)parent(drone2);Print "^Louie is in:- ";Print (name)parent(drone3);
has static controlled;
The next thing I’d like to resolve is having the drones follow you when instructed rather and having to ‘take’ them which is the current situation. Apart from that I realise I probably don’t have enough time left to sort out the various bugs and weird behaviour resulting from unexpected player input.
It’s Never Finished
Games are never finished. There’s always one more bug, or one more message which could be improved, or one more little cute reply to put it. Debugging is a creative process that adds to the life of the game.
In the case of his own game Curses he writes:-
The play-testing process has increased the code size of ‘Curses’ by about 50%: in other words, over a third of a game is devoted to ‘irrelvant’ features, blind alleys, flippant replies and the like.
I’ve learnt just how much I’d underestimated the time required for this stage of the development and it’s given me a new appreciation for how tightly coded the original Infocom games must have been.
I’ve made a fair bit of progress today, tidied up a fair amount of code, resolved a number of issues that were returning slightly odd results when the player did unexpected things. I came across some documentation that alluded to setting parameters for the target displays Sad I know but this was quite exciting given the limitations of the PX-8′s display and the fact that the only CP/M interpreter I have doesn’t as far as I know allow you to specify display settings.
I therefore compiled a version for the PX-8′s 80 column by 8 line display and while I was as it one for the PX-4′s 40 by 8 display. I transferred them over and… it didn’t work. At the moment I don’t know why it’s not working and I also don’t know why I took some video of it not working but I did.
With the deadline looming ambitions have been somewhat scaled back. Instead of attempting to finish the entire game it’s very much going to be a Silent Running (Part 1.) The process has reminded me of my school exam days where I would race through the exam in around a quarter of the allotted time and then spend the rest of the time writing out the original scribble in a more legible form. As I learn more elegant ways of doing things I have to spend time going back and updating the code.
However much of it remains inelegant, there’s one problem that I can’t seem to resolve which involves monitors I had intended to place in various locations that could be examined to reveal the current locations of the ships drones, Huey, Dewey and Louie, I’ve had to abandon this for now as it was taking up too much time. As an aside, I’d forgotten how quickly the hours pass when engaged in a task like this.
Of the several kludges I have resorted to, possibly the most Heath Robinson is using the Take and Drop routines to have the Drones follow the player character, in the process modifying the parser to say ‘You are carrying or being followed by’ in place of the standard ‘You are carrying,’ Ouch! Using ‘drop’ to have someone stop following is pretty poor but I’m confident given a bit more time I’ll crack that one.
Of the ideas that I’d mapped out in my mind I would guess I’m going to achieve about a quarter of what I’d hoped. The goal therefore of the first instalment will be to make it to the next area of the Valley Forge.
One thing all this time in front of the computer has allowed me to do is catch up on old Retrobits podcasts which I can’t recommend highly enough, great stuff Earl.
No progress on the Silent Running adventure for a couple of days. I got bogged down in trying to resolve a particular issue, realised it was time to walk away and come back fresh which hopefully I’ll do today or tomorrow.
Instead I’ve been messing around with the Equity, trying to understand what it’s capable of. My first experience with a PC as opposed to machines such as the Amiga and Commodore 64 was a Pentium 90 based machine with Windows 3.1, so the pre Pentium days passed me by.
I’ve been trying to compile the code I have written so far with the Equity with no luck as yet. As a point of interest the code compiles on a Core 2 Quad essentially instantaneously. On a Pentium 166 it takes a few seconds. On the Equity it’s taking around 4 minutes before failing on a specific library issue. I need to try the Minform library I mentioned in an earlier post next.
I also wanted to see what games would run on the Equity and found an early version of a Secret of Monkey Island demo which loads and runs. I was never really aware of the limited graphics abilities of the early PC’s having been spoilt by the abilities of the Amiga and its custom chips, it’s pretty basic stuff as I’m discovering.
The Equity has two option slots, one is currently occupied by the hard drive controller card and I believe the only other card produced specifically for the option slots by Epson was a modem card. Somewhat bizarrely one just came up on Ebay, unused, and new in the box so I snapped that up (only bidder) and it’s on its way.
I’ve been trying to settle on one platform for the development of my Retrochallenge Winter Warmup project, a text adventure for my (and other) CP/M based Epson PX-8. Not that long ago I acquired an Epson Equity LT laptop circa 1989.
The unit itself is in remarkable condition cosmetically and runs quite happily when booted into DOS using the internal 3.5″ floppy drive. However when originally attempting to format the internal hard drive the format would progress normally to about cylinder 158 or so whereupon it would slow to a snail’s pace taken roughly 20 minutes per cylinder from thereon.
Given that I don’t really need 20MB of disk space for my project I got the unit out again and used fdisk to create a DOS partition that only used the first 156 cylinders or around 4-5 MB of the drive. The format progressed successfully and I installed MS DOS 3.2 from the original Epson disk that came with the unit.
I have a fondness for Epson design from this era and I think it’s a great looking unit. The screen is pretty good and I like the keyboard. The main specifications are:-
CPU – NEC V30 (μPD70116) CMOS microprocessor, compatible with Intel 8086 runing at the same speed as the 8086 but 10% – 30% faster. (DIP switch on front on unit allows switching between 4.77 & 10mhz speed)
RAM – 640k
Floppy Drive – μPD765A controller supporting four 360Kbyte or 720Kbyte 3.5″ disks.
Hard Disk – JVC JD-3824R RLL type, 21.44 Mbytes 95mm diam.
Option Slots – Two 8bit expansion slots (Modem on the way from US)
Graphics – Built in LCD and RGB output for external monitor CGA standard up to 8 grey levels.
Er, well, slow.
Verbose Mode (On)
Taking two factors, one, I haven’t done any form of coding for several years, two, I was never any good at it in the first place, and the result is a slow and somewhat laborious process. I am however still enjoying it, although some of the more masochistic ideas I had such as using the Atari Portfolio to write some of the code did rather stretch the definition of enjoyment.
I find the puzzles and solutions come quite easily and I can loosely imagine how to implement them into code but then I just seem to get bogged down in syntax issues and other problems. What I need is to combine my creative genius (ahem) with the god like coding abilities of someone like Urbancamo (this of course was always the master plan during our formative years, then we chose the path of least resistance instead.)
As I mentioned before the Infocom interpreter I have for CP/M is limiting me to version 3 story files and I’m therefore using Inform 5.5 v1502 to compile the game as this is one of the last releases to support that version of story file. Using the standard Inform 5 library files a two room game with a couple of objects is coming out at about 42K. Increasing to 48K for about 12 rooms with 20 or so objects. I shall try the Minform library I mentioned in my previous post and report back how much this shrinks the file size but I need first to understand what exactly has been stripped out.
In the interests of pulling this thing firmly back into Retrochallenge territory I’ve been looking at concentrating on one (retro) development platform. To date development has taken place on several machines including Mac, PC and retro.
I’m therefore going to make another attempt to resurrect a 286 based Epson Equity LT machine that I acquired a while ago and use that from now on. I’ll try and document that process shortly.
In the meantime I’ll take this opportunity to give a shout out for some resources that I’ve found very helpful whilst grappling with Inform.
Doe’s Inform Primer (Has proven to be very useful, well worth a look if you’re new to Inform.)
Roger Firth’s IF pages (Again, a great help.)
Interactive Fiction Forum (Friendly, helpful forum, covers many aspects of IF.)
Inform Designers Manual (A prerequisite.)
I’ve established that the Infocom Z machine interpreter I have for CP/M is limited to version 3 story files and have therefore spent the last day or so trying to decide which course would be best to take for development of the game. I’ve opted for Inform version 5.5 for DOS which I downloaded at the excellent ifarchive. This is one of the last versions of Inform that will compile version 3 story files. I was advised by DavidK over at the interactive fiction forum that Inform 6.15 is actually the last version that supports version 3.
He was also kind enough to point me in the direction of Dave Bernazzani’s minform library which is a stripped down Inform Library created to allow small z3 files. Using the Inform Designers Manual by Graham Nelson I created a few rooms and objects, compiled and transferred the results to the PX-8. Using the trick of renaming the file zork1.dat I successfully ran the game which was a nice moment.
Despite my attempts to keep descriptions as short and concise as possible the PX-8′s display doesn’t really lend itself to the task at hand, the story file will however of course run on a wide variety of retro machines so I still hope to create a decent end product. I rather feel as though deciding to create a text adventure for the PX-8 was akin to deciding to create a new blend of tea for a chocolate tea pot but never mind.
Oh and before the pedants jump on me, I’m aware of the slightly odd notion of using compass bearings aboard a ship in orbit around Saturn but hey ho.
Here is some rather shaky footage of game running on the PX-8:-
I’ve had what you might call a senior moment, or a Doh! moment. Andy over at the Vintage Computer Forums pointed out that Infocom games do of course come as two separate files, the game file (.dat) and the interpreter (.com) so I’ve had an interpreter for CP/M all along.
I downloaded some example story files in .z3 and .z5 format, moved them via floppy to my Windows 95 box and then via filink to the PX-8′s ram disk. After copying Zork1.com from 5.25-inch floppy to the ram disk I tried changing the names of the story files to zork1.dat. This did the trick for the .z3 files which loaded and ran, the .z5 files however would not work.
The current situation then is I need to find a way of creating my adventure and compiling it into a version 3 story file in order to play it on the PX-8. This makes sense really as the the file size limit for version 3 files is 128K.
In the meantime I continue to map the layout of the game and create object and room descriptions. I want to keep these concise, not only to preserve memory but to ensure they will suit the PX-8′s 80 column 8 line display. I also have clear ideas for a few puzzles which I hope I can implement.