Click here to Skip to main content
14,920,488 members
Articles / Programming Languages / C
Posted 10 Apr 2008


97 bookmarked

IndieLib - Fast Game Development

Rate me:
Please Sign up or sign in to vote.
4.65/5 (33 votes)
4 Jan 2009CPOL5 min read
IndieLib is a C++ 2.5d engine for game development and fast game prototyping in a really easy way.



I'm really excited to announce the first release of IndieLib game engine. It has been a lot of hard work for several years during which I have been working on this project. What started as a hobby has become quite a robust 2d engine that I think can be useful for the gamming community, specially for the indie game developers. Because of that, I want to offer it to all of you for free, hopefully it will be useful for some of you.

The main purpose of IndieLib is to make things easier for the game developer, especially for those of you that love trying new game mechanics and fast game prototyping. I was really shocked for the brave guys of the Experimental Gameplay Project and the things that I see everyday on TigSource or in these forums. After seeing what these developers were able to do in just one week, I decided to start working again in an old project called LooverLib and tried to pack in the same engine a lot of useful features for being able to make games really quickly using C++. What I wanted was that anybody that knows a little bit of programming would be able to give expressions to their ideas faster and more easily. I know this first release hasn't accomplished completely this purpose, but I hope to be on the correct way.

IndieLib is a C++ 2.5d OpenSource engine for game development and fast game prototyping in a really easy way. Internally it uses Direct3d for hardware acceleration, but doesn't use DirectDraw or ID3DXSprite, it directly draws textures on polygons. The engine is focused on fast 2d rendering, but also allows you to use 3d models. Here you have a list with the main features:

  • Simple interface and extreme easiness: really fast game prototyping using entities for each of the graphical objects and changing their attributes. All the methods are as simple as "SetPos", "SetCollisionArea", "SetFade", "SetTransparency", etc.
  • Translations, rotation, mirroring and scaling of sprites.
  • Alpha blending, transparency, tinting and fading of sprites.
  • Render images of any size (not only power of two). You can load images as big as 10000x10000 pixels or more, and IndieLib will cut them internally in smaller blocks. Furthermore, IndieLib will automatically discard all the blocks out of the screen, also if your sprites are transformed and the camera making a zoom or rotated, only what you see is what is going to be rendered.
  • SetGrid method in order to create grids for your sprites. Later you can move each grid point in order to make a lot of different effects like waves (like in Aquaria game), deformations, etc. (Thanks Alec for the advice :)).
  • 2d and 3d camera concepts, completely independent of the graphical objects. Easy methods to translate, rotate or zoom you camera.
  • Easily creation of several viewports. Just create as many viewports as you want using different cameras assigned to them. This is really useful for making widescreen games, etc.
  • Scrolls of any size, with automatic block discarding.
  • Animation system using XML animation scripts, for defining the frames and sequences.
  • Advanced collision system. Create an XML file defining your collision areas per sprite using circles, rectangles or triangles. You can define as many collision groups as you want, each one with a different name. Join this file to an entity object and check collision between the collision groups of other entities. Don't worry about translating, rotating or scaling your entities, the collision groups will always fit perfectly your entity. You can also have sprite animations in which each frame has different collision groups (imagine this feature in a "Street Fighter" type game).
  • Bitmap font system, for drawing graphical texts of fonts created with MudgeFont for IndieLib. Change the alignment, char spacing and line spacing easily.
  • Rendering of 3d Meshes (you can mix 2d and 3d easily). You can also apply transformations to them (rotation, scaling, fading, etc). This will allow you to make games like "New Super Mario Bros" in which the characters are 3d models and the scenario is 2d.
  • Light manager, for lighting your 3d models. Enable / Disable lights, change their attributes, etc.
  • Timers. Start, stop, pause them easily.
  • Entity class, for both 2d and 3d objects, for managing the graphical objects in a really easy way. Just create an entity, join a graphical object to it, an change its attributes (space transformations, color transformations, etc.).
  • Image class, for loading / saving different types of image files and for accessing the bitmaps directly. You can also apply filters to the images like gaussian, noise, equalize, saturation, etc.
  • Direct blitting of primitives (rectangles, circles, polygons, lines, etc.).
  • Mouse and keyboard input (using SDL). Check if any key/button has been pressed, is being pressed or has been pressed more than n milliseconds. Check combination of keys/buttons that are pressed at the same time.

There are more things explained in the FAQ and you can get the source code under LGPL license from the repository.

Do you want to see the engine in action? Well, you can just check some screenshots or to download the IndieLib_SDK and to run the tutorials that are already compiled and ready to try (you don't need to know anything about programming for clicking the .exe and see the demo tutorials ;), try to press arrow keys and mouse buttons / wheel, because some of them are interactive).

But an engine is nothing without documentation. For that, I spent a lot, a lot of hours documenting all the methods (I hope I didn't make too many mistakes in English) and making some tutorials (more will come along these months):

I really hope that the engine will be useful for some of you and that you will make incredible games using it. I invite all you to join our forum, and I would be really happy if some of you want to contribute in helping me.

Just click and download the latest IndieLib_SDK (It includes the IndieLib binaries, the tutorials source code and .exe, and the documentation). Start making games!

Javier López

P.S.: Sorry for the mistakes I'm sure I made, I'm not very good at English.



This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Spain Spain
No Biography provided

Comments and Discussions

QuestionSome questions Pin
Dávid Kocsis27-Nov-11 6:14
MemberDávid Kocsis27-Nov-11 6:14 
GeneralMy vote of 2 Pin
Philip.F11-May-11 2:08
MemberPhilip.F11-May-11 2:08 
GeneralYou should improve the article. Pin
CPallini8-Jan-09 7:10
mveCPallini8-Jan-09 7:10 
GeneralMy vote of 1 Pin
PatLeCat5-Jan-09 0:54
MemberPatLeCat5-Jan-09 0:54 
GeneralMy vote of 1 Pin
Johann Gerell4-Jan-09 23:20
MemberJohann Gerell4-Jan-09 23:20 
RantRe: My vote of 1 Pin
PatLeCat5-Jan-09 0:54
MemberPatLeCat5-Jan-09 0:54 
GeneralCool,I love it! 5 Pin
eleqi30-Oct-08 9:43
Membereleqi30-Oct-08 9:43 
GeneralRe: Cool,I love it! 5 Pin
Loover31-Oct-08 5:02
MemberLoover31-Oct-08 5:02 
GeneralExcellent Pin
vikas maan24-Aug-08 19:23
Membervikas maan24-Aug-08 19:23 
GeneralRe: Excellent Pin
Loover30-Oct-08 3:49
MemberLoover30-Oct-08 3:49 
GeneralNo source - This is advertisement Pin
xryl66922-Apr-08 22:51
Memberxryl66922-Apr-08 22:51 
GeneralRe: No source - This is advertisement Pin
Loover30-Oct-08 3:48
MemberLoover30-Oct-08 3:48 
QuestionPretty good and ... Pin
soho22-Apr-08 22:13
Membersoho22-Apr-08 22:13 
Generalreally nice code. thank you. Pin
breakind11-Apr-08 19:49
Memberbreakind11-Apr-08 19:49 
GeneralGreat work Pin
Satervalley11-Apr-08 16:50
MemberSatervalley11-Apr-08 16:50 
GeneralGreate Effort Pin
Manoj Sahu11-Apr-08 5:22
professionalManoj Sahu11-Apr-08 5:22 
GeneralRe: Greate Effort Pin
Loover11-Apr-08 5:41
MemberLoover11-Apr-08 5:41 
GeneralRe: Greate Effort Pin
Loover11-Apr-08 5:51
MemberLoover11-Apr-08 5:51 
GeneralRe: Greate Effort Pin
Manoj Sahu11-Apr-08 7:48
professionalManoj Sahu11-Apr-08 7:48 
GeneralNice! Pin
Chunlong lin11-Apr-08 1:53
MemberChunlong lin11-Apr-08 1:53 
GeneralRe: Nice! Pin
Loover11-Apr-08 2:32
MemberLoover11-Apr-08 2:32 
GeneralPlease make downloads available on top and from this site Pin
peterchen11-Apr-08 1:15
Memberpeterchen11-Apr-08 1:15 
GeneralRe: Please make downloads available on top and from this site Pin
Loover11-Apr-08 2:30
MemberLoover11-Apr-08 2:30 
GeneralRe: Please make downloads available on top and from this site Pin
Jim Crafton11-Apr-08 3:20
MemberJim Crafton11-Apr-08 3:20 
GeneralRe: Please make downloads available on top and from this site Pin
Loover11-Apr-08 5:49
MemberLoover11-Apr-08 5:49 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.