Today’s issue is: ‘How to select a subject (Actor) and topic for conversation? My current algorithm is too dumb. It merely examines the Subject's feelings to find the most intense emotion of all; then it selects that Actor to talk about.
A slight but necessary improvement is to occlude those feelings that the speaker has already discussed with the DirObject. But this doesn’t go far enough. Several more considerations must be added.
The first is continuity. It’s stupid to flit from subject to subject in descending order of intensity of feelings; once a subject has been selected, the speaker should stick to that subject until he reaches some level of import that I deem small enough to justify changing the subject. That suggests the use of a variable expressing the freshness of the conversation: how many times have we already discuss this subject? The fewer the cases of such discussion, the greater the need to continue the discussion. I think I can handle that.
Even trickier is the need to include topics other than one’s feelings about a third party. There must be the ability to talk about the latest news. Indeed, I think I need a new Verb to initiate conversation called “What’s New?” That should trigger a search for news stories that might be of interest to the Subject.
This, however, pushes me to at last confront the issue of including secondary clauses in my Event structure. I see three ways to deal with this:
Use the PageNumber of the Event and present it inside a cartouche as previously described.
Stuff the words of the Event into the remaining WordSockets in the existing sentence. I have already considered and rejected this possibility.
Simply present the PageNumber of the Event in the current version, and complete the programming for this feature after we get funding. I like this option. It permits me to proceed with the design without engaging in major programming work.
But there is one horrible catch: if we are to allow Actors to relate Events, then the player must be able to choose an Event to relate, and THAT will require a huge addition to the user interface: a scrollable HistoryBook. Uh-oh.
No, no, no! I can use the inverse parser for this. Scan the HistoryBook for all Events known to the player; start by presenting a list of the Subjects of these Events. When a Subject is selected, present a list of Verbs appearing in all Events that are 1) known to the player and 2) use the ChosenSubject as Subject.
But there’s a catch: in order to expand the HistoryBook data, I need to give Deikto.java access to the Engine, which holds the HistoryBook. This, it turns out, is not easily done. I suppose that, for the time being, I shall have to include only the PageNumber. Even that is not so easy; there are lots of little things scattered throughout the SWAT software that will require some modification in order for this to work. I might as well get cracking.