jueves, 28 de octubre de 2010

Nuevos avances (Si, otra vez pero esta vez más importantes!)

Otra vez más de lo mismo que en el último post! Esta vez he tardado mucho más en actualizar el blog, pero el poco tiempo que tengo disponible, lo utilizo para desarrollar en vez de escribir. Pero prometo intentar al menos escribir un post diario o como mínimo cada dos días.

Como gran novedad os explicaré que el servidor ya tiene implementado de una forma estable el sistema de hechizos (spells). Así como un sistema de combate que aunque actualmente es bastante simple, funciona a la perfección. Ahora mismo ya podemos lanzar hechizos contra NPC's y con ello matarlos! De momento ellos no nos pueden hacer daño (falta muy poco para esto, puesto que me falta acabar de implementar el sistema de agro  para que los npc's sepan a quien deben de atacar).

Otra gran novedad es que el servidor tiene implementado al 100% un sistema de plugins para poder escalar y desarrollar nuevas funcionalidades al juego sin tener que tocar el engine del server! Así que ya sabéis! Ya podéis  empezar a desarrollar funcionalidades al juego en cuanto saque la primera versión del SDK.

Este sistema de plugins permite desarrollar nuevas funcionalidades tales como nuevos hechizos así como nuevas IA para los NPC's.

De cara al cliente tengo una noticia buena, y una mala. La mala es que he vuelto a reescribir el REngine de nuevo con lo que en vez avanzar he retrocedido. La buena es que REngine es mucho mas potente, mas robusto y sobre todo implementado de una forma que me ayudará a realizar con mucha mas facilidad el cliente. Una de las nuevas features a destacar es la carga de modelos de World of Warcraft M2. Aún tengo que solucionar unos problemas de las animaciones, pero esto me a abierto las puertas para poder crear loaders de cualquier formato 3D.

Prometo en breve añadir unas nuevas capturas y hacer una explicación de detallada de las características de todo el proyecto.

lunes, 27 de septiembre de 2010

Nuevos avances

Como veréis tengo poco tiempo para actualizar la lista de avances, pero aunque no escriba no significa que no avance! Aunque ahora será algo mas paulatino el proyecto sigue avanzando a un ritmo lento pero fuerte!

Actualmente he realizado diferentes cambios y nuevos añadidos. Son los siguientes:

  • Ya se dispone de un soporte básico de Spells (Hechizos)
  • Gestor de MDB's (Son los MProject DataBase)
  • Los NPC's disponen de un sistema de IA básico capaces de moverse por el mundo de dos formas
    • De forma aleatoria
    • Siguiendo a otra entidad
  • Añadido sistema de "targeteo" de entidades del mundo
  • Las consultas a las BBDD se ejecutan en un thread diferente para no congelar la actualización del mundo

En breve explicaré con detalles estos nuevos avances y posiblemente alguna nueva captura o incluso vídeo ;)

lunes, 6 de septiembre de 2010

Primera implementación de NPC's

Después de un largo trabajo, ya dispongo de la primera implementación básica de los NPC's (Non Player Character). Ahora mismo tan solo funcionan como una entidad diferenciada de los jugadores. MProject  actualmente dispone de diferentes entidades: 

  • WorldObjects : Es la entidad base de un objeto que está dentro del mundo y tiene unas coordenadas así como otros valores como escala, identificador de modelo, velocidad , etc.
  • Unit : Es una entidad con la que se puede interactuar, y dispone de estadísticas como la vida o el mana. Esta hereda de WorldObject.
  • Player: Esta es la identidad de los jugadores del mundo, con los que se interactua en el PVP (Player vs Player). Esta hereda de Unit.
  • Creature: Esta identidad es la de los NPC, los cuales pueden ser amistosos o hostiles. Esta también hereda de Unit.
Espero poder en la máxima brevedad posible implementar las interacciones entre las entidades. Pero para ello primero debo desarrollar los hechizos y/o ataques así como las habilidades puesto que serán las primeras interacciones. 

Aquí os adjunto una captura con el primer NPC! Nuestro querido raptor! :)


sábado, 28 de agosto de 2010

Un par de capturas con PagedGeometry y ParticleUniverse funcionando

Aquí os adjunto hoy dos capturas del cliente funcionando con PagedGeometry (en este caso el bosque que podéis ver) y el sistema de partículas de ParticleUniverse.


Esta captura representa que es de noche (utilizando Caelum) y dos efectos especiales en las manos (mano de fuego y mano de hielo)

En esta otra es la misma que la anterior solo que de día. Parece que ya va cogiendo forma, que os parece ;) ?

REngine, el engine de MProject

Como comenté en los primeros posts, el cliente para MProject utiliza Ogre como engine gráfico. Pero para hacer algo más escalable en vez de insertar código de Ogre directo en el cliente, desarrollé un "mini-engine" con el cual poder desarrollar más fácilmente el cliente, utilizando así una capa de abstracción para facilitarme el desarrollo así como también el futuro cambio a otro engine por si algún día se diera el caso.

Este engine lo llame REngine. No es un engine como tal, si no más bien un conjunto de clases de alto nivel que me ayudan a que todo sea un poco mas fácil. Además de Ogre, también están añadidas las funcionalidades de plugins para Ogre y las siguientes librerías:


  • Plugins de Ogre
    • Caelum
    • Hydrax
    • PagedGeometry
    • ParticleUniverse
  • OIS (Input)
  • MyGUI (Gui)

Os pondré un pequeño ejemplo de un "Hello World" para que veáis lo simple que es :

#include "RGraphics.h"
#include "Log.h"



int main(int argc,char *argv[])
{


    if( !sRGraphics.Init(3) )
    {
         sLog.outError("Failed to Init RGraphics.");
         return -1;
    }


    if( !sRGraphics.setMode(320,240,false,"REngine Test"))
    {
         sLog.outError("Failed to set mode.");
         return -2;
    }


    while(sRGraphics.Render())
    {
    }


  return 0;
}


Como podéis ver con 4 lineas básicamente se inicializa el sistema gráfico .Sin duda este engine será lo primero a ser liberado.

martes, 24 de agosto de 2010

Características actuales

Actualmente después de numerosas re-escrituras del proyecto por fin creo que esta versión va a ser la definitiva y os voy enumerar las características principales que actualmente el proyecto tiene desarrolladas.

Comunes

  • Sistema de Log's 
  • Consola de comandos/debugeo en color
  • Sistema Multi-Hilo
  • Gestor de configuraciones (.conf files)
  • Parser de XML

Servidor


  • Acceso a base de datos SQLite (fácilmente expansible a otros motores de bbdd)
  • Autentificación de clientes
  • Selección de jugadores
  • Gestión de mapas
  • Replicación optimizada de objetos del mundo.


Cliente


  • Engine gráfico bajo Ogre3D.
  • Sistema de interfaz de usuario bajo MyGUI
  • Sistema atmosférico bajo Caelum.
  • Sistema de partículas FX
  • Sistema de attachament entre modelos 
  • Carga de modelos especiales para MProject  (RModels)
    • Animaciones esqueléticas
    • Attachament de FX,Modelos,...
  • Sistema de terrenos

Resumen

En resumen, actualmente esta desarrollado un servidor con una implementación básica del mundo virtual capaz de manejar a los diferentes usuarios con sus personajes y dejar el mundo persistente (guardando los datos en la bbdd) y un cliente capaz de interpretar y representar los datos del servidor en un mundo visual.

En los próximos posts intentaré ir explicando un poco más a fondo el funcionamiento interno, así también también como las novedades y algunos pequeños "how to" de los problemas que me voy encontrando.