PunyInform v5.5 released

PunyInform v5.0 is out! Some highlights:

  • Cheap scenery extension has several improvements, like conditionally adding some scenery, making it easy to let some objects be “them”-objects (i.e. the player can “EXAMINE CURTAINS. PULL THEM”, and a debug verb to find problems.
  • Talk menu extension has some improvements, like removing the need for initialization, and defaulting to printing quote marks around what characters say.
  • Flags extension has two new functions, to easily check if any of 2-3 flags are set or clear, e.g. if (AnyFlagIsSet(F_DOG_ATE_HOMEWORK, F_MARTIANS_LANDED)) ... .

We try to avoid breaking changes in PunyInform, but every once in a while we feel the benefit makes it worth it. When this happens, we typically increase the major version number, like now. This version does have some breaking changes - be sure to read the notes on upgrading in the release notes!

Read up on the changes and download the library at Releases · johanberntsson/PunyInform · GitHub


I’ve updated the inform6unix package at https://gitlab.com/DavidGriffith/inform6unix to install PunyInform 5.0. A tarball is available at https://661.org/proj/if/ right now. It’ll be up at the IF Archive when the logjam in the upload directory is cleared out.


I have now updated the articles/tutorials on PunyInform to work perfectly with version 5.0 of the library.

The articles are listed at [GitHub - johanberntsson/PunyInform: A fast and compact library for writing text adventure games for the Z-machine running on 8-bit computers as well as other platforms.]


Retro text adventure library PunyInform v5.1 is out.

This release has a number of optimizations. A minimal game now compiles to a 22822 byte z3 file , which is 588 bytes or 2.5% smaller than with PunyInform v5.0.1. This translates to smoother gameplay on retro computers.

Read the release notes and get the library at Releases · johanberntsson/PunyInform · GitHub


Sorry I forgot to announce it. I’ve updated the Inform6Unix package to use PunyInform 5.1. It has been up at https://661.org/proj/if/ for a while now. I’ve just now uploaded the update to the IF Archive.


PunyInform v5.2 is out!

Biggest news is probably that you can perform actions on cheap scenery objects in code.

As usual, we keep the documentation up to date.

Read more and get the library on the Releases page, see first post.


Dave, Frederick…
Thanks to both of you, but:

Please try to coordinate between yourself: Dave releasing his Unix package with Punyinform 5.1 then Frederick releasing PunyInform 5.2 17 hours later is spectacular…

IF author can have a slow dev pace, y’know ? :wink:

Best regards from Italy,
dott. Piergiorgio.

Dear Pergorgo,

David forgot to make an announcement. It happens.

Meanwhile, we’re running a jam. This tends to lead to more people than usual working a lot with the library, which means more problems are discovered, and us releasing a new version or two, so everyone can release jam games with as few bugs as possible. :slight_smile:


PunyInform v5.3 is out.


  • You can now trust the InScope routine to be executed every time a scope calculation is called for. PunyInform has a habit of caching what’s in scope, to gain performance, and this used to mean that InScope couldn’t always affect scope. This has been fixed, with a very low cost in performance.

  • The global variable scope_reason which is used in the standard library, is now supported in PunyInform as well. It can be used to decide what’s in scope depending on why the scope is being worked out. E.g. you might add a wizard that casts nasty spells during the each_turn phase. You can safely use scope_reason for this in InScope, but not in add_to_scope property routines, as they aren’t run if the library decides it can use a cached copy of the scope.

  • A parser bug which would lead to the parser not printing an error message when it should in a certain scenario, has been fixed.


The inform6unix package is now updated with PunyInform verison 5.3. It’s available at 661.org now and the IF Archive when the curators move it to where it needs to go.


PunyInform v5.3.1 released, fixing a bug that made add_to_scope not work properly.

Also, it has an optimization which should make a noticable difference in speed for all games where OPTIONAL_MANUAL_SCOPE is not used and there’s often no user code to run during a turn.


The Inform6unix package is updated with Punyinform 5.3.1.


PunyInform v5.4 is out!

  • TAKE ALL will now also take animate objects which you can take
  • talk_menu has shorter versions of the strings to describe the options to end the conversation and show the next page of topics, for screens with less than 40 columns. They’re actually adapted to the smallest screen size on any Ozmoo platform, the 20x15 mode of the Commander X16.

It’s a very minor update, which also means very little can go wrong.


20x15 ??
I’m under the impression that the smallest width well-handled by the Z-machine was 32, below this thing became problematic, if not buggy.

Puzzled regards from Italy,
dott. Piergiorgio.

Nah, the Z-machine doesn’t mind using a 1x1 screen. You could even have an LED on the side for MORE-prompts.

Z-machine version 4 and up have the screen dimensions in the header. Some games may refuse to run unless the screen is at least x characters wide, but that’s up to the game (or possibly the library). E.g. Trinity refuses to run on narrow screens.

A typical PunyInform game runs fine on 20x15. If it uses menus (most don’t), the menu options might be truncated due to the 20 character limit, but you can still navigate the menu and choose the different options.

It may be that some Z-code interpreters weren’t designed to handle narrow screens. Ozmoo adapts to any screen size it may come across (20x15 up to 80x60), showing more information in the statusline if there’s room for it.

1 Like

I believe the Inform 6 standard library refuses to run on anything less than 32 characters wide, but that’s an Inform limitation, not a Z-machine one.

Maybe with newer versions of the library.

This is The Edifice, using library 6/7.

1 Like

PunyInform v5.5 is out.

  • Statusline routine has been changed so it prints reverse spaces to cover the entire statusline before printing the new information. This makes it slightly slower (1/100 s on a C64), and it makes the information appear to blink each turn on slow platforms, but it increases compatibility with old Z-code interpreters (Infocom’s Amiga interpreter, Zip and probably all interpreters based on Zip, like Jzip and MaxZip). You can define OPTIONAL_NON_FLASHING_STATUSLINE to get the old statusline routine back.
  • Several optimizations, for both speed and compiled code size.

For game authors, there’s nothing to worry about when upgrading from 5.4.


I have updated PunyInform within inform6unix to version 5.5. The result, Inform6unix version 6.42 Release 2, is now available at https://661.org/proj/if/ and soon at the IF Archive.

1 Like