June 6th, 2008

Shoot 'Em Up with LWJGL

I started to think about writing a Shoot 'Em Up back in 2005, after the winner of the "Horizontal Shooter with Boss" competition was kind enough to release his source code. This "Carmack" moves triggered the challenge ; Being a server-side programmer for a while, I had no freaking idea how do program something which was....moving. It was the perfect occasion to learn:    Thanks Mr "X-Out".

My objectives were:


It is usually wiser to jump into a new domain without adding the difficulty of learning a new language So I decided to use my favorite at this time: JAVA. For the rendition, I had two OpenGL binding available JOGL and LWJGL.

Why did I decide to go with LWJGL ? Because at this time it featured a lot more than openGL calls, there was everything I needed including: Inputs controls, Textures loading, Sounds, Timer, etc. LWJGL was clearly more game oriented.

One more thing.....

This is not a game and I never intended to program one, this is more like a proof of concept/challenge I felt like coding, a little bit to learn, a little bit to check how much juice could come out of JAVA+OpenGL. I took me a month of spare time and this is the result. I don't have the pretension to think this is good but I've learned so much reading people's webpage that I thought I should modestly return to the net a little bit of what it gave me.

April 5th, 2010 : It seems there is an issue with the last JRE 1.6 on windows platforms. ImageIO.read is loading PNGs as AGBR instead of RGBA. I am not sure if it's a JVM bug or if the PNG are not compliant and I lack time to investigate :/, if anyone have some time to investigate, feel free to email me !

Nov 20th, 2010 : Looks like "JAVA Prototyp" engine is used for Thunder Force IV Rebirth (video). Keep up the good work guys ;) !

Feb 2th, 2011 : The win32 JRE 1.6 "color" bug is no more. Thanks to sonicWonder for sending me a fix (The texture loaded now detected the format returned by ImageIO.read and swap if necessary BufferedImage.TYPE_4BYTE_ABGR or BufferedImage.TYPE_3BYTE_BGR). Swapping is done with XOR instead of using a third variable.

Run it, source code and video