Trending
Opinion: How will Project 2025 impact game developers?
The Heritage Foundation's manifesto for the possible next administration could do great harm to many, including large portions of the game development community.
DeRail Engine is DeRail Games' in-house game engine. Today i will write a little about covering the basics. Or i was, until my brain derailed, again...
I think I'll start this blog by telling you what was the goal I set out to achieve when starting to design the DeRail Engine.
A little "history of motivation"
I have been making amateur games since 8th grade using GameMaker and Delphi, and have allways shunned the game engines available out there. Sure, GameMaker is fine for it's purpose, to learn to design games and write game logic, but once you want to do anything more complex you will need a more powerfull toolbox, or rather; a less rigid one. In GameMaker things are built up in a very specific way. You have your rooms, with your tiles and objects and you have various ways of making these objects behave and whatnot, but for someone like me, it's not really what you want. I wanted to take a more active part in the development of the components of the engine. To learn and to master the rendering of graphics and the organizing of the gamestates, and last but not least; strip away what i just don't use.
Going multiplayer, bigstyle
I think it was in the 9th or 10th grade it started. I heard about the World of Warcraft and got hooked on the concept of making a game where many players, maybe hundreds and thousands, share the same consistent virtual world. Realizing that WoW wasn't going to be released for a few years, I started experimenting on using the standard socket components of Delphi to communicate in a client-server setup, and hance started writing "Warcraft Online", my text-based MMO WC3 clone.
Warcraft Online was made using the only two variables i knew what were; Integer and String. To send data across sockets i used ToString on the ints and sent everything as strings, as that was the only way i had managed to send data over the sockets. I quickly realized i couldnt make this game realtime, as parsing packets took ages, so it turned into slow-paced online strategy game, similar to gangsterhood, which I was playing at the time. Not to brag, but looking back, it is still is quite impressive to me that i was able to do this as a kid with inferior programming knowledge. some of the features were:
- Online serverlistings, made so that anyone running a server was visible to the game client
- Automatic updates
- In-Game MP3-player
- Online ranking-pages
- Remote control for the server software
Anyways
If you havent figured it out allready, my constantly derailing train of thought is what inspired the name of our company, and naturally the engine I was supposed to write about. SO, back on the track:
After developing WCOL for some three years I had about 20 regular players, and gave up on the project. Much because i had started to learn new things and was more or less disgusted by the code i had myself written, I bet all programmers know what i mean. So I thought I'd start programming games with graphics in Delphi. Though it turned out that there was a long way from gamemaker to directX and openGL, so none of my projects ended up as anything but scraps of code and alot of experience. My ambitions of creating multiplayer games had not yet faded, and i made repeated attempts at making a MMORPG. Repeatedly failing, of course!
By the time i started my bachelors degree on game programming at NITH I had tried quite a few engines for pascal. none that i really liked, as they were never intuitive, was lacking in documentation i could understand and I guess mostly the reason was that I just didnt understand enough to properly use them.
So coming to NITH i dropped Pascal as main language and hopped onto C# when i was introduced to XNA in november 2007, i think. From then i really felt i had foound something that made programming games and graphics more intuitive than what i had used in the past. and the best thing was that XNA is so minimal that you are not enforced to program a game in a certain way.
From there i have kindof built on my experience. Having competed in the Imagine Cup 2008 and 2009, getting very good results both years, and using XNA on any project i had the opportunity to, I have made numerous attempts at making game engines. 2D, 3D, Both, and now finally; DeRail Engine.
I have, over time, realized what makes most game engines so damn frustrating to me; they force me to do things i don't want to, or include stuff i never use that just clutters my code. Therefore I set out creating DeRail Engine with one goal; Covering the basics!
Covering the basics
What is it I'm referring to here? well, it's really simple, actually! What are the basic needs of any game that are a pain to develop on your own? Well, the entire engine, of course, but what do (or should) all engines have in common? That is what I set out to make; The ground stone of a game. An engine that covers your basics! And that engine is DeRail Engine! ;)
So what does any engine need? Well, here are my list of things that i can come up with right now:
Handling the different stages of the game (menu, ingame, highscores, different game-modes)
Keeping track of all the objects in the game-world.
Multithreaded work-management (for loading content while showing animations, running thousands of individual tasks more efficiently, and so on)
Basic sound (like for the menues, music, even simple games that do not require positioning of the sounds)
User Interface (Buttons, and so on)
Content Loading (mostly built into XNA allready, sa thats nice. just added some spices)
And this is basicly what DeRail Engine does! now of course, there are some systems at work behind the scenes that do stuff for you when you are able to write GameState.Activate("InGame"); and the current state automagically unloads, the InGame-state starts loading while displaying status and progress and finally starting the ingame-experience without you ever thinking about writing a thread-safe way to load content while doing other stuff. There is SO much to talk about here. but really, I can't, and probably will not, go in depth into much of the inner workings of the engine for now. But I will post updates, as the engine is up for a revamp, taking out some trash and installing some new shiny stuff :D
And also; I'm developing a GUI Editor as an addition to the allready existing level editor and the sprite editor. level editor will get a revamp too, it is two years old, and isn't much to brag about, allthough being used for two years on three or four different project without rewriting any code is quite an achievement for a student-made tool ;)
Next time i hope to get more technical, as there WILL be screenshots of the GUI editor in its making, along with some talk about what I am trying to achieve with it, and quite possibly some sneak-previews of DeRail Games upcoming title, Panic Attack ;)
You May Also Like