//
//
// memory.t, a system for remembering memories and thoughts, based on
// (and requiring) Suzanne Skinner's asktell.t
//
// Authored 1999 by dwmyers@my-deja.com. As the original asktell.t
// was released as public domain, so is this modest contribution to
// the original.
//
// Originally coded : 07/08/1999
// Modified         : 07/11/1999
//
//

class memory : topic
  isclear = nil
  verDoRemember( actor ) = {}
  doRemember( actor ) = { " This memory is unclear to you. "; }
  unclearMsg = "You don't seem to recall that very clearly. "
  unknownMsg = "That doesn't seem to be something you recall. "
; 

class clearmemory : memory
  isclear = true
  doRemember( actor ) = 
  { " This is a default memory. It is clear. ";  }
;
//
// The only difference between the below and Suzanne's verbclasses
// are:
// (a) the disambiguating classes and the null answer classes.
// (b) the fact a memory, once remembered, becomes a known topic.
//
class doMemoryVerb: deepverb
  validDoList(actor, prep, io) = (nil)
  validDo(actor, obj, seqno) = true
  doDefault(actor, prep, io) = (nil)

  // Allowing multiple objects can cause erroneous sdescs
  // (e.g. catchallNonMemory.sdesc) to get printed.
  rejectMultiDobj(prep) = {
    "You can't use multiple objects with that verb.";
    return true;
  }

  disambigDobj(actor, prep, io, verprop, wordlist, objlist, flaglist,
               numberWanted, isAmbiguous, silent) = 
  {
    local i, len;
    local newlist = [];
    local unclearMemoriesFound = nil;

    len := length(objlist);
    for ( i :=1 ; i <= len; i++) {
      if (isclass(objlist[i], memory)) {
        objlist[i].known := true;
        if (objlist[i].isclear)
          newlist += objlist[i];
        else
          unclearMemoriesFound := true;
      }
    }
    if (length(newlist) < 1) {
      if (unclearMemoriesFound)
        newlist += catchallFuzzyMemory;
      else
        newlist += catchallNonMemory;
    }
    return newlist;
  }
;
catchallFuzzyMemory : clearmemory
  sdesc = "da Fuzzy memory "
  doRemember( actor ) = { memory.unclearMsg; }
;
catchallNonMemory : clearmemory
  sdesc = " da Baaaaaaad memory "
  doRemember( actor ) = { memory.unknownMsg; }
;
RememberVerb : doMemoryVerb
  verb = 'remember' 'recall'
  sdesc = "remember"
  doAction = 'Remember'
;
//
// Potential additions: a think verb, allowing the phrases
// 'think about' 'meditate on'. Whether one wants it to respond
// to topics or memories or some combination thereof is left as
// an exercise to someone wishing to rationalize it in a game.
//
