Idea for message grouping: Actions are executed implicitly (no "default messages"), and then registered in a stack of actions. Each message_generator object (defined by the system or customized/defined by the user) is passed this stack (by the message_handler), and returns the number of actions it can report. The one which returns the highest number wins. (This way, the more sophisticated message_generators override the less sophisticated ones where possible.) That message_generator is then instructed to generate a message for that group of actions. The group of actions reported are removed from the stack, and the process repeats. to do: * add LockIn verb, for handling: >bob, lock ball in box * add verbose option for rFind (returns *path* as well as action). * add a "exclude plan" option, to disallow certain plans to be considered by rFind in any given case. * either or both of the former two would solve our current trouble with "goto". (which currently moves the player towards a key, rather than towards a locked door.) * some generic intelligence for light sources (ie, don't enter a dark room until it's lighted) * fix rPress i.e., press a button. How to check rTrue? Set a flag to nil, until the action phase is called, which sets it to true? * A demo game with one NPC with one top-level goal and the player's job is to try to stop them. * beliefs. ("knowledge" = of existence; "belief" = of current states.) * link knowledge and belief to planbase; i.e., provide an additional knowledge-oriented planbase. * test all connectors, not just rooms, doors, and stairways * exploration plan: when no plan is found because knowledge is limited, build on current knowledge by exploring. this could include ask about. * a RAP/actor interface, for tracking frustration, obstacles, plan-path, registering other plans for later processing, etc. * multiple plan consideration: set lower-priority plans, or cache plans. Simultaneous plan pursuit is probably impossible, though. * consider abstract handler objects as RAPPERS, not only NPC actors. ------------- http://lists.v-space.org/archive/tads3/200309/threads.html for belief/knowledge discussion. ============================================= New idea: instead of rAction executing a nested action, return a verb and the (a,p) to the interface, so pre and post-execution routines can go through the same interface easily. ===== To speed up processing where the parameter is a class/list/vector: write a specifyParam() method in the Rapper object, and a resetParam() also. when a Rapper finds a target, it specifies the parameter to that object in particular. if the processor in the future fails to find that parameter, the processor calls resetParam(), and reititializes its process. e.g., if a combatant is attacked, specifyParam(target). if the RAP processor fails to find the target, resetParam(old_param) or so. and then the same RAP process goes again.