Requires the Inform v6.43 compiler. (See Inform 6 )
Uses Grammar Version 3, which can save hundreds of bytes in a typical full-sized game compared to Grammar Version 2, which PunyInform always used until now.
Supports setting meta flag on individual actions.
You can have the library automatically pick the right key for LOCK/UNLOCK.
You can easily use Ozmoo’s eight extra colours.
In debug mode, you can teleport to a room using GOTO with a wildcard, e.g. “GOTO HALL*” puts you in the first room whose name starts with HALL.
Unfortunately, the reason why Inform 7 games are so large and unwieldy (by Z-machine standards, not by modern video game standards!) is the code produced by the compiler, not the I6 library used. It’s just not possible to optimize Inform 7 conveniences like string manipulation and dynamic lists in the way PunyInform would need.
At this point, Inform 7 can’t even compile to Z5 any more; Z3 is out of the question!
All true. Also, Inform 7 needs a lot of stack space to function, more than what can practically be provided on an 8-bit computer.
Note that PunyInform can, and always could, compile to z3, z5 or z8. When PunyInform was launched, several important 8-bit platforms lacked a proper z5 interpreter, so z3 support was essential to reach our goals of enabling Inform games for an 8-bit audience. The situation is a lot better now, which means more authors choose to go for z5 only. For most games, it’s quite easy to make a game possible to build for either z3 or z5, and this is a popular option as well. The library has a lot of optimizations that use z5+ opcodes when available.
PunyInform v6.0.2 is out. This is mainly because the Inform compiler has had a new release, v6.44, and everyone should start using it, as it fixes a serious bug concerning arrays. Also, the new PunyInform version has a new example in the howto folder (demonstrating a custom statusline and teleporting), and a a few nice optimizations in scope calculations.
Debug verb ‘rooms’ now takes an optional substring to search for in room names, e.g. “rooms way” will show rooms like “Hallway Junction”
Changed debug verb ‘goto’ to perform matching exactly like ‘rooms’, ignoring any asterisks at start or end of string, e.g. “goto way” moves the player to the first room that has “way” anywhere in its name.
Added entry point for DEBUG mode only: DebugIsARoom(obj, verdict). Library will call it when the player uses debug verbs ‘goto’ or ‘rooms’, to decide if an object is a room. The verdict parameter is 0 if the library thinks it’s not a room, 1 if it thinks it’s a room. Return: 0 to accept the library’s decision, 1 to say it’s a room, 2 to say it’s not a room.
Instead of a debug-only entry point routine called DebugIsARoom, there is now an entry point routine called IsARoom, doing the same thing. This routine is used for debug verbs ‘goto’ and ‘rooms’, as well as the meta verb ‘places’ (part of extended meta verbs).
Extended meta-verb ‘places’ now shows one object per line.
Extended meta-verb ‘objects’ will now also show objects that don’t have a parent, if they look like regular objects (and have moved/visited attribute).
Entry-point routine IsARoom is now also used by the ‘objects’ meta-verb, to decide which objects are rooms.
“get all” doesn’t try to pick up objects in closed transparent containers.
“get x from y”, where y is a closed transparent container, is no longer blocked by the parser, so authors have a chance to react to the action in a before routine. If they don’t, the action will be blocked by the action routine. “get all from y” is still blocked by the parser, so the player doesn’t get one message per object that y is closed.