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
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
##InvUnsort actions. (You can make them
unsorted simply by changing the values of invwide_style and
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,
Object "cloud of orange smoke" Storage
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
is equivalent to
dirs edir Conservatory
##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
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
PrintX("#O# look#s# angry!",
_indirect properties are now called for an object that an actor is
Now prints "(going [direction])" messages during
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
Messages now printed when floating objects (notably doors) opened or
closed by someone out of scope.
Slightly improved handling of
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
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
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.
second still being set to a dictionary word when a
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
"...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 "
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).
invent() properties can't test for worn, because it is temporarily
taken away by InvSub().
Spacing issues with LookSub().
Your shoe's untied. Made ya look :P
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.
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
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
(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
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
#d# as synonyms for
#second#. Brevity is... wit.
improved substitution of reflexive pronouns for print codes
The little-documented GlobalGuidePath() entry point renamed to
added player_perspective global, which is set to
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
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
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
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
#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
-- Anson Turner
(formatted by John G. Wood)