sábado, 1 de diciembre de 2018

Hijos de Camelot: Recursos y Licencias

Recursos y Licencias



Si tus gráficos/sonidos/músicas no son originales, las tiendas digitales podrían retirar tu juego en cualquier momento. Incluso podrían banear tu cuenta, pudiendo perder el derecho a publicar juegos y el dinero acumulador por publicidad o ingresos directos.

Por tanto, vale la pena perder 5 minutos en informarse sobre las licencias de uso de los diferentes recursos usados.

Con la licencia, el creador de un recurso decide cómo va a poder ser utilizado y cómo no.
Además el creador puede ser más preciso con la licencia o las formas de uso si así lo decide.
Por ejemplo puede exigir no usar sus recursos en un determinado tipo de juegos, o exigir que sean usados solo en juegos no comerciales. Puede decidir si es o no gratuito.

Existen numerosos tipos de licencia. Es un poco confuso usar recursos de varios tipos de licencia.

Personalmente os recomiendo buscar en catálogos donde la licencia de uso sea de Atribución, y mencionar al autor en los créditos de vuestro juego.
Los recursos con licencias "haz lo que quieras" suelen ser de calidad muy baja, y solo valen normalmente para prototipos.

Por otro lado, hay recursos por los que vale la pena pagar unas monedas, la calidad es muy superior a los recursos gratuitos (sean de la licencia que sean). No seas niño rata, pero tampoco hace falta gastarse mucho dinero.


Veamos unos ejemplos típicos de licencias:

Licencias Creative Commons
Es un tipo de licencia que, por defecto, reconoce la autoría de una obra y permite especificar que derechos quedan reservados. Dentro de CC tenemos 6 tipos de licencia:

  • Licencia de Atribución: Haz lo que quieras con el recurso (recuerda que debes siempre mencionar al creador del recurso en los créditos del juego).
  • Licencia No Comercial: Se prohíbe el uso comercial por tanto no puedes ganar dinero con este recurso, limitando entonces tu juego a ser gratuito.
  • Licencia No Comercial - Compartir igual: Prohibido el uso comercia. Además si modificas el recurso, éste conserva la licencia del original.
  • Licencia No Comercial - Sin obra Derivada: Prohibido el uso comercial. No se puede modificar el recurso, se tiene que usar tal cual.
  • Licencia Compartir igual: La licencia del recurso se "hereda/transmite" en modificaciones.
  • Sin obra derivada: Se puede usar comercialmente, pero no modificar el recurso.


Otros tipos de Licencia

  • Licencia Cero/Dominio Público/Arte Libre: Haz lo que quieras con el recurso, úsalo tal cual o modifícalo, pero no puedes decir que tú eres el creador. Puedes usarlo en juegos comerciales, incluso puedes vender el recurso por tu cuenta o modificar su licencia.
  • Licencias GNU/GPL: El creador conserva la autoría y permite el uso y la modificación. Las licencias GPL obligan a publicar las modificaciones y estas conservarán la licencia GNU/GPL. Eso sí, obligan a que todo el software donde se usan, en este caso tu juego, se publique también con dicha licencia.


Hay muchos más tipos de licencia, pero no voy a mencionarlos todos o no acabamos nunca.
Os pongo un gráfico donde se ven mejor las cosas:







miércoles, 14 de noviembre de 2018

Hijos de Camelot: Fuentes

Fuentes

La fuente elegida es una llamada “D3 Rabbitmapism” por su similitud con la original.

Para encontrarla, he rippeado con el mame la pantalla de fuente (mame / cargar juego / pulsar F4 / pulsar INTRO y recorrer las pantallas). Se captura dicha pantalla:
De esa pantalla cogemos sólo unos pocos caracteres con el Paint (p.e. de la A a a G), y grabamos un archivo. Con ese archivo nos vamos a la web http://www.whatfontis.com/ y nos buscará fuentes similares, hemos filtrado por fuentes “free”.

Hecho esto, instalamos la fuente en Windows (botón derecho sobre la fuente ttf + instalar) y con el programa Bitmap Font Creator (link) creamos una fuente con las siguientes características:

Pestaña Font
Tamaño: 20
Bold-Italic-Antialias: desactivado
Fill mode:Gradient, Gradiente1 ( color1: blanco, color2: RGB(202,203,177) )
resto opciones por defecto 
Pestaña Special Effects 
Outline: 2
Shadow: desactivado
resto opciones por defecto 

Tras esto vamos a la pestaña Generate y le damos a Go! (se crea el archivo en el escritorio output.png). Comprobamos las dimensiones del archivo (para luego).

En GM creamos un sprite nuevo, Edit Sprite+File/Create from Stripe

En el menú de importación, ponemos que hay 95 imágenes y 10 por fila (row).
Para elegir "image width" e "image height" dividimos las dimensiones del archivo por 10.

Por ejemplo, si son 940x770px, entonces ponemos 94px y 77px enGM.

Importamos y, muy importante, borramos la primera imagen (que debería ser una imagen en blanco).  Ya podemos usar el sprite como fuente en el juego:

fntBitmapFont = font_add_sprite(test2, ord("!"), 1, 1);
draw_set_font(fntBitmapFont);
draw_text_color(150,150, "Texto de ejemplo", c_white, c_white, c_white, c_white,1);

IMPORTANTE: El objeto fuente debe ser puesto en cada ROOM que la necesitemos, puesto que no es persistente.


Frases sueltas


Si no queremos o necesitamos implementar un vocabulario completo, podemos generar frases sueltas con el programa Bitmap Font Creator y generar pequeños bitmaps con dichas frases.

El proceso es similar a lo anterior, abrimos el programa, elegimos una fuente, le damos el tamaño y características que queramos, y a continuación nos vamos a la pestaña Phrases:


Escribimos todas las frases que necesitemos.


Hecho esto, hacemos click en Generate, seleccionamos Phrases y elegimos una carpeta de salida.
Finalmente click en Go!

Ya tenemos nuestros bitmaps para importar con GM.

Importante:
Las frases dadas de alta en Bitmap Font Creator NO se pueden editar, solo borrarlas.
Si queremos guardar todas las frases y la configuración del tipo de letra elegido: File + save project.

Hijos de Camelot: Máscara de Colisión

Máscara de colisión

Una máscara de colisión es un gráfico que representa la zona "sensible" de un objeto (un jugador, un enemigo, una pared, una puerta). La máscara no tiene que ser igual que el sprite del objeto, de hecho no conviene que lo sea (el motivo lo vemos más abajo).


La máscara se usa para detectar cuando dos objetos chocan, por ejemplo si al jugador le ha alcanzado un proyectil, o bien si está chocando con una pared.

Por defecto GM usa una máscara equivalente a un recuadro que cubre todo el sprite del objeto, por tanto la máscara puede ser realmente grande si el sprite es irregular, además esto significa un desperdicio de CPU, mucho mejor utilizar formas simples como una máscara rectangular o en forma de elipse, para evitar problemas cuando el sprite tenga formas irregulares.

Por ejemplo, si tenemos el sprite de un esqueleto


La máscara por defecto es la siguiente (sombreado):



Máscara del Player

La máscara será manual, de tipo (shape) rectangular, desde la cabeza hasta las rodillas por ejemplo.



En cada sprite del objeto, para caminar, correr, etc hay que asegurarse de que la máscara está en manual y adecuar una máscara del mismo tamaño que la inicial, cambiando su posición según el sprite pero manteniendo siempre ese tamaño y forma de máscara.

La única excepción en mi juego será el sprite de esquivar, que será un simple píxel situado a los pies del personaje y un poco por delante, de forma que nos aseguramos de que al esquivar, el player es prácticamente invulnerable, y de que no se quede atascado en ninguna pared.

Si usáramos una máscara diferente para diferentes estados (corriendo, quieto, herido, esquivando, etc), con diferentes tamaños y formas, puede ocurrir que haya un cambio justo cuando estemos cerca p.e. de una pared, si la máscara cambia, puede quedarse el personaje "atascado"

Otras máscaras: Enemigos y Mobiliario

En general, máscara automática. Pero teniendo en cuenta lo que contamos a continuación.


Cuando no usar máscara automática

Si tenemos un sprite de este tipo (esqueleto gigante):


La máscara de colisión por defecto es cuadrada, es decir, incluye las partes transparentes(cuadrados grises), por tanto disparando a las zonas transparentes también estaríamos haciendo daño al esqueleto.

Para evitar esto, he cambiado la máscara a un óvalo que se ajuste a la zona donde queremos que el jugador dispare:

domingo, 11 de noviembre de 2018

Hijos de Camelot: Evita que se duerma el móvil


Si no tocas la pantalla del móvil, la pantalla se apaga.
Que la pantalla se apague en la clásica escena de introducción no es un buen comienzo.

¿Solución? Aquí

Resumiendo, pon esto en alguno de los objetos que crees al principio del juego:

if os_type == os_android || os_type == os_ios
   {
   os_powersave_enable(false);
   }

Si sólo utilizas Android, quita la parte de IOS.

martes, 23 de octubre de 2018

Hijos de Camelot: Tablas de profundidad


  • Por defecto todo objeto en GM tiene como profundidad 0.
  • En caso de “empate” la instancia creada más tarde aparece por delante.
  • Número positivos de profundidad indican instancia alejada del jugador (es decir, más lejos, hacia “dentro” de la pantalla). 
  • Número negativos de profundidad indican instancia cercana al jugador (es decir, más cerca, hacia “fuera” de la pantalla).
  • Los controles virtuales, por tanto, deberían tener profundidad negativa (p.e. -9999)

Se puede asignar la profundidad en la declaración del objeto (por tanto es fija, en tiempo de programación), en el evento CREATE (por tanto es fija, en tiempo de ejecución) o bien en el evento STEP (cambia cada frame, profundidad dinámica, cambia en tiempo de ejecución).

A menudo se hace coincidir la profundidad con el valor de “y” negativo, ya que en una pantalla la coordenada y=0 está arriba y a medida que bajamos físicamente en la pantalla la "y" aumenta. De esta forma si un objeto se está moviendo arriba y abajo, cambia su profundidad:
Se suele poner en el evento STEP:   depth = -y;



Ejemplo: Tabla de profundidad Fase 1 del juego "Blood Bros"
OBJETOPROFUNDIDAD
Carreta, Enemigo común (alejado)-200
Edificios-225
Enemigo común-250
Enemigo a caballo, Bonus-300
Barril rodante-325
Balas enemigos-350
Explosión-375
Bala del player-400
Mira-450
Barril defensa player-475
Player-500
Elementos del interfaz (puntos, vidas, marcadores)-9999

Los valores de la tabla los he asignado yo, por tanto podrían empezar en cero (por ejemplo) e ir subiendo en valores negativos. O bien empezar en cero para los elementos del interfaz e ir sumando cada vez más en los elementos más alejados. Da igual como lo hagas.

Para entender la tabla veamos una captura del juego Blood Bros:

 

Los players (el indio y el vaquero) son los objetos más cercano a nosotros, es decir, tienen un valor de profundidad (negativo) mayor que el resto de elementos.
Justo detrás están los barriles de defensa y las miras.
Por detrás de estos, el barril rodante, los enemigos y caballos comunes.
Detrás de ellos están los edificios.
etc.

Por delante de todos (incluido players), está el marcador (arriba), al ser un juego arcade los controles no están sobre la pantalla, pero para un juego móvil los controles deberían tener el valor negativo más alto.

En "Hijos de Camelot" he usado una tabla muy similar a la anterior.


La mayor diferencia es el uso de controles en pantalla. Estos objetos tendrán una profundidad -9999.
Exactamente igual que el marcador superior.

Luego tenemos el player, los enemigos comunes, los edificios, los arqueros, las carretas,etc.
Por detrás del todo (valores de profundidad más positivos), las nubes, que se mueven sobre el fondo.

jueves, 18 de octubre de 2018

Hijos de Camelot: Planteamiento inicial

Antes de empezar a programar, hay que plantearse varias cosas.
Como parto de un juego con unas mecánicas ya establecidas, tengo parte del trabajo hecho.
Pero como este juego se va a jugar en dispositivos móviles por tanto es necesario cambiar la interfaz y poner controles en pantalla.

Este juego va a programarse utilizando Game Maker (abreviado GM).
La versión que utilizo es GM Studio v1.4, todos los comentarios se referirán a esta versión.
Acaba de salir a la venta una nueva versión (GM 2) que cambia varias cosas por tanto no es válida para seguir estas entradas. Podéis encontrar ambas versiones en la web de Yoyogames.


Pantalla y división para juego, interfaz y publicidad



Planteamiento inicial:

La resolución original del juego es 256x224px. La idea inicial cuando empecé a hacer el juego era usar una resolución de a 640x480px (más tarde cambié de idea).

En ese momento esto es lo que iba a hacer:

  • La zona principal es la pantalla de juego (zona amarilla) tendrá un tamaño de 640x400px. Esto no respeta la proporción del juego original, pero es lo de menos ya que no vamos a hacer un port.
    En la zona inferior
  • A la izquierda (zona roja): joystick, tamaño 150x80px. 
  • En el centro (azul): banner de publicidad, tamaño 300x80px. 
  • A la derecha (morado): Dos botones (esquivar, disparar), Tamaño 190x80px. 

En la zona superior a la zona morada pondremos un botón semitransparente que será el tercer botón (bomba/especial), no ponemos los tres botones juntos en la parte morada porque no caben.


En realidad el banner NO INTERESA que ocupe toda la zona inferior, porque si no el dedo del usuario se saldrá del joystick / botones y le dará al banner… una vez de vez en cuando vale (cash), pero si lo hace a menudo dejará de jugar.

Cambio en el planteamiento inicial:

Finalmente no voy a usar esa resolución. La estética que voy a usar en el juego es pixel-art, por tanto usaré un modo de baja resolución, 320x240px.

Las zonas de pantalla para los controles se mantienen, quitando el banner de publicidad, ya que era demasiado fácil pulsar sin querer y activarla. Si pongo publicidad, será justo antes de comenzar un nivel.


Disparos del player: Power Ups

El jugador tiene un disparo básico y puede mejorarlo temporalmente cogiendo power ups.

Seguiremos la estrategia del juego original, esto es:
  • Disparo básico: cadencia lenta, quita 1 de vida cada disparo. Es el que se lleva por defecto. 
  • Disparo superior: cadencia rápida, quita 3 de vida cada disparo. Dura 10 seg.


Disparos del player: de Bombas a Especiales

El jugador puede disparar bombas en el Blood Bros (=granadas), con una pausa determinada entre bombas. El número de bombas es limitado. Se puede recargar recogiendo dicho item del suelo.

En "Hijos de Camelot" sustituimos las bombas por ataques especiales.


Puntuaciones, bonus y tienda

Veamos las puntuaciones en el juego original:

  • 100 puntos enemigo común.
  • 100 puntos enemigo caballo (en realidad no, se desmonta y pasa a ser enemigo común).
  • 1000 puntos destruir barriles.
  • 5000 puntos carreta, puntos indirectos (sale el bonus volando y hay que cogerlo antes de que desaparezca).
  • 5000 ó 10000 puntos destruir casas, aleatorios, puntos indirectos (sale el bonus volando y hay que cogerlo antes de que desaparezca).
  • etc


En "Hijos de Camelot" seguiremos las mismas pautas.
Los bonus aparecen volando y se quedan en el suelo un par de segundos antes de desaparecer.

A diferencia del juego original, añadimos las monedas. Al recogerlas, podemos comprar, más tarde, en la tienda que aparece entre fase y fase, power ups, ataques especiales incluso vidas extra.



Hijos de Camelot: Creando un "Blood Bros" clon




Voy a crear un clon del magnífico juego de TAD Corporation (1990), “Blood Bros.
Este es un pequeño análisis de dicho juego. La idea es ver cómo funciona para replicar las mecánicas en mi propio juego.

BLOOD BROS FACTS!

Movimiento del personaje y de la mira en Blood Bros:

  • El jugador mueve el personaje en el plano horizontal (joystick) y éste se mueve siempre a la misma velocidad para un lado o para el otro. 
  • Cuando el jugador mueve el personaje (joystick), la mira se mueve al mismo tiempo casi al doble de la velocidad que el jugador. Es decir, mover el personaje implica mover la mira. 
  • Cuando el jugador pulsa el botón de disparo, el personaje NO se mueve y dispara.
  • Si el jugador pulsa disparo+movimiento (joystick), se mueve la mira mientras se dispara, quedando el personaje inmóvil. 
  • El jugador puede esquivar mientras se mueve, la mira permanece quieta mientras esquiva. 
  • Cuando el jugador dispara, los disparos llegan instantáneamente a la mira (no hay balas cruzando la pantalla). 
  • El jugador puede lanzar bombas hacia la mira, las bombas cruzan la pantalla hasta llegar a la mira. 
  • La mira hace tope en los bordes de la pantalla cuando los alcanza y se detiene. 
  • El jugador hace tope en los bordes de la pantalla, no hay scroll.

Personajes en Blood Bros

  • El Player 1 lleva siempre al vaquero y el Player 2 lleva siempre al indio.
  • Ambos son virtualmente iguales excepto por el sprite del personaje y el sprite de la mira. 
  • El jugador muere cuando 1 bala/bomba le toca, no hay “puntos de energía”. 
  • En el juego original el jugador tarda 3.5 seg aprox en recorrer la pantalla de lado a lado, la mira tarda 2 seg aprox en recorrer la pantalla de lado a lado (diría que va casi al doble de velocidad), trataremos de seguir esas velocidades.

Escenario y Fases en Blood Bros

  • El escenario tiene varios planos por donde se mueven los enemigos. Hay enemigos cercanos (más grandes), a media distancia y en la lejanía (más pequeños). 
  • El escenario está compuesto por varios edificios/construcciones destruibles que pueden estar en distintos planos. Estos edificios/construcciones tienen, por tanto, una cantidad de “vida”, al destruirse los edificios/construcciones dejan de hacer parapeto a los enemigos que pasan por detrás. La forma de destrucción siempre es la misma, se derrumban hacia abajo. 
  • También hay objetos (como barriles o rocas), justo delante de los jugadores, que hacen de cobertura/defensa, pueden ser igualmente destruidos y al destruirse simplemente se rompen. 
  • Para pasar de fase, el jugador debe destruir un número determinado de enemigos (indicador FOE en el juego), el indicador va aumentando cada vez que se mata.

Armas, bonus, bombas en Blood Bros

  • Hay 3 armas, la básica (siempre la lleva el jugador), la escopeta y el fusil. La mira se hace más grande al coger mejor arma y se dispara más rápido y los disparos hacen más daño. 
  • Las armas duran un tiempo limitado. 
  • Al matar enemigos estos pueden soltar bonus (dan puntos al recogerlos o al ser disparados mientras caen.) 
  • Al disparar a ciertos NPC (cerdos, bailarinas, etc) pueden soltar armas o bombas (se recogen al pasar sobre ellos o al ser disparados mientras caen). Los NPC no mueren, simplemente huyen.

Enemigos y su comportamiento en Blood Bros

Todas las fases, excepto las de Boss, tienen establecido un CICLO de enemigos que se va repitiendo. Es decir, si no hemos terminado la fase cuando termina el ciclo, el ciclo comienza de nuevo. Por ejemplo, supongamos que el ciclo dura 60 seg:

seg 3: salen 3 enemigos por la dcha, van al centro, disparan y salen por la izq
seg 8: salen 3 enemigos en la azotea de un edificio, disparan, y huyen
seg 12: sale 1 cerdo-bonus de izq a derecha

seg 55: sale 1 enemigo a caballo de dcha a izq,lanza una bomba al llevar 1/3 pantalla
seg 60 FIN DE CICLO (POR TANTO VOLVEMOS A EMPEZAR!!!)
seg 63: salen 3 enemigos por la dcha, van al centro, disparan y salen por la izq
seg 68: salen 3 enemigos en la azotea de un edificio, disparan, y huyen
seg 72: sale 1 cerdo-bonus de izq a derecha

etc etc

Datos técnicos

La resolución original del juego es 256×224 px.
Se puede jugar a 1 o 2 jugadores a la vez.

Que es el FOE (enemigos)

FOE significa "enemigo".
Para superar la fase, el jugador tiene que llenar la barra FOE. Esto se consigue matando enemigos.
Usualmente cualquier enemigo dará sumará 5 puntos de FOE con su muerte.
La barra se llenará al conseguir 200 o más puntos. En ese momento todos los enemigos mueren y se pasa a la siguiente fase.
En mi juego voy a recrear esta forma de juego para avanzar una pantalla.

Seguimos en la siguiente entrada.