miércoles, 19 de diciembre de 2012

Creación de terrenos

Ahora que empiezan las vacaciones y como todos estaremos ausentes durante un tiempo, quiero publicar algo para comentar el estado en el que se encuentra el proyecto de Snowboard.


Aunque he mejorado algunos aspectos en la jugabilidad, me he centrado sobre todo en la creación automática de terrenos con zonas rocosas, acantilados de diferentes alturas y árboles. Todo de forma aleatoria después de facilitar parámetros como: cantidad de acantilados, altura mínima/máxima de acantilados, distancia entre ellos, cantidad de zonas rocosas, cantidad de árboles...


Además, tuve que pensar en algún sistema para controlar el orden de dibujado de todas las instancias, ya que la profundidad juega un gran papel. Implementé distintos algoritmos para ordenar las instancias según su profundidad.

Algoritmo bubble sort

Con el algoritmo bubble sort de orden n*n, el juego se ralentizaba una barbaridad. Hablamos de ordenar al rededor de 1000 instancias. Imposible de jugar.

Algoritmo merge sort

El algoritmo merge sort es de orden n*log n, por lo que acelera un poco el proceso. Pero lamentablemente, a pesar de ser mejor, el juego seguía sin ser jugable.

Solución

Usar el algoritmo merge sort para el ordenamiento, pero ordenar solamente las instancias necesarias. Por ejemplo, ordenar una lista auxiliar donde se meterán solo las instancias visibles para el usuario (o aquellas a una distancia mínima del jugador principal etc.).

Simple, fácil y efectivo.

martes, 11 de diciembre de 2012

Un nuevo minijuego

Tras acabar el desarrollo de Rounded Soccer para PC, he decidido comenzar otro pequeño proyecto simple que no me llevará más de 1 mes de esfuerzo. A propósito, tengo pendiente lanzar la versión para Linux de Rounded Soccer.

El juego trata de descender un recorrido sobre una tabla de snowboard, no tengo detalles específicos de momento ya que tengo que decidir los modos de juego etc.


viernes, 30 de noviembre de 2012

Rounded Soccer RELEASE

Meses después del comienzo del proyecto Rounded Soccer, finalmente publico la versión completa del juego. No he tenido ocasión de testear completamente los partidos online, pero si surgiera la ocasión, podría sacar un parche para mejorarlo.



Por el momento es todo, para más información probarlo en vuestras máquinas o leer los anteriores posts sobre el tema.

Un saludo.

jueves, 29 de noviembre de 2012

Brave Bill walkthrough

Fue hace unos días cuando me acordé de que tenía pendiente grabar un video de Brave Bill, el juego de plataformas. En su momento tuve problemas ya que el programa Fraps no detectaba la ventana de este juego programado en SDL. Conseguí  grabarlo con el gratuito CamStudio y, aunque la calidad no sea igual de buena, aquí os traigo el walkthroug del mismo.


Un saludo

jueves, 8 de noviembre de 2012

Rounded Soccer online beta

Por fin me he animado a sacar la versión beta del modo online. Más información en la página dedicada. Mi intención es poder comprobar la latencia del juego a la hora de jugar los partidos, asi que personalmente agradeceré muchísimo cualquier feedback que reciba, ya sea para arregar fallos, mejorar otros aspectos o realizar nuevas propuestas.


Saludos.

martes, 9 de octubre de 2012

Rounded Soccer: Online Mode


Después de comprobar el buen funcionamiento del modo torneo, el proyecto pasa a la fase de desarrollo del modo online. El único detalle que falta es la posibilidad de guardar y cargar el estado del torneo, acciones que se realizarán en segundo plano automáticamente.

La especificación del nuevo modo está completa a pesar de que queden por tomar unas pocas decisiones sobre su implementación. La idea básica consiste en poder buscar una partida automáticamente mediante un único click y sin realizar de antemano un itercambio de direcciones IP.
La implementación la haré sobre el protocolo TCP para evitar las complicaciones que puede acarrear el realizar un sistema propio de conexión sobre el protocolo UDP. Además, en este juego no creo que la velocidad de conexión interfiera mucho en la jugabilidad.

La idea mencionada está casi programada al 100%, diría que solo queda programar la comunicación entre los jugadores en el partido en sí.

jueves, 20 de septiembre de 2012

Tournament Mode

Viendo que en Rounded Soccer el sistema de partidos está casi pulido, antes de comenzar a desarrollar el modo online se terminará de crear el modo torneo. Este es el aspecto actual (aún por mejorar) de este modo.


El sistema todavía necesita saber crear la fase de eliminatorias a partir de los grupos y la clasificación de los equipos por puntos. Puntos que también se mostrarán en la tabla de grupos. No se darán mas detalles de momento ya que quedan decisiones por tomar, pero en los próximos días estará listo como para poder testearlo.

Un saludo.

jueves, 2 de agosto de 2012

Proyecto Fin de Carrera

El mes de julio terminé y presenté el PFC llevado a a cabo a lo largo del curso. Al final se convirtió en un proyecto de gran envergadura que, aunque en un principio no lo parezca, se tuvieron que tomar muchísimas decisiones.

En este proyecto de Fin de Carrera se ha creado una nueva versión (3.0) de la herramienta WebDiagram, cuya función es facilitar el desarrollo de aplicaciones interactivas mediante la metodología InterMod.

Metodologías usadas: InterMod, Scrum y TDD

martes, 5 de junio de 2012

De vuelta al trabajo

He estado muy liado este último mes por el hecho de tener exámenes y trabajo que hacer sobre el proyecto de fin de carrera. Pido disculpas por haberme ausentado durante tanto tiempo, pero enseguida volveré a la carga con el desarrollo de Rounded Soccer.

Tengo que decir que no queda mucho para tener el juego completo en su modo offline, el modo online ya es otra historia y se barajan varias posibilidades.

Saludos.

sábado, 28 de abril de 2012

Rounded Soccer

Rounded Soccer es el nuevo nombre del proyecto "minisoccer". Me he puesto a diseñar y ampliar este proyecto seriamente en mi tiempo libre. Se pueden ver mejoras gráficamente y más adelante crearé un nueva sección donde iré poniendo información sobre su progreso.


A pesar de mi escaso conocimiento en los programas de diseño de gráficos vectoriales (o debería generalizar en el diseño de gráficos), he conseguido un resultado aceptable. Se han añadido todos los equipos de la pasada copa del mundo y un menú de selección.



Todavía queda mucho por hacer, pero intento avanzar rápido cuando tengo tiempo.

miércoles, 18 de abril de 2012

Ser un Game Designer

Para todos los emprendedores en la materia, un video que te marca los pasos a seguir o que destroza tus sueños si pensabas que era muy fácil.


Te has llevado una decepción? No desistas, crea tus pequeños proyectos y trabaja en ello como un hobby. Se constante y quizás salga alguna oportunidad para triunfar. Muchos lo hacemos.

Personalmente llegué al límite cuando dbzbx fué lanzado, es cierto que tuvo más éxito del que imaginé (probablemente más de 1 millon de usuarios), pero tambíen tengo que decir que no obtuve absolutamente nada a cambio. Es cierto que coloqué un botón de donaciones etc... no ha habido nunca actividad, pero nunca sentí la satisfacción de recibir miles y miles de mensajes de gratitud. =)

Descargas
Softonic:747.627
Uptodown: 797.832
Programas-gratis.net:167.488
ABCdatos:34.302
TodoProgramas:32.282
...
TOTAL1.779.531

Sumamos en total más de 1.600.000 descargas sin contar otras muchas páginas o las distribuciónes de terceros (usuarios) mediante hostings y foros donde se consigue más tráfico.
Hablamos de gran cantidad de descargas y una valoración media de 8.5/10 aproximadamente.

Saqué valiosas conclusiones para los próximos proyectos, no es fácil ganarse la vida en el mundo del software y menos aún si no se tiene cierto prestigio.


Actualización dia 15/05/2016
Softonic:2.388.243
Uptodown: 1.395.706
Programas-gratis.net:216.050
ABCdatos:37.378
TodoProgramas:34.182
...
TOTAL 4.071.559

miércoles, 4 de abril de 2012

Cuestiones de FPS

Dado la pequeña modificación que hice en uno de los proyectos (concretamente en el de minisoccer), me gustaría comentar el tema del control de tiempo en las aplicaciones a tiempo real.

Hasta ahora, siempre había hecho uso de una determinada velocidad constante de juego y FPS. Es decir, el simple bucle que en cada iteración hace un "sleep" si dicha iteración se realiza en muy poco tiempo. Esto nos asegura que el juego se reproduzca a la misma velocidad en cualquier ordenador (no es del todo cierto), pero el renderizado se realiza las mismas veces que la física del juego.

const int FPS = 60;
const int DT = 1000 / FPS;
int lastTime, frameTime;

bool running = true;
while (running) {
    lastTime = getTicks();

    update();
    render();

    frameTime = getTicks() - lastTime;
    if (frameTime < DT)
        sleep(DT - frameTime);
}

Pero de este modo, limitamos las capacidades de un buen hardware cuando seguramente podría ser capaz de ejecutar el juego a una velocidad mayor. Por eso a menudo los programadores usan el tiempo de cada frame (frameTime) para actualizar la física usando lógicas parecidas a esta:

x = x + speed * frameTime

Así se aplica la integración de Euler. Pero no es eso a lo que quiero llegar. Gracias a los excelentes artículos publicados en esta y esta otra página web podemos llegar a implementar un bucle en el que la velocidad del juego es totalmente independente de los FPS. En ese caso la física podríamos calcularla 25 veces por segundo (está estudiado que generalmente es suficiente, incluyendo chequeo de collisones etc.) mientras que el renderizado se realiza en cada frame.

No voy a entrar en la implementación ya que no tiene mucha complicación y las fuentes aportadas tienen suficiente información para entenderlo (en inglés). Cabe destacar que en la renderización se hace uso de un nuevo valor que se usa para interpolar la posición correcta de las instancias y así se consigue una animación realmente suave. Yo mismo he conseguido un excelente resultado asi que animo a hacer uso de este método a todo programador, cualquier duda podeis consultarmelo.

Fuentes:
Koonsolo
Gafferongames

P.D: Las dos páginas usan métodos distintos para calcular el valor usado para la interpolación; personalmente prefiero el método usado por gafferongames que calcula dicho valor mediante el uso del estado anterior y actual de las instancias.

lunes, 26 de marzo de 2012

Editor de mapas - Video

He estado analizando mis archivos en busca de creaciones para poder ir subiendo videos de muestra. Mi intención es atraer más gente al blog por medio de Youtube. Al igual que con el editor de mapas, subiré videos de otras creaciones más.


Sé que anteriormente subí una prueba del editor de mapas, pero debido a las pocas descargas he subido un video que muetra la creación de un pequeño mapa en 5 minutos para aquellos que no quieren tomarse la molestia de probarlo.

Saludos.

jueves, 15 de marzo de 2012

Reprogramando minisoccer

Dedicando un poco de mi tiempo libre a la reprogramación del prototipo de este pequeño juego que mostré en esta entrada, he coseguido una versión alpha donde reúno las funcionalidades básicas de la jugabilidad. Esta vez usando la librería SFML para la renderización de las texturas.


He desarrollado un pequeño documento de diseño donde especifico todas las características y requisitos del proyecto. Varios modos de juego para varios jugadores entre los que se incluye el modo online. Todavía persiste la duda de si hacer de este modo algo simple o algo más avanzado y trabajado.

Como todo depende de la cantidad de usuarios y el éxito que podría tener el juego, no puedo adelantar nada. Pero lo más adecuado sería crear algo intermedio; ni muy simple como una simple interfaz de conexión para jugar un partido amistoso, ni muy complicado como incluir dinero ficticio para realizar apuestas y comprar objetos o mejoras...

Tengo varias ideas para el desarrollo que aportarán mucho dinamismo a los partidos, como la aparición de objetos que aportarían cualidades (disparo potente, disparo bombeado, velocidad...) en un corto periodo de tiempo.

miércoles, 7 de marzo de 2012

Cambio de File Hosting

Recientemente cambié todos los archivos de descarga relacionados con dbzbx al servidor de alojamiento de archivos conocido como Fileserve. Dado que nunca obtuve ninguna ganancia (en ningún caso nos planteamos este objetivo) ni ayuda con este proyecto, a lo largo de los últimos me ví obligado a hacer uso de dichos alojamientos para poder mantener relativamente el desarrollo o la web, e incluso ha poner patéticos enlaces con anuncios en las descargas... pues si, es lo que hay...

Este alojamiento "gratuito" y limitado no me ha terminado de convencer como lo hizo el famoso Megaupload. Dicho esto solo tengo que decir que a partir de ahora alojaré los archivos en Dropbox y eliminaré todas las referencias a los antiguos enlaces.

He aprovechado la ocasión para hacer cambios en las versiones de dbzbx, modificandolos para que solamente haya una versión accesible y compatible con los sistemas operativos de Windows actuales. Así esta versión será tan liviana como lo era la versión lite y será opcional la descarga de los componentes adicionales (la intro, el manual y el ejecutable de la versión editable).

Saludos.

lunes, 20 de febrero de 2012

Par de proyectos

A raíz de la encuesta terminada, me he decantado por seguir el resultado obtenido para publicar el siguiente artículo. Sinceramente no lo hice por la falta de contenido, sino por la falta de tiempo y quizá por no tener del todo claro lo que quieren los usuarios de este blog.

Aunque los votos fueron escasos, estoy contento por ver que existe cierto movimiento por el blog a diario. El resultado ganador fue que debería publicar más información sobre proyectos. Ahora bien, no estoy seguro de qué proyecto hablar ya que el Proyecto de Fin de Carrera me ha mantenido al margen de mis proyectos personales.

El no haber tenido contacto durante este tiempo con el Game Engine que estaba desarrollando me impide mostrar nada nuevo de ese proyecto. A cambio, me pondré a rehacer un par de pequeños minijuegos que creé hace mucho tiempo, pero esta vez implementaré clasificaciónes online que guardaré en una base de datos.
Claro está que los haré en C++ usando la librería SFML. Serán totalmente gratuitos:
(1)Uno de ellos tratará de hacer la mayor masacre posible de matanzas montado sobre un coche y empuñando un arma de fuego. (2)El otro consistirá en superar distintos niveles evitando que te descubran las camaras de seguridad.

Me he dado cuenta de que el último minijuego podría traer una adictiva jugabilidad si lo implementara en modo de carrera online. No es mi objetivo en un principio, pero quien sabe...

martes, 17 de enero de 2012

Version editable de Dbzbx

A petición de varios usuarios he actualizado una nueva versión del DBZBX para que sea facilmente editable. Para añadir o elimiar personajes solamente hay que modificar el contenido de la carpeta Characters, al igual que la carpeta Stages para inclusión de escenarios.

viernes, 13 de enero de 2012

Editor de mapas

Tal y como prometí, he decidido mostrar ahora el editor de mapas que estuve desarrollando. Aunque todavía está muy verde se puede apreciar claramente su buen comportamiento frente a la creación de niveles sencillos. 

Debido a la reciente incorporación, como ya comenté, de la nueva API gráfica en SFML me he obligado a suspender el desarrollo del motor (ergo del editor de mapas) para comenzar a construir a partir de éste otro nuevo motor más específico respecto a las nuevas características de la nueva API.
Pero gracias a las estupendas modificaciones en la creación de formas y polígonos,  me será más fácil desarrollar el sistema de detección de collisiones (que viene siendo lo que básicamente estaba desarrollando en este momento).

Como se me hace dificil explicar exactamente el comportamiento del editor, lo dejo en vuestras manos para cualquier comentario que querais hacer. Notar que aún quedan muchos aspectos por desarrollar, pero ésa es la idea básica.
Los controles son sencillos y son detallados en el panel de ayuda que aparece al pulsar la tecla H. Por mucho que se puedan guardar los niveles en un archivo XML, no recomiendo comenzar ningún proyecto en este prototipo ya que la nueva versión no será compatible con la vieja estructura del XML.

Recientemente he comenzado con la nueva implementación, asi que no dispongo de una compilación para los equipos Linux.

Map Editor: Descargar

P.D: Siento el tamaño de la descarga, que es debido a la cantidad de imagenes de gran calidad sacados de Braid que he incorporado como ejemplo.

Saludos.

lunes, 2 de enero de 2012

Programando un Game Engine

Desde hace tiempo he mantenido la ilusión de crear algún dia un game engine genérico para cualquier juego que tuviera intenciones de comenzar a desarrollar. A lo largo de estos meses he ido desarrollando pequeñas partes del posible motor, como por ejemplo el sistema de partículas que mostré.

Gracias a la librería SFML el proceso del desarrollo de mi motor está siendo satisfactorio, pero todavía queda muchísimo por hacer. Mi intención es prepararlo para a continuación crear un buen proyecto cuyo guión fue terminado hace casi 1 año.

El motor se dividirá en distintos modulos que estarán preparados para manejar el estado del juego, controlar la fisica de los objetos, controlar el renderizado en 2D y proporcionar clases y funciones para la detección de colisiones entre poligonos, manejar sprites con animaciones etc. Por supuesto, incluirá un editor de mapas casi completado que mostraré más adelante.

Estas son algunas de las clases principales que contiene el motor actualmente, sin considerar que existen clases más pequeñas sobretodo relacionados con el módulo de fisica.

Game
    Window
        Camera2D
    Event
    GameStateManager
        GameState
Timer
Error
ResourceManager
    TextureManager
    FontManager
    SoundManager
    MusicManager
CollisionManager
    CollisionShape
    Polygon
Sprite
    AnimatedSprite
Map
    Tile
    CollisionShape

Dado que esta información no aporta mucho conocimiento acerca de este motor, en otra ocasión mostraré su funcionamiento con diversos ejemplos y partiré por enseñar el editor de mapas.

Saludos.