Glad to see you’re interested in the library!
The reason is simple: PunyInform wasn’t very mature when we released it four months ago. As people started to use it, they quickly discovered things that weren’t fully working. No new features have been added that would make sense to allow the programmer to turn off. Things like ship directions add some bytes of course, but are disabled by default and so don’t add to the size of Calypso.
These are the changes made between v1.3 and v1.7 which I believe have increased the size of the library:
- Improved parsing of delimiters between direction commands.
- Changed grammar of ‘get’ to match I6 lib. “get on object” and “get out of object” now work.
- Added global receive_action to let receiving object know which action is happening.
- Changed so the invent property is consulted whenever a list of objects is presented by PrintContents, most notably also affecting object listings in room descriptions.
- Added calls to object parent’s before and after rules (if container or supporter) with LetGo action when taking object.
- Fixed that PutOnSub didn’t call before- or after-rules for Receiver, and that InsertSub didn’t call before-rule for receiver.
- Added checks to see if objects can be touched to many action routines.
- Added call to AfterRoutines in WearSub.
- Fixed TryToTakeNoun() so it clears concealed attribute when an object is picked up.
- Printing the game banner has been moved to a routine named Banner(), just like in I6 lib.
- A game can now make the library skip the game banner when the game starts, by returning 2 from Initialise(), just like in I6 lib.
- with_key can now be a routine. The object which is currently being tested as key is held in second. with_key returns an object id, or false if nothing fits.
- Run AfterRoutines() after taking inventory and it’s not empty, just like I6 lib.
- Fake action ##Going is now sent to destination room’s before routine just before the player enters.
- Improved disambiguation for plurals to make “get all red” work
- Now allowing more than one word inputs in disambiguation
- If bag is in box which is on table, and player is on table and types ENTER BAG, (s)he now gets “You have to enter the box first.” instead of “You have to leave the table first.”
- GET ALL FROM [supporter] could make parser complain that the supporter isn’t open.
- GET ALL FROM [object] would not take anything unless the object was a static or scenery object.
- creature_object wasn’t properly handled by the parser.
- Now inp1/inp2 are updated in PerformAction
- Fixed ‘drop X’ parsing bug when X present but not held.
- Look now sets the action to ##Look when calling AfterRoutines, even if Look was called by the Go action or some other action.
- Made plurals trigger that object names are printed, so “TAKE BALLS” may print “red ball: Taken.”
- GET ALL FROM BOX issued a ##Remove action for the first item and then a ##Take action for each of the remaining objects.
- Held (GrabIfNotHeld) didn’t check implicit take status properly.
- Fixed an error where “drop books” when not holding any books still referred to the first book in scope
- Wrong word order in disambiguation caused parse_name to fail
- Fixed error where multiinside silently ignored some inputs
- Fixed: bad combinations of adjectives and nouns messed up disambiguation code
- Made ‘unknown word’ messages customizable
- Objects which have scenery or concealed no longer get the chance to be printed by Look, even if they have initial, when_open, describe etc.
- Improved incomplete switch command replies
- PunyInform now informs when the score goes down, as well as up.
- Fixed ‘get all but X’ didn’t work like ‘get all Xs but Y’
- Fixed bug in MoveFloatingObjects which caused objects to disappear if one floating object had absent attribute.
- Fixed dropping objects when on a supporter bug
- The parser can now correctly handle input like 'get all but ’ . Regression test added to getallfrom.inf to check this and similar patterns.
In summary, the parser is better, more things are customisable, the game author has more control over the actions, games are less buggy and the presentation to the player is better.
I tried compiling the latest version of Calypso as z5 using PunyInform v1.3 and v1.7. These are the file sizes, without padding:
With abbreviations: v1.3: 47884 bytes, v1.7: 48684 bytes
Without abbreviations: v1.3: 51620 bytes, v1.7: 52416 bytes
The size difference is 800 bytes with abbreviations and 796 bytes without. I don’t think that’s half-bad, considering how much better and complete the library has become.