anchor.diff:      return [];
     }
   
  -
  -
  -
  -
     dynamic allStats(){
  -    return ["power","hp","RELATIONSHIPS","mobility","sanity","freeWill","maxLuck","minLuck","alchemy"];
  +    return this.stats.keys;
     }
   
   }
  -
  -//knows how to get  a stat and modify it with buffers, whatever.
  -//TODO make this hash.
  -class Stats {
  -  num sanity = 0; //eventually replace triggerLevel with this (it's polarity is opposite triggerLevel)
  -  num alchemy = 0; //mostly unused until we get to the Alchemy update.
  -  num currentHP = 0;
  -  num hp = 0;  //what does infinite hp mean? you need to defeat them some other way. alternate win conditions? or can you only do The Choice?
  -  List<Relationship> relationships = [];
  -  num minLuck = 0;
  -  num maxLuck = 0;
  -  num freeWill = 0;
  -  num mobility = 0;
  -  num power = 1;   //power is generic. generally scales with any aplicable stats. lets me compare two different aspect players.
  -}
positive.code:   List<GameEntity> doomedTimeClones = []; //help fight the final boss(es).
    String causeOfDeath = ""; //fill in every time you die. only matters if you're dead at end
    GameEntity crowned = null; //TODO figure out how this should work. for now, crowns count as Game Entities, but should be an Item eventually
    GameEntity(this.name, this.id, this.session);
  
    //TODO grab out every method that current gameEntity, Player and PlayerSnapshot are required to have.
    //TODO make sure Player's @overide them.
  
negative.code:     return ret + pname +" (" + (this.getStat("currentHP")).round() +" hp, " + (this.getStat("power")).round() + " power)</font>"; //TODO denizens are aspect colored.
    }
    void flipOut(reason){
  
    }
    
    dynamic htmlTitleBasic(){
      return this.name;
    }
  