anchor.diff:  		message = (message ?? '').trim();
   
   		DateTime now = new DateTime.now();
  -		if(sayTimeout == null || sayTimeout.compareTo(now) < 0) {
  +		if (sayTimeout == null || sayTimeout.compareTo(now) < 0) {
   			bubbleText = message;
  -			int timeToLive = message.length * 30 + 3000; //minimum 3s plus 0.3s per character
  -			if(timeToLive > 10000) //max 10s
  -				timeToLive = 10000;
  -			//messages over 10s will only display for 10s
  -
  -			Duration messageDuration = new Duration(milliseconds:timeToLive);
  +			int timeToLive = message.length * 30 + 3000; // 0.3 sec per character plus 3 seconds minimum
  +			timeToLive = min(timeToLive, 10000); // Cap at 10 seconds
  +
  +			Duration messageDuration = new Duration(milliseconds: timeToLive);
   			sayTimeout = now.add(messageDuration);
   			new Timer(messageDuration, () {
   				bubbleText = null;
  
positive.code: 
  abstract class Entity extends Object with MetabolicsChange implements Persistable, Actionable {
  	List<Action> actions = [];
  	num actionTime = 2500, x, y, z, rotation;
  	bool h_flip;
  	String bubbleText, streetName, type, id;
  	DateTime sayTimeout = null;
  	Map<String, List<String>> responses = {};
  	Map<String, Spritesheet> states;
  
negative.code: 		//check that the player has the necessary item(s)
  		bool hasAtLeastOne = action.itemRequirements.any.length == 0;
  		await Future.forEach(action.itemRequirements.any, (String itemType) async {
  			if (!hasAtLeastOne) {
  				if (includeBroken) {
  					hasAtLeastOne = await InventoryV2.hasItem(email, itemType, 1);
  				} else {
  