En este tutorial vamos a dar un repaso a los bloques de programación más importantes que nos proporciona la extensión «arcade-story» con los que podremos generar historias dinámicas en MakeCode Arcade.
Esta extensión nos será muy útil si queremos simular un cómic o si queremos que un personaje vaya narrando alguna historia o mostrando una presentación.
Las principales ventajas que aporta tienen que ver con la personalización de la manera de mostrar los mensajes de los personajes y también con la separación del flujo de la historieta o presentación en «escenas».
Como ejemplo tomaremos unas viñetas de Mafalda, pero igualmente podemos utilizar esta extensión para hacer una presentación secuenciada sobre cualquier cosa o personalizar la manera en la que mostrar los mensajes de los personajes de nuestros videojuegos .
Personalizar textos en MakeCode Arcade
Por defecto podemos utilizar varios métodos para mostrar mensajes en general y en el curso de iniciación a MakeCode Arcade pudimos ver diferentes manera de personalizar el cuadro de diálogo. Sin embargo no podíamos cambiar el color del texto o del fondo y es especialmente interesante con mensajes que generan los personajes.
La mayoría de bloques de texto que nos ofrece la extensión arcade-story nos permiten personalizar color del texto, color del fondo (¡también transparente!) y velocidad a la que se muestra el mensaje letra por letra.
Gracias a esa personalización podemos generar mensajes de diferentes colores según el personaje concreto y adaptar la velocidad del texto a la capacidad de lectura del jugador.
Aunque ya se disponía de un bloque para que un sprite mostrara un texto en su posición, otra ventaja es que con esta extensión el mensaje que «emite» un personaje siempre aparece en primer plano y no queda tapado por otros personajes tal y como podía ocurrir antiguamente. Fíjate como en esta captura utilizando la opción por defecto la chica tapa parte del mensaje que está lanzando el chico:
Ya no vamos a tener ese problema porque los mensajes de personajes siempre van a aparecer en primer plano por lo que no hay que preocuparse de que el jugador no pueda ver el texto porque no hemos previsto alguna interferencia.
Los bloques tipo «print» nos permiten situar el texto en cualquier parte de la escena incluso podemos especificar el punto de vista de «cámara»:
Y recuerda que siempre podemos personalizar el color de texto y fondo incluyendo transparente además de especificar la velocidad en que se muestra. Estas opciones siempre están disponibles ampliando más parámetros pulsando en el símbolo ➕.
Tenemos disponible un bloque muy similar a «show long text» llamado «print character text» que nos va a mostrar un texto en un cuadro de diálogo, pero hay varias diferencias por lo que tendremos la posibilidad de utilizar uno u otro según nuestros intereses.
Veamos un ejemplo con un texto de Miguelito utilizando ambos bloques:
El bloque «show long text» permite indicar la posición del cuadro de texto, el bloque «print character text» no.
El bloque «show long text» espera a que se pulse 🅰️ para que el programa avance, el bloque «print character text» no. De hecho existe un bloque para determinar el comportamiento de aparición y desaparición automática del bloque de texto que no afecta al funcionamiento del resto del programa. Mientras se está escribiendo el texto el programa está parado, pero si utilizamos este bloque de tiempos el mensaje permanece en pantalla una vez escrito hasta que pase el tiempo, pero el programa está funcionando normalmente.
El bloque «print character text» muestra el texto letra a letra dando un efecto más dinámico, el bloque «show long text» no, lo muestra directamente.
El bloque «print character text» permite indicar una etiqueta que es muy útil para indicar a qué personaje nos referimos o cualquier otra cosa para la que lo queramos aprovechar, el bloque «show long text» no permite añadir ese tipo de etiquetas.
El nuevo bloque ofrece más posibilidades pero estéticamente no es tan vistoso como el que ya teníamos disponible, sin embargo puede resultar muy útil en muchas ocasiones por lo que se agradece poder elegir el que se quiera en cada caso.
Movimiento de personajes
La extensión arcade-story no nos ofrece posibilidades en cuanto a generar textos y conversaciones entre personajes, sino que además amplía los recursos disponibles para desplazar un sprite dentro del videojuego o presentación.
Con los bloques estándar de físicas de sprites se puede «teletransportar» a cualquier punto, fijar una velocidad de desplazamiento en x y/o y, hacer que un sprite persiga a otro sprite, etc. pero no se podía sencillamente desplazar un sprite a un punto concreto a una velocidad concreta.
Puesto que podemos definir la «coordenada objetivo» del movimiento es sencillo fijar los parámetros con las coordenadas de cualquier otro sprite en ese momento.
Con este bloque se podría resolver de manera extremadamente sencilla el lanzamiento de munición a un punto concreto que analizamos en el primer vídeo de la serie «¿Cómo lo hacen?» del canal de Youtube analizando cómo crean otros programadores ciertas funciones para los alumnos de Tecnodemia.
Dentro del control de flujo que aporta esta extensión disponemos de un bloque que cancela el movimiento iniciado con el bloque de movimiento que estamos comentando.
Control de flujo
De hecho el control de flujo es de lo más importante en esta extensión y tenemos bloques específicos para definir escenas dentro de lo que sería una historia o presentación, que es el objetivo principal de arcade-story.
Cada escena o «acto» estará dentro del bloque «start cutscene» teniendo en cuenta que se pone en marcha en segundo plano. Como solo puede haber una escena funcionando al mismo tiempo si el programa llama a varias escenas se formará una «cola» de manera que se vayan desarrollando una de otra en el orden en el que han sido llamadas.
El hecho de estar funcionando en segundo plano puede ser algo incómodo, pero también es muy útil dependiendo de lo que queramos hacer.
Lo lógico es que dentro de una escena estemos utilizando bloques del la extensión arcade-story que precisamente no permiten avanzar el programa hasta que no finaliza su acción, por lo que el control de flujo es más intuitivo aunque se esté desarrollando dentro de una escena en segundo plano. Precisamente por esta razón los bloques de esta extensión no deberían utilizarse, por norma general, fuera de un bloque de escena, porque detendrían todo el programa al funcionar en primer plano.
Otros bloques de control de flujo nos van a permitir cancelar la escena «actual» y pasar a la siguiente en la cola, cancelar todas las escenas incluyendo la actual y todas las de la cola, y cancelar el texto que se está generando en ese momento.
Lógicamente tiene sentido utilizar estos bloques en otro punto del programa pero es muy necesario para controlar el flujo puesto que las escenas y bloques de texto corren en segundo plano.
En este ejemplo permitimos al usuario avanzar de escena pulsando el botón 🅰️.
Elige tu propia aventura
Y por último disponemos de bloques que han denominado «de menú» que nos va a permitir realizar una pregunta ofreciendo al usuario seleccionar una serie de opciones que le demos. Es muchísimo más fácil controlar la respuesta del jugador en vez de tener que analizar la respuesta escrita de un bloque estándar «ask for string» que puede no coincidir con lo que como programadores esperamos.
Ahora las opciones de respuesta están limitadas a nuestro listado concreto facilitando además al jugador que pueda responder más rápidamente sin tener que escribir letra por letra y no tener la limitación del bloque «ask» que solo dejaba opción de aceptar o rechazar.
Una vez que el jugador haya seleccionado la opción podemos llamar a la última respuesta dada y utilizarla dentro de un texto combinado, por ejemplo, o utilizar la selección dentro de condicionales para realizar diferentes acciones según la decisión tomada.
Además tenemos disponible un bloque booleano que nos indica si al jugador se le está mostrando un menú de opciones y se está esperando a que seleccione una respuesta.
Ni que decir tiene que este tipo de bloques son muy indicados para juegos de rol, tanto de aventura conversacional como de juego libre, o para adaptar cualquier historia tipo «elige tu propia aventura».
Vídeo tutorial extensión historia «arcade-story» de MakeCode Arcade
Todo se entiende mejor a través de un vídeo así vamos a ver en acción muchos de los bloques de esta extensión con la ayuda de una tira de Mafalda.
La idea es adaptar al formato consola de video juegos la siguiente historieta creada por Quino:
Pues vamos con el vídeo para que veas cómo hacerlo paso a paso. Logeate si no lo has hecho aún.
Y aquí puedes ver el resultado, recuerda pulsar A al final de la presentación:
Lo suyo es que después de la presentación se pudieran elegir diferentes tiras de Mafalda o incluso hacerlo de manera aleatoria, pero eso ya os lo dejo a vosotros.
En el caso de que aún no te hayas animado a participar en nuestros cursos te recuerdo que tienes a tu disposición la plataforma de cursos de Juegos Robótica donde aprenderás desde cero y sin conocimientos previos a utilizar MakeCode Arcade.
Dani S.
rosademiguel says
Muchas gracias Dani. Me preguntaba como has conseguido meter en un sprite los personajes de Mafalda. Y si seria posible ver el programa completo.
Gracias
Dani says
Tengo que revisar si aún tengo el programa, supongo que sí. Lo busco y te lo paso. La herramienta para convertir imágenes en formato para MakeCode Arcade te lo miro y te digo por correo. Creo que no hace mucho se comentó en el grupo de telegram también.