advlite.hfile | source file |
Classes Summary | Functions Summary Details | Macros Summary Details | Enums Summary Details | Templates Summary Details |
TADS 3 Library - main header
This file provides definitions of macros, properties, and other identifiers used throughout the library and in game source.
Each source code file in the library and in a game should generally #include this header near the top of the source file.
_STRINGIZE
_STRINGIZE
abort
abortImplicit
accFor
accList
ADV3_H
AHREF_Plain
aobjFor
aobjList
asAccFor
asAobjFor
asDobjFor
asDobjWithoutActionFor
asDobjWithoutVerifyFor
asExit
asIobjFor
asIobjWithoutActionFor
asIobjWithoutVerifyFor
askForAcc
askForAobj
askForDobj
askForIobj
asObjFor
asObjWithoutActionFor
asObjWithoutVerifyFor
AudioLink
BMsg
BMsg
cannotTouchMsg
checkHitMsg
checkTouchMsg
ConversationLullReason
dangerous
DefaultTopicReason
DefineAction
DefineIAction
DefineLiteralAction
DefineLiteralTAction
DefineNumericAction
DefineNumericTAction
DefineSystemAction
DefineTAction
DefineTActionSub
DefineTIAAction
DefineTIAActionSub
DefineTIAction
DefineTIActionSub
DefineTopicAction
DefineTopicTAction
DefSignal
DMsg
DMsg
dobjFor
dobjList
exit
exitAction
exitCommandLine
feelResponseMsg
gAcc
gAction
gActionIn
gActionIs
gActionList
gActionListObj
gActionListStr
gActor
gAobj
gCommand
gCommandToks
gDobj
gExitLister
gExtraHintManager
gHintManager
gInformed
gIobj
gLastAction
gLastCommand
gLibMessages
gLiteral
gLocation
gMessageParams
gNumber
goInstead
goNested
gOutStream
gPlayerChar
gReveal
gRevealed
gRoom
gSetKnown
gSetSeen
gTentativeDobj
gTentativeIobj
gTopic
gTopicMatch
gTopicText
gTravelActionIs
gTurns
gVerbPhrase
gVerbWord
gVerifyList
hitResponseMsg
IfDebug
IfDebug
illogical
illogicalAlready
illogicalNow
illogicalSelf
implausible
inaccessible
InitiateConversationReason
input
iobjFor
iobjList
isEatable
isPotable
isTouchable
literalAcc
literalAobj
literalDobj
literalIobj
logical
logicalRank
M_DOWN
M_PREV
M_QUIT
M_SEL
M_UP
MatchAdj
MatchNoApprox
MatchNoTrunc
MatchNoun
MatchPartMask
MatchPhrase
MatchPlural
MatchPrep
MatchStrengthMask
MatchWeak
more
Msg
multiAcc
multiAobj
multiDobj
multiIobj
nextrule
nonObvious
nostop
numberDobj
numericAcc
numericAobj
numericDobj
numericIobj
objFor
reportAfter
rnull
SelArbitrary
SelDefault
SelDisambig
SelPlural
SelProg
setPastTense
singleAcc
singleAobj
singleDir
singleDobj
singleIobj
stop
STRINGIZE
STRINGIZE
topicAcc
topicAobj
topicDobj
topicIobj
touchDesc
tSel
VerbRule
VideoLink
waitKey
withPast
withPresent
ClosedGoal
feminine
FootnotesFull
FootnotesMedium
FootnotesOff
indirectLockable
large
lockableWithKey
lockableWithoutKey
manyToMany
manyToOne
masculine
medium
neuter
normalRelation
notLockable
null
oneToMany
oneToOne
OpenGoal
OtherObject
reverseRelation
rmcAskLiteral
rmcAskObject
rmcCommand
rmcDisambig
rmcOops
small
UndiscoveredGoal
Achievement
ActorState
AltTopic
AltTopic
ClockEvent
DefaultConsultTopic
DefaultThought
DefaultTopic
Doer
Door
Door
Enterable
Enterable
EventList
ExtraHint
Footnote
Goal
Hint
MenuItem
MenuLongTopicItem
MenuTopicItem
MiscTopic
MiscTopic
NodeContinuationTopic
NodeContinuationTopic
QueryTopic
QueryTopic
QueryTopic
QueryTopic
QueryTopic
QueryTopic
Region
Relation
Room
Room
Rule
SensoryEmanation
ShuffledEventList
string
string
string
string
string
string
string
string
string
string
string
string
string
string
string
StyleTag
SymConnector
SymConnector
SymPassage
SymPassage
SymPassage
Test
Test
Thing
Topic
TopicEntry
TopicEntry
TopicEntry
TopicEntry
TopicGroup
TravelConnector
TravelConnector
Unthing
_STRINGIZE (x) | advlite.h[265] |
#@x
_STRINGIZE (x) | advlite.h[952] |
#@x
abort | advlite.h[691] |
throw new AbortActionSignal()
abortImplicit | advlite.h[688] |
throw new AbortImplicitSignal()
accFor (action) | advlite.h[625] |
objFor(Aobj, action)
accList | advlite.h[74] |
nounList->accMatch
ADV3_H | advlite.h[16] |
AHREF_Plain | advlite.h[699] |
0x0001 /* plain text hyperlink (no underline/color) */
aobjFor (action) | advlite.h[623] |
objFor(Aobj, action)
aobjList | advlite.h[75] |
nounList->accMatch
asAccFor (action) | advlite.h[626] |
asObjFor(Aobj, action)
asAobjFor (action) | advlite.h[624] |
asObjFor(Aobj, action)
asDobjFor (action) | advlite.h[429] |
asObjFor(Dobj, action)
asDobjWithoutActionFor (action) | advlite.h[449] |
asObjWithoutActionFor(Dobj, action)
asDobjWithoutVerifyFor (action) | advlite.h[461] |
asObjWithoutVerifyFor(Dobj, action)
asExit (dir) | advlite.h[477] |
: UnlistedProxyConnector { direction = dir##Dir }
asIobjFor (action) | advlite.h[430] |
asObjFor(Iobj, action)
asIobjWithoutActionFor (action) | advlite.h[450] |
asObjWithoutActionFor(Iobj, action)
asIobjWithoutVerifyFor (action) | advlite.h[462] |
asObjWithoutVerifyFor(Iobj, action)
askForAcc (action) | advlite.h[467] |
askMissingObject(action, AccessoryObject)
askForAobj (action) | advlite.h[466] |
askMissingObject(action, AccessoryObject)
askForDobj (action) | advlite.h[464] |
askMissingObject(action, DirectObject)
askForIobj (action) | advlite.h[465] |
askMissingObject(action, IndirectObject)
asObjFor (obj, Action) | advlite.h[419] |
{ \
preCond { return preCond##obj##Action; } \
verify() { verify##obj##Action; } \
remap() { return remap##obj##Action; } \
check() { check##obj##Action; } \
action() { action##obj##Action; } \
report() { report##obj##Action; } \
}
dobjFor(Search) asDobjFor(LookIn)
Note that no semicolon is needed after this definition, and that this definition is completely in lieu of a regular property set for the object action.
In general, a mapping should NOT change the role of an object: dobjFor(X) should not usually be mapped using asIobjFor(Y), and iobjFor(X) shouldn't be mapped using asDobjFor(Y). The problem with changing the role is that the handler routines often assume that the object is actually in the role for which the handler was written; a verify handler might refer to '{dobj}' in generating a message, for example, so reversing the roles would give the wrong object in the role.
Role reversals should always be avoided, but can be used if necessary under conditions where all of the code involved in the TARGET of the mapping can be carefully controlled to ensure that it doesn't make assumptions about object roles, but only references 'self'. Reversing roles in a mapping should never be attempted in general-purpose library code, because code based on the library could override the target of the role-reversing mapping, and the override could fail to observe the restrictions on object role references.
Note that role reversals can almost always be handled with other mechanisms that handle reversals cleanly. Always consider Doer.doInstead() first when confronted with a situation that seems to call for a role-reversing asObjFor() mapping, as doInstead() specifically allows for object role changes.
asObjWithoutActionFor (obj, Action) | advlite.h[440] |
{ \
preCond { return preCond##obj##Action; } \
verify() { verify##obj##Action; } \
remap() { return remap##obj##Action(); } \
check() { check##obj##Action; } \
action() { } \
}
asObjWithoutVerifyFor (obj, Action) | advlite.h[452] |
{ \
preCond { return preCond##obj##Action; } \
remap() { return remap##obj##Action(); } \
check() { check##obj##Action; } \
action() { action##obj##Action(); } \
report() { report##obj##Action(); } \
}
AudioLink | advlite.h[1214] |
1
AudioLink means audio communication only is available VideoLink means both audio and visual links are available.
BMsg (id, txt, args, ...) | advlite.h[1021] |
buildMessage(#@id, txt, ##args)
BMsg (id, txt, args, ...) | advlite.h[1024] |
buildMessage(#@id, nil, ##args)
cannotTouchMsg | advlite.h[1245] |
cannotFeelMsg
checkHitMsg | advlite.h[1247] |
checkAttackMsg
checkTouchMsg | advlite.h[1242] |
checkFeelMsg
ConversationLullReason | advlite.h[830] |
2
dangerous | advlite.h[672] |
gAction.addVerifyResult(new VerifyResult(90, '', true, self, nil))
DefaultTopicReason | advlite.h[831] |
3
DefineAction (name, baseClass, ...) | advlite.h[496] |
name: ##baseClass \
baseActionClass = name
DefineIAction (name) | advlite.h[512] |
DefineAction(name, IAction)
DefineLiteralAction (name) | advlite.h[539] |
DefineAction(name, LiteralAction)
DefineLiteralTAction (name) | advlite.h[536] |
DefineTActionSub(name, LiteralTAction)
DefineNumericAction (name) | advlite.h[551] |
DefineAction(name, NumericAction)
DefineNumericTAction (name) | advlite.h[548] |
DefineTActionSub(name, NumericTAction)
DefineSystemAction (name) | advlite.h[505] |
DefineAction(name, SystemAction)
DefineTAction (name) | advlite.h[521] |
DefineTActionSub(name, TAction)
DefineTActionSub (name, cls) | advlite.h[527] |
DefineAction(name, cls) \
verDobjProp = &verifyDobj##name \
remapDobjProp = &remapDobj##name \
preCondDobjProp = &preCondDobj##name \
checkDobjProp = &checkDobj##name \
actionDobjProp = &actionDobj##name \
reportDobjProp = &reportDobj##name \
DefineTIAAction (name) | advlite.h[595] |
DefineTIAActionSub(name, TIAAction)
Define a concrete TIAAction, given the root name for the action. We'll automatically generate a class with name XxxAction, a verDobjProp with name verDobjXxx, a verIobjProp with name verIobjxxx, a checkDobjProp with name checkDobjXxx, a checkIobjProp with name checkIobjXxx, an actionDobjProp with name actionDobjXxx, and an actionIobjProp with name actionIobjXxx.
DefineTIAActionSub (name, cls) | advlite.h[601] |
DefineAction(name, cls) \
verDobjProp = &verifyDobj##name \
verIobjProp = &verifyIobj##name \
verAobjProp = &verifyAobj##name \
remapDobjProp = &remapDobj##name \
remapIobjProp = &remapIobj##name \
remapAobjProp = &remapAobj##name \
preCondDobjProp = &preCondDobj##name \
preCondIobjProp = &preCondIobj##name \
preCondAobjProp = &preCondAobj##name \
checkDobjProp = &checkDobj##name \
checkIobjProp = &checkIobj##name \
checkAobjProp = &checkAobj##name \
actionDobjProp = &actionDobj##name \
actionIobjProp = &actionIobj##name \
actionAobjProp = &actionAobj##name \
reportDobjProp = &reportDobj##name \
reportIobjProp = &reportIobj##name \
reportAobjProp = &reportAobj##name \
DefineTIAction (name) | advlite.h[563] |
DefineTIActionSub(name, TIAction)
DefineTIActionSub (name, cls) | advlite.h[569] |
DefineAction(name, cls) \
verDobjProp = &verifyDobj##name \
verIobjProp = &verifyIobj##name \
remapDobjProp = &remapDobj##name \
remapIobjProp = &remapIobj##name \
preCondDobjProp = &preCondDobj##name \
preCondIobjProp = &preCondIobj##name \
checkDobjProp = &checkDobj##name \
checkIobjProp = &checkIobj##name \
actionDobjProp = &actionDobj##name \
actionIobjProp = &actionIobj##name \
reportDobjProp = &reportDobj##name \
reportIobjProp = &reportIobj##name \
DefineTopicAction (name) | advlite.h[545] |
DefineAction(name, TopicAction)
DefineTopicTAction (name) | advlite.h[542] |
DefineTActionSub(name, TopicTAction)
DefSignal (sig, nam) | advlite.h[1297] |
sig##Signal: Signal \
name = #@nam\
handleProp = &handle_##sig
DMsg (id, txt, args, ...) | advlite.h[1020] |
message(#@id, txt, ##args)
Whenever the library displays a message, it uses the DMsg() macro. The arguments are a message ID, and the default English message text to display. The message ID is a string that identifies the message; this is used to look for overriding customizations of the message. Refer to the CustomMessages class for information on customizing the standard library messages.
In our approach, the library defines the default English text of the messages in-line, directly in the code. On the surface, this is contrary to standard practices in most modern programming projects, which strive to make translations easier by separating the message text from the program code, gathering all of the text into a central message file that can be replaced for each language. Despite appearances, we're accomplishing the same thing - but in our system, we have the advantage that we *also* define the default English message text in-line as part of the code it applies to. This makes it easier to read the code by keeping a message and its full context in one place; this way you don't have to shuttle between the code and message file.
Here's how we accomplish the message separation required for translations, and also for games that wish to customize the library defaults. The DMsg() macro requires both the default English message text *and* an ID key for the message. The message display function receives both. The display function proceeds to look up the ID key in a translation table; if it finds an entry, it uses the version of the message in the translation table instead of the English default passed in via DMsg(). A language module can provide a message table that defines the language translations, and a game can provide a table that further customizes the library messages to fit its narrative style.
There's one additional element. Translators and game authors need to be able to see all of the messages in one place, so they can create their tables. We would seem to lack that central list of English messages. Fortunately, by using a standard macro for each message, we can extract a comprehensive English message list automatically via a special tool. We use this as part of the library release process to create the English message file for reference.
Note that the macro expansion includes the default English text only in English builds. It omits the text in non-English builds. This is to save space - we assume that the English messages will all be overridden anyway by each translated library version, so there's no point in including their text in the final compiled program.
DMsg (id, txt, args, ...) | advlite.h[1023] |
message(#@id, nil, ##args)
dobjFor (action) | advlite.h[375] |
objFor(Dobj, action)
dobjList | advlite.h[94] |
nounList->dobjMatch
exit | advlite.h[682] |
throw new ExitSignal()
exitAction | advlite.h[685] |
throw new ExitActionSignal()
exitCommandLine | advlite.h[845] |
throw new ExitCommandLineSignal()
feelResponseMsg | advlite.h[1243] |
touchResponseMsg
gAcc | advlite.h[628] |
gAction.curAobj
gAction | advlite.h[294] |
(libGlobal.curAction)
gActionIn (action, ...) | advlite.h[318] |
(gAction != nil \
&& (action#foreach/gAction.ofKind(action)/||/))
gActionIs (action) | advlite.h[314] |
(gAction != nil && gAction.ofKind(action))
This tests to see if the current global action is an instance of the given action class - we test that it's an instance rather than the action class itself because the parser creates an instance of the action when it matches the action's syntax.
gActionList | advlite.h[327] |
(nilToList(gCommand.action.actionList))
gActionListObj | advlite.h[338] |
(object: Thing \
{ \
plural = (gAction.reportList.length > 1 || \
gAction.reportList[1].plural); \
isIt = (gAction.reportList.length == 1 ? \
gAction.reportList[1].isIt : nil);\
isHim = (gAction.reportList.length == 1 ? \
gAction.reportList[1].isHim : nil);\
isHer = (gAction.reportList.length == 1 ? \
gAction.reportList[1].isHer : nil);\
name = gActionListStr; \
qualified = true; \
} )
gActionListStr | advlite.h[330] |
makeListStr(gCommand.action.reportList, &theName)
gActor | advlite.h[279] |
(libGlobal.curActor)
gAobj | advlite.h[627] |
gAction.curAobj
gCommand | advlite.h[295] |
(libGlobal.curCommand)
gCommandToks | advlite.h[1147] |
(gCommand == nil || gCommand.verbProd == nil ? [] \
: gCommand.verbProd.tokenList.mapAll({t: getTokVal(t)}))
gDobj | advlite.h[287] |
(gAction.curDobj)
gExitLister | advlite.h[880] |
(libGlobal.exitListerObj)
gExtraHintManager | advlite.h[893] |
(libGlobal.extraHintManagerObj)
gHintManager | advlite.h[886] |
(libGlobal.hintManagerObj)
gInformed (key) | advlite.h[1234] |
(getActor.informedAbout(key))
gIobj | advlite.h[288] |
(gAction.curIobj)
gLastAction | advlite.h[301] |
(libGlobal.lastAction)
gLastCommand | advlite.h[302] |
(libGlobal.lastCommand)
gLibMessages | advlite.h[874] |
(libGlobal.libMessageObj)
This message object isn't generally used for parser messages or action replies - most of those come from the objects given by the current actor's getParserMessageObj() or getActionMessageObj(), respectively.
By default, this is set to libMessages. The library never changes this itself, but a game can change this if it wants to switch to a new set of messages during a game. (If you don't need to change messages during a game, but simply want to customize some of the default messages, you don't need to set this variable - you can simply use 'modify libMessages' instead. This variable is designed for cases where you want to *dynamically* change the standard messages during the game.)
gLiteral | advlite.h[289] |
(gAction.literal)
gLocation | advlite.h[362] |
(gPlayerChar.location)
gMessageParams (var, ...) | advlite.h[1064] |
(gAction.setMessageParams(var#foreach/#@var, var/,/))
The Action method setMessageParam() lets you define such a parameter, but for convenience, we define this macro for setting one or more parameters whose names exactly match their local variable names. In other words, if you call this macro like this:
gMessageParams(obj, cont)
then you'll get one parameter with the text name 'obj' whose expansion will be the value of the local variable obj, and another with text name 'cont' whose expansion is the value of the local variable cont.
gNumber | advlite.h[290] |
(gAction.num)
goInstead (dirn) | advlite.h[471] |
doInstead(Go, dirn##Dir)
goNested (dirn) | advlite.h[472] |
doNested(Go, dirn##Dir)
gOutStream | advlite.h[1042] |
(outputManager.curOutputStream)
gPlayerChar | advlite.h[359] |
(libGlobal.playerChar)
gReveal (key) | advlite.h[1227] |
(libGlobal.setRevealed(key))
gRevealed (key) | advlite.h[1224] |
(libGlobal.revealedNameTab[key] != nil)
gRoom | advlite.h[371] |
(gPlayerChar.getOutermostRoom)
gSetKnown (obj) | advlite.h[1230] |
(gPlayerChar.setKnowsAbout(obj))
gSetSeen (obj) | advlite.h[1231] |
(gPlayerChar.setHasSeen(obj))
gTentativeDobj | advlite.h[297] |
(gCommand.dobjs.mapAll({x: x.obj}).toList)
gTentativeIobj | advlite.h[298] |
(gCommand.iobjs.mapAll({x: x.obj}).toList)
gTopic | advlite.h[377] |
(gAction.curTopic)
gTopicMatch | advlite.h[379] |
(gTopic.getBestMatch)
gTopicText | advlite.h[378] |
(gTopic.getTopicText)
gTravelActionIs (dirn) | advlite.h[323] |
(gAction != nil && gAction.ofKind(Travel) && gAction.direction == dirn ## Dir)
gTurns | advlite.h[365] |
(libGlobal.totalTurns)
gVerbPhrase | advlite.h[1151] |
(gCommand.getCommandPhrase())
gVerbWord | advlite.h[1143] |
(gCommand == nil || gCommand.verbProd == nil ? '' \
: getTokVal(gCommand.verbProd.tokenList[1]))
gVerifyList | advlite.h[636] |
gAction.verifyList
hitResponseMsg | advlite.h[1248] |
attackResponseMsg
IfDebug (key, code) | advlite.h[1036] |
if (DebugCtl.enabled[#@key]) { code; } else { }
IfDebug (key, code) | advlite.h[1039] |
illogical (msg) | advlite.h[640] |
gAction.addVerifyResult(new VerifyResult(30, msg, nil, self))
illogicalAlready (msg) | advlite.h[654] |
gAction.addVerifyResult(new VerifyResult(40, msg, nil, self))
illogicalNow (msg) | advlite.h[643] |
gAction.addVerifyResult(new VerifyResult(40, msg, nil, self))
illogicalSelf (msg) | advlite.h[657] |
gAction.addVerifyResult(new VerifyResult(20, msg, nil, self))
implausible (msg) | advlite.h[666] |
gAction.addVerifyResult(new VerifyResult(35, msg, nil, self))
inaccessible (msg) | advlite.h[663] |
gAction.addVerifyResult(new VerifyResult(10, msg, nil, self))
InitiateConversationReason | advlite.h[829] |
1
input (x, ...) | advlite.h[1256] |
inputManager.getInputLine(x)
iobjFor (action) | advlite.h[376] |
objFor(Iobj, action)
iobjList | advlite.h[95] |
nounList->iobjMatch
isEatable | advlite.h[1115] |
isEdible
isPotable | advlite.h[1122] |
isDrinkable
isTouchable | advlite.h[1244] |
isFeelable
literalAcc | advlite.h[85] |
literalPhrase->accMatch
literalAobj | advlite.h[86] |
literalPhrase->accMatch
literalDobj | advlite.h[83] |
literalPhrase->dobjMatch
literalIobj | advlite.h[84] |
literalPhrase->iobjMatch
logical | advlite.h[638] |
gAction.addVerifyResult (new VerifyResult(100, '', true, self))
logicalRank (score) | advlite.h[660] |
gAction.addVerifyResult(new VerifyResult(score, '', true, self))
M_DOWN | advlite.h[1079] |
4
M_PREV | advlite.h[1077] |
2
M_QUIT | advlite.h[1076] |
1
M_SEL | advlite.h[1080] |
5
M_UP | advlite.h[1078] |
3
MatchAdj | advlite.h[134] |
0x0002
MatchNoApprox | advlite.h[153] |
0x1000
MatchNoTrunc | advlite.h[156] |
0x2000
MatchNoun | advlite.h[137] |
0x0004
MatchPartMask | advlite.h[146] |
0x0FFF
MatchPhrase | advlite.h[143] |
0x0010
MatchPlural | advlite.h[140] |
0x0008
MatchPrep | advlite.h[125] |
0x0001
MatchStrengthMask | advlite.h[159] |
0xF000
MatchWeak | advlite.h[131] |
0x0001
more | advlite.h[1255] |
inputManager.pauseForMore()
Msg (id, txt) | advlite.h[967] |
#@id, txt
This is used in CustomMessages objects to define message overrides. See CustomMessages for full details.
multiAcc | advlite.h[76] |
nounList->accMatch
multiAobj | advlite.h[77] |
nounList->accMatch
multiDobj | advlite.h[72] |
nounList->dobjMatch
multiIobj | advlite.h[73] |
nounList->iobjMatch
nextrule | advlite.h[1277] |
return (rulebook.contValue)
nonObvious | advlite.h[669] |
gAction.addVerifyResult(new VerifyResult(30, '', true, self, nil))
nostop | advlite.h[1278] |
return (rulebook.contValue)
numberDobj | advlite.h[78] |
numberPhrase->dobjMatch
numericAcc | advlite.h[90] |
numberPhrase -> accMatch
numericAobj | advlite.h[91] |
numberPhrase -> accMatch
numericDobj | advlite.h[88] |
numberPhrase -> dobjMatch
numericIobj | advlite.h[89] |
numberPhrase -> iobjMatch
objFor (which, action) | advlite.h[373] |
propertyset '*' ## #@which ## #@action
reportAfter (msg) | advlite.h[381] |
gCommand.afterReports += msg
rnull | advlite.h[1276] |
return null
SelArbitrary | advlite.h[196] |
0x0002
SelDefault | advlite.h[210] |
0x0008
SelDisambig | advlite.h[189] |
0x0001
For example, there are two doors in the room, one open and one closed. The player types OPEN DOOR. It's fairly obvious that they must be talking about the closed door. So, we choose that object and set the Disambig flag.
(Note that this flag specifically does NOT mean that we had to ask the user for help with the dreaded "Which do you mean..." question. It's kind of the opposite: it means that we had a noun phrase that was initially ambiguous, but that we managed to disambiguate it on our own. When we get the user involved, there's ambiguity *before* we ask the question, but the user's response removes the ambiguity by telling us exactly which alternative they intended. This flag indicates that we made an educated guess about what the user must have intended, without asking. The flag lets the parser tell the player about the guess, which is desirable because the guess is sometimes wrong.
SelPlural | advlite.h[202] |
0x0004
SelProg | advlite.h[218] |
0x1000
setPastTense (val) | advlite.h[905] |
(gameMain.usePastTense = (val))
singleAcc | advlite.h[70] |
singleNoun->accMatch
singleAobj | advlite.h[71] |
singleNoun->accMatch
singleDir | advlite.h[87] |
directionName->dirMatch
singleDobj | advlite.h[68] |
singleNoun->dobjMatch
singleIobj | advlite.h[69] |
singleNoun->iobjMatch
stop | advlite.h[1264] |
return stopValue;
STRINGIZE (x) | advlite.h[266] |
_STRINGIZE(x)
STRINGIZE (x) | advlite.h[953] |
_STRINGIZE(x)
topicAcc | advlite.h[81] |
topicPhrase->accMatch
topicAobj | advlite.h[82] |
topicPhrase->accMatch
topicDobj | advlite.h[79] |
topicPhrase->dobjMatch
topicIobj | advlite.h[80] |
topicPhrase->iobjMatch
touchDesc | advlite.h[1246] |
feelDesc
tSel (presVal, pastVal) | advlite.h[911] |
(gameMain.usePastTense ? (pastVal) : (presVal))
VerbRule (tag) | advlite.h[61] |
grammar predicate(tag):
VideoLink | advlite.h[1215] |
2
waitKey (x, ...) | advlite.h[1257] |
inputManager.getKey(x)
withPast (callback) | advlite.h[919] |
(withTense(true, (callback)))
withPresent (callback) | advlite.h[918] |
(withTense(nil, (callback)))
ClosedGoal OpenGoal UndiscoveredGoal
| advlite.h[1184] |
feminine masculine neuter
| advlite.h[853] |
FootnotesFull FootnotesMedium FootnotesOff
| advlite.h[1187] |
indirectLockable lockableWithKey lockableWithoutKey notLockable
| advlite.h[851] |
large
| advlite.h[1168] |
manyToMany manyToOne oneToMany oneToOne
| advlite.h[1287] |
medium
| advlite.h[1175] |
normalRelation reverseRelation
| advlite.h[1290] |
null
| advlite.h[1270] |
OtherObject
| advlite.h[938] |
rmcAskLiteral
| advlite.h[248] |
rmcAskObject
| advlite.h[245] |
rmcCommand
| advlite.h[239] |
rmcDisambig
| advlite.h[251] |
rmcOops
| advlite.h[242] |
small
| advlite.h[1181] |
Achievement | advlite.h[708] |
+points? "desc";
ActorState | advlite.h[744] |
"specialDesc" 'stateDesc' | "stateDesc" ?;
AltTopic | advlite.h[819] |
"topicResponse" | [eventList];
AltTopic | advlite.h[820] |
[firstEvents] [eventList];
ClockEvent | advlite.h[1193] |
[eventTime];
DefaultConsultTopic | advlite.h[809] |
"topicResponse" | [eventList];
DefaultThought | advlite.h[810] |
"topicResponse" | [eventList];
DefaultTopic | advlite.h[808] |
"topicResponse" | [eventList];
Doer | advlite.h[822] |
'cmd';
Door | advlite.h[731] |
'vocab' @location? "desc"? ->otherSide;
Door | advlite.h[732] |
->otherSide 'vocab' @location? "desc"?;
Enterable | advlite.h[737] |
inherited ->connector;
Enterable | advlite.h[738] |
->connector inherited;
EventList | advlite.h[1101] |
[eventList];
ExtraHint | advlite.h[1096] |
+hintDelay? "hintText" | [eventList];
Footnote | advlite.h[1190] |
"desc";
Goal | advlite.h[1088] |
->closeWhenAchieved? 'title' 'heading'? [menuContents];
Hint | advlite.h[1089] |
'hintText' [referencedGoals]?;
MenuItem | advlite.h[1083] |
'title' 'heading'?;
MenuLongTopicItem | advlite.h[1085] |
'title' 'heading'? 'menuContents';
MenuTopicItem | advlite.h[1084] |
'title' 'heading'? [menuContents];
MiscTopic | advlite.h[813] |
"topicResponse" | [eventList];
MiscTopic | advlite.h[814] |
[firstEvents] [eventList];
NodeContinuationTopic | advlite.h[815] |
"topicResponse" | [eventList];
NodeContinuationTopic | advlite.h[816] |
[firstEvents] [eventList];
QueryTopic | advlite.h[774] |
+matchScore? 'matchPattern' "topicResponse" | [eventList] ?;
QueryTopic | advlite.h[778] |
+matchScore? 'matchPattern' [firstEvents] [eventList];
QueryTopic | advlite.h[782] |
+matchScore? 'qtype' @matchObj | [matchObj] | 'matchPattern' "topicResponse" | [eventList] ?;
QueryTopic | advlite.h[788] |
+matchScore? 'qtype' @matchObj | [matchObj] | 'matchPattern' [firstEvents] [eventList];
QueryTopic | advlite.h[794] |
+matchScore? 'qtype' @matchObj | [matchObj] 'matchPattern' "topicResponse" | [eventList] ?;
QueryTopic | advlite.h[801] |
+matchScore? 'qtype' @matchObj | [matchObj] 'matchPattern' [firstEvents] [eventList];
Region | advlite.h[729] |
[rooms];
Relation | advlite.h[1288] |
'name' 'reverseName'? @relationType? +reciprocal?;
Room | advlite.h[726] |
'roomTitle' 'vocab' "desc"?;
Room | advlite.h[727] |
'roomTitle' "desc"?;
Rule | advlite.h[1280] |
@location? &action | [action]?;
SensoryEmanation | advlite.h[742] |
inherited [eventList]?;
ShuffledEventList | advlite.h[1102] |
[firstEvents] [eventList];
string | advlite.h[1129] |
<> mentionA;
string | advlite.h[1130] |
<> mentionA;
string | advlite.h[1131] |
<> mentionThe;
string | advlite.h[1132] |
<< list of * is >> listStrIs;
string | advlite.h[1133] |
<< list of * >> makeListInStr;
string | advlite.h[1134] |
<< is list of * >> isListStr;
string | advlite.h[1135] |
<< exclude * >> makeMentioned;
string | advlite.h[1196] |
<> takeTime;
string | advlite.h[1197] |
<> takeTime;
string | advlite.h[1198] |
<> takeTime;
string | advlite.h[1199] |
<> takeTime;
string | advlite.h[1201] |
<> addTime;
string | advlite.h[1202] |
<> addTime;
string | advlite.h[1203] |
<> addTime;
string | advlite.h[1204] |
<> addTime;
StyleTag | advlite.h[716] |
'tagName' 'openText'? 'closeText'?;
SymConnector | advlite.h[1305] |
->destination;
SymConnector | advlite.h[1306] |
@room1 @room2;
SymPassage | advlite.h[1308] |
->destination 'vocab' "desc"?;
SymPassage | advlite.h[1309] |
'vocab' ->destination "desc"?;
SymPassage | advlite.h[1310] |
'vocab' @room1 @room2 "desc"?;
Test | advlite.h[825] |
'testName' [testList] @location? [testHolding]?;
Test | advlite.h[826] |
'testName' [testList] [testHolding]? @location?;
Thing | advlite.h[723] |
'vocab' @location? "desc"?;
Topic | advlite.h[724] |
'vocab' @familiar?;
TopicEntry | advlite.h[749] |
+matchScore? @matchObj | [matchObj] | 'matchPattern' "topicResponse" | [eventList] ?;
TopicEntry | advlite.h[755] |
+matchScore? @matchObj | [matchObj] | 'matchPattern' [firstEvents] [eventList];
TopicEntry | advlite.h[761] |
+matchScore? @matchObj | [matchObj] 'matchPattern' "topicResponse" | [eventList] ?;
TopicEntry | advlite.h[768] |
+matchScore? @matchObj | [matchObj] 'matchPattern' [firstEvents] [eventList];
TopicGroup | advlite.h[746] |
+scoreBoost? 'convKeys' | [convKeys] ? ;
TravelConnector | advlite.h[734] |
'vocab'? @location? "desc"? ->destination;
TravelConnector | advlite.h[735] |
->destination "travelDesc";
Unthing | advlite.h[740] |
'vocab' @location? 'notHereMsg'?;