\ExplSyntaxOn

\cs_generate_variant:Nn \keys_define:nn {ee}
\cs_generate_variant:Nn \keys_define:nn {en}


\keys_define:nn {pgfgo} {players .code:n = {\keys_set:nn {pgfgo/players} {#1}}}

\def\pgfgosetplayer#1#2{\pgfgoset{players = {#1 = {#2}}}}


\bool_new:N \l_pgfgo_mark_inside_mark_bool

\def\pgfgochooseplayers#1#2#3{
       \pgfgocopyplayer{neutral}       {#1}
       \pgfgocopyplayer{black}         {#2}
       \pgfgocopyplayer{white}         {#3}
}










\def\pgfgocopyplayer#1#2{
       \dim_set_eq:cc  {l_pgfgo_players_ #1 _stone_radius_dim} {l_pgfgo_players_ #2 _stone_radius_dim}
       \fp_set_eq:cc   {l_pgfgo_players_ #1 _stone_scale_fp} {l_pgfgo_players_ #2 _stone_scale_fp}

       \bool_set_eq:cc {l_pgfgo_players_ #1 _stone_line_bool} {l_pgfgo_players_ #1 _stone_line_bool}
       \tl_set_eq:cc   {l_pgfgo_players_ #1 _stone_line_color_tl} {l_pgfgo_players_ #2 _stone_line_color_tl}
       \dim_set_eq:cc  {l_pgfgo_players_ #1 _stone_line_width_dim} {l_pgfgo_players_ #2 _stone_line_width_dim}
       \fp_set_eq:cc   {l_pgfgo_players_ #1 _stone_line_opacity_fp} {l_pgfgo_players_ #2 _stone_line_opacity_fp}

       \bool_set_eq:cc {l_pgfgo_players_ #1 _stone_fill_bool} {l_pgfgo_players_ #2 _stone_fill_bool}
       \tl_set_eq:cc   {l_pgfgo_players_ #1 _stone_fill_color_tl} {l_pgfgo_players_ #2 _stone_fill_color_tl}
       \fp_set_eq:cc   {l_pgfgo_players_ #1 _stone_fill_opacity_fp} {l_pgfgo_players_ #2 _stone_fill_opacity_fp}

       \bool_set_eq:cc {l_pgfgo_players_ #1 _stone_drop_shadow_bool} {l_pgfgo_players_ #2 _stone_drop_shadow_bool}
       \fp_set_eq:cc           {l_pgfgo_players_ #1 _stone_drop_shadow_angle_fp} {l_pgfgo_players_ #2 _stone_drop_shadow_angle_fp}
       \dim_set_eq:cc  {l_pgfgo_players_ #1 _stone_drop_shadow_offset_dim} {l_pgfgo_players_ #2 _stone_drop_shadow_offset_dim}
       \fp_set_eq:cc           {l_pgfgo_players_ #1 _stone_drop_shadow_opacity_fp} {l_pgfgo_players_ #2 _stone_drop_shadow_opacity_fp}

       \bool_set_eq:cc {l_pgfgo_players_ #1 _stone_drop_shine_bool} {l_pgfgo_players_ #2 _stone_drop_shine_bool}
       \fp_set_eq:cc           {l_pgfgo_players_ #1 _stone_drop_shine_angle_fp} {l_pgfgo_players_ #2 _stone_drop_shine_angle_fp}
       \fp_set_eq:cc           {l_pgfgo_players_ #1 _stone_drop_shine_opacity_fp} {l_pgfgo_players_ #2 _stone_drop_shine_opacity_fp}
       \tl_set_eq:cc   {l_pgfgo_players_ #1 _stone_drop_shine_color_tl}        {l_pgfgo_players_ #2 _stone_drop_shine_color_tl}

       \dim_set_eq:cc  {l_pgfgo_players_ #1 _move_label_font_size_dim} {l_pgfgo_players_ #2 _move_label_font_size_dim}
       \tl_set_eq:cc   {l_pgfgo_players_ #1 _move_label_color_tl} {l_pgfgo_players_ #2 _move_label_color_tl}
       \cs_set_eq:cc           {pgfgo_players_ #1 _move_label_format:n}{pgfgo_players_ #2 _move_label_format:n}


       \tl_set_eq:cc   {l_pgfgo_players_ #1 _mark_line_color_tl} {l_pgfgo_players_ #2 _mark_line_color_tl}
       \dim_set_eq:cc  {l_pgfgo_players_ #1 _mark_line_width_dim} {l_pgfgo_players_ #2 _mark_line_width_dim}

       \tl_set_eq:cc   {l_pgfgo_players_ #1 _mark_fill_color_tl} {l_pgfgo_players_ #2 _mark_fill_color_tl}
       \bool_set_eq:cc {l_pgfgo_players_ #1 _mark_fill_bool} {l_pgfgo_players_ #2 _mark_fill_bool}

       \tl_set_eq:cc   {l_pgfgo_players_ #1 _mark_label_color_tl} {l_pgfgo_players_ #2 _mark_label_color_tl}
       \bool_set_eq:cc {l_pgfgo_players_ #1 _mark_sequence_bool} {l_pgfgo_players_ #2 _mark_sequence_bool}
       \int_set_eq:cc  {l_pgfgo_ #1 _mark_sequence_from_int} {l_pgfgo_ #2 _mark_sequence_from_int}
       \cs_set_eq:cc           {pgfgo_players_ #1 _mark_sequence_format:n} {pgfgo_players_ #2 _mark_sequence_format:n}
       \tl_set_eq:cc   {l_pgfgo_players_ #1 _mark_label_font_tl} {l_pgfgo_players_ #2 _mark_label_font_tl}
}




\cs_new:Nn \pgfgo_get_variables_from_current_player: {
       \bool_if:NTF \l_pgfgo_players_black_bool {
               \pgfgo_get_values_from_player:n{black}
       }{
               \bool_if:NTF \l_pgfgo_players_white_bool {
                       \pgfgo_get_values_from_player:n{white}
               }{
                       \pgfgo_get_values_from_player:n{neutral}
               }
       }
}




\dim_new:N      \l_pgfgo_players_stone_radius_dim
\fp_new:N       \l_pgfgo_players_stone_scale_fp

\bool_new:N \l_pgfgo_players_stone_line_bool
\tl_new:N       \l_pgfgo_players_stone_line_color_tl
\dim_new:N      \l_pgfgo_players_stone_line_width_dim
\fp_new:N       \l_pgfgo_players_stone_line_opacity_fp

\bool_new:N \l_pgfgo_players_stone_fill_bool
\tl_new:N       \l_pgfgo_players_stone_fill_color_tl
\fp_new:N       \l_pgfgo_players_stone_fill_opacity_fp

\bool_new:N     \l_pgfgo_players_stone_drop_shadow_bool
\fp_new:N               \l_pgfgo_players_stone_drop_shadow_angle_fp
\dim_new:N      \l_pgfgo_players_stone_drop_shadow_offset_dim
\fp_new:N               \l_pgfgo_players_stone_drop_shadow_opacity_fp

\bool_new:N     \l_pgfgo_players_stone_mark_bool

\bool_new:N     \l_pgfgo_players_stone_drop_shine_bool
\fp_new:N               \l_pgfgo_players_stone_drop_shine_angle_fp
\fp_new:N               \l_pgfgo_players_stone_drop_shine_opacity_fp
\tl_new:N               \l_pgfgo_players_stone_drop_shine_color_tl

\dim_new:N      \l_pgfgo_players_move_label_font_size_dim
\tl_new:N       \l_pgfgo_players_move_label_color_tl
\bool_new:N \l_pgfgo_goban_remember_move_label_bool


\tl_new:N       \l_pgfgo_players_mark_line_color_tl
\dim_new:N      \l_pgfgo_players_mark_line_width_dim

\tl_new:N       \l_pgfgo_players_mark_fill_color_tl
\bool_new:N \l_pgfgo_players_mark_fill_bool

\tl_new:N       \l_pgfgo_players_mark_label_color_tl

\bool_new:N \l_pgfgo_players_mark_sequence_bool
\int_new:N      \l_pgfgo_mark_sequence_from_int
\tl_new:N       \l_pgfgo_players_mark_label_font_tl







%COPIA LOS VALORES DE UN JUGADOR PARA USARLOS.
\cs_new:Nn \pgfgo_get_values_from_player:n{
       \dim_set_eq:Nc  \l_pgfgo_players_stone_radius_dim                                               {l_pgfgo_players_ #1 _stone_radius_dim}
       \fp_set_eq:Nc   \l_pgfgo_players_stone_scale_fp                                                         {l_pgfgo_players_ #1 _stone_scale_fp}

       \bool_set_eq:Nc \l_pgfgo_players_stone_line_bool                                                        {l_pgfgo_players_ #1 _stone_line_bool}
       \tl_set_eq:Nc   \l_pgfgo_players_stone_line_color_tl                                    {l_pgfgo_players_ #1 _stone_line_color_tl}
       \dim_set_eq:Nc  \l_pgfgo_players_stone_line_width_dim                           {l_pgfgo_players_ #1 _stone_line_width_dim}
       \fp_set_eq:Nc   \l_pgfgo_players_stone_line_opacity_fp                          {l_pgfgo_players_ #1 _stone_line_opacity_fp}

       \bool_set_eq:Nc \l_pgfgo_players_stone_fill_bool                                                        {l_pgfgo_players_ #1 _stone_fill_bool}
       \tl_set_eq:Nc   \l_pgfgo_players_stone_fill_color_tl                                    {l_pgfgo_players_ #1 _stone_fill_color_tl}
       \fp_set_eq:Nc   \l_pgfgo_players_stone_fill_opacity_fp                          {l_pgfgo_players_ #1 _stone_fill_opacity_fp}

       \bool_set_eq:Nc \l_pgfgo_players_stone_drop_shadow_bool                         {l_pgfgo_players_ #1 _stone_drop_shadow_bool}
       \fp_set_eq:Nc           \l_pgfgo_players_stone_drop_shadow_angle_fp     {l_pgfgo_players_ #1 _stone_drop_shadow_angle_fp}
       \dim_set_eq:Nc  \l_pgfgo_players_stone_drop_shadow_offset_dim   {l_pgfgo_players_ #1 _stone_drop_shadow_offset_dim}
       \fp_set_eq:Nc           \l_pgfgo_players_stone_drop_shadow_opacity_fp   {l_pgfgo_players_ #1 _stone_drop_shadow_opacity_fp}

       \bool_set_eq:Nc \l_pgfgo_players_stone_drop_shine_bool                          {l_pgfgo_players_ #1 _stone_drop_shine_bool}
       \fp_set_eq:Nc           \l_pgfgo_players_stone_drop_shine_angle_fp              {l_pgfgo_players_ #1 _stone_drop_shine_angle_fp}
       \fp_set_eq:Nc           \l_pgfgo_players_stone_drop_shine_opacity_fp    {l_pgfgo_players_ #1 _stone_drop_shine_opacity_fp}
       \tl_set_eq:Nc           \l_pgfgo_players_stone_drop_shine_color_tl              {l_pgfgo_players_ #1 _stone_drop_shine_color_tl}

       \dim_set_eq:Nc  \l_pgfgo_players_move_label_font_size_dim               {l_pgfgo_players_ #1 _move_label_font_size_dim}
       \tl_set_eq:Nc   \l_pgfgo_players_move_label_color_tl                                    {l_pgfgo_players_ #1 _move_label_color_tl}
       \cs_set_eq:Nc   \pgfgo_players_move_label_format:n                                              {pgfgo_players_ #1 _move_label_format:n}



       \tl_set_eq:Nc   \l_pgfgo_players_mark_line_color_tl                                     {l_pgfgo_players_ #1 _mark_line_color_tl}
       \dim_set_eq:Nc  \l_pgfgo_players_mark_line_width_dim                                    {l_pgfgo_players_ #1 _mark_line_width_dim}

       \tl_set_eq:Nc   \l_pgfgo_players_mark_fill_color_tl                                     {l_pgfgo_players_ #1 _mark_fill_color_tl}
       \bool_set_eq:Nc \l_pgfgo_players_mark_fill_bool                                                         {l_pgfgo_players_ #1 _mark_fill_bool}

       \tl_set_eq:Nc   \l_pgfgo_players_mark_label_color_tl                                    {l_pgfgo_players_ #1 _mark_label_color_tl}
       \bool_set_eq:Nc \l_pgfgo_players_mark_sequence_bool                                             {l_pgfgo_players_ #1 _mark_sequence_bool}
       \int_set_eq:Nc  \l_pgfgo_mark_sequence_from_int                                                         {l_pgfgo_ #1 _mark_sequence_from_int}
       \cs_set_eq:Nc   \pgfgo_players_mark_sequence_format:n                                   {pgfgo_players_ #1 _mark_sequence_format:n}
       \tl_set_eq:Nc   \l_pgfgo_players_mark_label_font_tl                                             {l_pgfgo_players_ #1 _mark_label_font_tl}
}




       \keys_define:nn {pgfgo / players} {
               all .code:n = {
                       \keys_set:nn {pgfgo / players / neutral}        {#1}
                       \keys_set:nn {pgfgo / players / black}          {#1}
                       \keys_set:nn {pgfgo / players / white}          {#1}
               }
       }









       \def\pgfgonewplayers#1{
               \clist_set:Nn \l_tmpa_clist {#1}
               \clist_map_variable:NNn \l_tmpa_clist\variable{

                       %SIRVE PARA DETERMINAR SI UNA PIEDRA ES O NO DE ESTE JUGADOR
                       \bool_new:c {l_pgfgo_players_ \variable _bool}




                       \keys_define:ne {pgfgo / players} {\variable .code:n = {\exp_not:N\keys_set:nn {pgfgo / players / \variable} {##1}}}

                       \keys_define:ee { pgfgo / players / \variable } {
                               stone                   .code:n = {\exp_not:N\keys_set:nn {pgfgo / players / \variable / stone}         {##1}},
                               move                    .code:n = {\exp_not:N\keys_set:nn {pgfgo / players / \variable / move}          {##1}},
                               mark                    .code:n = {\exp_not:N\keys_set:nn {pgfgo / players / \variable / mark}          {##1}},
                               territory                       .code:n = {\exp_not:N\keys_set:nn {pgfgo / players / \variable / territory}              {##1}},
                       }



                       %----------------------------------------------------------------------------------------------------
                       %PIEDRA
                       \dim_new:c {l_pgfgo_players_ \variable _stone_radius_dim}
                       \fp_new:c {l_pgfgo_players_ \variable _stone_scale_fp}

                       \keys_define:ee { pgfgo / players / \variable / stone } {
                               prisoner                                                .code:n = {\keys_set:nn { pgfgo / players / \variable / stone / fill } {opacity = 0.5}},
                               line                                                            .code:n = {\keys_set:nn { pgfgo / players / \variable / stone / line } {##1}},
                               fill                                                            .code:n = {\keys_set:nn { pgfgo / players / \variable / stone / fill } {##1}},
                               radius                                                  .code:n = {\dim_set:cn{l_pgfgo_players_ \variable _stone_radius_dim}{##1}},
                               radius                                                  .initial:n = {5.5pt},
                               scale                                                           .code:n = {\fp_set:cn{l_pgfgo_players_ \variable _stone_scale_fp}{##1}},
                               scale                                                           .initial:n = {1},
                               drop~shadow                                     .code:n = {\keys_set:nn{ pgfgo / players / \variable / stone / drop~shadow }{##1}},
                               drop~shine                                      .code:n = {\keys_set:nn{ pgfgo / players / \variable / stone / drop~shine }{##1}},
                               mark                                                            .groups:n       = { external },
                               black                                                           .groups:n = { external },
                               b                                                                               .groups:n = { external },
                               white                                                           .groups:n = { external },
                               w                                                                               .groups:n = { external },
                               neutral                                                 .groups:n = { external },
                               n                                                                               .groups:n = { external },
                               forget                                                  .groups:n = { external },
                               remember                                                .groups:n = { external }
                       }


                       \bool_new:c {l_pgfgo_players_ \variable _stone_line_bool}
                       \bool_set_true:c {l_pgfgo_players_ \variable _stone_line_bool}
                       \tl_new:c       {l_pgfgo_players_ \variable _stone_line_color_tl}
                       \dim_new:c      {l_pgfgo_players_ \variable _stone_line_width_dim}
                       \fp_new:c       {l_pgfgo_players_ \variable _stone_line_opacity_fp}

                       \keys_define:ee { pgfgo / players / \variable / stone / line } {
                               true                            .code:n                 = {\exp_not:N\bool_set_true:c   {l_pgfgo_players_ \variable _stone_line_bool}},
                               false                   .code:n                 = {\exp_not:N\bool_set_false:c  {l_pgfgo_players_ \variable _stone_line_bool}},
                               color                           .code:n                 = {\exp_not:N\tl_set:cn                                 {l_pgfgo_players_ \variable _stone_line_color_tl}{##1}},
                               color                           .initial:n      = {black},
                               width                           .code:n                 = {\exp_not:N\dim_set:cn                                {l_pgfgo_players_ \variable _stone_line_width_dim}{##1}},
                               width                           .initial:n      = {0.7pt},
                               opacity                 .code:n                 = {\exp_not:N\fp_set:cn                                 {l_pgfgo_players_ \variable _stone_line_opacity_fp}{##1}},
                               opacity                 .initial:n      = {1}
                       }



                       \bool_new:c {l_pgfgo_players_ \variable _stone_fill_bool}
                       \bool_set_true:c {l_pgfgo_players_ \variable _stone_fill_bool}
                       \tl_new:c       {l_pgfgo_players_ \variable _stone_fill_color_tl}
                       \fp_new:c       {l_pgfgo_players_ \variable _stone_fill_opacity_fp}

                       \keys_define:ee { pgfgo / players / \variable / stone / fill } {
                               true                            .code:n                 = {\exp_not:N\bool_set_true:c   {l_pgfgo_players_ \variable _stone_fill_bool}},
                               false                   .code:n                 = {\exp_not:N\bool_set_false:c  {l_pgfgo_players_ \variable _stone_fill_bool}},
                               color                           .code:n                 = {\exp_not:N\tl_set:cn                                 {l_pgfgo_players_ \variable _stone_fill_color_tl}{##1}},
                               color                           .initial:n      = {gray},
                               opacity                 .code:n                 = {\exp_not:N\fp_set:cn                                 {l_pgfgo_players_ \variable _stone_fill_opacity_fp}{##1}},
                               opacity                 .initial:n      =       {1}
                       }



                       \bool_new:c                             {l_pgfgo_players_ \variable _stone_drop_shadow_bool}
                       \bool_set_false:c       {l_pgfgo_players_ \variable _stone_drop_shadow_bool}
                       \fp_new:c                                       {l_pgfgo_players_ \variable _stone_drop_shadow_angle_fp}
                       \dim_new:c                              {l_pgfgo_players_ \variable _stone_drop_shadow_offset_dim}
                       \fp_new:c                                       {l_pgfgo_players_ \variable _stone_drop_shadow_opacity_fp}

                       \keys_define:ee { pgfgo / players / \variable / stone / drop~shadow } {
                               true                            .code:n                 = {\exp_not:N\bool_set_true:c   {l_pgfgo_players_ \variable _stone_drop_shadow_bool}},
                               false                   .code:n                 = {\exp_not:N\bool_set_false:c  {l_pgfgo_players_ \variable _stone_drop_shadow_bool}},
                               angle                           .code:n                 = {\exp_not:N\fp_set:cn                                 {l_pgfgo_players_ \variable _stone_drop_shadow_angle_fp}{##1}},
                               angle                           .initial:n      = {0},
                               offset                  .code:n                 = {\exp_not:N\dim_set:cn                                {l_pgfgo_players_ \variable _stone_drop_shadow_offset_dim}{##1}},
                               offset                  .initial:n      =       {0pt},
                               opacity                 .code:n                 = {\exp_not:N\fp_set:cn                                 {l_pgfgo_players_ \variable _stone_drop_shadow_opacity_fp}{##1}},
                               opacity                 .initial:n      = {0.5}
                       }


                       \bool_new:c                             {l_pgfgo_players_ \variable _stone_drop_shine_bool}
                       \bool_set_false:c       {l_pgfgo_players_ \variable _stone_drop_shine_bool}
                       \fp_new:c                                       {l_pgfgo_players_ \variable _stone_drop_shine_angle_fp}
                       \fp_new:c                                       {l_pgfgo_players_ \variable _stone_drop_shine_opacity_fp}
                       \tl_new:c                                       {l_pgfgo_players_ \variable _stone_drop_shine_color_tl}

                       \keys_define:ee { pgfgo / players / \variable / stone / drop~shine } {
                               true                            .code:n                 = {\exp_not:N\bool_set_true:c   {l_pgfgo_players_ \variable _stone_drop_shine_bool}},
                               false                   .code:n                 = {\exp_not:N\bool_set_false:c  {l_pgfgo_players_ \variable _stone_drop_shine_bool}},
                               angle                           .code:n                 = {\exp_not:N\tl_set:cn                                 {l_pgfgo_players_ \variable _stone_drop_shine_angle_fp}{##1}},
                               angle                           .initial:n      = {0},
                               opacity                 .code:n                 = {\exp_not:N\fp_set:cn                                 {l_pgfgo_players_ \variable _stone_drop_shine_opacity_fp}{##1}},
                               opacity                 .initial:n      = {1},
                               color                           .code:n                 = {\exp_not:N\tl_set:cn                                 {l_pgfgo_players_ \variable _stone_drop_shine_color_tl}{##1}},
                               color                           .default:n      = {gray!50!white},
                       }


                       %--------------------------------------------------------------------------------------------
                       %MOVE
                       \keys_define:ee { pgfgo / players / \variable / move } {
                               label                   .code:n = {\keys_set:nn { pgfgo / players / \variable / move / label } {##1}},
                               label                           .groups:n = {label},
                               from                            .groups:n = {external},
                               black                           .groups:n = {external},
                               b                                               .groups:n = {external},
                               white                           .groups:n = {external},
                               w                                               .groups:n = {external},
                               remember                .groups:n = {external},
                               forget                  .groups:n = {external},
                       }

                       \dim_new:c {l_pgfgo_players_ \variable _move_label_font_size_dim}
                       \tl_new:c {l_pgfgo_players_ \variable _move_label_color_tl}

                       \keys_define:ee { pgfgo / players / \variable / move / label } {
                               font~size                                       .code:n                 = {\exp_not:N\dim_set:cn{l_pgfgo_players_ \variable _move_label_font_size_dim}{##1}},
                               font~size                                               .initial:n      = {8pt},
                               color                                                           .code:n                 = {\tl_set:cn{l_pgfgo_players_ \variable _move_label_color_tl}{##1}},
                               color                                                           .initial:n      = {black},
                               forget                                                  .code:n                 = {\bool_set_false:N \l_pgfgo_goban_remember_move_label_bool},
                               remember                                                .code:n                 = {\bool_set_true:N \l_pgfgo_goban_remember_move_label_bool},
                               format                                                  .choice:,
                               format / arabic                 .code:n                 = {\exp_not:N\cs_set_eq:cN{pgfgo_players_ \variable _move_label_format:n}\exp_not:N\int_to_arabic:n},
                               format / alph                           .code:n                 = {\exp_not:N\cs_set_eq:cN{pgfgo_players_ \variable _move_label_format:n}\exp_not:N\int_to_alph:n},
                               format / Alph                           .code:n                 = {\exp_not:N\cs_set_eq:cN{pgfgo_players_ \variable _move_label_format:n}\exp_not:N\int_to_Alph:n},
                               format / roman                  .code:n                 = {\exp_not:N\cs_set_eq:cN{pgfgo_players_ \variable _move_label_format:n}\exp_not:N\int_to_roman:n},
                               format / Roman                  .code:n                 = {\exp_not:N\cs_set_eq:cN{pgfgo_players_ \variable _move_label_format:n}\exp_not:N\int_to_Roman:n},
                               format                                                  .initial:n      = {arabic},
                       }



                       %--------------------------------------------------------------------------------------------
                       %MARK



                       \keys_define:ee { pgfgo / players / \variable / mark } {
                               line              .code:n = {\keys_set:nn { pgfgo / players / \variable / mark / line } {##1}},
                               fill              .code:n = {\keys_set:nn { pgfgo / players / \variable / mark / fill } {##1}},
                               label                   .code:n = {\keys_set:nn { pgfgo / players / \variable / mark / label } {##1}},
                               sequence        .code:n = {\keys_set:nn { pgfgo / players / \variable / mark / sequence } {##1}},
                               sequence        .default:n = {from = 1},
                               custom          .code:n = {\keys_set:nn { pgfgo } {mark = { custom = { ##1 }}}},
                               unknown         .code:n = {
                                               \keys_set:nn {pgfgo / mark}{\l_keys_key_str}
                                       }
                       }



                       \tl_new:c {l_pgfgo_players_ \variable _mark_line_color_tl}
                       \dim_new:c {l_pgfgo_players_ \variable _mark_line_width_dim}

                       \keys_define:ee { pgfgo / players / \variable / mark / line } {
                               color                   .code:n                 = {\tl_set:cn{l_pgfgo_players_ \variable _mark_line_color_tl}{##1}},
                               color                   .initial:n      = {black},
                               width                   .code:n                 = {\dim_set:cn{l_pgfgo_players_ \variable _mark_line_width_dim}{##1}},
                               width                   .initial:n      =       {1pt}
                       }


                       \bool_new:c {l_pgfgo_players_ \variable _mark_fill_bool}
                       \bool_set_false:c {l_pgfgo_players_ \variable _mark_fill_bool}
                       \tl_new:c {l_pgfgo_players_ \variable _mark_fill_color_tl}

                       \keys_define:ee { pgfgo / players / \variable / mark / fill } {
                               true                    .code:n = {\bool_set_true:c {l_pgfgo_players_ \variable _mark_fill_bool}},
                               false                   .code:n = {\bool_set_false:c {l_pgfgo_players_ \variable _mark_fill_bool}},
                               color                   .code:n = {\tl_set:cn{l_pgfgo_players_ \variable _mark_fill_color_tl}{##1}},
                               color                   .initial:n = {gray!50!black}
                       }


                       \tl_new:c {l_pgfgo_players_ \variable _mark_label_color_tl}
                       \tl_new:c {l_pgfgo_players_ \variable _mark_label_font_tl}

                       \keys_define:ee { pgfgo / players / \variable / mark / label } {
                               color                   .code:n = {\tl_set:cn{l_pgfgo_players_ \variable _mark_label_color_tl}{##1}},
                               color                   .initial:n = {black},
                               font                    .code:n          = {\tl_set:cn{l_pgfgo_players_ \variable _mark_label_font_tl}{##1}},
                               format                                                  .choice:,
                               format / arabic                 .code:n                 = {\exp_not:N\cs_set_eq:cN{pgfgo_players_ \variable _mark_sequence_format:n}\exp_not:N\int_to_arabic:n},
                               format / alph                           .code:n                 = {\exp_not:N\cs_set_eq:cN{pgfgo_players_ \variable _mark_sequence_format:n}\exp_not:N\int_to_alph:n},
                               format / Alph                           .code:n                 = {\exp_not:N\cs_set_eq:cN{pgfgo_players_ \variable _mark_sequence_format:n}\exp_not:N\int_to_Alph:n},
                               format / roman                  .code:n                 = {\exp_not:N\cs_set_eq:cN{pgfgo_players_ \variable _mark_sequence_format:n}\exp_not:N\int_to_roman:n},
                               format / Roman                  .code:n                 = {\exp_not:N\cs_set_eq:cN{pgfgo_players_ \variable _mark_sequence_format:n}\exp_not:N\int_to_Roman:n},
                               format                                                  .initial:n      = {arabic},
                       }

                       \bool_new:c {l_pgfgo_players_ \variable _mark_sequence_bool}
                       \int_new:c {l_pgfgo_ \variable _mark_sequence_from_int}

                       \keys_define:ee { pgfgo / players / \variable / mark / sequence } {
                               true                                                            .code:n                 =       {\bool_set_true:c {l_pgfgo_players_ \variable _mark_sequence_bool}},
                               false                                                           .code:n                 =       {\bool_set_true:c {l_pgfgo_players_ \variable _mark_sequence_bool}},
                               use                                                                     .code:n                 =       {\bool_set_true:c {l_pgfgo_players_ \variable _mark_sequence_bool}},
                               from                                                            .code:n                 = {
                                       \bool_set_true:c {l_pgfgo_players_ \variable _mark_sequence_bool}
                                       \int_set:cn {l_pgfgo_ \variable _mark_sequence_from_int} {##1}
                                       },
                       }
               }
       }



%LOS JUGADORES REALES. TODO SE ASIGNA ACA
\pgfgonewplayers{neutral, black, white}
\pgfgochooseplayers{neutral}{black}{white}