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.
-
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).
-
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
-
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
-
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
-- Anson Turner
(formatted by John G. Wood)