I seem to be converging on a design but questions remain. Here's what I have so far: we add two more tokens to the token list. The first is called DealValueToDirObject; the second is called DealCostToSubject. The storybuilder is invited to insert assignments to these values during editing. There are also two new functions to add to the function menus: DealValue(Verb) and DealCost(Verb).
When DealValue is executed by the interpreter, it pops the Verb value off of the stack and uses it as an index to look up the verb data. It then moves through the roles, looking for the first role that has the three tokens (Actor IsSamePersonAs DirObject). If it finds such a role, it then scans the token string for any occurrence of the tokens DealValueToDirObject and DealCostToSubject. If it finds such values, it then copies the appropriate substring into a buffer. Here's where we get tricky: we must now execute that substring using the interpreter, and yet return control to the function DealValue when we're done. Here's another trickiness: The substring might well refer to variables whose local meaning is specific to that situation. For example, we might see the equation:
DealValueToDirObject <= Affection[Actor, Subject]
The catch here is that Subject refers to the subject of that contemplated verb, not the subject of the dealmaking verb. There is considerable capacity for confusion here. Perhaps the solution is to confine all the terms of the deal to the special objects and then have the DealValue assignments confine themselves to those terms.