Upon undertaking any token string processing, the interpreter will clear the gfPoison flag, the zfPoison flag, and the gfNil flag.
Every token-function will examine its arguements as it pops them off the stack to determine if they fall inside the proper range. There are three possibilities: valid, nil, and invalid. Valid results cause the interpreter to proceed normally. If the input value is invalid, then the interpreter sets the zfPoison flag and the gfPoison flag, sets the giPoison index to the offending token index, and exits the function, returning a nil value. If the input value is nil, then the function sets the gfNil flag and exits, returning a nil value.
Any interpreter function which is unable to return a valid value will return a nil value and will set the gfNil flag.
In the main outer loop of the interpreter, after each token call, the code will examine the stack pointer; if it is zero, then it will clear the zfPoison flag.
The engine will send token strings to the interpreter in small packets. These are the packets and their handling:
gfPoison == true
Declared Poison Level
Packet Stop Note Workaround
role activation deboobooer booboo log entry gRoleActive = false
emotional reaction deboobooer booboo log entry ignore
consequence #N deboobooer booboo log entry Weight[N] = -1
Physical reactions deboobooer booboo log entry ignore
gfNil == true
Declared Poison Level
Packet Stop Note Workaround
role activation ignore nil log entry gRoleActive = false
emotional reaction ignore nil log entry ignore
consequence #N ignore nil log entry Weight[N] = -1
Physical reactions ignore nil log entry ignore
Logs are files created during a run of the engine. They are not printable, but are viewable after the run. Each log entry will contain the following information: verb number, role number, token index of the offending token. The storybuilder can call for a display of the logs, getting a listing of each booboo or nil value, with interpreted text strings and the offending token highlighted. Appropriate double-clicking will take the storybuilder to the role editor for that verb.
This is a display in the Erasmotron that permits the storybuilder to examine the actual values at the moment that the engine has halted. By clicking on any token-label, the storybuilder can get the value of that token at that moment.
Backtracing is not supported in the deboobooer. If the storybuilder discovers that some entry value is inexplicably screwed up, she has no means of tracing how that earlier value got so messed up. However, we will provide a means of examining the important data structures, primarily the HistoryBook, with a dumb text translation of its contents in a scrolling box. Some other data structures, such as personality traits and custom variables, will also be made available.