PlatypusCh-ch-ch-ch-changes to Platypus release 4

  1. MAX_COMPATIBILITY eliminated, by order of the Bavarian Illuminati.
  2. sharedx eliminated; shared made non-additive.
  3. CONCEAL_BIT now includes concealed items, which are excluded by default.
  4. added known attribute, marking objects that the player "knows about", and secret, which prevents an object from being given known. The attribute is given in the following cases, to any object that does not have secret: 1) when the object's name is printed, except during meta actions, 2) when Locale() goes over a scenery item (static and concealed), 3) when a describe property is printed/run, 4) to the player at startup.
  5. askable has been eliminated. Any object that has known can now be a topic for conversation; normal scope is irrelevant.
  6. ##Places now lists known rooms as well as visited ones, and always alphabetizes the lists. (There is no longer a PLACES SORT command.)
  7. Likewise, inventory lists are always alphabetized by default, and there are no longer ##InvSort and ##InvUnsort actions. (You can make them unsorted simply by changing the values of invwide_style and invtall_style.)
  8. Scope routines have been rewritten. The library no longer puts anything into scope more than once, unless as a result of add_to_scope. Scope rules are slightly relaxed from previous versions in that the children of transparent objects are now in scope whenever the parent is, with no position attribute set (regardless of what containment attributes the parent has). Light follows the same rule. (Objects with illegal position attributes, such as inside in a non-container, are still out of scope.)
  9. Floating objects are now moved to FloatingHome at startup, and are never subsequently moved by the library. The scope and light routines ensure that they "exist" simultaneously wherever they should be. (So, an object present in three rooms has the contents of all three rooms in scope to it, and vice-versa.) They can be given describe properties but otherwise are never listed in room descriptions.
  10. absent has been eliminated. To enable or disable a floating object, simply move it into or out of FloatingHome. To prevent a floating object or cog from being activated at startup, create it in the Storage object, e.g.:
     Object "cloud of orange smoke" Storage
       with found_in...
  11. Rooms are now stored in an object called Map, instead of at the root of the object tree. This makes it easier and faster to loop through them.
  12. dirs arrays can now contain two or more directions followed by a single destination. For example:
     dirs edir wdir udir Conservatory
          ndir Lavatory

    is equivalent to
     dirs edir Conservatory
          wdir Conservatory
          udir Conservatory
          ndir Lavatory
  13. The initial ##Look performed upon entering a room can now be intercepted by the room's meddle routine, e.g., to change the description in darkness. (.perform(##Look, blank) is now used instead of LookSub(1) to allow abbreviation.)
  14. Actions such as ##Scream can now be perceived and reacted to in darkness.
  15. PrintX() can now be called as PrintX(string, obj) where lm_o (that is, #object#) is temporarily set to obj. Example: PrintX("#O# look#s# angry!", monster).
  16. _indirect properties are now called for an object that an actor is exiting.
  17. Now prints "(going [direction])" messages during ##GoToRoom.
  18. Added INDENT_SIZE (default 2) constant to determine number of spaces per indent "step" in object lists.
  19. door_to can now contain an array of two rooms, in which case the door automatically leads from one to the other, and is treated as a floating object present in both. (Unless it has a found_in property, in which case that supersedes door_to for floating purposes.)
  20. Compile-time warnings if react_before, react_after, before, after, life, or door_dir have been defined (since these are common standard library properties that aren't known to Platypus). (This can be disabled by declaring Constant NO_SPECIAL_WARNINGS.)
  21. Messages now printed when floating objects (notably doors) opened or closed by someone out of scope.
  22. Slightly improved handling of ##Give.
  23. with_key can now be a routine, in which case it takes an object as a parameter and should return true if the parameter object can be used to lock and unlock the object.
  24. Added locale_style global to change the way items are listed by Locale().
  25. action is set to ##Alphabetizing when objects are being sorted (in case you want to change the output of short_name()).
  26. ##GoToRoom now allows the player to GO TO any known room, whether visited or not (provided that a path composed of known rooms can be found).
  27. ExitsSub() has been rewritten so that it no longer moves the direction objects out of Compass.
  28. add_to_scope made additive, by order of my neighbors' dog.
  29. Added global grammar_line, which indicates which grammar line (if any) of the current verb was matched (counting from 1). This can be used to distinguish SWING ON ROPE from SWING ROPE, for example.
  30. Added InitGlkWindow() entry point.
  31. InvSub() and its library messages rewritten.

Bug Fixes:

  1. second still being set to a dictionary word when a ##NotUnderstood order given fixed.
  2. Spurious period after describe of transparent actor carrying something but not wearing anything fixed.
  3. Missing message when attempting to drop something worn fixed.
  4. Printing "(worn)" after worn items in vertical inventory list, after "You are wearing:" fixed.
  5. Meddle now called for ##Look.
  6. "...get out of..." message when exiting an actor (when carried or worn) changed to "get away from".
  7. respond_early() being called instead of respond_early_indirect() for the holder of an item an actor is trying to take fixed.
  8. Printing "You take the [whatever], revealing " without regard to the actor, perspective, etc. when taking a hider with things under it fixed.
  9. Problems with doors, most notably crashing when entering a door not tied to a compass direction fixed.
  10. Printing wrong indefinite article in Glulx ("an" vs "some") fixed.
  11. ActionMessage() no longer returns false when not printing anything due to the actor being out of scope to the player (which would allow NPCs to get away with certain actions that should have been prohibited).

Known Problems:

  1. invent() properties can't test for worn, because it is temporarily taken away by InvSub().
  2. Spacing issues with LookSub().
  3. Your shoe's untied. Made ya look :P

PlatypusA hardly comprehensive list of changes to Platypus release 3

  1. Glulx-compatible
  2. for various reasons, attributes that were changed into classes are changed back into attributes. Constant ATTRIBUTE_CLASSES will define the classes with the appropriate attributes so that existing code using the classes will still work.
  3. added MAX_COMPATIBILITY option to make it easier to get existing code working under Platypus.
  4. added Platypus version of original Toyshop example game (not using the above).
  5. added meddle_late_late property, called after action message is printed (even if action was interrupted at an earlier stage). This can, for instance, allow NPCs to react to or comment on actions after the fact.
  6. added invent_late property, which is called once with a parameter of 1 before inventory is listed. If it returns true, the library does not list the object normally, but calls the routine again (no parameter) at the end of the list. The property can then list the object (in a separate sentence).
  7. (Does not apply with MAX_COMPATIBILITY) initial, when_on, when_off, when_open, and when_closed are all eliminated in favor of describe. describe can return 0, 1, 2, or 3. 0 and 1 work as before. 2 causes a space to be printed followed by the objects contents/possessions (if any), 3 does the same but prints a new line instead. describe can also hold a string, in which case it works like a routine to print the string and return 2.
  8. moved code in parse routine so that BeforeParsing() can change actor, actors_location, verb_wordnum, and/or usual_grammar_after.
  9. inanimate objects can now be male or female (or, obviously, neuter)
  10. added support for accented characters in PrintX()-processed text (using by necessity a special format)
  11. improved handling of parse_name
  12. ParseNoun entry point restored
  13. added #a#, #o#, #n#, and #d# as synonyms for #actor#, #obj#, #noun#, and #second#. Brevity is... wit.
  14. improved substitution of reflexive pronouns for print codes
  15. The little-documented GlobalGuidePath() entry point renamed to GuidePath().
  16. added player_perspective global, which is set to FIRST_PERSON, SECOND_PERSON, or THIRD_PERSON, and affects the print code output, as well as the pronouns used to refer to the player object. pluralname likewise now should work properly when given to the player object.
  17. topic tokens no longer set second to anything (also a bug fix). if second is set for Ask, Tell, etc., it is now always an object, never a dictionary word.
  18. added globals InvWide_style and InvTall_style which can be set to change the listing styles used for wide and tall inventories
  19. Answer, Ask, and Consult now allow for all objects normally in scope as well as those that have askable.
  20. updates and corrections to documentation

Bug Fixes:

  1. scope issues with actors carried by other actors (or animates) fixed
  2. problem with spurious new lines fixed
  3. meddle routines are now called for the actor's own actions, as this is sometimes useful
  4. inconsistency in the handling of concealed inventory items fixed
  5. room description now printed when player carried into another room; fixed "(carried by he)" being printed after room name instead of "(carried by the giant)", e.g.
  6. MoveFloatingObjects not defaulting to the player's location fixed
  7. floating objects not being moved at startup fixed
  8. attempting to take objects which are added to scope and have static but not concealed produces a "That seems to be a part of the..." message
  9. moved some of the TakeSub code into TryToAccess; fixed several calls to TryToAccess which had Take/Remove restrictions set and shouldn't; changed some other code in TryToAccess; made some related action routine changes
  10. prevent directions being printed after "Suzie looks for a way out." when ##Exits performed by NPC
  11. fixed problems with pronoun substitution for #actor#, #obj#, #noun#, #second# print codes
  12. typing GO THROUGH DOOR and the like now works (again), as long as the door is connected to an exit (that is, that there is a direction object for which the dirs of the room will yield the door.)
  13. non-transparent actors not having access to their own possessions fixed
  14. crashes related to topic tokens fixed
  15. calling WriteListFrom() with an attribute other than workflag as a fourth parameter not testing for attribute at every level fixed
  16. input ending with punctuation after a verb allowing for multiple objects causing parser to ask "What do you want..." fixed

-- Anson Turner
(formatted by John G. Wood)

This page originally found at
Last updated: 14 March 2002

Notices & Disclaimers


Interactive Fiction

Platypus Index