IndieLib es uno de esos proyectos que empecé por amor al arte, en el que he ido trabajando en ratos libres durante más de 6 años y que se ha convertido en un proyecto open source, con una pequeña comunidad que aporta contenidos y colabora conjuntamente enriqueciéndolo constantemente. Si te gusta el desarrollo de videojuegos, te gustará IndieLib.

¿Qué es IndieLib?
IndieLib es un motor 2.5d en c++ para el desarrollo rápido y prototipado de videojuegos, de forma muy sencilla y pensado tanto para iniciados como para profesionales.
Usa Direct3d para aprovechar la aceleración por hardware, pero no usa DirectDraw o ID3DXSprite, directamente pinta los sprites sobre polígonos, de forma totalmente transparente para el usuario sin que este tenga que preocuparse de que sus sprites estén en potencia de 2 o sean de tamaño mayor que el ancho de textura máximo permitido por la tarjeta. El motor está pensado para el renderizado rápido 2d, pero también permite el uso de modelos 3d. Las principales características de IndieLib son:
- Interfaz extremadamente sencilla: desarrollo rápido de prototipos de juegos mediante el uso de entidades para cada objeto gráfico a las que se les puede cambiar sus atributos (posición, escalado, rotación, entintado, regiones de colisión, transparencia, etc). Todos los métodos son tan sencillos como “SetPos”, “SetCollisionArea”, “SetFade”, “SetTransparency”, etc.
- Traslaciones, rotaciones, espejados y escalados de sprites.
- Alpha blending, transparencias, entintados y fading de sprites.
- Renderizado de sprites e imágenes de cualquier tamaño (no sólo potencia de dos). Puedes cargar imágenes tan grandes como 10000×10000 pixels o más, e IndieLib se encargará de cortarlas internamente en bloques de forma totalmente transparente para el usuario. Además, IndieLib descartará automáticamente los bloques que queden fuera de la pantalla, incluso si tus sprites están transformados y la cámara está haciendo un zoom o rotada. Sólamente lo que ves, es lo que se renderiza.
- Método SetGrid para crear grids para tus sprites. Tras asignar un grid, puedes mover cada punto del mismo para efectuar distintos efectos de morphing, como efectos de ondas de agua, etc.
- Cámaras 2d y 3d, totalmente independientes de los objetos gráficos. Con métodos sencillos para trasladarlas, rotarlas y hacer zoom. Imagina poder colocar tus objetos gráficos (sprites o animaciones) y poder mover la cámara libremente para hacer scroll y zoom sin que esto afecte a dichos objetos.
- Creación sencillísima de viewports (regiones de vista). Crea tantos viewpors como quieras usando diferentes cámaras para cada uno. Con esto podrás hacer de forma muy sencilla juegos a pantalla partida, mapas, etc.
- Scrolls de cualquier tamaño, con descarte automático de bloques.
- Sistema de animaciones por script usando XML, para definir frames y secuencias.
- Sistema avanzado de colisiones 2d. Crea un archivo XML definiendo las áreas de colisión por sprite, usando círculos, rectángulos y triángulos. Puedes definir tantos grupos de colisión como quieras agrupando dichas áreas, cada uno con distinto nombre y luego chequear si ocurren colisiones entre los grupos de áreas de dos sprites distintos. No te preocupes por trasladar, rotar o escalar tus entidades, los grupos de colisión siempre se ajustarán a la perfección al sprite. También puedes tener animaciones de sprites, en los que cada frame tiene distintos grupos de colisión (imagina la facilidad de aplicación que tiene esto a la hora de desarrollar un juego tipo “Street Fighter”, con este sistema podrías definir áreas para la cabeza, pies, puños de los jugadores, y chequear colisiones entre ellos).
- Sistema de fuentes (bitmap), para dibujar textos gráficos creados con MudgeFont. Cambia su alineación, espaciado entre caracteres y entre líneas de forma sencilla.
- Renderizado simple de modelos 3d (puedes mezclar elementos 2d y 3d de manera muy sencilla). Puedes así mismo aplicar transformaciones a dichos modelos (rotaciones, escalados, fading, etc). Esto te permitirá hacer videojuegos como “New Super Mario Bros”, en los que los protagonistas son modelos 3d y los escenarios 2d.
- Manager de luces, para iluminar los modelos 3d. Activa / desactiva luces, cambia sus atributos, etc.
- Timers. Para comenzar, parar y pausar el tiempo fácilmente.
- Clase entidad, tanto para objetos 2d como 3d, para manejar los objetos gráficos de una manera muy sencilla. Simplemente crea un entidad, asignale un objeto gráfico (como un sprite o una animación) y cambia sus atributos (rotaciones, escalados, entintados, etc). Increíblemente útil para prototipar un juego en cuestión de minutos.
- Clase Imagen, para cargar / grabar diferentes tipos archivos de imagen y acceder a los bitmaps. Puedes aplicar filtros tipo photoshop como difuminados, ruido, ecualización, saturación, etc.
- Dibujo de primitivas (rectángulos, círculos, polígonos, líneas, etc.
- Input de ratón y teclado. Chequea si un botón ha sino presionado más de n milisegundos. Chequea combinaciones de botones presionados al mismo tiempo.
¿Cuál es la licencia de IndieLib?
IndieLib es un proyecto open source, bajo la licencia LGPL. Puedes acceder al repositorio desde aquí.
¿Está IndieLib documentada? ¿Existe un foro donde postear mis dudas?
¡Definitivamente sí, y me ha llevado muchísimo tiempo! Toda la documentación está en inglés, en un intento de hacer llegar la librería a una mayor audiencia. Consulta estos links:
¿Qué necesito para desarrollar una aplicación hecha en IndieLib?
Lo primero que necesitas es un entorno de programación. IndieLib está compilada en Visual C++2008 Express Edition (un entorno gratuito). También necesitarás la SDK de DirectX, que IndieLib usa para renderizar los objetos gráficos usando aceleración hardware. Lo último que necesitas es, por supuesto, el SDK de IndieLib. Puedes consultar el primer tutorial del wiki para tener un paso a paso de la instalación.
¿Es IndieLib portable?
IndieLib utiliza Direct3d para el renderizado. Por lo tanto, desafortunadamente, no es portable a Mac o Linux. Separar el render en un plugin es algo que se está planteando para el futuro, con lo que se podría comenzar la portabilidad.
¿Tiene IndieLib un engine de sonido?
No, ya existen librerías excelentes para eso. Por ejemplo OpeanAl o SDL_Mixer. En el foro hay algunos ejemplos de integración de dichas librerías.
¿Quién es el desarrollador de IndieLib?
El autor de este blog, Javier López López, un desarrollador de juegos independiente / programador / infografista / diseñador de productos, que le apasionan todos los temas relacionados con el arte digital, el desarrollo y diseño de juegos y la web 2.0.
Puedes leer más sobre IndieLib en su web oficial y en este blog.







