I’m about 90% finished writing my first serious IF game (in PunyInform, but meant to be a typical larger-sized game). It’s been a lot of fun and reminded how much I’ve always enjoyed fiction writing.
Of course, 90% done means there are still zlllions of bugs left, plus play testing.
If anyone has any encouragement to share, I’d gladly welcome it.
When it’s a more finished, I promise I’ll look for some brave playtesters.
I suggest that once you are ready for beta-testing, take a break from it, e.g. a week or two (depending on how much time you can afford). Then tackle the testing phase with some freshness.
In terms of space, with the maximum-savings features turned on, I’m at ~110k (out of 128k for a .z3 files) and 250 objects. I’ve got more objects and hints when I build it for .z5 (for more modern machines), but I’ve plenty of spare there.
PunyInform is delightfully small itself; Probably 75k of the space used is my own code, not the library. With the standard library, I’m not sure how people managed to write medium-sized things in Inform .z3.
For a long time, they didn’t! To my understanding, the update from Inform 5 to Inform 6 (April 1996) involved adding classes and message-passing, and in the process, the standard library dropped support for version 3—message-passing requires the call_vs2 and call_vn2 opcodes introduced in version 5. The subsequent 25 years of development were entirely focused on versions 5 onward.
In 2021 or thereabouts (I can’t find the exact date), PunyInform came out, replacing the aspects of the standard library that weren’t compatible with version 3. In the process, it was discovered that compiler support for version 3 had been broken for years, and nobody had noticed, because nobody targetted version 3 any more. The compiler was fixed, and finally version 3 was supported again (just not with the standard library).
When the compiler says you have 250 objects, that includes the objects created by the compiler and library. The compiler creates four objects (Class, and the three super-classes Object, String and Routine), and the library creates at least two - the player object and the direction object.If you have darkness, the library creates a darkness object as well. This leaves 248-249 objects for the game author. If you use the cheap scenery extension, this adds one object. The Inform 6 standard library creates 25 objects.
PunyInform supports message passing even in z3, with 0 or 1 argument. E.g. you can do Trolley.add_weight(5);. Passing more arguments would require either the opcodes that Daniel mentions, or some clever workaround.
We started work on PunyInform on 18 January 2019, and it came out on 5 July 2020.
The minimal size of the library is currently 22.3 KB (z3, using text abbreviations). Enabling all optional features adds another 4.5 KB. If you actually use all provided routines, it adds another 1.8 KB. If you switch to z5, the minimal size of the library increases by about 50 bytes. No matter the configuration, the library should be less than 29 KB in size.
The difference between z3 and z5 gets bigger as the game grows, since every object takes up more space, as do dictionary words. Still, for PunyInform Adventure, a game of about 80 KB, with 200+ objects, the difference is only about 1.5 KB, and z5 is faster since it can use opcodes to scan and copy tables in memory, which don’t exist in z3.
That’s fair: ZIL has that same idea but instead of the classes, we have the object ROOMS to house all the rooms (and some other very important features for the parser). We also give objects to IT, THEM, HE, and SHE, plus other generic stuff…
cheap_scenery is really nice, and I’m using it some. I suspect if I needed to, I could probably turn ~50 other things to using cheap_sceneryif it came to that.
@fredrik 22k at the start! That’s terrific. I’m using many of the optionals, and some of the ext libraries you have, like the quote box and the AdjObject. It’s really impressive system. Thanks for sharing with everyone.