Ahora que está ya terminado el proyecto y que no espero tener que hacer cambios, salvo que encuentre alguien o yo un bug grave por casualidad, voy a contar un poco la experiencia que me ha supuesto hacer este juego. En mis anteriores entradas del blog y en la página del proyecto hay algunos datos sobre cuales fueron mis motivaciones a la hora de hacer el juego, pero en este artículo voy a intentar contar otras cosas que me han pasado mientras desarrollaba el juego.
Una de las primeras equivocaciones que cometí, y que medio-subsané cuando me puse en serio con el proyecto, fue la falta de un análisis sobre el funcionamiento del juego. Cuando empecé con el juego, me puse alegremente a recortar, pegar y colorear los gráficos, eso me llevó un tiempo considerable ya que yo no soy grafista. Una vez tuve el material gráfico necesario para el juego, me dediqué a buscar sonidos en alguna página y más o menos encontré algo mínimo para usar, como en el original. Y habiendo finalmente reunido los recursos, me puse alegremente a tirar líneas de código cual alegre pajarillo en un día de primavera. Craso error…
Durante los primeros días no supuso un problema actuar así, pero luego tuve que detener el proyecto por los exámenes de junio y en agosto lo retomé. Entonces fue cuando me di cuenta de que la mierda estaba llegándome hasta el cuello. Visto que estaba dando palos de ciego, decidí ponerme a analizar el juego. En un principio yo tenía una feliz idea sobre como era la lógica del juego, pensaba que era un juego sencillo sin más. A medida que iba echando partidas al original me fui dando cuenta de que eso no era así, ni mucho menos. Fui sacando algunos datos como pude y me hice una idea aproximada de como eran las reglas básicas. Tras dos semanas, en una visita relámpago a la civilización, me puse a buscar información sobre la IA y encontré una página con un dossier sobre el juego, y para mi desconsuelo vi que las reglas no eran tan simples como me hubiera gustado. Sin embargo, todo lo que yo había implementado hasta cierto punto daba el pego, así que opté por no ponerme a implementar todas las reglas. Ello hizo que me librara de tener que retorcer más y más el código que ya tenía.
Antes de la parada del proyecto, había logrado montar algo que pintara cadenas de texto, sprites, animaciones y el laberinto, también se controlaba que puckman se desplazara por el laberinto sin problemas. Sin embargo tuve que modificar unas cuantas cosas sobre esa parte del código y extenderlo para que los fantasmas pudieran entrar o salir de la casa en la que habitan. A lo largo del desarrollo la palabra reestructuración se iba repitiendo en mi mini-diario que estaba escribiendo, para leerlo quizás en algún futuro y meditar sobre las tontería que hacía en mis años mozos. Tuve que ponerme a cambiar cada dos por tres muchas partes del juego, re-adaptar otras a algunos cambios que surgían como necesidad de golpe ante alguna situación crítica. Sin embargo no fueron situaciones especialmente críticas, y ya fuera por mi experiencia de los últimos 10 años programando o por mi fantastica intuición, logré salir al paso bastante bien.
Con tanto cambio me preguntaba si las cosas hubieran ido más fluidas de haberme puesto a analizar el tema más seriamente, pero eso es algo que no sabré al menos para este caso, porque dudo que me ponga a volver a hacer este juego otra vez. Lo que sí me sorprendió bastante fue lo rápido que me salió la parte que controla la IA de los fantasmas, como pone en la página del juego tuve cierta ayuda gracias al dossier, pero aun así tenía la idea en mi cabeza de que me iba a costar mucho más. Lo único que me resultó un problema fue el algoritmo para buscar caminos, que me puse a hacer algo similar al clásico algoritmo de backtracking que busca un camino en un laberinto. La idea era buena sobre el papel, pero al ejecutarlo fue la muerte y el juego iba a pedales, peor que ejecutar el Crysis en un 486.
Una cosa que me pasó mientras programaba el juego fue que como de costumbre me puse a hacer primero el “menú” antes que el juego en sí. No sabría si decir que es una manía que tengo o que quizás como por norma general hacer el menú es más sencillo y así tienes algo bonito que ver y probar, por ello quizás tiendo a hacer primero esta parte sencilla de los juegos que programo. Así que me puse primero con el menú, sin embargo en este caso no se yo si debería decir que hacer esta parte fue más complicada que el juego en sí. Lo bueno fue que al hacer el menú y la demo que sale en la primera pantalla de presentación, pude aprovechar para ir programando rutinas que luego acabé empleando en el modo de juego, ya que compartían similitudes que me permitían reutilizar código de un lado al otro.
Otro punto “gracioso” es que existe en el código fuente del juego, partes de este o funciones que no son invocadas en ninguna parte. Están ahí porque es mi costumbre tener cosas de sobra, que luego verse falto de ellas si de golpe necesitas añadir nuevas funcionalidades. De hecho hay alguna que otra clase, que fue pensada para realizar las escenas intermedias entre ciertas fases del juego, pero llegó ya un momento que por desgana decidí que implementar esa parte no me aportaba nada interesante a mi experiencia desarrollando este juego.
Así que entre unas cosas y otra fue curioso hacer este juego en particular. Respecto al usar XNA he de decir que ha sido muy sencillo su uso, me recordó a cuando me ponía a programar con la SDL. Claro que esto es un juego 2D, quizás para el 3D sea un poco menos sencillo, pero queda claro que para hacer cosas en 2D es considerablemente fácil aprender a usar XNA (y no es que me paguen por esto, jej). Incluso el tema del sonido con las últimas versiones se puede manejar sin tener que usar la aplicación XACT, que no es a poca gente a la que no le gusta ni un ápice. Así que con ese tema no tuve problema alguno, todos se reducieron a la falta de un análisis serio y al tener que estar re-escribiendo o re-estructurando muchas partes para corregir fallos o carencias en la lógica del juego.
Yo, sinceramente, me ha parecido una experiencia muy interesante haber desarrollado un clon de este mítico juego y la verdad es que por fin tengo un juego del que sentirme mínimamente orgulloso, tras casi 10 años programando juegos de forma amateur. Así que a pesar de todo el esfuerzo y los quebraderos de cabeza, la experiencia ha merecido la pena.