ADV3LITE VERSION 2.0.1
+ADV3LITE VERSION 2.1
Thank you for your interest in adv3Lite, an alternative library for use with the TADS 3 Interactive Fiction authoring system.
diff --git a/docs/manual/changelog.htm b/docs/manual/changelog.htm index adc53327..e829110c 100644 --- a/docs/manual/changelog.htm +++ b/docs/manual/changelog.htm @@ -40,14 +40,15 @@
The behaviour of the MoveTo action has be modified (with a small RISK OF AFFECTING EXISTING CODE). The previous behaviour could often prove counter-intuitive or confusing. The main purpose of the MOVE TO command was and is to allow notional relocation of objects to a particular vicinity within a room, e.g. so that the player might need to use the command MOVE CHAIR TO BOOKCASE before standing on the chair to reach the top shelf of the bookcase, in which case the chair's movedTo property becomes set to the bookcase (for game code to check). But this probably doesn't feel like the expected behaviour when the indirect object of a MOVE TO command is a container or surface. e.g. MOVE PEN TO BOX or MOVE BOOK TO SHELF, so now when the indirect object of a MOVE TO command is a container, the command will be converted to PUT IN and when it's a surface the command will be converted to PUT ON.
There were in any case a number of issues with the original use of MOVE TO. For one thing, if the direct object of a MOVE TO command was on, in, under or behind something it remained on, in, under or behind that thing even after it had been moved, which seems illogical, so MOVE TO now performs an implicit TAKE under such circumstances and then deposits the direct object in the location of the indirect object (e.g. MOVE BOOK TO DOOR when the book is on a shelf would result in the book being taken for the shelf and left in the outermost room, notionallly next to the door). Conversely, as things stood, the book's movedTo property would remain unchanged thereafter even if the book was picked up and carried around, which was clearly a bug; so now calling the moveInto() method on any object resets its movedTo property to nil.
Finally, although the MOVE TO action reports (and reported) that A had been moved to B, there was no indication of that in subsequent room listings, so now the the listing of a miscellaneous object will be followed by ' (by the whatever)' when the object's movedTo property is whatever. To suppress this behaviour you can set the showMoveToInfo property on the appropriate lister (e.g. lookLister) to nil.
There is now a new MoveAwayFrom action (e.g. MOVE CHAIR AWAY FROM BOOKCASE) that undoes the effect of a MoveTo action by resetting the movedTo property of the direct object to nil. In the event that the direct object has not been moved to the indirect object but is in, un, under, or behind the indirect object the MOVE FROM action is converted to a TAKE FROM action.
+There is now a new MoveAwayFrom action (e.g. MOVE CHAIR AWAY FROM BOOKCASE) that undoes the effect of a MoveTo action by resetting the movedTo property of the direct object to nil. In the event that the direct object has not been moved to the indirect object but is in, on, under, or behind the indirect object the MOVE FROM action is converted to a TAKE FROM action.
There have also been some minor modifications to the Immovable class. Although this class is strictly defined as referring to objects that cannot be taken, it may seem counterintuitive that they previously could be moved (e.g. MOVE HEAVY TABLE TO DOOR). On the other hand, there some objects, such as heavy trolleys, that clearly can be pushed from place to place although they can't be picked up and carried around. The isMoveable property of the Immovable class has therefore been redefined to be true if an only if the Immovable object can PushTravel (or PullTravel). Also, the cannotMoveMsg (on Thing, and hence on Immovable than inherits from Thing) has been changed to 'The whatever won't budge' instead of simply taking its value from cannotTakeMsg.
+There have also been some minor modifications to the Immovable class. Although this class is strictly defined as referring to objects that cannot be taken, it may seem counterintuitive that they previously could be moved (e.g. MOVE HEAVY TABLE TO DOOR). On the other hand, there some objects, such as heavy trolleys, that clearly can be pushed from place to place although they can't be picked up and carried around. The isMoveable property of the Immovable class has therefore been redefined to be true if and only if the Immovable object can PushTravel (or PullTravel). Also, the cannotMoveMsg (on Thing, and hence on Immovable than inherits from Thing) has been changed to 'The whatever won't budge' instead of simply taking its value from cannotTakeMsg.
+The Scene class now has turnsActive property (to indicate how many turns an active Scene has been happening).
@@ -67,7 +68,7 @@There is now a new reportPostImplicit() macro for use in the action section of xObjFor() blocks, to allow one or more custom reports to be immediately appended to the implicit action reports. This is intended for situations where game authors wish to display a customized report for an action which might be performed implicitly, but where displaying the report directly via a double-quoted string (e.g. "You pick the delicate vase up very carefully") clashes with the implicit action reports. In this situation you could instead use the following coding pattern:
- dobFor(Take) + dobjFor(Take) { action() { @@ -81,10 +82,9 @@Version 2.1 (tbd)
} }
The new actionReport() function allows you to abbreviate this to:
- he following coding pattern: +The new actionReport() function further allows you to abbreviate this to the following coding pattern:
- dobFor(Take) + dobjFor(Take) { action() { @@ -95,7 +95,7 @@Version 2.1 (tbd)
}
The exitLister option now has a new pair of flag properties, showDQSExits and showSQSExits which control whether or not exits which are defined respectively as double-quoted strings or single-quoted strings on the direction property of a room are listed by the exit lister. Hitherto they have not been, but now the default value for showDQSExits is true, which is a potential SLIGHT INCOMPATIBILITY with previous versions of the library. The reason for making this change here is that attempting to move in a direction defined by a double-quoted string triggers beforeTravel notifications, so it is logical to suppose that we are modelling travel that has been attempted and then aborted (like an adv3 FakeConnector), so that there would be an apparent exit in that direction. This also more clearly distinguishes the function of defining a single-quoted string on an a direction property (to state why direction that way is either impossible or not worth attempting) from that of defining a double-quoted string there (to suggest that travel is attempted but then abandoned). The previous behaviour can be restored by overriding exitList.showDQSExits to nil. +
The exitLister option now has a new pair of flag properties, showDQSExits and showSQSExits which control whether or not exits which are defined respectively as double-quoted strings or single-quoted strings on the direction property of a room are listed by the exit lister. Hitherto they have not been, but now the default value for showDQSExits is true, which is a potential SLIGHT INCOMPATIBILITY with previous versions of the library. The reason for making this change is that attempting to move in a direction defined by a double-quoted string triggers beforeTravel notifications, so it is logical to suppose that we are modelling travel that has been attempted and then aborted (like an adv3 FakeConnector), so that there would be an apparent exit in that direction. This also more clearly distinguishes the function of defining a single-quoted string on an a direction property (to state why direction that way is either impossible or not worth attempting) from that of defining a double-quoted string there (to suggest that travel is attempted but then abandoned). The previous behaviour can be restored by overriding exitList.showDQSExits to nil.
Some additional flexibility has been added to the way TopicEntries work with Facts. An optional msg parameter has been added to various TopicEntry and ActorTopicEntry methods to make it easier to customize how a Fact is articulated in the course of a conversational exchange, and a constructor has been defined on the Fact class to facilitate the addition of a couple of TopicEntry methods that allow new Facts to be created on the fly in the definition of a TopicEntry's topicResponse, rather than having to define the Fact separately.
There have been some minor tweaks to the way Facts are listed by the FactHelper class, particularly in relation to FactThought. The introductory message "You recall" has been replaced by the more neutral "It comes to mind", and where a Fact is not regarded by the player character as true, a parenthetic notice to that effect is appended to the description of the Fact.
There are now a couple of ways to adjust the display of Facts to changes in the circumsstances of your game. The new relevant property (on the Fact class), which is true by default, can be set to nil on a Fact that's been rendered irrelevant by developments in a game (e.g. because it refers to a wish that's now been fulfilled); setting it to nil means that it will no longer be listed by the FactHelper class. The new redescFact(tag, newdesc) function allows you to change the desc of the Fact with name tag tag to newdesc, which again may be useful if a change in circumstances changes the way the Fact might be viewed.
+There are now a couple of ways to adjust the display of Facts to changes in the circumstances of your game. The new relevant property (on the Fact class), which is true by default, can be set to nil on a Fact that's been rendered irrelevant by developments in a game (e.g. because it refers to a wish that's now been fulfilled); setting it to nil means that it will no longer be listed by the FactHelper class. The new redescFact(tag, newdesc) function allows you to change the desc of the Fact with name tag tag to newdesc, which again may be useful if a change in circumstances changes the way the Fact might be viewed.
The Fact Relations extensions no longer attempts to assign a belief value to incoming information based on its contradicting what the receiving actor already knows or believes, since this can produce unsatisfactory results (there's more than one way to resolve a contradiction and it's probably best left to game code to deal with this if it needs to).
Fixed bug that could cause runtime error in Fact.getTargets() if it was called before any targets had been recorded on a Fact.
Fixed bug that partly allowed the player character to talk to actors in another location within a SenseRegion when this wss not intended. The fix involves the implementation and use of a new canTalkToObj PreCondition.
+Fixed bug that partly allowed the player character to talk to actors in another location within a SenseRegion when this was not intended. The fix involves the implementation and use of a new canTalkToObj PreCondition.
Fixed bugs in VerbRule(Query) which could lead to runtime errors.
Thank you for your interest in adv3Lite, an alternative library for use with the TADS 3 Interactive Fiction authoring system.