Saltar al contenido

Hora del código #24

Me puse a pensar si podía hacer un remedo de RPG usando el motor de novelas visuales Renpy sin usar Pygame. Dividí la pantalla de 1280x720px en fragmentos de 64x64px ya que quería que el sprite del personaje fuera de esa medida. Entonces me quedaron 20 bloques a lo ancho y 11.25 bloques de altura.

Ya que esto básicamente es una tabla decidí usar el famoso Tiled y debo decir que es muy bueno. No conseguí crear un mapa con 11.25 bloques de alturas pero ya que. Entonces decidí dibujar las pantallas en el mismo mapa haciéndolas de 20x12 bloques. La última línea de bloques se va a dibujar porque el 0.25 que aún aparece en pantalla se vería feo si queda transparente. Luego cada pantalla la seleccioné con la herramienta de Selección Rectangular, luego Mapa y Recortar la Selección. Con esto ya pude exportar las capas de imágenes, sólo las primeras dos, separadas y la capa uno y tres en CSV.

Entonces me quedó la primera capa como el suelo, la segunda capa como elementos sobre el jugador y la tercera para el posicionamiento de los enemigos. Vi que Tiled tiene para poner colisiones y se mira muy bien, pero no entendí como transferir y leer desde el JSON que exporta a coordenadas X y Y en los mapas de bloques que estaba generando, por lo que decidí hacer esa parte a mano en los CSV. Resulta que Renpy no viene con soporte para leer CSV entonces hay que usar renpy.file, eliminar el final de la línea con rstrip y separar los campos con split. Los búcles son útiles para todo.

Como en cada elemento de los CSV, Tiled coloca un número específico dependiendo del patrón que se haya utilizado decidí usar letras para especificar elementos donde algo especial debería ocurrir en cada mapa. Y estos eventos los definí en un diccionario de Python dentro de Renpy. Y además coloqué como -1 a los elementos que deben ser impasables en el mapa del suelo.

También escribí una pequeña función que pasa de coordenadas a posición en Renpy ya que en este la posición en X y Y se mide de 0 a 1. Luego comencé a ver lo del movimiento del personaje en una pantalla y como pasar a otra dependiendo si llega a una posición especificada en los CSV y definida en el diccionario de eventos. Los enemigos vuelven a aparecer al volver a la pantalla para no tener encuentros aleatorios y dejar al jugador la opción de saber qué batallas pelear y cuáles saltarse. Lo que faltaría acá es hacer que anden vagando en su mapa.

Luego agregué la pantalla de combate, puse un pequeño menú para realizarlo y aquí fue donde me detuve porque me puse a pensar que esto no iba a tener fin ya que estoy usando una herramienta que es específica para novelas visuales y la estoy forzando a que funcione de otra forma. Con el otro juego que hice en Renpy me di cuenta que no tiene sentido y se pierde mucho esfuerzo y tiempo.

Ahí dejo el código fuente por si a alguien le interesa darle un vistazo.

Código fuente y archivos

https://www.youtube.com/watch?v=djXwNpsvBGw