
        The wee little list of changes to Platypus release 4+
        =====================================================

    Updated contact information.

	TestScope now defaults the focus to the current =actor=, as the
	documentation claimed all along.

	Improved FullScore output.
	
	No * printed for compass if no exits.

    No longer prints a bunch of new lines at startup.
    
    MATCH_LIST_SIZE is now defined with Default so that it can be overridden.
    (In a game with many objects in scope at once, commands may fail because
    there are more objects that potentially match the players input than the
    match list can hold. Increasing MATCH_LIST_SIZE is a simple way of
    addressing this.)
    
    ChooseObjects and disambiguate() return values are no longer multiplied
    by 1000 by the parser. This allows for much more granularity in
    disambiguation. It also means you'll have to return values 1000 times
    as large to have the same effect as before.
    
    Some additions to grammar.
    
BUG FIXES:

	Floating objects (most notably doors) couldn't be interacted with.
    
    Defining a class of Actors with reserved instances would cause errors
    at startup.



        Ch-ch-ch-ch-changes to Platypus release 4
        =========================================

    MAX_COMPATIBILITY eliminated, by order of the Bavarian Illuminati.

    sharedx* eliminated; +shared+ made non-additive.

    CONCEAL_BIT now _includes_ concealed items, which are excluded by default.

    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.

    -askable- has been eliminated. Any object that has -known- can now be a
    topic for conversation; normal scope is irrelevant.

    ##Places now lists -known- rooms as well as -visited- ones, and always
    alphabetizes the lists. (There is no longer a PLACES SORT command.)

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

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

    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.

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

    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.

    +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

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

    Actions such as ##Scream can now be perceived and reacted to in darkness.

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

    _indirect properties are now called for an object that an actor is
    exiting.

    Now prints "(going [direction])" messages during ##GoToRoom.

    Added INDENT_SIZE (default 2) constant to determine number of spaces per
    indent "step" in object lists.

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

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

    Messages now printed when floating objects (notably doors) opened or
    closed by someone out of scope.

    Slightly improved handling of ##Give.

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

    Added =locale_style= global to change the way items are listed by
    Locale().

    =action= is set to ##Alphabetizing when objects are being sorted (in case
    you want to change the output of +short_name()+).

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

    ExitsSub() has been rewritten so that it no longer moves the direction
    objects out of Compass.

    +add_to_scope+ made additive, by order of my neighbors' dog.

    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.

    Added InitGlkWindow() entry point.

    InvSub() and its library messages rewritten.


BUG FIXES:

    =second= still being set to a dictionary word when a ##NotUnderstood order
    given fixed.

    Spurious period after describe of -transparent- actor carrying something
    but not wearing anything fixed.

    Missing message when attempting to drop something -worn- fixed.

    Printing "(worn)" after -worn- items in vertical inventory list, after
    "You are wearing:" fixed.

    Meddle now called for ##Look.

    "...get out of..." message when exiting an actor (when carried or worn)
    changed to "get away from".

    +respond_early()+ being called instead of +respond_early_indirect()+ for
    the holder of an item an actor is trying to take fixed.

    Printing "You take the [whatever], revealing " without regard to the
    actor, perspective, etc. when taking a -hider- with things under it fixed.

    Problems with doors, most notably crashing when entering a door not tied
    to a compass direction fixed.

    Printing wrong indefinite article in Glulx ("an" vs "some") fixed.

    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:

    +invent()+ properties can't test for -worn-, because it is temporarily
    taken away by InvSub().

    Spacing issues with LookSub().



        A hardly comprehensive list of changes to Platypus release 3
        ============================================================

    Glulx-compatible

    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.

    added MAX_COMPATIBILITY option to make it easier to get existing code
    working under Platypus.

    added Platypus version of original Toyshop example game (not using the
    above).

    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.

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

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

    moved code in parse routine so that BeforeParsing() can change actor,
    actors_location, verb_wordnum, and/or usual_grammar_after.

    inanimate objects can now be male or female (or, obviously, neuter)

    added support for accented characters in PrintX()-processed text (using by
    necessity a special format)

    improved handling of parse_name

    ParseNoun entry point restored

    added #a#, #o#, #n#, and #d# as synonyms for #actor#, #obj#, #noun#, and
    #second#. Brevity is... wit.
    
    improved substitution of reflexive pronouns for print codes

    The little-documented GlobalGuidePath() entry point renamed to
    GuidePath().

    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.

    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.

    added globals InvWide_style and InvTall_style which can be set to change
    the listing styles used for wide and tall inventories

    Answer, Ask, and Consult now allow for all objects normally in scope as
    well as those that have askable.

    updates and corrections to documentation


BUG FIXES:

    scope issues with actors carried by other actors (or animates) fixed

    problem with spurious new lines fixed

    meddle routines are now called for the actor's own actions, as this is
    sometimes useful

    inconsistency in the handling of concealed inventory items fixed

    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.

    MoveFloatingObjects not defaulting to the player's location fixed

    floating objects not being moved at startup fixed

    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

    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

    prevent directions being printed after "Suzie looks for a way out." when
    ##Exits performed by NPC

    fixed problems with pronoun substitution for #actor#, #obj#, #noun#,
    #second# print codes

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

    non-transparent actors not having access to their own possessions fixed

    crashes related to topic tokens fixed

    calling WriteListFrom() with an attribute other than workflag as a fourth
    parameter not testing for attribute at every level fixed

    input ending with punctuation after a verb allowing for multiple objects
    causing parser to ask "What do you want..." fixed
