Well, Starflash 2 has officially been released for several months now. Our first engine developed end-to-end from scratch. We have now formerly dissolved our old name - Lit, LLC - and plan on working on the next iteration of the page engine under a new name.
We are going to be releasing Starflash 2-RC1 today! changes include:
- Main menu now scales buttons so you know which you are pressing.
- Pause button doesn’t get obfuscated by the dark overlay of the main menu.
- Achievements and game balancing.
- Changed some sound effects.
- Slight changes to star animations when they are hit.
- Added more menu options including Achievements, and Sound muting.
- iOS OpenFeint opens to appropriate screen for leader boards and achievements (doesn’t just open the dashboard).
- Achievements fully implemented in android and iOS.
- Fixed threading issue that caused crashing on android when input happened at critical moments.
Page has made significant strides! I know I haven’t posted in forever but things have been pushing forward. Here is a quick overview on the engine details.
- Component based engine where entities are just an amalgamation of individual components (no base entity container class where the components are stored).
- Achievements! Currently implemented through OpenFeint but the wrapper we use is platform agnostic and very portable.
- Speaking of portable, Page currently support Android and iOS. However, we do have experimental builds for Linux and Windows. Mac OS X support is not far behind but we will probably not be seeing supported PC ports of nay type until the first major refactor of the code.
- Starflash 2! Starflash was my first finished and publicly released game. It is a simple puzzle game I wrote using Cocos2D to learn both general game coding and Objective-C. On the other hand, Starflash 2’s purpose is to utilize, improve and test the existing functionality of the Page engine. Starflash 2 utilizes pretty much all the core component of Page.
Page is broken up into many main components so I will list them off here:
- Main engine written in C++ with certain binding and wrappers as required for system specific functions such as native logging facilities, audio and window management.
- The engine uses OpenGL 1.2 for all rendering. The next iteration will upgrade to OpenGL ES 2.0 for mobile platforms and OpenGL 3.x for PC platforms.
- Component Entity system. While the component are not contained in an entity class, we do still have an entity class. The entity class has 2 main functions. The first is that it stores the entity’s id which is how it is reference throughout the engine. The second is that it holds the entity’s frame which hold the position in space and the dimensions of the entity. We went with this approach because initially entities di not have ID’s and held significantly more state of the entity. We realized this was the wrong approach so we added the ID and started removing functionality away from the entity and into components. So as it stands our entity class is mostly kept for legacy reasons. We will be removing the entity class entirely in the next iteration.
- Audio. Our audio system is a loose wrapper around basic audio functions such as playing a sound effect or a song. The implementation is platform specific at the moment and will remain so to a degree as the available audio libraries differ from platform to platform.
- Achievements! Achievements are small classes that contain just enough logic and/or state to determine when they should progress or be unlocked. The call an “unlock” method which its implementation is platform specific. For example, on Android it call upon OpenFeint’s java api. PC will use steam’s, etc. The Achievements are platform agnostic enough to where we will be able to record and access the achievements like in Mass Effect 1/2 for the user experience while also interfacing with the users preferred achievement platform (it would even sync across multiple platforms if desired).
- UI. We have support for basic UI widgets such as buttons, labels and sorted menus. That is all we needed for our first game and more work is obviously needed for future games as it is quite limited right now.
- Event System. Anything can fire off and listen for events. As such, events are used as our primary messaging interface right now. It’s good for our existing needs but we will probably improve upon it in the near future.
Well, that’s it for now. There is much more to say but I just wanted to get something out there :) And for those interested. We will continue to publish beta builds at our site datamachine.net
I have gotten low latency sound effects working in our engine. As usual, I merely stood on the shoulder’s of giants. That is to say I am using OpenAL :) OpenAL is an interesting thing. My first time using it was in my Sonify (renamed Sonice) project. In Sonice, I managed to get basic functionality of the library up and running but at the time I was so naive. I wrapped the api in a nasty mess of objective-c and AudioToolbox calls that, while giving me functioning code, ended up teaching me nothing about the nature of the library itself.Fortunately this time around, I went out of my way to actually read OpenAL’s official documentation. Namely, the OpenAL Programmers Guide. This time around things came out much more elegantly and perhaps more importantly, I actually understand the nature and use of the library :) Admittedly, what helped me out a lot was my continually growing familiarity with OpenGL as they share many of the same paradigms. Related, I discovered a great solution for supporting an OpenGL layer in landscape mode on iOS. But that will be for another post.
Our team has been coming together stronger now. We have started a wiki to document our design ideas and the site is in for a redesign soon. We already have a number of designs in development, with some ideas more complete than others :)
In other news, I’ve been working on coding the framework for the user interface. Layered, scaled and textured user interface elements are now support as well as basic state so things like dragging windows around works properly now.
Furthermore, we have decided that we will use ogg vorbis as our main sound format and Surye has started getting to work on using Tremor for decoding.
I have been experimenting with using a component based entity system to use the in the next game I am developing. So far, I am really enjoying it. I have the underlying system working and have created a number of proof-of-concept working examples such as message passing, event handling, scheduled actions and so forth. My next focus is to implement a basic GUI system so that I can have the required in-game controls needed to implement and focus more on the core game. On that note, my next project is planned to be a simulation game but more on that later.
More and more I realize that I do not quite fill the role of a web designer. This would explain the deliciously solid colors on litsoft.net :)