<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Testing wave function collapse to represent behaviors in video games</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Adrián Ramos</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Micaela Y. Martín</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Miguel Chover</string-name>
          <email>chover@uji.es</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Universitat Jaume I</institution>
          ,
          <addr-line>Adv. Vicent Sos Baynat s/n, Castellón, 12071</addr-line>
          ,
          <country country="ES">Spain</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>One avenue of research with great viability for the development of video games is that of methods that allow the generation of procedural content. In recent years, the use of the Wave Function Collapse algorithm to create this type of content stands out. Although the algorithm has been used mainly for texture generation and level creation, its application to other fields of video games has been less explored and has a higher margin of application. The work developed proposes its use to procedurally generate the behavior of the Non-Player Characters of a video game. The solution presented is based on the creation of behavioral structures such as decision trees. As an example of how the algorithm works, a simple video game has been created.</p>
      </abstract>
      <kwd-group>
        <kwd>1 Wave Function Collapse</kwd>
        <kwd>Artificial Intelligence</kwd>
        <kwd>Procedural Content</kwd>
        <kwd>Non-Player Characters</kwd>
        <kwd>Video Game</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introducción</title>
    </sec>
    <sec id="sec-2">
      <title>2. Bases del algoritmo de Colapso de la Función de Onda</title>
      <p>Los elementos básicos del algoritmo WFC son las variables, el dominio y las restricciones. Las
variables son todos los elementos del problema a descubrir. En un sudoku, por ejemplo, serían cada
una de las casillas que forman el tablero. A su vez, cada variable cuenta con su propio dominio,
representado por los valores que puede adquirir. En el caso del sudoku, el dominio serían los números
del uno al nueve. Por último, las restricciones, son las reglas que se establecen para modificar el
comportamiento del algoritmo y adaptar el contenido generado a las características previstas. En el
ejemplo del sudoku implicaría que no se repitiera el mismo número en una fila, en una columna ni en
un cuadrante de este.</p>
    </sec>
    <sec id="sec-3">
      <title>3. Aplicación del algoritmo a la generación de comportamiento</title>
      <p>
        El algoritmo propuesto se basa en los mismos principios que para la creación de teselas utilizando
WFC [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] pero en este caso se utilizan bloques de comportamiento. Estos bloques son contenedores
que incluyen el código necesario para expresar el comportamiento de los NPCs. Cada uno de los
bloques de comportamiento tiene implícitas las condiciones que provocan la mutación del
comportamiento externo y solo se ejecutan cuando estas se cumplen, así conseguimos que el flujo de
ejecución vaya de la raíz a las hojas del árbol.
      </p>
      <p>
        El algoritmo se ha diseñado para que obtenga como resultado una matriz de comportamientos
aleatorios (de forma similar a como se generan imágenes de teselas [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]). Esta matriz, se traduce
fácilmente en un árbol de decisión (ver figura 1) [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ].
      </p>
      <p>(a)
(b)
Figura 1: Matriz de comportamientos (a) y árbol de decisión del comportamiento del NPC (b).</p>
    </sec>
    <sec id="sec-4">
      <title>4. Videojuego desarrollado</title>
      <p>Figura 2: NPCs en el videojuego desarrollado.</p>
      <p>El algoritmo se ha aplicado con éxito para generar comportamientos aleatorios en NPCs de un
videojuego (ver figura 2). El juego tiene dos tipos de enemigos con los que hay que luchar: los
arqueros y los espadachines. Cada uno de ellos, tiene cinco posibles comportamientos, tres son
comunes y dos específicos:</p>
      <p>Los comportamientos generales son:
- Patrulla. Movimiento de ida y vuelta entre dos puntos.
- Retirada. Movimiento de vuelta a la base.</p>
      <p>- Posicionamiento estratégico. Movimiento hacia un lugar estratégico.</p>
      <p>Los comportamientos específicos de los arqueros:
- Alejarse de un objetivo. Movimiento en sentido contrario al objetivo.</p>
      <p>- Disparar a distancia. Disparo al jugador a partir de una determinada distancia.
Los comportamientos específicos de los espadachines:
- Acercarse a un objetivo. Movimiento hacia uno de los objetivos.</p>
      <p>- Ataque cercano. Atacar al jugador a corta distancia.</p>
      <p>Tanto el jugador como los enemigos, se incluyen en una arena donde se produce el combate. Lo
interesante del sistema es que permite ver comportamientos diferentes para cada uno de los enemigos
ya que sus acciones han sido generadas de forma procedimental, evitando los comportamientos
repetitivos y permitiendo que estos sean diferentes para cada partida.</p>
    </sec>
    <sec id="sec-5">
      <title>5. Resultados</title>
      <p>Como ejemplo de los resultados obtenidos se presentan las matrices de comportamientos y los
árboles de decisión asociados, para un NPC de tipo espadachín. De esta forma, se puede ver cómo el
espadachín 1 puede comportarse con el árbol de decisión de la figura 1 y el espadachín 2 con el árbol
de decisión de la figura 3.</p>
      <p>(a)
(b)
Figura 3: Matriz de comportamientos (a) y árbol de decisión (b) del espadachín 2.</p>
      <p>Un ejemplo de la generación aleatoria del comportamiento para el NPC tipo arquero se puede ver
en la figura 4.</p>
      <p>La estructura de estos árboles está totalmente determinada por las restricciones que se han
establecido para combinar los bloques de comportamiento, por el tamaño máximo de la matriz que se
ha utilizado como base y por el número de hijos máximo que se asignan a cada bloque de
comportamiento. Estas variables pueden adaptarse a las necesidades del juego en el que queramos
generar el contenido, afectando sólo el tiempo de procesamiento.</p>
    </sec>
    <sec id="sec-6">
      <title>5. Conclusiones</title>
      <p>
        Como se ha descrito en este trabajo, el uso del algoritmo WFC se está extendiendo por la industria
a una gran velocidad y pueden encontrarse muchos proyectos que lo utilizan para la generación de
niveles [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] y el modelado geométrico [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ]. En este trabajo se ha utilizado la misma idea para generar
comportamientos aleatorios en NPCs, generando una matriz de comportamientos que posteriormente
se transforma en un árbol de decisión. Los resultados obtenidos muestran el gran potencial de la
propuesta para la definición de comportamientos en videojuegos.
Figura 4: Matriz de comportamientos (a) y árbol de decisión (b) del arquero.
      </p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>Isaac</given-names>
            <surname>Karth and Adam M. Smith</surname>
          </string-name>
          .
          <year>2017</year>
          .
          <article-title>WaveFunctionCollapse is Constraint Solving in the Wild</article-title>
          .
          <source>In Proceedings of FDG'17</source>
          ,
          <string-name>
            <surname>Hyannis</surname>
          </string-name>
          , MA, USA,
          <year>August</year>
          14-
          <issue>17</issue>
          ,
          <year>2017</year>
          ,
          <volume>10</volume>
          pages. https://doi.org/10.1145/3102071.3110566.
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <surname>Lin</surname>
            <given-names>Liang</given-names>
          </string-name>
          , Ce Liu,
          <string-name>
            <surname>Ying-Qing</surname>
            <given-names>Xu</given-names>
          </string-name>
          ,
          <string-name>
            <given-names>Baining</given-names>
            <surname>Guo</surname>
          </string-name>
          , and
          <string-name>
            <surname>Heung-Yeung Shum</surname>
          </string-name>
          .
          <year>2001</year>
          .
          <article-title>Real-time texture synthesis by patch-based sampling</article-title>
          .
          <source>ACM Transactions on Graphics (ToG) 20</source>
          ,
          <issue>3</issue>
          (
          <year>2001</year>
          ),
          <fpage>127</fpage>
          -
          <lpage>150</lpage>
          . https://doi.org/10.1145/501786.501787.
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>Martin</given-names>
            <surname>Gebser</surname>
          </string-name>
          , Benjamin Kaufmann, and
          <string-name>
            <given-names>Torsten</given-names>
            <surname>Schaub</surname>
          </string-name>
          .
          <year>2012</year>
          .
          <article-title>Conflict-driven answer set solving: From theory to practice</article-title>
          .
          <source>Artificial Intelligence</source>
          <volume>187</volume>
          (
          <year>2012</year>
          ),
          <fpage>52</fpage>
          -
          <lpage>89</lpage>
          . https://doi.org/10.1016/j.artint.
          <year>2012</year>
          .
          <volume>04</volume>
          .001.
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>G.</given-names>
            <surname>Smith</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Whitehead</surname>
          </string-name>
          and
          <string-name>
            <given-names>M.</given-names>
            <surname>Mateas</surname>
          </string-name>
          ,
          <article-title>"Tanagra: Reactive Planning and Constraint Solving for Mixed-Initiative Level Design," in IEEE Transactions on Computational Intelligence and</article-title>
          AI in Games, vol.
          <volume>3</volume>
          , no.
          <issue>3</issue>
          , pp.
          <fpage>201</fpage>
          -
          <lpage>215</lpage>
          , Sept.
          <year>2011</year>
          , doi: 10.1109/TCIAIG.
          <year>2011</year>
          .
          <volume>2159716</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>Maxim</given-names>
            <surname>Gumin</surname>
          </string-name>
          .
          <year>2016</year>
          . WaveFunctionCollapse. https://github.com/mxgmn/ WaveFunctionCollapse. GitHub repository (
          <year>2016</year>
          ). https://github.com/mxgmn/WaveFunctionCollapse
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>Maxim</given-names>
            <surname>Gumin</surname>
          </string-name>
          .
          <year>2017</year>
          . WaveFunctionCollapse Readme.
          <source>md. (18 May</source>
          <year>2017</year>
          ).
          <source>Retrieved May 20</source>
          ,
          <year>2017</year>
          , from https://github.com/mxgmn/WaveFunctionCollapse/blob/master/README.md
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>J.</given-names>
            <surname>Millington</surname>
          </string-name>
          ,
          <string-name>
            <given-names>I.</given-names>
            &amp;
            <surname>Funge</surname>
          </string-name>
          .
          <source>Artificial Intelligence for Games</source>
          . Taylor &amp; Francis,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>Alexander</given-names>
            <surname>Gellel</surname>
          </string-name>
          and
          <string-name>
            <given-names>Penny</given-names>
            <surname>Sweetser</surname>
          </string-name>
          .
          <year>2020</year>
          .
          <article-title>A Hybrid Approach to Procedural Generation of Roguelike Video Game Levels</article-title>
          .
          <source>In the International Conference on the Foundations of Digital Games (FDG '20)</source>
          .
          <article-title>Association for Computing Machinery</article-title>
          , New York, NY, USA, Article
          <volume>3</volume>
          ,
          <fpage>1</fpage>
          -
          <lpage>10</lpage>
          . https://doi.org/10.1145/3402942.3402945
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <surname>R. van der Linden</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Lopes</surname>
          </string-name>
          and
          <string-name>
            <given-names>R.</given-names>
            <surname>Bidarra</surname>
          </string-name>
          ,
          <article-title>"Procedural Generation of Dungeons," in IEEE Transactions on Computational Intelligence and</article-title>
          AI in Games, vol.
          <volume>6</volume>
          , no.
          <issue>1</issue>
          , pp.
          <fpage>78</fpage>
          -
          <lpage>89</lpage>
          ,
          <year>March 2014</year>
          , doi: 10.1109/TCIAIG.
          <year>2013</year>
          .
          <volume>2290371</volume>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>