Ozone available on April 9th world-wide
After one year of hard coding and long periods without sleep I finished Ozone with my mates at Geardome!
Some curiosities about the game:
- 1 year of development (not full time). Although we based the game in a previous game of us (Hydrium) we started completely from scratch, both art, audio and code.
- Full 3D game engine coded in C++ and fully optimized for portable devices (iPhone, iPad, PSP, Nintendo DS…), easily portable, with cool features, effects, particles, culling, but lacks some things like materials and animation (maybe for the next game).
- 60 FPS on iPad, iPhone 3GS, and iPod touch 2nd gen and above. 30 FPS on old models.
- Fully integrated with Bullet Physics Engine for physics simulation. Bullet runs quite fast indeed! We are definitely using it in future projects.
- 3D sound based in OpenAL.
- Modular design, based in episodes. Ozone currently ships with 5 episodes but it will be easy for us to add more episodes.
- Online MySQL database for storing world wide scores.
- iPad edition is on the way.


PUZZLE STAR in your iPhone for FREE!
|
OMG! We made it! Get now the best puzzle game for your iPhone! For a limited time only PUZZLE STAR is available for FREE! Tell your friends! |
![]() |
The Music of Ozone
Hey!
We just released for free the Original Sound Track of our upcoming iPhone game Ozone!
These great ambient musics are for the genius musician David García.
First screenshots of Ozone
Ozone Development Diary (iPhone Game)
With the help of César Sampedro I have started a development diary for our latest game for iPhone and iPod Touch: Ozone.
César is the lead artist in Geardome and has previously worked in games such as Motorstorm and Clive Barker’s Jericho.
iPhone and C++ OpenGL programming
I am currently working in my last big game for the iPhone with so much to do and so few time
And during this last months I received many comments about writing a detailed post about C++ programming with OpenGL and the iPhone SDK.
Well… here it is!
I created a new OpenGL ES Application Project within Xcode.
I then added a test C++ class to the project. The trick here is to change the extension of the implementation file from “.cpp” to “.mm”, this way we can freely mix C++ code with ObjectiveC code.
I also renamed the “EAGLView.m” file to “EAGLView.mm” for the same reason. Well, in my project every implementation file ends with “.mm” to avoid headaches!
This is how the test class looks like:
class TestClass : public Singleton<testClass>
{
friend class Singleton<testClass>;
private:
EAGLContext* m_pContext;
GLuint m_uiViewRenderbuffer;
GLuint m_uiViewFramebuffer;
GLuint m_uiDepthRenderbuffer;
public:
TestClass(void);
void Init(EAGLContext* pContext, GLuint renderBuffer, GLuint frameBuffer, GLuint depthBuffer);
void Cleanup(void);
void Update(void);
private:
void BeginRender(void);
void EndRender(void);
void DrawSomething(void);
};
As you can see, the class is a singleton for simplicity and convenience.
Then I changed the “createFramebuffer”, “destroyFramebuffer” and “drawView” methods of “EAGLView.mm” in order to call the wrapper methods of our test class.
- (BOOL)createFramebuffer {
glGenFramebuffersOES(1, &viewFramebuffer);
glGenRenderbuffersOES(1, &viewRenderbuffer);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
[context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:(CAEAGLLayer*)self.layer];
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, viewRenderbuffer);
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth);
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight);
if (USE_DEPTH_BUFFER) {
glGenRenderbuffersOES(1, &depthRenderbuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, depthRenderbuffer);
glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT16_OES, backingWidth, backingHeight);
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, depthRenderbuffer);
}
if(glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES) != GL_FRAMEBUFFER_COMPLETE_OES) {
NSLog(@"failed to make complete framebuffer object %x", glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES));
return NO;
}
TestClass::Instance().Init(context, viewRenderbuffer, viewFramebuffer, depthRenderbuffer);
return YES;
}
- (void)destroyFramebuffer {
TestClass::Instance().Cleanup();
glDeleteFramebuffersOES(1, &viewFramebuffer);
viewFramebuffer = 0;
glDeleteRenderbuffersOES(1, &viewRenderbuffer);
viewRenderbuffer = 0;
if(depthRenderbuffer) {
glDeleteRenderbuffersOES(1, &depthRenderbuffer);
depthRenderbuffer = 0;
}
}
- (void)drawView {
TestClass::Instance().Update();
}
You can wrap the input methods of “EAGLView.mm” in the same simple way.
And I’m afraid that’s all folks
You can grab the full source code from here.
Hope this helps!
Ozone Teaser Trailer (iPhone and iPod Touch)
This fall your iPhone will never be the same…
Chip-8 Emulator for iPhone and iPod Touch
I have been working for a week in a project for iPhone and iPod Touch.
I ported the Chip-8 Emulator I already did for J2ME enabled cell phones to the Apple handhelds.
Chip-8 is an interpreted programming language used on the COSMAC VIP and Telmac 1800 8-bit microcomputers in the mid-1970s.
I decided to release the emulator completely free, bundled with several public domain games!! Get it from here.
Puzzle Star available on the App Store!
I am proud to announce that Puzzle Star is ready to download on the App Store, available for iPhone and iPod Touch!!
Get it here!!


