Friday, January 28, 2011

Supersonic Game Engine Week 3

I guess I can't entirely say this week was productive as far as lines of code produced, but in terms of how much I have designed and learned, this week was one of the most productive in my life. Aside from starting college courses last week (18 credits) I also did a lot of homework over the weekend, and definitely learned a lot there. Oh, by the way, anyone who does not already know: One of the best ways to manage everyday activities, homework included, is something called Remember the Milk. I absolutely love this website and highly recommend it to anyone who is currently living and not scared of computers.

Well, that aside, I would like to update anyone reading this on my progress. This week, I didn't do a whole lot of coding for the Supersonic engine, but I did quite a bit of reading. I have read about quite a few different game frameworks both specifically for OGRE, and unrelated to OGRE at all. Obviously I found those ones related to OGRE quite a bit more interesting and helpful, but I picked up some basic concepts (Singletons and threading) from other articles.

One of the most interesting articles I read was the Advanced OGRE Framework tutorial on OGRE's wiki. It is basically a code listing for a nice framework for OGRE applications, and appears to be quite useful to me. What little coding I have done this week was porting that framework to Python so I could use it myself. That framework includes with it a state manager, but I opted to write my code based off (not copying word for word) a different state manager also found on OGREs wiki. With that, I now have working input!

One thing that will inevitably be essential to the creation of a game engine is a Singleton. For that matter, it has definitely been a little challenging trying to figure out how to make a singleton in Python, because it's not a built in language feature. Luckily, this was made easy by another article I found: (link found on python-ogre wiki) Singleton Metaclass. Okay, I will admit I have not taken the time to look that over and figure it out (and considering it's simplicity, it seems like it might be pretty easy; don't forget: I only started programming with Python a few weeks ago). It sure looks promising though.

My plans from this point forward are still to get some kind of simple game in the works, featuring input, terrain, movement, animation, collision, game states (menu/pause menu) and a level manager. I have never ever used shaders before, and I barely even know what they are, but if I'm up to the challenge in the coming weeks I might even check out shaders and make some kind of weird metallic guy, or I could simply add a body of water; it would be cool to have a shiny rainbow tree though! For this week I'll simply work on animation.

I sure hope I can manage when it comes to the point of creating my own content. Anyone that would like to help me with that is welcome to comment and let me know.

Friday, January 21, 2011

Supersonic Game Engine Week 2!

Supersonic! That's just what I have temporarily titled my game engine. In other news: I broke everything - then fixed it, it's fine. Also, Calc-based Physics 1, Chemistry II and Calculus III, but that shouldn't be a problem. Also, in case you weren't aware, "45% Of Students Don't Learn Much In College" and that is quite a problem. Don't worry about me though, I'll be one of the students that learns a lot.

Anyways, as far as my game engine goes, I feel like it's been a good week. I haven't put in a ridiculous amount of hours into this project, but I did come up with a name, and I consider that to be a pretty significant amount of work. The name, by the way, if you didn't get it already, is Supersonic. One of the games I kind of wanted to model was the Sonic games of late, as they are platformers obviously. Another game I am looking at is Super Mario Galaxy (great game, haven't played the sequel yet but I hear it's even better).

Oh, don't worry, I did a lot more than just come up with a name. I also broke my python-ogre build by doing something.. not sure what. Well to cut the story short I reinstalled it and it's all good. And then Andy Miller (who apparently does most of the work on the OGRE Python wrapper) updated the SVN trunk with the latest version, 1.7.2 which probably supports Python 2.7, but I'll stick with 1.7.1 and Python 2.6 for now.

Anyways, on to the real details of my Supersonic 3D game engine project. Last week I vaguely talked about what my plans were for this project, now I will vaguely talk about what my plans are. For the most part, my number one goal for this semester is to get something that works and that I can show off. In order to do this, I am probably going to use a mix of different libraries. First and foremost, and most obviously will be OGRE, but along with that I'll be using OIS, and I would like to use CEGUI but that depends on whether or not I figure out how to make it work again (because I also broke it? or it just refuses to reinstall; I needed to change the install options so I was reinstalling it, and suddenly it absolutely refused to install claiming some version discrepancy of libtool, of which the script was written in 2.2.6b and supposedly I have 2.2.6... but in truth I actually have 2.2.6b so I don't know what's going on there). Anyways, I am planning on using some kind of physics engine to start with; a couple of possibilities are ODE and Bullet, both of which integrate well into OGRE which is nice.

In the near future I might be adding an AI library, and I'll have to do something about sound, but I haven't looked into possibilities for either of those. I certainly have the resources to test and therefore develop networking capabilities as well which I might also find some library to handle for me. As I get further into the development process, I would overall like the project to have it's own physics engine and AI library and such, but I wouldn't bet on that just yet. One thing that will definitely help in the long run is to make the project extensible by plugins, in case one of the libraries I use by default is discontinued.

Well as for what I'll be working on this week: I would like to make my own working InputManager (which relies on OIS for the moment), and I'd like to be able to create a scene with a controllable, animated character. For the most part I'll simply be using the resources that come with OGRE like the robot mesh and animation, and the terrain, etc. If anyone reading this would like to check out what I have, and help me make models and other art, that would be greatly appreciated. The art would mostly be used to demonstrate the capabilities, and for testing purposes, obviously. I can survive with the resources OGRE comes with by default though, so this isn't urgent.

Well, have a good week, and tune in next week for another exciting and epic tale of Supersonic Game Engine development!

Friday, January 14, 2011

New game engine project

Well it's been a long time since I have blogged to be honest. I guess blogging isn't exactly my thing, but I'll continue. In the time since I have last blogged, I got a Droid X, I got a '97 Dodge Intrepid and I started a 3D platform game engine project for my Computer Programming class. Stay tuned for details on that game engine, and I'll also reveal my future plans for it

This post specifically is about that project. The class is going over Python, and considering my previous programming experience (years of casual reading book and articles, and once in a while playing with sample programs) Python was extremely easy for me to pick up. Something I've wanted to do for a long time is program a 3D game engine. After all who wouldn't want to do that? Well on second thought, I guess the people interested in making their own games would rather use an engine which has already been made, and matured.

Anyways, the 3D platform game engine has yet to be named as you may have noted. Right now I am building it in Python using the python-ogre library, which is simply a Python wrapper for OGRE3D.

My plans for the game engine this semester simply involve getting something that works. In my mind that entails getting the following things up and running: terrain, movement, animation and collision first, then states and a menu, and level importing. Basically, by the end of the semester I'd like to be able to import a level and all associated objects and create a 3D scene with a player (shown in third person), a couple of enemies, static entities and a couple of other dynamic entities. I would like to be able to do some very simple scripting (and with Python, this will be easy!) for the enemies, and possibly triggered events.

After the semester is over, the number of options I have to do with the project could be represented by a HUGE tree. I think the best thing to do would be to port it to C++, set up a project on source forge, make a website and then possibly advertise it a little bit to recruit a couple of other developers to help me. Obviously this is going to be an open-source project and I will primarily be developing from Ubuntu Linux. I'll have more details on future plans as things progress; I wouldn't want to build up too many dreams and then lose focus in the project. This really is a big thing for me and I hope later to make it a big thing for the world! After all, it seems that Linux and the open-source community lacks a little in the gaming market.