anchor.diff:  
   	/// Called from the client menu
   	void talkTo({WebSocket userSocket, String email}) {
  -		if (!busy) {
  -			// Allow interaction
  -			busyWithEmail = email;
  -
  -			userSocket.add(JSON.encode({
  -				"action": "playMusic",
  -				"id": id,
  -				"openWindow": "itemChooser",
  -				"filter": "itemType=musicblock_.*",
  -				"windowTitle": "Play what for Crab?"
  -			}));
  -		} else {
  -			// Only 1 player at a time
  -			say(ERROR_BUSY);
  -		}
  +		userSocket.add(JSON.encode({
  +			"action": "playMusic",
  +			"id": id,
  +			"openWindow": "itemChooser",
  +			"filter": "itemType=musicblock_.*",
  +			"windowTitle": "Play what for Crab?"
  +		}));
   	}
   
   	/// Adds a song to the history of the crab.
  
positive.code: 	/// How long the crab animates
  	Duration randReactLength() => randSongLength() ~/ 2;
  
  	/// Make the crab hear this noise
  	Future playMusic({WebSocket userSocket, String email, String itemType, int count, int slot, int subSlot}) async {
  		assert (userSocket != null);
  		assert (email != null);
  		assert (itemType != null && MUSICBLOCK_TYPES.contains(itemType));
  
negative.code: 		} else {
  			// Be crabby
  
  print("not dancing...");
  			setState("dislike_on");
  			await new Future.delayed(randReactLength() + untilRespawn());
  
  print("removing headphones");
  			setState("like_off");
  			await _giveMusicblock();
  
  