TheQuill to ngPAWS IF project

I have put together some game conversions (sorry, still in alpha state). Expect missing images, and random behaviours here and there.

I’m using some really cool tools: UnQuill, The Inker and ngPAWS.

And here is the group of repos if you want to test, contribute, or have suggestions or improvements: InteractiveFiction · GitLab

One of the major issues that crops up moving from Quill code to any of the other systems, such as the Gilsoft PAWs, DAAD, or ngPAWS, is the switch from FOUR letter inputs to FIVE (or more).

Your examples highlight that issue and the fact that they’ll all need manually adjusting to insert the extra letter (or letters) so that inputs are parsed correctly. Working out and extending the words isn’t something that can be effectively automated.

For example, in one of your examples The Energem Enigma, in the very first location, you need to EXAMINE the PLANTS. However, only the Quill 4-letter command EXAM PLAN currently works… not EXAMI PLANTS or EXAMINE PLANTS… the fully typed words don’t register correctly.

Other, non-trivial Quill to later systems issues tend to involve VERB-NOUN clashes… The Quill doesn’t delineate between its vocabulary in that way… later systems, such as the PAW do, which involves some additional coding work. (In the PAW you tend to move any clashing verbs… ie. verbs which can also be nouns… to nouns and use the NOUN2 condact to interpret a NOUN NOUN sentence).

Sometimes by extending to FIVE letters rather than FOUR you also break the code, because you’re altering the core vocabulary. For example, say in Energem Enigma the author had not only used the vocab word PLAN for the PLANTS, but he might have also used PLAN for a set of PLANS (i.e. schematics) that appeared later in the game. Perhaps they also had an obscure input later like PLAN CRIME… In which cases you need to ensure that a FOUR letter PLAN is in the vocabulary as the equivalent word as PLANT, PLANTS and PLANS… so that fully typed inputs are still parsed correctly by your more advanced parser.

I can remember spending ages trying to track down a bug in a PAWed game I was working on with John Wilson… I just couldn’t replicate what he was seeing… It turned out that, because he was a devout Quill user, he naturally typed everything using only the first four letters of the word… and my code was requiring the use of at least five letters of the object name.

(The other option, to smooth the vocabulary transition from Quill, if your new engine/system allows it, is to only look at the first four letters of each word; aping the behaviour of Quill… That’s an option in some systems, like Adventuron)

There are all sorts of other little things that can catch you out when porting too. I’ve come across a wide range of issues when transferring titles, or helping others to do them. Even moving between Spectrum PAWs and CP/M PAWs, involves some quite essential little tweaks. It’s even worse when you have a game by a very clever Quill or PAW user; who has utilised the little quirks of each system in unusual ways.

Anyway, it’s very cool to see what you have done so far. I do like the way they play in the browser window.


I have encounter the four letter issue right away. Indeed is a pain and I wander if it’s even more useful to start remake from scratch :slight_smile: but that would take away all the fun.
And the most common issue is with i (verb), inve (noun)…

It’s an alpha beginning. Let’s see where we arrive to (or wher we arri to :P)

ngPAWS has a very nice layout, and a quite impressive typo detection: ‘exaimne’ will be understood as ‘examine’ (no in the examples above, but with a proper word list)

The Inform 6 version of Four Minutes To Midnight does not compile. The compiler shows two interesting errors: several similar connections can be redefined in the same block.

cf12: Connections from  40:
      S to 41
      S to 40
cf1f: Connections from  41:
      NE to 41
      NE to 40

I tried in The Quill (ZX Spectrum) and indeed the software does not detect the duplication.

1 Like

In the PAW, and later Gilsoft family systems, there is a special, initial section of the vocabulary allocated to these sorts of words that are used as both the verb and the noun, in order that inputs like GO NORTH and NORTH; GET INVENTORY and INVENTORY; are parsed correctly. They allow NORTH and INVENTORY to be used as both a verb and a noun.

Yeah, understanding what The Quill will ignore silently can be quite important. And it is also important to understand the minor differences between Condacts in the Quill and later iterations. For example, some Condacts, such as GET & DROP, are “noisier” in the PAW.

I did some work, for my own amusement, of porting one of John R. Olsen’s Quilled games to the PAW… He used the terminating feature of the GET & DROP Condacts in a very interesting way that required a bit of a rethink to convert the Quill code, as the behaviour of PAW doesn’t quite match.

I’ll copy and paste this section from my Quill Reference Document, as it illustrates the differences…

Take for example, this Quill code…


This is code that swaps two objects over. The unlit lamp (object 1) and the lit lamp (object 0). Rather than check if the unlit lamp is being CARRIED, the author has used the silent nature of DROP & GET to do the job in a single entry in the database that would otherwise have to be done in two entries.

If the player doesn’t have the lamp (object 1) then the DROP 1 will produce the message
“You don’t have it” and instantly stop processing the rest of that entry. i.e.

You don’t have it.

It will never proceed on to the GET 1 SWAP 1 section of the code.

However, if the player has the lamp, it’s dropped and picked up silently, before the rest of the entry is processed (swapping the unlit lamp with the lit lamp) and printing the “OK” response. i.e.


You don’t see the lamp being dropped and picked up in the Quilled game, because GET & DROP are silent.

They’re not silent in PAWs. In PAWs, the same line would generate the output…

You drop the lamp.
You pick up the lamp.

I’m guessing that ngPAWs probably follows the way that PAWs works, so there is a lot of potential for similar issues in Quill ports; if the original author has used these sorts of memory saving tricks.

That’s smart, indeed. It looks worthwhile to take a look at the source code of these games.

Yeah, at the very least code needs to be adjusted because even basic code like GET 1 OK will look like this in a Quilled game…


And like this in a PAWed (and presumably ngPAWS?) game…

You pick up the lamp.

Which will not be what the original author intended.

Changing the code to substitute DONE for OK is often a suitable compromise, but might not always fit the circumstances in all cases. However, in this case it will be fine.

You pick up the lamp.

This type of thing comes up particularly in early Quilled games where GET and DROP had to be manually coded. In later versions of (Spectrum) Quill, there were automatic GET and DROP condacts that meant authors didn’t have to individually code GET and DROP routines for each object.

@auraes @8bitAG very interesting here.

So connection from 40 to 40 by S are created or just silently skipped in Quill? I’m guessing maze here?

1 Like

It’s the first valid entry that is selected. For the second one, you have to check that it is not a typing error. The maze should be mapped.

1 Like

@auraes Awesome. Thanks.
You could open an issue on the repo if you have a moment.

PS: I have added inf file for Galaxias.
Exporting inf file from The Energem Enigma will cause a buffer overflow…

What do you export to inform 6 with? It doesn’t compile, and using the standard library is not necessarily a good idea. It’s a bit bulky for such a simple gameloop.

I used UnQuill
Have in mind that all the code in the group repos are in alpha state. A starting point to adapt the adventures from.

I have no experience with Inform, so your help is valuable :wink:

I also added another work :slight_smile:

I always get very twitchy when I see lots of broken, unfinished ports… I sort of hate the thought of people experiencing games in a way that they weren’t originally intended… especially when it’s so easy to play the originals.


What is the ultimate aim here? Are you planning to go back and work on these to fix them? Any reason for your choice of these particular games? Why so many at a time, rather than working on them one by one?

I tried to make it clear that those are a starting point, and I may fail to do so.

Yep. The error in Quann Tulla is documented in ISSUES.txt

For me it’s easier to play those games on the browser instead of on a zx emulator (I may not found the correct one for me)

I wanted to have an online catalogue of modern ports

Yep. They are in the open if someone wants to help

I went for scifi (my favorite genre) and often quite forgotten

Once I have the method to port them, it’s easy for me to focus on fixing them afterwards

I would say that as a ZX Spectrum community, we’ve made sure these games are playable online through the web browser for those that don’t want to install one of the many emulators. The online archives have been built up over thirty years and are probably the most comprehensive and easy to access of any microcomputer.

Four Minutes to Midnight via Spectrum Computing

ngPAWs ports of the games would have advantages and would be desirable if they’ve been done to a very high quality (and especially if they have the permission of the original authors).

So, yes, I can understand your desire to produce them, even if I disagree with the strategy of working on several at once.

My twitchiness and concern merely comes from the fact that there are so many bad ports of Spectrum/8-bit games out there, particularly z-code ones, and they have just become part of the archives.

Lots of them are broken and bug-ridden, unfinishable, and don’t reproduce the original experience. Playtesting a game is a lot of work. From your comments, I’m sure that you’re willing to put the time in, but a lot of people haven’t been and obviously didn’t feel the obligation to the original author to get things right. You also have considerably more coding and testing experience than the average person working on ports! :wink:

As indicated in my previous responses, I’m happy to help explain any glitches that you might encounter, due to moving to the new system. The Gilsoft family of tools, and their wonderful Spanish offshoots; many by Uto, seem deceptively similar on the surface, but their subtle differences can cause unforeseen issues especially if you’re working with code that you didn’t create yourself.

It’s not my intention to be negative about the project but, as a ZX Spectrum adventure game player, author & archivist, I feel extremely protective about the original versions of these titles and a big proponent of playing the games through a ZX Spectrum lens. I understand that not everyone gets that same buzz out the “authentic experience” of Spectrum screensize, fonts and graphics. ngPAWs does, at least, allow you to transfer over quite a lot of that “feel”.


(As an aside, re. some of the game details…

The Energem Enigma is from 1987. Sean is Sean Boral.

Galaxias is technically from 1986… the 1984 date is for Intravoid, it’s original release, although the two games are largely identical apart from the typeface according to Fergus. Fergus was okay with a fairly recent BBC micro conversion of the game… Like many of these authors, he is still around.

The Arctic Adventures (such as Planet of Death) are active commercial properties… They are being sold by the new IP owners. I’m not sure how this would impact any fan conversion of the Spanish version.)


I know, and I appreciate that work. We are here thanks to all that work.
I can illustrate what I intend here:

It is amazing that we can emulate all those machines in the browser, but I want to go to the adventure itself. In my case, having it in a «computer» is restricting.

I would like to have them working first, then if possible have them upgrade it. Maybe longer descriptions (difficult), more responses to elements in the backgrounds, I don’t know.

I have seen several, sadly.

This is very interesting. I could never express what it is and you explained it: «obligation to the original author to get things right». It’s indeed an act of love.

I really appreciate it.
As well, this will help me to iron some issues in ngPAWS (if I’m able to fix them)

Thank you. This is why I started in the open. And if this adds nothing, I can unpublish them (no hard feeling).
In my opinion, original versions are available. This could add an extra option to enjoy these works. Again, if I’m wrong and this is a bad idea, I have no problem to let it go :slight_smile:

1 Like

Thanks for the corrections.
I may start thinking of asking permission to all authors.
In the meantime, I can unpublish all of some of the projects.

Mhm, I didn’t know. The Spanish version, is more a lose adaptation, but keeps the name, concept and game play. I’m pretty sure if the original is being sold, that this adaptation should go down.
There’s the unquilled code in the repo, but I couldn’t transcode it yet.

1 Like