MetsuOS

Construyendo la plena inclusión a través del videojuego

Curso de ZXGM Básico 04 - Configuración de un nuevo proyecto 🔴②

Y los muertos aqui lo pasamos muy bien entre flores de colores

Nota importante, el proyecto se encuentra en una fase de transicion entre la anteriormente consoldidada y la que está a punto de salir, trataré de mantener esto ajustado, pero podria haber desajustes. Para detalles lo mas actualizados posibles, consulta la documentación oficial del proyecto.

En este cuarto capítulo del curso básico de ZX Game Maker (ZXGM), aprenderás a configurar un nuevo proyecto desde "cero" (el motor está ideado para que partas de una plantilla mínima), siguiendo un enfoque estructurado y gradual, como un escultor tallando una obra a partir de una piedra en bruto.

Usaremos como ejemplo el desarrollo de Cursed Zapatilla: La Excéntrica Cruzada de Sir Patillas, un juego de plataformas inspirado en Ghosts 'n Goblins, Ghouls 'n Ghosts y Cursed Castilla.

Este juego forma parte de un pack de juegos que usare para todos los cursos de Makers y creacion de juegos, de forma que - en la medida de lo posible - habra, al menos, tantas versiones del juego como motores y modos graficos soporten aquellos para los que hagamos cursos. Pretendo con ello fomentar la idea de explorar Y de la necesidad de aumentar el nivel de calidad de las producciones, una vez creada tu opera prima.

Este capítulo se centra en crear la estructura inicial del proyecto y configurar parámetros básicos en Tiled, sin modificar aún los recursos gráficos, pantallas, sonidos o músicas. En cada capítulo posterior, iremos cincelando el proyecto hasta transformarlo en nuestro juego final.

El proceso consiste en tomar una plantilla de ejemplo que viene por defecto en assets (o en su caso una de la carpeta examples), renombrar la carpeta de ZX Game Maker para reflejar nuestro juego (usando guiones en lugar de espacios para evitar problemas con los nombres) y ajustar parámetros específicos en Tiled para alinearlos con las necesidades de Cursed Zapatilla.

Este tutorial está diseñado para principiantes, asumiendo que tienes el entorno configurado según el Capítulo Básico 02 y conoces la estructura del motor del Capítulo Básico 03.

Al final, tendrás un proyecto base listo para iterar en los siguientes capítulos.

Requisitos previos

Antes de comenzar, verifica lo siguiente (basado en el Capítulo Básico 02):

Si algo no está listo, revisa la sección de solución de problemas del Capítulo Básico 02.

Paso 1: Renombrar la carpeta de zxgm

Este paso, aunque no es obligatorio, es altamente recomendable, debemos tomar la carpeta donde hemos instalado el motor (habitualmente zx-game-maker) y renombrarla con el nombre de nuestro juego, en nuestro caso he usado "cursed-zapatilla-zxgm".

Es una buena práctica no poner espacios en el nombre, para evitar problemas derivados de espacios dentro de las rutas, en su lugar recomiendo el uso de guiones.

Paso 2: Seleccionar la plantilla base o usar la de assets

Por defecto, el motor contiene un juego demo en assets (que es donde estarán los datos de nuestro juego), por defecto usaremos este.

No obstante en examples hay mas plantillas que puedes usar cambiando los ficheros:

Si quieres cambiar de plantilla, copia el contenido de la carpeta de la que quieras, y copialo dentro de assets, sobreescribiendo ficheros.

Una vez elegida la plantilla, vamos a lanzar el GUI.

Paso 3: Lanzar ZX Game Maker

  1. Abre una terminal o línea de comandos y navega a la carpeta principal de ZXGM (e.g., cd /ruta/a/zx-game-maker).

  2. Ejecuta el launcher con:

python zxsgm.py
Esto abre la interfaz de ZXGM (pantalla oscura o clara, según configuración). Si aparece un error, verifica que Python esté en el PATH y usa python3 en Linux/macOS si es necesario.
  1. Prueba a ejecutar Build / Game en el menú para asegurarte de que partimos de una plantilla funcional.

Paso 4: Configuración inicial en Tiled

En este capítulo, nos enfocamos en ajustar parámetros en Tiled (lugar donde se realizan casi todas las configuraciones de nuestro juego) para alinear el proyecto con Cursed Zapatilla.

Usaremos el archivo maps.tiled-project de la plantilla copiada, sin modificar gráficos aún.

  1. Abre el Mapa de la plantilla en el menu Map / Open Map

  2. En tiled, despliega "Maps" y haz doble click sobre el mapa para abrir el interfaz

  3. Te aparecerá algo similar a esto (calma, parece mucho, pero iremos paso a paso, capitulo a capitulo):

Tiled con el mapa de la plantilla cargado

Paso 5: Configuración de los parámetros

Vamos a comenzar con la chicha, en este punto, vamos a confgigurar los parámetros que permiten generar una jugabilidad específica para nuestra obra. Aunque exploraremos todos los parámetros, centraremos el foco en crear nuestro juego plataformero, ya habrá tiempo, una vez completado el ciclo base, de crear monográficos para cada uno de los juegos que queremos crear.

Organizaremos los parámetros de forma progresiva y por bloques de forma que el proceso de pensamiento creativo sea el que guie nuestros pasos en una dirección precisa.

Los parmetros se pueden ver en Mapa > Propiedades Personalizadas o Map > Map Properties dependiendo del idioma actual en Tiled:

WIP Organizando y definiendo estructura de los nuevos parámetros, así como su funcionamiento con base en la nueva información disponible en la documentación.

Parámetros Generales

Lo primero, logicamente, es identificar nuestro juego, y el target al que va dirigido!

gameName

Establece el nombre del juego

128Kenabled

Establece si el modo 128K está activo.

Parámetros Estructurales

En este punto tomaremos decisiones en torno al mundo en el que nuestro personaje desarrollará su "vida":

gameView

Define el tipo de juego a desarrollar según la perspectiva.

arcadeMode

Establece si el juego se comportará en modo arcade.

password

Establece un password que se pedirá al iniciar el juego.

Parámetros de Juego

Centremos nuestra atencion ahora en algunos aspectos generales del juego:

goalItems

Número de items necesarios para finalizar el juego.

hiScore

Habilita la puntuación in-game y el guardado de la misma para que aparezca en la pantalla de menú.

idleTime

Setea el tiempo a esperar a que el personaje haga la animación idle. Si está a 0 no se activará.

livesMode

Habilitado tu personaje morirá cada vez que reciba daño perdiendo 1 vida y volviendo al punto donde entró de la pantalla actual. A su vez sólo ganará 1 vida con los items life.

initialLife

Cantidad de vida inicial del personaje.

lifeAmount

Cantidad de vida que incrementa al personaje los items life.

shooting

Con esto habilitamos o deshabilitamos el disparo del personaje.

ammo

Cantidad de munición con la que empezará el personaje principal. Si seteas -1 el personaje tendrá munición infinita.

ammoIncrement

Cantidad de munición que se recarga cada vez que el protagonista recoja un item de recarga de munición.

bulletDistance

Distancia que queramos que recorra la bala. El valor 0 se traduce como distancia infinita, la bala no parará hasta que choque con algún obstáculo. Si seteamos una distancia corta como de 2, da el efecto de que el personaje ataca con el arma a corta distancia como una espada.

Parámetros de Interacción

Una vez llegados a este punto, configuraresmos las interacciones con enemigos y otros elementos del escenario:

enemiesRespawn

Indica si los enemigos (no invencibles) reaparecen después de ser eliminados al volver a entrar en la habitación.

damageAmount

Cantidad de daño que los enemigos infligen al personaje.

killJumpingOnTop

Habilita la capacidad de matar enemigos saltando sobre ellos (solo en juegos de plataformas).

jetPackFuel

Cantidad de combustible disponible para el jetPack; si es distinto de 0, el personaje usará el jetPack en lugar de saltar.

jumpType

Tipo de salto del personaje, con opciones de movimiento constante o acelerado.

shouldKillEnemies

Requiere eliminar a todos los enemigos en una habitación antes de poder salir de ella.

keysEnabled

Habilita o deshabilita el uso de llaves y puertas que requieren llaves.

laddersEnabled

Habilita la funcionalidad de escaleras cuando se establece en true, permitiendo a los jugadores interactuar y subir por ellas.

messagesEnabled

Activa la visualización de mensajes de ayuda al entrar en contacto con items, puertas u otros elementos.

useBreakableTile

Habilita la posibilidad de usar tiles rompibles, con opciones de comportamiento.

Parámetros del HUD

Parámetros que afectan al HUD, la tipica zona de marcadores de que dispondremos en el juego.

itemsEnabled

Si no está habilitado no se mostrará el marcador de items.

itemsCountdown

El marcador de items mostrará el número total de items que tiene que conseguir el jugador al principio del juego e irá descendiendo para que veas los items que te quedan por recoger.

Parámetros Gráficos

Estos parámetros nos permiten establecer diferentes elementos que afectan directamente al aspecto visual de nuestro juego:

backgroundAttribute

Color de fondo del juego en decimal en forma de atributos de Spectrum (128*FLASH + 64*BRIGHT + 8*PAPER + INK). Si no se define este atributo se pintará fondo negro sprites blancos. Si no acabas de tener claro como se calcula, puedes usar la calculadora siguiente 🌐🟡③

border

Color del borde in game. Muy útil cuando se cambia el color de fondo del juego y del hud.

borderColorItem

Color del borde in game en el efectp que se produce al recoger un objeto.

borderColorKey

Color del borde in game en el efectp que se produce al recoger una llave.

borderColorLife

Color del borde in game en el efectp que se produce al recoger un objeto que permite recuiperar vida.

paper

Color del papel in game. Muy útil cuando se cambia el color de fondo del juego y del hud.

ink

Color de la tinta in game. Muy útil cuando se cambia el color de fondo del juego y del hud.

mainCharacterExtraFrame

Si está habilitado, la animación del personaje usará el frame extra (haciendo total de 3 en movimiento a derecha e izquierda)

Parámetros Sonoros

Los parametros relacionados con, sobre todo la música, tomemos algunas decisiones iniciales ya afinamos mas adelante:

musicEnabled

Para habilitar o deshabilitar la música AY. Si se habilita la música el juego resultante sólo funcionará en 128K, para hacer una versión 48K tendrás que desmarcar guardar y volver a compilar.

newBeeperPlayer

Para utilizar en nuevo reproductor de beeper mejorado para que el juego se pare mucho menos mientras suena debes activar esta opción. IMPORTANTE: Si quieres aprovechar las bondades de este nuevo player debes hacer los sonidos como se indica en la sección de FX del manual 🌐🟡③.

Parámetros de Rendimiento

Algunos parametros que nos permiten configurar algunos parametros sobre elementos que permitirán graduar la velocidad de nuestro juego.

animatePeriodEnemy

Número más alto, animación de los enemigos más lenta.

animatePeriodMain

Número más alto, animación del personaje principal más lenta.

animatePeriodTile

Número más alto, animación de los tiles más lenta.

maxAnimatedTilesPerScreen

Máximo de tiles animados por pantalla (10 máximo). Si utilizas menos pon un valor más bajo para ahorrar espacio.

maxEnemiesPerScreen

Se puede configurar la cantidad de enemigos que aparecen en pantalla (hasta 5). Evitar poner más de los que se usan para optimizar espacio.

Parámetros Extra

Esos pequeños detalles que están, son necesarios pero no encajan perfectamente en el resto de categorías.

redefineKeysEnabled

Habilita la opción de redefinir teclas.

waitPressKeyAfterLoad

Si habilitas esta opción, tras la carga el juego esperará que pulses una tecla para mostrar el menú.

Paso 4: Verificación del proyecto

  1. Prueba inicial en ZXGM:

    • Asegurate de guardar los cambios en Tiled, para que el compilador tenga oportunidad de tenerlos en cuenta.

    • Ve a Game/Build en el GUI y ejecuta la compilación.

    • Si no hay errores, se generará cursed-zapatilla.tap en cursed-zapatilla/dist.

  2. Prueba en emulador:

    • Abre el emulador de ZX Spectrum de tu elección.
    • Carga CursedZapa.tap.
    • Verifica que el juego carga (sin Sir Patillas ni enemigos personalizados aún).

En la nueva versión, en 128K no me ha dado problemas, si te los da a ti o en 48K te ocurre el proximo capítulo trata esta cuestión.

Mi comprobación no ha ido todo lo bien que esperaba, toca mejorar:

He llenado la memoria antes de crear el juego

Como en mi caso me he pasado de largo y he llenado la memoria antes de comenzar, en el próximo capítulo, averiguaremos que funciones son las que más memoria consumen y cuales menos de forma que podamos afinar la configuración.

Solución de problemas comunes

Consulta el grupo de Telegram de ZXGM o la documentación en el repositorio para soporte adicional.

Conclusión

Has configurado la base de Cursed Zapatilla: La Excéntrica Cruzada de Sir Patillas con una estructura de proyecto y una plantilla inicial en Tiled.

Como escultores, hemos dado el primer golpe al cincel, preparando la piedra para tallarla en capítulos futuros, donde añadiremos sprites personalizados (Sir Patillas, zombis), mecánicas de zapatillazos, y más. ¡Sigue adelante y comienza a dar forma a tu juego retro!

No obstrante, hemos roto el martillo y el escoplo con la lista de la compra, así que nos toca iterar para mejorar el proceso, lo cual veremos en el próximo capítulo, aprovechando la oportunidad para aprender sobre las limitaciones del motor en tanto funcionalidad vs memoria.

Referencias Bibliográficas

One More Thing

Un escenario de retrocomputación del siglo 24

¡Desbloquea el poder de MetsuOS y descubre que la privacidad y la seguridad son la clave para desencadenar tu verdadero potencial en línea!

Contenido registrado en Safe Creative

Logo Safe Creative
¡Usa el código de promocional 7ZYM4Z y ahorrate unos eurillos en tu suscripcion de Safe Creative!

MetsuOS Needs You!

Apoyanos en este proyecto difundiendolo en tus redes, o mejor, haznos una donación a la cuenta paypal para poder dedicar más tiempo y recursos a el. No olvides comentarnos que parete te interesa más junto con tu donación.

En este momento, además de mantener los servicios, estoy centrado en crear la siguiente iteración del software que me permite hacer todo esto y creando una biblioteca personal física para poder contrastar contenido.

Sobre el sistema de validez de un contenido en MetsuOS

Empezando a incorporar los niveles de validación de un contenido (también llamada sabiduría o niveles de conocimiento) ⚫🔴 🟡 🟢 🔵⚪ ¿Qué són?

Sobre la categorización de los tipos de conocimiento

La Metsukeología (de Metsuke vision global y logos conocimiento) es la ciencia que estudia el conocimiento como un conjunto potencial de conocimiento del que podemos obtener, procesar o percibir partes concretas dentro de un marco contextual específico, y cuyo contexto general real está muy por encima de lo que somos capaces, como especie, de percibir, procesar e integrar de forma completa (definición en progreso).

La Metsucología (de Metsu aniquilación - en este contexto en forma de colapso - , logos conocimiento) es la ciencia que estudia como extraemos verdades percibidas - colapsadas - como conocimiento desde nuestra perspectiva real (tanto epistemológico como gnoseológico) al tomar una parte específica del conocimiento metsukeológico potencial enmarcado en un contexto concreto, obligando a colapsar el conocimiento potencial en conocimiento específico (definición en progreso).

Mas sobre el contexto

DISCLAIMER: Mi consideración de anticientífico respecto al consenso científico es una hipotesis de trabajo propia, que supone que toda asignación de validez, incluso aquella derivada de la conclusión por acumulación de evidencia NO debe ser supeditada a debate, ni acuerdo, debe ser algo probabilistico sin intervención del ego humano. Podría estar equivocado y, en este punto, es donde se aplicaría entonces ese mismo consenso que ahora considero no valido (incluso dañino)

Existen indicadores para algunas cuestiones adicoinales como los siguientes:

Cuando hablamos de un contenido que incluye un texto que hace referencia a otro.

También aplicaremos el Sistema de fiabilidad de fuentes y credibilidad de contenidos de la OTAN 🔴②, este sistema incluye una valoración de la fiabilidad de la fuente de A a F (siendo A la de mayor fiabilidad) y una varloración de credibilidad del contenido de 1 a 6 (siendo 1 la mayor credibilidad).

En MetsuOS la agregaremos al final uniendo amos valores como si fuera una coordenada. Por ejemplo: ⚫①-D4 o 🟡③-B2. Esto ayudarña a contextualizar la información sobre la solidez del conocimiento al que se hace referencia en cada momento.

Hay que tener en cuenta que, cuando hay elementos subjetivos o parcialmente subjetivos, el punto de referencia seré yo mismo. Quizá más adelante pueda objetivizar esto más (seria lo deseable), pero en tanto no tenga herramientas que me lo permitan, debo ceñirme al principio de honestidar intelectual, y esperar que mis sesgos dañen lo menos posible la información (en parte este es el nudo gordiano que pretendo resolver, y por ello es dificil resolverlo a priori).

Así de forma resumida, podríamos decir que esta definición es nivel 🔴② (Rojo2 xD) ¿Crees que me dejo algo? Si es así por favor ayudame a mejorarlo contactándome a través de X (Twitter) en mi cuenta, @metsuke 🌐

Consulta la versión completa de la descripcion en ⚫🔴🟡🟢🔵⚪ (🔴②) Un poco más de detalle