header image
Clowning around

Princess Celestia Transcend in Transcend
by Princess Celestia posted on 13.07.2011 18:59:13
Tags:


About time I talk about this.

Well, right off the bat: What the hell is this?
In all simplicity: It's a project of mine to program a game, including engine and graphics, from scratch.

This project is, at the same time, also an obligatory school project, called the \"Matura-Arbeit\".
It will play a part in the final score of my graduation.

Now, what is the \"Matura-Arbeit\"?
Here in Switzerland, you have to complete an individual project of your own, about a topic that is pretty much free to choose, for the graduation. Depending on what kind of project that is (scientific, artistic, combination), you have to write an essay of 7-20 pages.
That's surprisingly little, I know. And I could easily fill 20 pages with the programming stuff alone.
Either way, you also have to hold a dissertation about it at the beginning of the second school semester, which will also influence the mark you're getting for it. You also get two teachers that should accompany you in the process of the project and help you with stuff you don't know about.

The topic I chose was to simply build a game from scratch.
Sounds easy, right?
Just put in some OpenGL commands, plaster some animations onto the screen and build your level and with that your game.

Well. The truth is far from that.
First you have to build a game engine that handles all your resources, objects, user input and graphical output.
This means that you need to capture the keyboard and mouse, translate that data and pass it to the relevant objects that need this input like the player or the GUI objects or whatnot.
Oh and of course, you need to make that GUI yourself too. Meaning you need to program your own Button, TextField, Label, TextArea, etc. classes.

Next you need to keep track of your objects in the game's world.
Which means that you need to divide the objects up into types. From simple tiles over blocks to complex entities.
These types need to be able to share data between each other, so you need to be able to address them from another object out.

Then of course resources. The program has to be smart about this; load a resource only once and then share it between objects that use it. The loading has to be dynamic and you need to be able to load resources or change resources on the fly. The resources need to be stored in a smart format.
This is especially important for the world format, so you can build your levels easily.

Finally, graphical output means being able to control OpenGL and it's resources accordingly and being able to use them easily from other classes out, minimizing the amount of native calls in top-level objects.

And while all that is handled, it should also be fast enough to run.
Doesn't sound so easy anymore, right?

And that's only the beginning.
After that, you got your basic engine done.
Next comes the actual work of programming the individual types. Making the player interact with other objects, adding fast and precise collision detection, getting entities to interact with the player, making the player react differently, giving the player a good feel of control and balancing out the abilities and difficulties.

And then...
You'll probably want to start creating the graphics for the objects, so they can be displayed well in the game itself.
This will be especially painful, since many of your background graphics need to be tileable. Meaning that the same texture needs to fit next to itself in all directions well, while not getting ugly or boring on the eye if it fills enough of the screen.
More so, you'll have to create animations for your player's and entities' movements that look fluent, simple and at the same time detailed enough not to get tiring on the eye.

AND THEN...
You'll maybe want to think about adding sound. This'll be a huge problem if you have no fucking clue about that whatsoever, like I do.
The sound effects need to be easily recognizable for what they are and again, shouldn't be boring. The music needs to be loopable, possibly catchy or at least calming.
(I'll worry about this last)

AANNDD THEEEENNNNNN.....!
You'll FINALLY be able to create the game itself.
Wow, eh? You thought this would come way sooner. Well, it doesn't really.
Only now you have all the necessary resources ready to actually start writing the game and it's story itself.
Be aware that this brings up problems like level design, repetition vs. uniqueness and most of all... testing.
You need to keep the levels fresh, but still be able to repeat your designs enough to save resources, while keeping it all interesting for the player.
The instructions should be clear to the player, but at the same time the puzzle elements of the game shouldn't be blatantly obvious.
You need to challenge the player and not overdo it, because otherwise it'll quickly get stamped off as \"impossible\", \"bullshit\", \"boring\" or whatever floats your boat.
Then the game should provide enough play time or if possible, even have replay values of some kind that make the player pick the game up again or at least remember it for something else than being utter shit.
While you design your game, you need to test it over and over again, possibly even ask other people out to test it for you, gather feedback all the time, correct mistakes and bugs in the engine. A very tiring, repetitive, time consuming process, no programmer should underestimate.

AAAAAAAAAAAAAAAAAND THEN.......
You're finally done. You have your game.
And you realize that it's still not finished.
It could be so much better.

That is... if you're not interrupted by the deadline in the middle of the process, which is something that's extremely likely to happen.
Well, in my case and according to my calculations at least.
In this case, it means: Loads of sleepless nights by your coke bottle and daydreams haunting you about failure and the always closing up deadline.

All this while you also have to work for school, exams, homework and more things.
And you're not getting paid a penny for it.

SOUNDS NICE, DOESN'T IT?

Well, since I'm not really the sad bawwing pessimist teenager that I was anymore, I won't leave the blog post on this note.


Seriously. If you can create a game from scratch?
Wow.
I would be impressed.
Seriously impressed. Because man, that is a HUGE task.
And even if you don't finish it? So what. You tried and took that huge task upon yourself.
What you produced is still impressive and I'd raise my hat for that.
Really, if you make a game, you can be proud of yourself. And I mean that with all honesty.
I hate the word \"proud\" and use it extremely rarely. You can really believe me when I use it.

Usually games are made in large teams of experts, all concentrated on one field of the task.
They're all getting PAID for it. They all have years of experience and training on the matter.

All that aside, still. Wow, you made a game! A game you can extend any develop in any direction you want, any time you want.
And I am 100% sure that if you put effort into it, there will be people who like it.

I seriously can't even begin to describe how impressive it is to actually being able to say with honesty that you made your very own game.
There's just so much about it that is amazing.

So what do I say?
If you're interested in programming a game, go for it.
No matter if you have no knowledge of any of the fields.
No matter if you have other things to do in the meantime.
No matter if you think you suck balls.
No matter if your douchebag friends tell you you suck balls.
No matter if you like shows for little girls.
No matter if you think this article got way too cheesy.
Just.
Fucking.
Go for it.

If you don't finish it, you'll still have gathered experience and will have an easier start the next time you try.


And that's all I'm going to say.
I'll keep this blog active with updates about Transcend/Matura itself to show you what progress I make.
It's also an effort in hopes of bringing this site up on content again.

-->Nick over and out.

Oh and:
Have another MLP inspirational poster:

No comments have been added yet.
Add a comment:
Username:
E-Mail: