Recently Ryan Veeder’s game Craverly Heights has been ported from Inform 7 to Dialog and ZIL, and I thought it would be interesting to compare this with a PunyInform version too. It turns out that most I7 concepts are straightforward to map to PunyInform, but some special constructs had to be created to implement the one-of/stopping construct. To make it easy to compare my PunyInform code to Dialog, Inform 7 and ZIL I’ve kept the code layout with the comments denoting various sections and blocks in the source code.
I like the Rosetta aspect of it. Currently I’m mostly fluent in ZIL (believe it or not!) and this helps me understand I6, I7 & Dialog so much better.
Nice that you compiled a z3-version. I didn’t bother, because the statusline is fixed, but now I’m curious what changes, if any, I would have to make to the ZIL code.
One question:
When I made the ZIL version I had some intial problem with “the pair of glasses”. It’s “a pair of …” in the inventory but the pronoun for “a pair …” is “them”. i.e. I wanted it listed in the inventory as “a pair of …” but have the player refer to them as “them” - “get them”. In your port you have to refer to last item (the IT item) with “it”. Is this inherited in Puny or can you modify it? (long-winded text about a miniscule thing…)
Bonus question:
“get all” doesn’t see the things on the shelves and “get all on shelf” isn’t recognized. As far as I see you have to pick each object individually. Is this possible to modify?
Thanks for having a look at the game. The z3-version works fine except for not having support for unicode (so no fancy em-dash) and the statusline will show score and turns. It is a bit annoying, but I can’t do anything about it. There is always the z5-version if that’s a deal breaker.
You seem to have found a few bugs:
There is support for them in PunyInform. This is just a bug/oversight. I’ll fix it.
“get all from shelf” works, but not “get all on…”. This should probably be fixed.
Looks like a slight oversight. I think the pair of sunglasses should have the pluralname attribute, article "a pair of" and the name “sunglasses” and the library will let you refer to them as “them”.
“get all from shelf” works. Adding support for “get all on shelf” is trivial. If the set of shelves had been given the scenery attribute, “get all” would have taken all from the shelves as well.
Fredrik just pointed out that I forgot to add the -e (economy mode) option in the Makefile. Using -e makes the z3-version shrink to 50 kB. Thanks Fredrik.
See the post above. I’ve updated the binaries with the -e switch, which made them much smaller. It is a moving target anyway, so see it as a relative comparison.
I don’t remember offhand exactly what the limit was when you wanted to make a Ozmoo z-file that was loaded into memory on a C64 (as it was loaded from tape), but it was around 53.000 bytes. So you are way under that bar now. This was something I wanted to achieve with the ZIL version, you know - open “Craverly Heights” up to the whole 8-bit market (I jut need to set up the Puddle BuildTools environment)…
I have fixed the two things that were discussed yesterday (get all on, and pair of glasses), and made a few minor improvements in the text styling routines for the z5-version. The source and binaries have been updated on my github page, see link in the first post above.
I recompiled with 96 abbreviations and Inform 6.36, compiled from source. This version contains a recent patch (28 June) to improve application of the abbreviations. The z3-version is now 49 KB (49232 bytes in the z-machine), and the z5-version 50KB (50664 bytes). That’s good enough for me.