miércoles, 16 de diciembre de 2015

Familiar Game Jam 5

Un poco tarde, pero aquí van mis impresiones acerca de la quinta edición de la Familiar Game Jam, aunque en mi caso, es la cuarta a la que asisto.

En primer lugar, habría estado bien, como antaño, escribir al final del día qué tal me fue en cada uno de ellos durante el evento, pero puesto que tuve problemas de tiempo con el juego, ya que fuimos bastante apurados, pues lo dejé para después de la Game Jam, aprovechando que el viernes siguiente era la entrega de premios. Pero, una vez más, por motivos personales, no pude realizar la entrada en el blog.
Finalmente, y después de tanto, aquí está, disculpad la demora.


Siento mucho decir que tengo un pequeño sabor agridulce en esta ocasión, aunque por supuesto, mucho más dulce que agrio. Agrio porque, en esta edición, no cabíamos todos presencialmente -de hecho en el mismo día se agotaron las plazas presenciales en Genera Games, donde se ha realizado el evento- pero por suerte, en Aula Arcade nos acogieron a cuatro grupos en total. Entre los cuales contaba el mío.

Por una parte estoy muy contento de haber estado allí, pues lo cierto es que al ser un aula orientada a la la tecnología, estaba preparada para un evento como este y todo fue mejor de lo esperado, el ambiente igual de bueno, el espacio bien organizado, etc.
Esa pequeña sensación agria vino de no poder estar junto al resto de equipos presenciales, daba igual el número, lo importante es que siempre apetece poder estar con los demás amigos del sector, conocer caras nuevas, hablar con los viejos conocidos, aprender de los demás... algo que si bien pude hacer con una parte de los participantes, no con el resto que estuvo en Genera Games, en definitiva, un pequeño mal sabor de boca al no haber podido ser todos en un solo sitio, pero a su vez no fue tan malo ya que, pasó de tener que participar online a participar físicamente aun siendo en otro sitio.
Lo pasamos genial y pudimos compartir la experiencia con otros grupos, que es lo que realmente importa, y por supuesto, lo valoro muy por encima respecto a la parte más que negativa, menos positiva.
Y pasando a otro plano de la experiencia, decir que esta vez, quise hacer un experimento personal, quise trabajar directamente con un game designer codo con codo, aprender bien las funciones del mismo, cómo llevarlas a cabo y, poder a su vez, tener la experiencia de trabajar con alguien relativo a ese campo, ya que, a pesar de conocer el sector, nunca antes había trabajado con alguien que hubiera estudiado esa especialidad.

La experiencia ha resultado muy interesante, puesto que no sólo diseñó la mecánica, sino que también se encargó de diseñar los niveles para el juego, el cual sin duda alguna quedó bastante interesante (Para haber sido realizado en 48 horas).

Una pequeña captura del juego realizado en 48 horas
En principio íbamos a intentar hacer algo los dos solos, usando solo objetos básicos en 3D y a ver qué se nos ocurría con el tema de la Game Jam, pero finalmente, se nos unieron un programador más, con el cual sí que he trabajado -pero no para hacer juegos y, ciertamente hacía más de un año que no colaborábamos en ningún proyecto juntos- y una ilustradora, que hasta ésta, su primera Game Jam, nunca había dibujado para un videojuego y, sin duda, ha hecho muy buen trabajo como podréis observar.

Todo nuestro esfuerzo, más el del músico con el que estuvimos en contacto a través de IRC, quedó plasmado en un juego que, en mi opinión, resultó bastante interesante. La mecánica, originalmente, era algo que nuestro game designer tenía en mente desde hacía mucho tiempo, nos encargamos de adaptarla un poco a la temática y al gusto de todos, le dimos algunas pinceladas al juego de manera que, aunque el game designer hizo su función, todos pudimos aportar nuestro granito de arena.

Esta Game Jam trató el tema de la "Deconstrucción" en honor al equipo de Deconstructeam, el cual estuvo tanto desarrollando como dando una charla previa a la Game Jam, la cual sin duda, fue merecedora de hablar de ella, así que lo haré en un futuro cercano.

Finalmente, durante el desarrollo, por desgracia dos de los equipos de los cuatro que estuvimos en Aula Arcade no pudieron llegar a publicar, nosotros no solo pudimos publicar nuestro juego, si no que, además, resultó gustar bastante, tanto a nosotros como a los demás, tanto fue así que... una imagen vale más que mil palabras:

¡Premio al videojuego mas innovador!
Antes de terminar, por supuesto quisiera dar las gracias a los jueces -si es que llegan a ver esta entrada- a mi equipo, por haberlo hecho genial y, por supuesto, a todos los que estuvieron en Aula Arcade, con los que compartí aquellos tres días e hicieron el fin de semana bastante entretenido y que espero que sigan con ganas de más para la próxima, y por último, a GeekyJuegos que recientemente hicieron una reseña del trabajo que presentamos.

Aquí tenéis el link al juego, el cual actualizamos anoche con las correcciones de un par de pequeños bugs y portado a WebGL para no tener que instalar nada para jugar, intentaremos añadir algunos niveles nuevos más adelante.

Juego: http://gamejolt.com/games/dropbot/104124
Reseña al juego por GeekyJuegos: https://geekyjuegos.com/dropbot-una-experiencia-de-juego-innovadora-familiargamejam5/

martes, 29 de septiembre de 2015

Preparar un proyecto de Unity3D para Git

Si queremos trabajar en un proyecto varias personas,  ya sea trastear con sus diferentes escenarios, configuraciones, código, imágenes, sonidos, etc... Lo ideal sería usar un repositorio para poder editar todos cosas a la vez pudiendo sincronizarse a través de la red, aquí veremos una buena configuración de Unity3D para cualquier tipo de repositorio y como usar uno de ellos, en este caso Git, que no solo es el mas popular a día de hoy si no que además, es el que yo mismo suelo usar tanto para trabajar como para, a partir de ahora, subir mis ejemplos como dije en la entrada anterior.
Unity + Git
Sincronizando Unity3D y Git
En primer lugar pasaremos por la configuración de Unity3D que es lo más rápido y que por supuesto, una vez configurado, nos servirá para cualquier tipo de repositorio (CVS, GIT, SVN...), solo debemos de abrir Unity3D y en la barra de menú abrir Edit > Project Settings > Editor para que nos salga este menú el cual deberemos configurar.
Los valores borrosos no son necesarios para el repositorio, esos podemos dejarlos como estén o en todo caso, adaptarlos a nosotros, pero ese es otro tema que abarcar otro día, por último recordar que hay valores que se le añaden a esta configuración dependiendo de la plataforma para la que vayas a crear el juego, lo importante son estos dos parámetros.

Version Control Mode: En este caso hay que usar la opción Visible Meta Files para que los archivos generados por Unity (Los que terminan en extensión .Meta) se puedan subir al servidor, esto es muy importante ya que ahí guardamos la configuración de los mismos y para que todos tengamos bien sincronizado todo, deberíamos subir todos los '.meta' siempre al servidor.

Asset Serialization: Hay que especificar la opción Force Text para que tanto las escenas, como los prefabs se guarden en modo texto por lo cual podrían verse los cambios en GIT y a su vez, si fuese necesario, poder hacer "merge" en caso de conflicto entre el archivo que tenemos nosotros y el que hay en el servidor para crear un archivo que conserve nuestros cambios y los de servidor.

Finalmente aconsejo, para ahorrar espacio innecesario en el repositorio, además de ser totalmente innecesario subirlo e incluso nos saldrán muchos archivos que cambiarán constantemente ya que son temporales durante la creación de la aplicación y para uso en memoria, no influyen en el estado del proyecto, aquí pondré el archivo '.ignore' que yo suelo usar para ignorar dichos archivos y no subirlos a nuestro servidor, este archivo debería estar en la raiz de nuestro proyecto.

# =============== #
# Unity generated #
# =============== #
Temp/
Library/

# ===================================== #
# Visual Studio / MonoDevelop generated #
# ===================================== #
ExportedObj/
obj/
*.svd
*.userprefs
/*.csproj
*.pidb
*.suo
/*.sln
*.user
*.unityproj
*.booproj

# ============ #
# OS generated #
# ============ #
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

Con esto podremos evitar añadir los archivos temporales, de sistema y generados por Unity3D que no son necesarios para que, cuando otra persona se una al proyecto, o quieras volver a descargar el proyecto, te ahorres ese tiempo de espera, ya que Unity3D te los generará el solo, los tengas o no.

Para la siguiente aprovecharé para explicar como configurar nuestro proyecto de GitHub además de explicar algunos conceptos básicos de como usar un repositorio para aquellos que no lo tengan muy claro.

martes, 22 de septiembre de 2015

C# AntiHack! Evitando que hackeen tu juego

Después de un verano y sindrome posvacacional vuelvo a la carga!

Antes de comenzar con esta entrada aprovecho para decir que la mayoría del código que vaya haciendo lo iré colgando en GitHub, así se tendrá más fácil acceso al contenido, si bien estará comentado todo en inglés, no te preocupes, aquí lo explicaré en español y paso a paso.

Una de las formas de hacking de videojuegos mas comunes, editar la memoria RAM
Como en este caso, la clase que he creado para encriptar variables en la memoria RAM.

En primer lugar, ¿Para qué quiero encriptar las variables en memoria?
Hay ciertos datos que nos gustaría que bajo ningún concepto pudiesen editar ya que, si por ejemplo tenemos un juego en el que puedes comprar monedas con dinero real, pues si acceden al valor en memoria del dinero y lo editan podrían tener dinero infinito con el cual podrían acceder a todo el contenido y los desarrolladores no ganarían el dinero por el esfuerzo de dicho desarrollo, y ese tipo de datos suele ser mucho más sensible, así como datos que se envíen a servidores en un MMORPG por ejemplo para evitar que los modifiquen e intenten añadir código malicioso o que les dé ventaja respecto a los demás y por supuesto pues los motivos internos de cada desarrollo.

 Dicho esto, el código está en mi cuenta de GitHub, solo hay que descargar el archivo CryptedData.cs y usarlo es muy sencillo, en un script que creemos nosotros añadimos esta línea:

CryptedData<int> cryptedInt = new CryptedData<int>(3);

Creamos un objeto de tipo CryptedData diciendo de que tipo será el objeto o valor que nos va a retornar, ya podría ser un int,  un string, un objeto de cualquier tipo de clase que nosotros necesitemos, en este caso un int de valor 3 por defecto ya que es el valor que le hemos pasado como parámetro.

Dicho dato, evidentemente, debe de ser del mismo tipo que el que ponemos entre los símbolos de mayor y menor que (< >).

Y para editarlo es tan sencillo como acceder a su valor de esta manera, ya sea para modificarlo o usarlo.

cryptedInt.value = 10;
Debug.Log(cryptedInt.value); 

Y con esto tendremos bajo una seguridad compleja de descifrar aunque a la vez bastante rápida.

He de remarcar que con el cifrado que he usado, los objetos pesarán el doble en memoria, ya que usará una clave de cifrado internamente del mismo tamaño que el objeto, así que hay que intentar no excederse y usarlo solo para lo imprescindible si no queremos saturar la memoria ram.

En principio usar esta clase podría parecer que estamos usando variables normales y corrientes pero internamente lo está ocultando en la memoria ram, si quieres probarlo e incluso encontrar fallos de seguridad o mejorar el algoritmo, por supuesto puedes sentirte en plena libertad de aportar, a partir de ahora subiré todas las clases que vaya creando y considere interesantes a mi repositorio.

Si quieres saber como funciona pues en otra ocasión destriparé la clase aquí paso a paso para ver el proceso, esta clase, si bien no tiene que ver con videojuegos directamente, si con la seguridad de los mismos, seguramente no será el último código que añada sobre seguridad aquí ya que es algo que también me apasiona.

miércoles, 22 de julio de 2015

Unity3D IDE: Sustituir Monodevelop

Hace tiempo ya que Monodevelop, el IDE que trae de serie Unity3D para la parte de desarrollo, no funciona todo lo bien que debería, al menos en OS X, donde yo trabajo ahora mismo, el debugger no siempre funciona correctamente dejando colgado Monodevelop, o a veces, cerrando Unity3D, además de ser un entorno lento en cargar respecto a otros más simples que cumplen con lo que prometen.

Por supuesto, no toda la culpa la tiene Monodevelop ya que, Unity3D usa una versión bastante obsoleta, así que, para los que preferían otros IDE para desarrollar, aquí doy mi punto de vista y recomendación al respecto.

En primer lugar, si usas Windows, yo aconsejaría sin duda alguna Visual Studio, ya que es un entorno de desarrollo sencillamente espectacular, muy completo, fácil de usar, buen debugger, y ahora tiene una versión gratuita que es más que suficiente para lo que necesitamos, sé que se puede configurar para poder usar el debugger, compilar y todas las cosas que podemos hacer a través de Monodevelop.

En cambio en OS X, tendríamos que buscar otra alternativa, una alternativa que está pisando fuerte, es Visual Studio Code, un entorno muy minimalista con la esencia de Visual Studio, muy ligero y que sencillamente, a mi me ha resultado bastante cómodo de usar.

Cabe destacar que no solo es para OS X, también es válida para Windows y también para Linux, que gracias a Oscar Triano García me enteré de la gran noticia, Unity3D está empezando a crear su entorno de desarrollo para Linux el cual no dudaré en probar.

Aún está un poco verde ya que este editor no lleva mucho tiempo, pero aquí mis conclusiones al respecto:

PRO:
Gratuito
Rápido
Reconoce las librerías de UnityEngine
Sencillo y simple, solo lo justo y necesario
Integración con GIT
Debugger de fácil configuración
Gestión de proyectos
División de la ventana en dos y hasta tres archivos

CONTRAS:
Echo en falta la posibilidad de instalar plugins de la nube desde el editor
De momento el debugger no funciona con Unity3D en OS X

Puede que sustituyan en futuras versiones Monodevelop por Visual Studio Code, o al menos den soporte para integrarlo en Unity3D, ya que muchos desarrolladores lo están pidiendo aquí, al igual que hicieron en su momento con Visual Studio en Windows, incluso en OS X a través de una máquina virtual con Windows instalado puedes usar Visual Studio, pero personalmente lo veo muy poco práctico consumir una gran cantidad de recursos del hardware que podrían venir genial a Unity3D durante el desarrollo.

¿Cómo probar Visual Studio Code en Unity3D?
Fácil, vamos a hacerlo con una serie de pasos muy sencillos para Windows, OS X y Linux ya que pronto esperamos ver una versión experimental según el blog oficial.

En primer lugar hay que descargar el instalador para nuestro sistema operativo de aquí: https://code.visualstudio.com/Download

El siguiente paso será instalar Mono, podemos instalar la última versión desde este enlace:

O bien si estamos en Linux (Debian/Ubuntu) a través de consola: sudo apt-get install mono-complete
O si estamos en OS X a través de consola*: brew install mono

*con brew instalado previamente

Una vez hecho será tan sencillo como abrir nuestro proyecto de Unity3D y seleccionar:

Preferences -> External tools -> External Script Editor

Ahí seleccionaremos “Browse…” y buscamos nuestro Visual Studio Code y cada vez que habramos un archivo nos abrirá Visual Studio Code.

Ahora para poder sincronizar el proyecto correctamente debemos pulsar dentro de Unity3D en:

Assets -> Sync Monodevelop Project

Y por último, al abrir Visual Studio Code, pulsamos en el icono de arriba a la izquierda que son los ficheros y abrimos la carpeta de nuestro proyecto de Unity3D.

Nos saldrá una llama en la parte a abajo y nos dejará seleccionar un proyecto y seleccionaremos Assembly-CSharp.csproj y listo, aunque de momento no podamos hacer debug, podemos abrir nuestros archivos, sincronizarlos con git, reconocerá las librerías de Unity3D y las demás librerías externas que vayamos a añadir.


Esta entrada ha llevado unas semanas de retraso a causa de investigar e intentar por todos los medios llegar a poder sacar el mayor partido posible a Visual Studio code e intentar hacer debug por desgracia sin éxito, siento la espera.

Para finalizar, un par de proyectos de github interesantes al respecto:

https://github.com/kode80/VSCUnity Para poder editar shaders de Unity3D desde Visual Studio Code
 

lunes, 13 de julio de 2015

RIP Mr. Iwata

Las personas que me conocen saben que no soy un gran simpatizante de Nintendo, es una empresa de videojuegos que en lo que a mi respecta, por varios motivos, no me agrada, desde la rivalidad que había entre los segueros y nintenderos de mi época que ciertamente influyó en mi, a ciertas prácticas de la empresa que, en lo que a mi respecta, no me gustaron nada, a pesar de todo no vengo aquí a criticar, si no a dar un pésame, a la família, a la compañía, a los fans y en ultima instancia y no por ello menos importante, a los videojuegos, ya que ha muerto alguien indudablemente importante en el sector.

No obstante, pese a mi rechazo a la empresa, hay algo que sin duda hay que reconocer y es que es una de las grandes y que, el cuarto presidente fallecido ayer, día 11 de Julio de 2015, hizo grandes cosas no solo por Nintendo, también por los videojuegos en general, y que menos, que rendir un pequeño homenaje a alguien importante e incluso un buen modelo a seguir en varios aspectos.

No solo se necesita saber programar, dibujar, modelar, hacer música o en definitiva, saber crear las piezas que forman un videojuego, también hay que saber que es lo que el público quiere, lo que a ti te gustaría jugar, no mirar en sacar juegos, hay que sacar buenos juegos, no en sacar nueva consola, hay que sacar una buena consola, y desde luego, ha marcado un antes y un después en muchas cosas, ya que supo dar al público algo nuevo, algo fresco y desde luego, lo que su público quería.

Sin duda, si me quedo con algo de este señor, y que pienso que todos deberíamos coger esa misma idea para poder hacer bien nuestro trabajo como desarrolladores, es una frase bastante conocida de él que dice: “En mi tarjeta de visita, soy un presidente de empresa. En mi mente soy programador. Pero de corazón soy jugador.”

No creo que pueda decir nada que no se haya dicho ya al respecto, dar el pésame a la familia ante todo, a la gente cercana a él y desde luego, a los videojuegos ya que, sin duda, este hombre, ha sido uno de los grandes y que forma parte de la historia de los videojuegos como una persona de las más importantes junto a los también fallecidos, Ralph Baer, Isao Okawa y Paco Menédez entre otros por desgracia tantos.

Me gustaría antes de finalizar, dejar una pequeña reflexión al respecto, en la vida, como en los videojuegos, siempre habrá un final para todos, por triste que pueda ser, también damos paso a sangre nueva y con ello a la posibilidad de que renueven el mercado, las ideas, la tecnología y cualquier otro ámbito ya que jóvenes son los que deben seguir el legado, aprender de los errores y los aciertos de los que antes estuvieron ahí, este hombre ha sido un buen modelo a seguir y realmente aún podía haber dado mucho más a la industria, pero mirar atrás no podrá cambiar nada, así que solo podemos mirar hacia adelante, rendirle un pequeño homenaje y hacer lo que a este señor también le habría gustado, seguir desarrollando e innovando al respecto.


Descansa en paz Mr. Iwata, terminaste tu partida, ahora nos toca a nosotros continuar.

lunes, 15 de junio de 2015

Unity3D Scripting: Modificación básica de inspector

Aquí volvemos una vez más a aprender algo, esta vez muy práctico tanto para el programador, como, una vez desarrollada esta herramienta, para el dibujante, músico, diseñador de nivel, guionista...

Vamos a ver como modificar la vista en el inspector de un script que hayamos creado de manera rápida y sencilla.
Visualización de configuración de editor
En primer lugar, analicemos su utilidad, quizás esta sea una de las herramientas de Unity3D que lo hacen realmente una gran alternativa, ya que puede facilitar la edición de los parámetros de entrada sin apenas consumir tiempo de desarrollo, de hecho, todo lo contrario, lo agilizaría.

Unity3D, ha facilitado mucho esta funcionalidad de manera que, en este primer contacto vamos a ver una forma sencilla de editar, valga la redundancia, el editor, es decir, los valores que veremos en el inspector, para verlos de una manera un poco más amigables para quien tenga que tratar con dicho componente más adelante.

Vamos a crear un script sencillo, realmente no es necesaria una utilidad en concreto para este ejemplo, simplemente ver cómo podemos cambiar el aspecto del componente en el inspector:

using UnityEngine;

[DisallowMultipleComponent]
public class InspectorEditExample : MonoBehaviour
{
 [Range(-10, 10)]
 public float Rotation;

 [Header("Escala")]
 [Range(.1f, 1)]
 public float Scale;

 [HideInInspector]
 public Vector3 Position;

 void Start()
 {
  Position = Vector3.one * Random.Range(0f, 1f);
  transform.localPosition = Position;
 }

 void LateUpdate ()
 {
  transform.Rotate(Vector3.up * Rotation);
  transform.localScale = Vector3.one * Scale;
 }
}

Si asociamos este Script podremos ver la imagen mostrada arriba, Si nos fijamos apenas hemos tenido que hacer nada, ahora vamos a ver las posibilidades que tenemos si hacemos este tipo de edición:

[DisallowMultipleComponent]
public class InspectorEditExample : MonoBehaviour

En primer lugar, como podemos ver en el script, al colocar estas etiquetas en las variables, han sido alteradas sus visualizaciones en el editor y a su vez, que tenemos etiquetas que afectan a la clase, como en este caso, que no nos permitirá añadir dos componentes iguales al mismo objeto para que no entren en conflicto entre sí.

[Range(-10, 10)]
public float Rotation;

Pasando a nuestra primera variable pública el parámetro Range podemos ver que pasa de poder insertarse un número, a tener una barra para desplazar entre el mínimo y el máximo que permitamos, siendo el número de la izquierda el mínimo y el número máximo el de la derecha, en caso de poner el número menor a la derecha y el mayor a la izquierda, la barra se usaría de manera invertida, moviéndola hacia la izquierda para los números más grandes y hacia la derecha para los números más pequeños.

[Header("Escala")]
[Range(.1f, 1)]
public float Scale;

En la siguiente variable pública Scale, podemos ver que además podemos acumular estas etiquetas entre sí, siendo esta nueva etiqueta para poner un título encima de esta variable, así podremos dar una definición más concreta.

[HideInInspector]
public Vector3 Position;

Y por último podemos ver en el Script una variable pública que no está en el componente a la hora de visualizarlo en el editor ¿Qué utilidad puede tener esto? Fácil, que sólo queramos que se pueda ver y/o editar a través de otros componentes, y no llenar el componente en el editor de datos que quien vaya a tener que modificarlo en la escena no solo no le interesa, sino que puede inducir a error en caso de creer que hay que rellenarlo.

Aquí tenemos una lista de las posibilidades que tenemos para editar la visualización del componente en el inspector a través de este método, que denominaremos "el método sencillo" ya que hay un método más complejo pero con una infinidad de posibilidades más, que veremos en otra ocasión.
Toda esta lista tiene un enlace a la documentación oficial en la web de Unity para quien quiera investigar un poco al respecto.

Espero que sirva de ayuda, y se entienda, la implementación y uso para estas pequeñas ediciones rápidas dentro de nuestro inspector.

lunes, 8 de junio de 2015

Como crear un documento de diseño de videojuegos (GDD)

Quizás esto debería haber sido lo primero que debería haber puesto en esta web ya que, por aquí sin duda alguna, es por donde debríamos empezar cualquier videojuego, tenerlo por escrito, definirlo desde el principio, de la A a la Z, en que consistirá, que contendrá y como se jugará a nuestro juego, vamos a ver los puntos que al menos yo considero esenciales para nuestro GDD (Game Design Document) o documento de diseño de videojuegos, del cual por supuesto, podemos obviar que, algunos puntos en diversos juegos pueden ser irrelevantes o inexistentes al igual que, en otros pueden faltar diversos puntos.
Game Design Document
¿Como debemos expresar este documento?
En primer lugar debemos tener en cuenta algo muy importante, y es la forma de expresar el documento, un buen consejo que me dieron una vez es expresarlo como si de la contraportada de la caja del videojuego o del trailer se tratase, por ejemplo:

Si queremos especificar que nuestro personaje podrá lanzar una bola de fuego, aunque podamos expresarlo tal que así: "Al pulsar el botón de habilidad, se instanciará unas partículas de fuego y se hará 10 de daño al enemigo", quizás con esta otra forma podríamos dar mas creatividad a la hora de hacerlo contando por supuesto que estamos dando mucha más información para que el artista/programador pueda hacer algo mucho mas parecido a lo que tienes en mente, tal que así:

"¡El protagonista lanzará bolas de fuego que harán arder al enemigo en llamas!", Sí, puede sonar poco serio, pero desde luego la visión no es la misma, de manera que si bien no hemos especificado por ejemplo el daño, hay que recordar que realmente ese daño tendría que equilibrarse a medida que se crea el juego, no es nada recomendable dejar en manos del azar ese dato, azar tal como escribir un número en el documento sin haber probado si eso será mucho daño o por el contrario irrelevante.
Identificar el "Core" del juego
Para quien desconozca que es el "Core" podría decirse que es el núcleo del juego, la esencia, por ejemplo:
  • Sonic the Hedgehog: Llegar al final de cada fase lo antes posible.
  • Pokemon: Coleccionar todos los Pokemon.
  • Street Fighter II: Combatir con tus enemigos hasta derrotarlos.
  • ...
Podríamos definir el núcleo de nuestro juego en una frase muy breve y sencilla aunque por supuesto, al igual que en los juegos anteriores, se podría decir mucho mas de ellos, lo cual nos llevaría a, una vez tengamos claro el núcleo, la base de en qué consistirá nuestro videojuego.

Poder especificar que hará que sea divertido cumplir dicho objetivo del juego, por ejemplo en el caso de Sonic, en las fases podremos encontrar Loops, Saltadores, Cajas que al romperlas nos harán ir mas rápido y no dispondremos de mecánicas como puzzles que harían que la mecánica principal se perdiese ya que tendríamos que parar de correr para resolverlos... en definitiva, los elementos de nuestro juego que hacen en un todo que la mecánica básica sea entretenida y divertida teniendo en cuenta que elementos no podremos añadir para no romper nuestro core.
Crear una lista de características
Definir todas las características de nuestro juego que nos orientarán a todos en lo que tenemos que hacer, algunas de estas características dependerán del tipo de juego, así que aquí van las que al menos yo considero mas importantes:
  • Género: Plataformas, Lucha, FPS, Simulador, Arcade...
  • Ambientación: Western, Cyberpunk, Sci-Fi, Medieval...
  • Público dirigido: Juego para niños, para chicas, para jugadores casuales, para "Hardcore Gamers"...
  • Personajes: ¿Hay personajes? Si hay, protagonistas, antagonistas, "figurantes"
  • Diseños de niveles: Dibujos, esquemas, explicaciones de como serán los niveles
  • Interfaz: Como será la interfaz de usuario, los menús, el flujo de pantallas...
  • Historia: La trama del videojuego y el guión de la misma
  • Estilo: 3D, 2D, PixelArt, Realista, Cartoon...
  • Sonido: Retro, realista, electrónico, clásico...
  • ...
Una vez tengamos todos estos apuntes, lo ideal sería esquematizarlo todo basándonos en un índice creado previamente, aquí dejo un índice de ejemplo para luego rellenar un documento en base al mismo:
  1. Introducción
    • Concepto del juego
    • Características principales
    • Género
    • Publico dirigido
    • Alcance
  2. Mecánicas de juego
    • Jugabilidad
    • Flujo de juego
      • Diagrama de flujo
      • Introducción al juego
      • Jugando
      • Fin de partida
    • Personajes
      • Protagonista
      • Compañero del protagonista
      • Antagonista
      • ...
    • Control de jugador
      • Interacción con el personaje
      • Interacción con el entorno
      • Interacción con la interfaz
    • Interacción del entorno con el jugador
  3. Interfaz
    • Diagrama de flujo de pantallas
    • Menú principal
    • Menú de pausa
    • Menú de guardado/cargar partida
    • Interfaz de usuario durante partida
    • Interfaz de fin de partida
    • Creditos
  4. Arte
    • Estilo
    • Concepts
    • 2D
    • 3D
  5. Sonido
    • Música
    • FX
    • Diálogos
Obviamente este índice no sirve para todos los tipos de juegos ya que si por ejemplo, hacemos un videojuego de naipes (Solitario, Poker, BlackJack...) no tendríamos personajes por ejemplo y esa parte del documento pues sobraría totalmente, así que también es bueno valorar el GDD y decidir por uno mismo de que parte prescindir y en el caso de ser necesario, añadir nuevas categorías.

Para finalizar, dejo aquí un GDD creado por Saltares que puede ser muy buena referencia, en parte yo mismo lo he usado de referencia ya que me ha parecido muy buen GDD y podremos ver de hecho sin ir mas lejos, el videojuego creado a partir del mismo:

GDD de Sion Tower
Videojuego de Sion Tower

jueves, 4 de junio de 2015

¡Mañana DevCon en Sevilla!

Que mejor para volver a darle actividad a esta web que anunciar las jornadas de desarrolladores y videojuegos indies de Sevilla se serán mañana Viernes, 5 de Junio de 10:00 a 20:00 en el Centro cívico las sirenas, La alameda, Sevilla, a todo aquel que esté interesado en este tipo de eventos, aunque un poco tarde, aquí va toda la información al respecto.

Cartel de la DevCon
¡Más vale tarde que nunca!
En este evento vamos a poder ver algunas conferencias muy interesantes, de las cuales, no me gustaría perderme ninguna, aunque en mi caso, por causas de trabajo, no podré asistir hasta la tarde, así que las de la mañana no podré verlas y es una lástima porque realmente me gustarían mucho.

Hoy mísmo han publicado el horario el cual será el siguiente:

Hora Charla Ponente Sala
9:30 a 10:00 Mesa redonda de los invitados (Sólo participantes) ---------- Sala de juntas
10:00 a 11:00 Evento inaugural Alberto Espinal Salón de actos
11:00 a 12:00 Quiero empezar a desarrollar videojuegos Juan Carlos García Salón de actos
12:00 a 13:00 El secreto de la música de los videojuegos David Serrano Salón de actos
13:00 a 14:00 Lo que siempre quisiste saber sobre publicar en steam y nunca te atreviste a preguntar David Erosa Salón de actos
14:00 a 15:00 The last door + V-Art The Game Kitchen y V-Art Salón de actos o Sala sur
17:00 a 18:00 Desarrollo en plataformas móviles Alberto Moreno Sala de juntas
18:00 a 19:00 Diseña y desarrolla para la realidad virtual Fernando M. Sierra Sala de juntas
19:00 a 20:00 Crowdfunding, cómo lograr tu primera inversión Jose María Climent Sala de juntas

La entrada a esta convención es totalmente gratuita, Así que no hay escusa para no asistir, un día de aprendizaje bastante concentrado para desarrollar tus propios videjuegos, no todo lo que necesitas para hacer un videojuego es programar, componer y dibujar, aveces también viene muy bien los consejos de personas que están en el mundillo y que han pasado ya por donde tu vas a pasar.

Web oficial: http://www.devcon.com.es

miércoles, 25 de marzo de 2015

Mi experiencia personal en la FamiliarGameJam4


A pesar de que la última Familiar Game Jam fué hace aproximadamente seis meses y que hace un par de meses estuve en la Global Game Jam, realmente siempre hay ganas de repetir, de volver a aprender con gente diferente, de volver a ver al resto de participantes de ediciones anteriores y ponernos al día de lo que estamos haciendo cada uno, y sin dudas, ganas de volver a hacer un videojuego de principio a fin.

jueves, 19 de marzo de 2015

Unreal Engine 4 VS Unity3D 5

De un día para otro, además literalmente, ha salido Unreal Engine 4 de manera gratuita para todos y además la esperada versión 5 de Unity3D, ahora bien, ¿Cual es mejor? ¿Cual de los dos tiene mas potencial? ¿Cual es mas rápido a la hora de desarrollar? Vamos a analizar esto paso a paso.


lunes, 2 de marzo de 2015

Familiar Game Jam Vol 4

alt text

Aunque llego tarde para comunicarlo, ya que hace unos días que está anunciado, la Familiar Game Jam vuelve a Sevilla, por supuesto no podía faltar una vez mas a un evento como este y por supuesto animo a participar a todos los que leéis mis entradas, hay algunas cosas bastante interesantes al respecto.

lunes, 16 de febrero de 2015

Unity3D Scripting: Tweens

Hay una utilidad muy práctica en Unity3D que son las librerías de Tweens, no necesariamente necesitaríamos una librería, nosotros mismos podríamos ser capaces de hacer nuestros propios tweens para nuestro juego, una utilidad que si bien puede servir para muchísimas cosas en nuestros videojuegos, quizás recalcaría como mayor utilidad, la interfaz de nuestro videojuego.


¿Que es un Tween?

martes, 27 de enero de 2015

Mi participación en la GlobalGameJam

Es difícil hablar sobre una Game Jam y no verle el lado positivo, al menos a mi, siempre, siempre, de la manera mas inesperada inclusive, acabas aprendiendo cosas, hay quien empieza por el principio, pero yo quiero hacer la vista atrás de manera secuencial, es decir, de final a principio.

El final, el motivo por el que todos fuimos, para hacer nuestro propio videojuego, fue un éxito, algunos juegos con mas fallos, otros con menos, algunos mas ceñidos a la temática, otros menos, pero al fin y al cabo, todos pudimos terminar los juegos que en algunos casos, tuvimos bastantes abversidades al respecto, aquí la fotografía final de mi equipo, faltaba uno que no pudo asistir el domingo realmente, así que nos quedamos con un programador menos, lo cual el ritmo de trabajo fue menor.
¡Aquí los creadores del SpaceODB!

viernes, 23 de enero de 2015

¡Global Game Jamming!



Quería haber avisado antes de poder venir pero finalmente, aquí ya esperando a la temática de la Global Game Jam, desde la sede de Córdoba, intentaré mantener al corriente por twitter de las novedades por aquí y por supuesto enseñaré el juego en cuanto lo tengamos publicado.

Este mensaje aunque breve, porque tengo que ponerme ahora al lío, quiero destacar que hablaré después del fin de semana de la experiencia ya que no solo es una Game Jam más, también han venido referentes del mundo de los videojuegos a este evento los cuales pienso exprimir todo lo posible todo el conocimiento que puedan aportar.

Dejo aquí el enlace al evento que, realmente me habría gustado poner hace una semana pero no he podido dar ni una sola pasada por el blog por falta de tiempo, ojalá gracias a haber puesto aquí una entrada referente al evento, hubiese animado a mas gente a venir, ya obviamente es un poco tarde ya que empieza en 15 minutos, no volverá a pasar, ¡Lo prometo!

http://www.gamejamodb.com/

domingo, 11 de enero de 2015

Unity3D Scripting: Extensiones

Hace tiempo que no traía un tutorial de Unity3D, y este, aunque es muy corto y simple, creo que es muy práctico.

Las extensiones sirven para poder, a través de una clase estática, crear métodos que se podrán llamar desde objetos ya creados de otras clases.


Como podemos ver en la imagen están tres métodos que si intentamos usar en el transform.position o en definitiva en cualquier Vector3, no lo vamos a encontrar, en cambio es algo bastante práctico, y en este tutorial veremos como añadir, ya sea a un Vector3, o a un Transform, GameObject, o cualquier clase en definitiva, un método que se usará de manera externa.

jueves, 1 de enero de 2015

¡Feliz año nuevo!

Quería despedir este año echando un breve vistazo a este año que dejamos atrás, para mi, llegar a este 31 de Diciembre ha supuesto muchas cosas en esta web.


En primer lugar, empecés el blog el día 1 de Enero de 2014, vease que, este año comienza con el aniversario de este blog, algo que me hace estar muy contento, por desgracia no pude llevar el mismo ritmo de vida con el que estuve todos los días subiendo entradas, además de ciertos problemas externos a la web, también empezaba a no poder pensar en tanto contenido de interés, ya que no todo son tutoriales, ni quiero dejar solamente tutoriales en esta web y, además de eso tampoco quería forzar contenido con el que realmente no estuviese contento.

A pesar de no haber podido tener esta constancia que sin duda alguna he podido experimentar lo difícil que es que una sola persona llegue a tener de manera constante este contenido, y que sin duda fue mi propósito para este año, sin duda, creo que conseguí tener esa constancia tanto en esta web como en muchas otras cosas, y sin duda alguna esta web me ha cambiado en este año muchísimo el trasncurso del mismo.

En primer lugar, he conseguido, poco a poco, poder expresarme un poco mas en la escritura, posiblemente una de mis mayores carencias, ya que como programador intento que mi código sea lo mas simple y corto posible, en la escritura quizás se me haya quedado esa parte que intento evitar escribiendo en cada una de las entradas que expongo aquí, incluso aveces creo que me he pasado de largo e intento resumirlo un poco porque en parte, también eso hace que sea mas sencilla la escritura.

He conseguido cosas que desde luego no han sido menos importantes que mejorar en la escritura, a pesar de que sin duda me falta mucho por mejorar, si no todo lo contrario, he conseguido amistades relacionadas con el desarrollo de videojuegos, ciertas personas que no solo me han enseñado si no que me han ayudado a dar ciertos pasos que sin duda han marcado bastante el camino a seguir, ciertas personas con las que puedo considerar que he creado una buena amistad y que he apreciado sin duda tanto su ayuda como sus críticas constructivas para mejorar tanto esta web como yo como persona.

Por último también decir que, quizás gracias a esta web o quizás no, pero creo que al menos influyó un poco, en cuestión de meses pude decir que he conseguido trabajar de lo que quería, desarrollando videojuegos en una empresa que sin duda he podido aprender más de lo que creía y que sin duda seguiré aprendiendo.

Finalmente gustaría dar las gracias dando nombres y apellidos pero no obstante, no me gustaría caer en el grandísimo error que sería que me faltase una sola persona de todas las que me han ayudado que sin duda serían muchas, desde mi anterior trabajo al que tengo actualmente, pasando por personas que conocí buscando desarrollar en mi tiempo libre, que conocí en eventos de videojuegos que sin duda me dieron oportunidad de participar en muchas otras cosas y por supuesto, no por ello menos importante, todas y cada una de las personas que han visitado, compartido e incluso comentado o agradecido en mi web que sin duda ha sido un gran apoyo para seguir y posiblemente el mayor motivo a seguir, muchas grácias y espero que este año aporte tanto o mas essta web a mi persona como espero aportar yo a la misma.

Dicho todo esto, ¡Feliz año nuevo!