lunes, 5 de julio de 2010

QYKEngine vs UDK

Muchas veces en el mundo de la programación reimplementamos código ya hecho por otros. Estamos mentalizados en que si hace falta ordenar un array, programamos un bubblesort en vez de buscar el código que ya ha sido creado una y otra vez por otros.

Con esto queremos llegar a la pregunta, ¿Vale la pena seguir programando el QYKEngine, o es mejor hacer el port al Unreal Engine? ¿Para que reinventar la rueda, si ellos se han pasado años mejorándola y nos la ofrecen de buen gusto?

Por un lado, está la parte sentimental. Miras tu propio engine, y notas que te devuelve la mirada con un "él nunca lo haria". Además de lo divertido que es ir aprendiendo todo lo que comporta un engine decente y ver como tu criatura crece día tras día.

Por contra, no nos engañemos, algo que sale de tardes ociosas no llegará nunca al nivel de años de programación dedicada en exclusiva por profesionales del sector. Y si empezasemos a desarrollar un juego directamente con el UDK, tendriamos un juego con un acabado muy diferente (y multiplataforma!).

¿Vosotros que pensais? ¿QYKEngine o UDK?

domingo, 27 de junio de 2010

Nuestro Engine

Dentro de poco os colgaremos un vídeo con una demo técnica de lo que permite hacer nuestro engine o quizás incluso os colguemos una release para que lo probéis vosotros mismos.

¿Que se supone que estaréis viendo? Nuestra demostración contiene:

  • Carga y pintado de modelos .ASE
  • Carga  y pintado de texturas
  • Pintado de texto por pantalla
  • Creación de geometría por código
  • Física con colisiones 3D
  • Música y efectos de sonido
  • Iluminación global y spotlight
  • Sistema de motion parallax
  • IA de tipo Torreta y Soldado
  • Sistema de creación de menus
  • Low Poly models
Y todo ello controlado con sus managers tal como hemos explicado en post anteriores, con decir que nuestro main tiene menos de 30 lineas de código...

    viernes, 25 de junio de 2010

    Un problema físico

    Primero de todo disculparnos por no escribir desde hace tiempo, pero los examenes no nos han dejado más opción. Así que os lo intentaremos compensar con varios post en las próximas semanas, aunque no prometemos nada! Así pues empezemos con lo interesante!

    Para dar más realismo a QYK, decidimos en su día tener un módulo de física y para no tener que implementar toda la librería buscamos cuales ya estaban desarrolladas encontrando la Newton, Bullet y ODE entre otras.

    Nos quedamos con la ODE, porque a pesar de tener una documentación horrorosa, su uso parecía relativamente sencillo en comparación a las otras librerías.

    De esta manera, el módulo de física queda:
    • Un PhysicsManager que se encarga de:
      • Inicializar la ODE.
      • Control de colisiones.
      • Callback de actualización de posición/rotación los objetos fisicos.
    • Una clase Object que tiene las propiedades necesarias para cada uno de los objetos fisicos.
      • Body
      • Geometry
      • Mass
    Así, cada clase que queramos que se comporte de una manera realista solo tiene que heredar de la clase Object y inicializar sus propios valores tales como la posición y velocidad iniciales y dejar que la ODE haga magia.

    Pero algo que a simple vista puede parecer tan sencillo y lógico, nos ha dado muchos más problemas de los que creiamos posibles.
    • Los cuerpos traspasaban el plano del suelo a pesar de detectar siempre colisión.
    • Los objetos se fundian unos con otros en vez de rebotar.
    • etc.
    Y la mayoría de estos errores que nos han dado más de un dolor de cabeza vienen principalmente por una única causa:  una mala DOCUMENTACIÓN por parte de ODE.
    Así que para todos aquellos programadores que odian documentar su trabajo, que tengan en cuenta que si quieren que su software llegue a terceros la DOCUMENTACIÓN es básica.

    miércoles, 26 de mayo de 2010

    Participa en QYK!

    (--- English Below ---)

    Los desarrolladores de QYK llevamos ya un tiempo dándole vueltas a un par de preguntas: ¿Cómo queremos que sea finalmente el juego? ¿Hasta dónde queremos llegar con QYK? Tenemos mucha ilusión puesta en este proyecto, deseamos llegar a lanzar un juego bien acabado y que os divierta pero no podemos convertirnos en víctimas de nuestra propia ambición.

    Finalmente hemos dejado claras nuestras propias limitaciones: entre los tres programadores, no podemos llevar a cabo el juego que a muchos nos gustaría. Entonces, ¿Por qué seguir siendo solo tres? Si, al fin y al cabo, queremos que este juego llegue a tanta gente como sea posible ¿Por qué no dejar formar parte de este proyecto a todo aquél que quiera y pueda aportar algo? No va a haber mejor juego que el desarrollado por los propios jugadores que lo van a disfrutar.

    No buscamos que nadie trabaje para nosotros ni aprovecharnos del trabajo ajeno, quién participe aportando su granito de arena tendrá su reconocimiento correspondiente dentro del equipo que, dado que se trata de un juego amateur y sin ánimo de lucro, de momento se traducirá en un lugar en los créditos.

    Así pues, desde este blog de desarrollo hacemos un llamamiento a todas las neuronas creativas para que participen activamente en el desarrollo del videojuego, ¿como?

    • Envíanos bocetos o modelos!
    • Ideas:
      • ¿Que es lo que te gusta del juego?
      • ¿Que es lo que no te gusta?
      • ¿Que cambiarías?
    • Eres músico y te gustaría escuchar tu propia música en un videojuego? pues a que esperas!
    Todo aquél que comparta nuestra ilusión para crear un buen videojuego y que quiera practicar sus habilidades en dibujo, modelado, animación, música, FX, etc., que lo exprese en los comentarios de esta entrada :-).


    -------------------------------------------------------


    As QYK developers, a couple of questions came to our minds and kept our brains busy for a long time: What do we want this game to be? How far are we going with QYK? We are doing our best in this project, we want to launch a well-rounded and funny game but we can not allow ourselves to become victims of our own ambitions.

    Finally, we made clear our own limitations: we, the three programmers, can not carry out the game that many of us would like. So, why shall the team be formed only by us? If, after all, we want this game to reach as many people as possible, why not leave a part of this project to anyone who is willing and able to contribute? There will be no better game than the one developed by the players who are going to enjoy it.

    We are not seeking anyone working for us or take advantage of the work of others, who participates in QYK development by providing their bit, will have its corresponding recognition within the team. Since it is an amateur game and non-profit, for the time this will result in an appearance in the credits as part of the staff.


    So, from this development blog we appeal to all creative neurons to participate actively in the game's development, how?
    • Send sketches or models!
    • Ideas:
      • What do you like of the game?
      • What do you dislike?
      • What would you change?
    • You are a musician who wants to hear your own music in a videogame? what are you waiting for!
    Anyone who shares our enthusiasm to create a good game and who wants to practice their skills in drawing, modeling, animation, music, FX, etc.., leave your comments on this post :-).

      jueves, 22 de abril de 2010

      QYK Development (I): Architecture

      (-- English Below --)

      ¿Como estamos estructurando el código de QYK? 
      Pues como dijo un gran sabio, un sitio para cada cosa y una cosa para cada sitio.

      El código lo tenemos divido en librerías, las cuales tienen un manager que son las fachadas de estas librerías.
      Las librerías tienen que ser claramente diferenciables entre ellas por su función en el código, así tenemos:
      • Eventos: Se encarga de todo el input.
      • Render: Es la librería gráfica. Utilizamos OpenGL para facilitarnos la tarea.
      • IA: Aqui definiremos todas las funciones que tengan relación con la Inteligencia Artificial. Ejemplos de estas funciones pueden ser el pathfinding A* o el comportamiento de los enemigos (PNJs).
      • Internet: Es la librería donde declararemos las funciones de comunicación entre los clientes y el servidor para el multijugador.
      • Animación: Aqui implementamos los timers que usamos para las animaciones así como otras utilidades. 
      • Sound: Utilizando la librería FMOD creamos las clases necesarias para tener música y efectos sonoros.
      • Fisica: Gracias a la ODE hemos creado una librería de fisicas útil para detectar colisiones y rebotes.
      • Helper: Librería especial en la que hay todas aquellas clases útiles para simplificar el trabajo de las demás librerías como puede ser una clase Vector3, o Coord2D.
      • MAIN: Y finalmente la lógica del juego. Personajes, escenarios, etc.
      Como hemos comentado antes, los managers son clases fachadas que nos permiten utilizar sus respectivas librerías sin tener que preocuparnos de como estan implementadas por dentro, así tendremos la RenderManager, SoundManager, etc. donde cada uno de estos managers estan implementados con el patrón singleton.

      ------------------------------------------------ 

      How we are structuring the QYK code?
      Well, as said a great man, a place for each thing and a thing for each place.
      The code is divided into libraries, which have a manager that are the facade of these libraries.  
      The libraries must be clearly distinguished between them for their role in the code, so we have:
      • Events: Responsible for all the input.
      • Render: Is the graphics library. We use OpenGL to do this task.
      • IA: Here we define all the functions that are related to Artificial Intelligence. Examples of these functions may be the A* pathfinding and the enemies's behavior (NPCs).
      • Internet: Is the library where we declare the communication's functions between clients and server for the multiplayer.
      • Animation: Here we implement the timers to use it for animations and other utilities.
      • Sound: Using the FMOD library, we create some classes to have music and sound effects.
      • Physics: Thanks to the ODE library we have a physical library useful for detecting collisions and rebounds.
      • Helper: Special library in which there are all those useful classes to simplify the work of other libraries such as a Vector3 class or Coord2D.
      • MAIN: And finally the game logic. Characters, settings, etc..
      As we said before, managers are classes that we use as facades of their respective libraries without having to worry about how they are implemented, so we have the RenderManager, SoundManager, etc. where each of these managers are implemented with the singleton pattern.

      martes, 20 de abril de 2010

      ¿Qué tipo de juego será QYK?

      (---English Below---)
      Con QYK: 18 Faces of Pure Amusement queremos crear una experiencia de juego multijugador divertida, accesible y que a la vez suponga un reto para los jugadores más avanzados. Pondremos mucho empeño en conseguir sobretodo una gran jugabilidad, tratando de que sea fácil manejar a los personajes e interactuar entre ellos pero metiendolos en situaciones más complicadas a medida que el juego avance.

      El videojuego mezclará varios géneros: puzzle, plataformas y, en menor medida, acción. Por el momento todos los niveles se desarrollarán en 2.5D (gráficos en 3D pero el movimiento siempre en 2D) y tratarán de plantear una serie de situaciones en las que sea indispensable colaborar entre los tres jugadores para encontrar la solución y seguir avanzando. Estas situaciones a resolver pueden ir desde conseguir saltar una serie de obstáculos, o encontrar la forma de abrir la puerta que nos impide el paso, hasta acabar con un pequeño contingente de enemigos, siempre necesitando la participación de los tres personajes y sus respectivos poderes.

      Espero que haya explicado bien que tipo de juego va a ser QYK, si quereis preguntar o proponer algo gustosamente responderemos y escucharemos vuestros comentarios.

      Saludos!

      --------------------------------------
      With QYK: 18 Faces of Pure Amusement we want to create a fun multiplayer experience, accessible but challenging for advanced players. We will put much effort to get a great gameplay, trying to make it easy to manage characters and interact with each other but putting them in more complicated situations as the game progress.

      The game will mix several genres: puzzle, platform and, to a lesser extent, action. For the moment all levels will be developed in 2.5D (3D graphics but 2D motion) and will try to raise lots of situations in which it is essential to collaborate between the three players to find the solution and keep moving. These situations will vary from jumping a number of obstacles, or find the way to open the door that blocks our way, to finishing a small contingent of enemies, always needing the participation of the three characters and their respective powers .

      I hope I have explained well what kind of game will be QYK, if you want to ask or propose something, we will be glad to read and reply your comments.

      Greetings!


      lunes, 19 de abril de 2010

      Characters (III): The Spiritualist

      (-- English Below --)

      Y finalmente, el último personaje que se podrà escoger es la Espiritualista.
      Sus habilidades especiales son:
      • Curar el alma: Aumentando la vida actual de sus compañeros a costa de su propia fuerza vital.
      • Proyección Astral: Separando su alma de su cuerpo, lo que le permite traspasar temporalmente paredes y puertas.

      Y si puede curar a los demás con su vida, ¿como recupera ella su salud? Regeneración. ¿guay eh?
       
      ------------------------------------------------
       
      And finally, the last character that you can choose is the Spiritualist.Her special abilities are:
      • Heal the Soul: Increasing the partners life at expense of his own life.
      • Astral Projection: Separating his soul from his body, allowing overstep walls and doors.
      And if you can heal others with your own life, how she regains her health? Regeneration. Pretty cool, isn't it?