|
Introduction
My
name is Pascal van Stekelenburg. I was born in The Netherlands, and
have always had two main passions in life: music and games.
At
the age of 6, I started playing the piano, and programming little text
programs on the Commodore64. When we got an Amiga500 with integrated
PCPowerboard a few years later, I got my first 3d experience, learned
the AmigaBasic language, and with the PCPowerboard my first PC/DOS
Basic language QBasic. During the Amiga500, I also started composing
music on the computer for the very first time with the program “Deluxe
Music” from Electronic Arts. Before this I always composed music in my
head and on the piano.
A
few years later when I was about 12 years old, I started trying to find
a real programming language for a change, instead of all those Basic
languages. I tried a bit of Java and Pascal (no, it wasn’t me who
invented it…), but didn’t really get into it much. After all, I’ve been
using Pascal for several years, but never went into anything
spectacular like graphics or sound.
When
I graduated Music College in 2001, I actually wanted to get into game
development education. But there was no game development education
available in The Netherlands at that time. So I just went to open
houses at regular computer education schools, and asked if they taught
programming languages. The answer: Minor to none. Most of those schools
taught in the regular way with lessons and teachers in front of class
with some practical computer exams and exercises. But one school
explained to me that they were different. They called it “Project
Education”.
Project
Education was run through what was known as TI Mon3aan in Voorburg back
then, but 2 years later they moved to Delft, where they are currently
located. At their open house they told me that they put the students in
little groups of 2 to 4 people, and they all have their own project
they must develop themselves. And the teachers will only help when the
students ask for help or make an appointment for criticism. At that
open house I literally asked a teacher, ”Might it be possible to do a
game project here?” And the answer was, “Yes, we have a lot of various
projects and still meet the goals of graduation.” I immediately applied
for that school.
Education at TI Mon3aan
I
believe it was the very first day at school that I already started
asking about doing a game project. They told me to have patience,
because they had a few pre-chosen projects in the first year to
determine the hardworking guys from the slowpokes. A bit disappointed,
I started working that year on the regular websites, databases and
networking, most of which I already had some experience with. But
personally I still continued my search looking for the right
programming language for games. And I found it: C/C++. When I found out
that C/C++ was being used for almost every game, I started doing a
C/C++ course.
In
the beginning of the second year of the education, I was done with the
C part of my course, and started asking again about a game project
right at the first day. That teacher told me that I should have
patience and just do the first project and then they’d separate the
projects by each team. Somewhat frustrated I agreed and met my new
team. One of them I already knew from the first year, but the other
teammate was Mark Bertelink, who I had just met at that time.
As
we were working on a Windows2000 Server project during those months,
Mark and I started to learn more and more about each other. He really
wanted to be a game graphics artist. And as I was learning a bit of
Win32 SDK at that time, we started making little visual interactive
animations. One of those interactive animations of us looked so much
like a game that a teacher passing by came to us kind of angry and
said, “We’re not playing games now, are we?!” Alarmed, we replied,
“B-but... we made that ourselves!” All that the teacher said was “Oh…”
and walked away.
I
think this was a very important event. As that teacher didn’t know my
desire for a game project, he had probably spoken about it with the
other teachers, and they did know. So now they knew that the game
project desire didn’t just fall out of the sky, it was something I
really wanted.
Before
every new project, we got into a meeting with a few teachers and talked
about what should be done. It was at this meeting for the second
project in the second year of the education that the head of the school
was present at our meeting. At that meeting they were assigning us to a
Linux project. But then they asked how we thought about that project. I
furiously replied, “I don’t want a Linux project, you people promised
me a game project, now I want that game project!” Then they promised me
that after this project, they’d start talking with me about that game
project.
And
I agreed again, not knowing how to feel about it. I was furious,
relieved, and anxious at the same time. But I just put my feelings
aside, and started working on that Linux project. And of course, next
to working on the Linux project, I was creating little games on Linux.
And
then the meeting with the head of school came. That was one difficult
quarrel, but eventually the result was that I was assigned to a project
that would test my skills for them to see if I was really able to do
such a difficult game project. That was the third and last project of
the second year, which contested my skills in OpenGL and vector Math
(bouncing ball simulation with correct timing).
After
successfully completing that project, they asked Mark Bertelink and me
what proposal for a game project we had for them. Probably this was
just to keep us busy, because when we had our full project proposal
ready, they ignored it and said that they had other plans for us…
Catamaran Racer
In
the third year of the education, after they moved to a new location,
there was a bit of chaos. But Mark and I knew what to do. They had
finally assigned us to a game project. Mon3aan has this special
relationship with the management of the famous Dutch catamaran race “Ronde om Texel,” so they wanted us to create a 3d sailing simulation of it.
This
was far more difficult to accomplish than what our initial game project
proposal was, since we had proposed just a simple 2d fantasy strategy
game. But it couldn’t bother our excitement; we finally had what we
wanted. We did calculate that a regular game developer’s team consists
of about 20 people. It regularly takes such teams about 2 years to
create a game. We on the other hand, only had the 2 of us, and had to
deliver a full game and engine in the last 2 years of our education.
But we knew we could do it.
So
we had one year for the engine, and one year for the game to develop.
At this time we had no teacher with any knowledge of game development
at our side, so we were definably all alone on this. All our knowledge
came from books, our own experience, or trial and error.
So before we started working on the engine, we first defined what the
engine really needed to do. We didn’t want to take unnecessary
development time for things we didn’t even need.
Our
engine was dependant on the Console. The Console decided what the
System should do, send it back to the Console, and send it on screen
with the class Window.
This
idea has been both a blessing and a curse to us. The blessing was that
everything goes through the console in and out. When you need
information about a Model or a Camera, you can type it directly in the
Console, and you get your information back in your Console. There was
no unnecessary access to the system to subtract information from the
engine. The curse, however, was that you have to program every possible
function within the System and in your Console as well.
When
we started working on the development of the engine, we worked with
loading models from 3dStudio Max into our realtime 3d running
environment. We used the textfile .ASE extension from 3dStudio Max, and
loaded every single vector ourselves. Of course we did it step by step,
but only the polygons were implemented correctly. There was only a
little bit of lighting which wasn’t quite correct at that time yet.
There were no textures or animations yet, we just constructed a solid
model. Our engine was based on the DirectX8 SDK.
Later
we had our ModelLoader loading textures, and our graphics engine
rendered more than one boat. At this time the engine was able to create
animation paths for the boats and the sea waving a little bit. We used
this as demonstration at the Open House at the end of the third year.
There we met a teacher from another school, André Hanegraaf, who saw
our demonstration and was quite impressed. André is an artist himself
and knows a lot about 3d art and gaming technology. He then applied for
a job at Mon3aan to assist us in the rest of our development.
After
a year we indeed had an engine that at least loaded our models, and
could move some stuff around. The engine missed some parts that were
developed during the development of the game, like sea animation and
rotation of the sails.
André
assisted us in designing the game. The game was going to be an arcade
sailing race game with powerups and money to buy new boats, upgrades,
and unlock levels. Money could be won by either winning the race, or
picking up money powerups.
With
the mouse you could steer your sail into the wind so that you would
make speed, and with the arrows on your keyboard you could use your
rudder to steer.
Initially,
we were testing the A.I. to see if they would steer towards the
checkpoints they had been given. And indeed they did. We could also see
that the sails rotated. The sea had not been animated yet, as we did
that last of all.
In
our first design, every boat had its own hull damage points. We wanted
to be able to bump into another boat and make it sink when its hull
points reached zero. However, this became impossible to implement when
we decided to use the free-to-use ODE SDK for collision detection. We
were not able to find a way to know which two boats collided and how
hard they were colliding. Since there was not much time left to create
such functions in the game or engine, we decided to leave the hull
damage out of the finalization.
We
initially tried to make the sea simulation as real as possible. We
found a document about Fast Fourier Transformation which could
accomplish this. But neither we nor any of our teachers could
understand how to apply Fast Fourier Transformation. So after many
months of trying to investigate that FFT algorithm, I finally decided
to make my own algorithm that created quite a nice sea simulation.
Finally,
we graduated with this project. The game was nice to play and quite a
prestige for 2 guys in 2 years. And it all started with that one guy
complaining to ignorant teachers.
The
only problem that consisted after the release: We made the game on just
2 development machines. Those 2 machines ran the game smoothly and
without crashing. But we got a lot of support questions asking why it
kept crashing so many times. After the fact, we discovered there’s a
bug in the game or engine which crashes on hardware other than the
development machines.
Conclusion
After graduation at TI Mon3aan, I started building my new studio, Shade Music Studios, where I currently work as a fulltime composer of high-quality music primarily for games, but also for films and other media.
After those two hard years of game programming, I realized that
programming wasn’t really my main passion, but that music is. There’s a
difference between wanting something, and doing something. While I
always wanted to be a game programmer, I always was a music
composer. While I was programming some little things at school while
still wanting a game project, I was doing great compositions at home in
the few different studio environments I’ve worked in.
My
advice to people out there “wanting” to be a game developer; either
start “doing” it, or start doing something else, because game
development is about passion and commitment. Without the passion or
commitment, your talent doesn’t count. As for me my passion and
commitment lies in composing music.
And if people don’t give you a chance to prove yourself, make a chance yourself to prove to them.
Make your own future; it’s your life. Make your own decisions; it’s not they who should decide for you.
_____________________________________________________
|