|
||||||||||||||||||
Add Forum to Favorites | Send Topic To a Friend | View Forum FAQ | Track this topic |
Last Thread Next Thread ![]() |
| A Hobbyist Game Engine Post Mortem |
|
![]() Gaiiden GDNet Content Lead Member since: 8/30/2000 From: Lincroft, NJ, United States |
||||
|
|
||||
| Author Bio I am a hobbyist programmer since the dark ages of home computers (started out with ZX80 and dreamt at that time about Apple IIe - now on PCs). I have programmed on different platforms (ZX81, Thomson TO5, AMSTRAD CPC 464, IBM PC 286 to Pentium single Core) with different languages (Basic Mallard, Z80 assembly, x86 assembly, QBasic, Pascal, C, C++, Forth and a little Java). I realize small applications either to learn a new technique (proof of concepts) or to realize small games for my own fun. In my daytime job, I am a financial markets back office assistant manager and a financial information system project manager for a french bank since 1996. The cycle of development is akin to the one of the video game industry since the information system must be adapted at least every 6 months for new products and new financial reports (either by developing new programs and processes or re-factoring ancient ones). |
||||
|
||||
![]() lol Member since: 6/18/2007 From: Sterling |
||||
|
|
||||
| Is that the starship Enterprise (from Star Trek) in the screenshot? |
||||
|
||||
![]() Red Ghost Member since: 4/18/2002 From: Paris, France |
||||
|
|
||||
| Hi, Yes it is the Enterprise. The Model comes from the tutorial site at: paulyg.f2s.com/objects.htm This is to test a wargame in development before developping my own starship models. Ghostly yours, Red. |
||||
|
||||
![]() omr Member since: 6/4/2006 From: Ronneby, Sweden |
||||
|
|
||||
| Oh man! Even I got stressed when reading the article. It should be quite tough work. But the most important thing for me in this project is you somehow finished what you have started. It's quite difficult for a single person to make a 2 year project and continue it day by day. Ah, what can I say more? Well, done and keep up the good work. |
||||
|
||||
![]() Numsgil Member since: 7/18/2002 From: San Francisco, CA, United States |
||||
|
|
||||
| 5000 hours over 2 years... that's like 50 hours a week. Which, assuming you're employed full time as well, means you essentially went to work, worked on your engine, and slept, and that's it, for like 2 years. That's a lot more blood, sweat, and tears :) kudos. Darwinbots, leading amateur artifical life simulator. |
||||
|
||||
![]() Red Ghost Member since: 4/18/2002 From: Paris, France |
||||
|
|
||||
| Whoops, my bad ! You are right, I made an typo in my total number of hours. You should read more than 1500 hours instead of more than 5000 hours. I had about 2 hours per day during 2 years. Looking back at my time track, I used a little more than 1500 hours since there are holidays and week-ends when I could spare a little more time. Thanks for pointing that out. Ghostly yours, Red. |
||||
|
||||
![]() SaurabhTorne Member since: 1/31/2003 From: India |
||||
|
|
||||
| Hi, there are a lot of similarities I found in your article.Though I did not design a complete engine but a mix of both engine and games. I started GD with Jim Adams libraries and manages to make a few games though I did not complete (polished them to be looked at) them but are pending to do. Later I borrowed other engines for making complete games and I somehow completed a couple of games. And I agree that moral is very important. Also its better to focus on any one part of engine and import libraries for other modules. Modular programming is a must in GD and you have probably done it in the engine. I want to add that I was quite confused when you said "capitalize" oops,hehe. I strongly feel that making a game engine is like designing the infrastructure for 'The potential game' that will be made and capitalized upon due to the creativity and innovation. Very few people ever complete an engine. Its very difficult to decide when to stop once we are in, as the brain seems to keep developing at the problems at hand. Its always easy to stop and move around to something new, but the energy, time and moral spend in making the game simply motivated even more to complete it further. Saurabh Torne Pyrocute.com |
||||
|
||||
![]() Numsgil Member since: 7/18/2002 From: San Francisco, CA, United States |
||||
|
|
||||
| Ah, 1500 hours sounds far more human :) Darwinbots, leading amateur artifical life simulator. |
||||
|
||||
![]() Gaiiden GDNet Content Lead Member since: 8/30/2000 From: Lincroft, NJ, United States |
||||
|
|
||||
Quote: Fixed |
||||
|
||||
![]() Jack9 Member since: 2/5/2006 From: Fullerton, CA, United States |
||||
|
|
||||
| What kind of GUI framework did you use to create, manage, and change the interface (if any)? |
||||
|
||||
![]() Red Ghost Member since: 4/18/2002 From: Paris, France |
||||
|
|
||||
| @Jack9: Hi, The GUI architecture is a mix of existing architectures and my own derived ones. My references were: - Microsoft Windows architecture - Gamedev article: www.gamedev.net/reference/programming/features/gui/ - MUI: www.opengl.org/resources/code/samples/glut_examples/mui/mui.html - AntTweakBar: www.antisphere.com/Wiki/tools:anttweakbar (that one is a must and I use it for ingame modifications - better than developping a console). - my own GUIs written for DOS system and Windows system. Before committing to writing my own GUI, I defined my needs. My needs for this engine were: - limited input devices: mouse, keyboard for common keys (function keys, SPACE, ENTER, CTRL, SHIFT, ALT, Page Up and Down, Directional keys and Numeric keyboard). - messenging system, no callback functions. - few widgets: label, picture, button (normal, check box and radio), panel, progress bar. - widget API to extend the base number of widgets. - externalized parameters for UI look and feel to avoid recompilation when changing the look and feel. Information externalisation: The widget rendering description is stored in a parameter file. This file holds the GUI font reference, the GUI texture reference, the description of the GUI texture to be able to display all widgets and dialogs in all their different states. The dialog resource file is a separate file format which only describes each dialog content. Dialog position is expressed in pixels while widget position and size are expressed in characters (so that a dialog display is always in proportion with the font). The main GUI API: - used to load in the widget rendering description. - used to load in the dialog resource file. - used to register a callback messenger ID at a specific widget from a specific dialog. - used to render all dialogs and process Controller events. - used also as a dialog and widget factory (for existing widgets) and also to register user defined widgets to existing dialog boxes. As you can see, this is a very simple system easily manageable I developped. @Saurabhtorne: I strongly feel that making a game engine is like designing the infrastructure for 'The potential game' that will be made and capitalized upon due to the creativity and innovation. This is very true and mentionned by Nate Miller in his article on flipcode: www.flipcode.com/archives/Building_A_Game_On_Your_Own.shtml This is why I focused the engine on the kind of games I write and the source codes I already had. Ghostly yours Red. |
||||
|
||||
![]() a_insomniac GDNet+ Member since: 10/1/2000 From: Novi, MI, United States |
||||
|
|
||||
| What a phenomenal feat. Kudos to you!...Awesome read :) |
||||
|
||||
![]() d000hg Member since: 1/21/2002 From: Durham, United Kingdom |
||||
|
|
||||
| Sounds like you followed a good approach: using UML first, prioritising bug fixes, refactoring, etc. I was very surprised when it seemed like you had no version control system, other than a text file to detail your changes? Did you really not set up a CVS/SVN repo - I'd be terrified not to on any project taking more than a week or so! |
||||
|
||||
![]() Gaiiden GDNet Content Lead Member since: 8/30/2000 From: Lincroft, NJ, United States |
||||
|
|
||||
| UML does indeed totally rock, and helped me stay on track back when I was working on my SDL engine several years ago. Here's a chart outputted by Enterprise Architect. ________________ Drew Sikora President, Programmer - Blade Edge Software Executive Producer, Newsletter Editor - GameDev.net Community Relations, Live Events Mngr - Game Institute IGDA Chapter Advisor - New Jersey |
||||
|
||||
![]() fsteveb Member since: 10/10/2006 From: Tallahassee, FL, United States |
||||
|
|
||||
| Can you share how you planned/broke up the physics part of it? There is so many pieces that make up this part. All these pieces also need to be tightly integrated into many areas of the engine. Getting realistic physics and skeletal animation is a whole subject unto itself. What editor/tools did you find you needed to develop. Also has this engine been made available in source form anywhere? Maybe a codeproject or sourceforge project? Steve |
||||
|
||||
![]() jezham Member since: 1/12/2008 From: Plymouth, United Kingdom |
||||
|
|
||||
| Well done finishing, that is very inspiring to me. The last sentence of the article almost had me glimpsing in to the future imagining final moments of my own project! |
||||
|
||||
![]() Red Ghost Member since: 4/18/2002 From: Paris, France |
||||
|
|
||||
| @d000hg: I confirm I did not have a CVS/SVN repo. However I had two versions of the engine: - a test version compiled as a program: used as a soap box to test any added feature and modifications. - a stable version compiled as a library: when the test version was stable and completely debugged, the code was copied over into the stable version directory. When the library was compiled, it was linked against all examples. If any one posed problem, I would analyse the problem and then program a solution in the test version. If the test version was too buggy or unstable, I would reset it with the stable version code. This is very easy to do as a lone developper. If I were in a team however, I would certainly take the CVS approach. Still, even with source control, I would maintain a separation between test and stable version so that I have something that works I can present at any time to testers (this is inherited from my work where we use three different environments: test, validation and production - modifications can only be made in the test environment). As to UML (or any other method for architecture description), it is mandatory for such a large project. I personally prefer having plans when I want to build a house. @fsteveb: Regarding the physics part, the needs were very simple: - skelettal animation (the code I wanted to refactor is already featured in an article on gamedev - have a look into my profile) - navmesh management I could have used existing Physics libraries, but they had too many features for the goal I had: realize simple turn based wargames and/or simple RPGs (like FF7 for the technical part). I broke the physics part into: - math classes (vertex, vector, matrix, quaternion, plane, ray) - bounding object class (for collision between bounding objects and collision between ray and bounding object) - base mesh class (common to hold a model part and navmesh data, and to handle ray/mesh collision) - refactor existing code base for correct model skelettal animation. - refactor existing code base for navmesh navigation interface (handles bounding object/navmesh collision). Integration with the rest of the engine was made through fitting the messenging system to send events when collision occured. The editors I needed for my engine were all linked with the resource management: - a particle editor (to create/modify particle systems) featured in the article - a sprite editor (to create/modify sprites) - a model editor (to modify model underlying resources and animations, and convert into binary format) featured in the article. I bought the Milkshape modeler to make my own models. - a simple bitmap file format converter. - a map texture editor featured in the article. Since I did not have much time, I created these editors using HotBasic (www.angelfire.com/space/netcensus/hotbasic.html) for Microsoft Windows UI interface and a compiled C++ DLL for the editor mechanics using the engine. For a game I am writing using my engine, I will develop a simple scenegraph editor to be able to build a model from multiple parts and save into Milkshape format, and build a scene and save into the engine scenegraph format. I will also try to develop a dialog editor. These are the last editors I am needing. The engine is not available anywhere for the moment. Compared to most competitors, it is inferior in most of its features. There are many freely available engines on the net you can use which are technically superior to mine (a glance at the stickied post in the Alternative Game Libraries forum will confirm this). I wouldn't mind sharing if people are interested in features unavailable anywhere else. @all: The picture with the Enterprise spaceship is a turn based wargame. It is currently in development using the current engine. When it will be sufficiently advanced, I think I will post an IOTD to show progress. If you have any questions on this engine, feel free to post them on this thread. I will try to answer them all. Ghostly yours, Red. [Edited by - Red Ghost on October 16, 2008 7:06:54 AM] |
||||
|
||||
![]() pcostasgr Member since: 9/15/2007 From: Thessaloniki, Greece |
||||
|
|
||||
| This is a great article cause there are many people including me who are trying to write a 3d engine in their spare time .I am a software engineer but in a different field than 3d graphics,my professional interests are oracle development and ERP software and my spare time is little and divided among diffrent things. Yeap we do a lot of things wrong in our engines but remember we are not pros in the field and the majority of us search all info alone (not to mention the books from amazon.com u know what I mean ). There are great homebrew engines out there and not forget the mod community, a lot of excellent stuff away from the corporate enviroment. Last in case u notice the guy worked his dayjob went home and then he worked some more , amazing. |
||||
|
||||
All times are ET (US)![]() |
Last Thread Next Thread ![]() |
|