Phew: 90% done and only have 50% left :-)

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.

18 Likes

… and thanks to all of you who’ve answered my questions over the past few weeks.

3 Likes

Congratulations on the progress! Making IF is cool.

5 Likes

Enjoy the process! It’s so great to be able to make a world and share it with others.

3 Likes

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.

2 Likes

50% left means left in the Z-machine limits ? and what Z-Machine ?, 3, 5 or 8 ?

Best regards from Italy,
dott. Piergiorgio.

I’m assuming it’s a play on the old programmer joke

“The first 90% of the code accounts for the first 90% of the development time. The remaining 10% accounts for the other 90% of the development time.”

Thus, to be “90%” done means you still have 50% of the real work in front of you.

5 Likes

Indeed, @pontusi .

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.

3 Likes

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).

3 Likes

250 objects? Actually, fair. That does seem like a mega project though… Milliways had AFAIK about 125 overall, so that’s double!

I am very intrigued now about this project of yours.

I bet 90% of those 250 objects are scenery :smile:

1 Like

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.

3 Likes

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…

1 Like

I think the ZIL standard library and PunyInform are about equivalent in speed and size.

The difference for Craverly Heights was something like 1 KB in size, IIRC.

1 Like

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.

2 Likes

Note that with cheap_scenery there can be multiple decos in a single object…

Best regards from Italy,
dott. Piergiorgio.

Hi friends and well-wishers on this thread: I’m now opening the game to playtesters, in case anyone would like to do so: Request for early playtesters for medieval murder mystery

2 Likes

oh fun! I’ll check it out!

1 Like

@robserpa : I sent you a PM with the info. Thanks :slight_smile:

1 Like