anchor.diff:  		{gridline_color,  g_color()},
   		{grid_opacity,  g_opacity()}
   	])), uniquify(X)).
  +
  +g_combatantjson() ->
  +	?LET(X, list(oneof([
  +		{name, g_name()},
  +		{color, g_color()},
  +		{portrait_image, g_url()},
  +		{token_image, g_url()},
  +		{x, integer()},
  +		{y, integer()},
  +		{layer_id, choose(1, 3)},
  +		{initiative, float()},
  +		{size, pos_integer()},
  +		{aura_size, non_neg_integer()},
  +		{aura_color, oneof([null, g_color()])}
  +	])), uniquify(X)).
  +
  +%% nuts n bolts
   
   g_name() ->
   	?LET(N,
  
positive.code: 
  -include_lib("proper/include/proper.hrl").
  
  -export([g_mapjson/0, g_name/0, g_color/0, g_opacity/0, g_color_rgb/0,
  	g_color_rgba/0, g_256/0, uniquify/1]).
  
  g_mapjson() ->
  	?LET(X, list(oneof([
  
negative.code: 			{5, char()}
  		])
  	), unicode:characters_to_binary(N)).
  
  g_url() ->
  	?LET({Proto, Domain, Path},
  		{oneof([<<"http">>, <<"https">>]), list(char()), list(list(char()))},
  		begin
  			Path = list_to_binary(string:join(Path, "/")),
  			<<Proto, "://", Domain, "/", Path>>
  		end
  	).
  
  g_color() ->
  	oneof([
  