"The true vocation is to have his passion as a profession."
But is it possible to spend your life doing what we love ?
How some people do to be successful in everything they do while others never succeed ?
Is it possible to devote your life to your passion or do you have to resign yourself to work all your life ?
I'll tell you how I went from a simple passionate player to an independent developer.My name is Anthony Khelil, I am 18 years old and I live in the Paris area.
Since I was very young, I am passionate about computers and especially video games.
I discovered this universe thanks to my parents, and in particular my father who gave me the PlayStation with which he grew up.
My first steps were made on Crash Bandicoot and Spyro, when I was just 6 years old.
With my father's help, I started to go through my first virtual worlds and practice its basic features : Run, jump, kill enemies, ... And I quickly started to chain levels one after the other. So much nostalgia when I see those images again.
You can't imagine the number of times I was able to finish all these games, and notably "Spyro : Year Of The Dragon" during my childhood.
By dint of playing, I knew the levels by heart and could even redo them with my eyes closed.
But even if Spyro and Crash Bandicoot offered absolutely incredible adventures, I moved, with time, towards the Nintendo universe.
I must admit that, between Mario, Zelda, Pokémon, and the others, there were many more games that corresponded to my young age.
For one of my birthdays, I received a Wii that marked my entry into an absolutely incredible ecosystem : Super Mario Galaxy, Mario Kart, PokéPark, ...
So many games that rocked my childhood...
I was really passionate about video games at that time and I was no longer playing "Just an hour or two on the weekends".
A little later came the Nintendo DS, an even more practical system because it could follow me as well in the long car journeys as in the toilets.
Super Mario Bros, Pokémon Platinum, Animal Crossing, ...
All these games will remain etched in my memory forever...
But while exploring these video game masterpieces, a question kept turning in my head : "How does it work ?".
This question, everyone has asked it at least once in their lives.
Except that there, we weren't talking about how the water in the freezer turns into ice but how the video games are created.
Compiler, assembler, source code, low-level language, variables, ...
All these terms, I had already heard them and I knew they were related to programming, but I didn't know what they meant.
Towards the age of ten, I took my first step from the other side of the mirror : I got an Action Replay.
At the time, it was Pokémon Platinum fashion and everyone was training to have the most powerful team in their playground.
But there was an ultimate Pokémon, with statistics so high it could knock out any enemy in a single attack.
The Pokémon fans recognize it, I'm obviously talking about Arceus.
Unfortunately, to capture this Pokémon, you needed a secret object, distributed only at special events organized by Nintendo.
I then heard about the Action Replay, a small cartridge to insert into your console that allows you to modify the code of a game to get advantages, such as invincibility, more powerful attacks, ... Or even secret objects to unlock original Pokémons !
I still remember the thrill I felt when Arceus appeared on my console screen, ready to be captured.
I also started having bases in hexadecimal (Action Replay codes were only in hexadecimal) and indirectly in binary.
I spent my days taking codes on the internet and modifying them to make different Pokémons or objects appear.
And even if all these manipulations are relatively simple to understand, when we are 10 years old and this is our first experience in computers, we quickly take ourselves for a genius.
And it was mostly my first steps in the world of programming. But it was only the beginning !
Further on, I became interested in how you go from a hexadecimal code to a 2D screen with pixels that light up red on the left and others that flash blue on the right.
I quickly understood that there were two ways to do this :
• Either we use ready-made software (GameMaker, ...) that allows us to create games quickly and easily, without really knowing how it works behind.
• Or we learn a programming language to have total control over what we do. It's obviously longer and more complicated, but it's much more complete and above all, it helps to understand how a computer works.
Of course, I turned to programming languages, the real spearhead of computing that can create applications in embedded systems as well as entire operating systems.
I then read many tutorials, training and books on the Internet, including "Apprenez à programmer en C !" by Mathieu Nebra who explained me the basics of programming : Variables, conditions, loops,...
What to learn to create my first programs while I was still a total beginner.
Basic code in short, but code nevertheless.
And above all, it was my first lines of code.
And strangely, I was passionate about it...
Me who always had a pretty logical mind, I could spend hours trying to figure out why a program didn't work as expected.
And after countless hours spent debugging everything, I finally finished my first game : Mario Sokoban !
The original game dated back to 1980 and consisted of a character who had to move blocks through a maze.
In other words, it was pretty old-fashioned and the algorithms that restricted the game were pretty basic.
But it always does something when you see a friend with a smile when playing a game and you tell him at the end of his game that "I created it !". At that time, I discovered a real passion for programming and I decided to get even more involved, going from project to project.
Around the age of 12, so I learned the basics of C++, an evolution of the C allowing to do more advanced things much more quickly. (Although C has advantages over C++ but I reserve a future article to talk about the difference between the two)
I have thus gone up in complexity on my games, with, among others, a draft of Super Mario Bros. (With obviously much less features)
With such skills, I started to be interested in the other side of computing : The world of the web.
A logical and complementary continuation of the so-called office programming, (C/C++) I had to learn this time two different languages at the same time :
• HTML for all that concerns the information itself. (Titles, images, links, ...)
• CSS in order to format the information by putting for example the titles in red, underline the links in green, put a blue border around the images, ...
Without CSS, the pages would be an avalanche of text, without any formatting.
It is therefore imperative to use these two languages simultaneously to format its site, to give it class, charm and especially to differentiate itself from all the others. I then understood why web programming differs so much from more classical languages : We just describe what we want to display.
Contrary to an application where we have to explain what to do in every possible situation.
It's pretty hard to explain like that but it's really another way of doing.
A less logical, but more intuitive way.
What pleased me less because it was precisely this logical side that I loved so much in programming.
But I didn't have the choice.
Despite that, I continued my learning and I was quickly able to make some sketches of CVs and basic sites, whereas I must have been 13 years old.
However, I quickly found myself stuck on the limits of these two languages : A simple HTML/CSS page is ugly, it's inert and it doesn't move !
One can create the prettiest of sites, it remains rather primitive, it lacks interactions, visual effects, ...
I then discovered the JavaScript language that allows to add this more "alive" side to web pages : Click at the top to change a wallpaper, on the side to scroll an image, at the bottom to open an alert message, ...
And the best : JavaScript is a language like C/C++, with its variables and conditions !
As I had already done more classical programming before, I could very quickly take advantage of this new language.
Not to mention the Canvas tag that allows you to create real video games on your website.
I'm not telling you how long I spent reprogramming my famous "Mario Sokoban" to be playable online.
I remember that I made two versions of the game:
• A keyboard-playable desktop.
• The other adapted to mobile supports with arrows around the playing surface to allow playing on the touch screen, even without keyboard.
And I was telling my friends: "Look, I created a new game ! And this one, you don't even need a computer, you can play it directly on your phone !".
After impressing my entourage, I understood that the three languages I had just learned, coupled together, allow me to do everything that passes through my head.
Really everything ?
Almost everything...
The limit was the interactions with the server : Members area, comments, view counter, ... All this was impossible without using a language specific to servers.
It's great to create an online video game, but what's the point if nobody can save their record ? Additionally, and unlike "Client" languages, (Opposed to "Server" languages) there are many possibilities between the choice of language and the DBMS (DataBase Management System) used.
I then made the choice, a little by chance, to take the couple PHP/MySQL.
Why?
To begin with, it's one of the most popular in the world.
Although I don't like Facebook, saying that its website works with the same technology as the world's largest social network slams.
And then, I knew PHP would give me the basics of server programming, but I could always change my choice later if the need arises. (Which never happened)
Small by little, I started to give dynamism to my websites : Comments, account creation, photo upload, ... I finally had all the cards in hand to create perfect sites.
At that time, around the age of 15, I remember creating an interactive site to compare two images and allow the user to choose his favorite, view voting statistics, ... Or even create his own couple of photos.
After having developed this mini-site, I decided to return to the bases of my passion : The programming of video games.
Fascinated above all by retro games, I discovered an excellent article on RayCasting, one of the first 3D game engines, used notably in Doom or Wolfenstein 3D.
The particularity of this engine was to create an illusion of 3D, while using very little computing power.
The engine being used in the 90's, raw power was the number one criterion of video games.
I then started to develop in JavaScript a copy of this game engine, with the goal of creating a more recent version of the first 3D games.
Obviously, such an engine was much more complicated than a simple web site.
It was necessary to calculate the cosine of the angle of view, multiply it by the projection and divide the whole by the scalar product between our own field of vision and that of the enemy.
All that, just to draw a single row of pixel.
And I had to repeat this loop more than 1000 times to cover the entire game screen.
All that, 60 times per second !
At that moment, I became even more aware of the difficulty to design video games : A simple error in the heart of the engine could lead to do a calculation too many about 60 000 times per second, which would have slowed down my engine enormously.
Despite all these difficulties, I held on and managed to create a sandbox of this game, i.e. a playable version but without specific objectives.
The game consisted of a simple area dotted with obstacles, with only a few enemies moving inside.
Nothing else !
No missile launcher, no flaming gun, no laser gun !
The goal was not to create a Doom remaster.
The game was simply to show how the first engines gave the illusion of 3D, simply with 2D elements.
The original engine has been put online on my site and is still available there.
We were then in 2016 and I had just turned 16. After this first project, I received many remarks and criticisms on the fact that it was not a real game with real objectives.
I then understood that the most beautiful engine does not have for objective to be put forward through simple technical tests like this one, but must on the contrary be used to realize games which will remain in memories.
If Sony hadn't offered real 3D games, no one would have understood the potential of its PlayStation.
I had the choice between taking my engine back and making a real game on it or using one already existing and recognized worldwide.
Unfortunately, even if my engine was perfect in my eyes, it lacked many features such as sound spacialization, light management, advanced three-dimensional effects and many other parameters...
There was still a copy of the engine used in the 90's.
And at that time, we were content with far fewer technological feats than today.
I therefore made the choice to use a game engine whose efficiency has already been proven and I turned to SFML (I will come back in another article on this choice rather than on that of the SDL) in order to launch myself into my first video game project entirely successful.
I had already made many prototypes of gameplay, menus, sound effects and others.
But a video game in its entirety, that never !
For this first real challenge, I wanted to stay in simplicity and be inspired by one of the first mainstream games : BomberMan.
The principle was simplism : A character who moves through a 2D maze and places bombs to destroy the blocks around. But obviously, I didn't want to take the graphics and music from the original game and just release a "BomberMan 2017".
I then had an idea that was going to change the perspective of the game : The levels should be played in the style of Super Mario.
All the elements of play should wear that cartoon style that so marked my childhood.
And obviously, the main character was none other than Mario.
The name of the game was then all found : BomberMario.
Almost 9 months were needed to reach the end of development.
Of course, the work to be done was much more important than I could have imagined...
This was long, and very difficult.
But I held on to the end.
That's when I realized that there was a real difference between copying a draft video game (Especially in RayCasting) and designing an entire one without anyone to guide me.
The hardest was at the very beginning of development, when I had to set a number of ground rules : What speed for the player? Which identifier for an enemy? How many different tiles ? (Basic elements of the levels)
All his questions may seem trivial but are to be fixed at the very beginning of development and will not, in theory, be changed.
I'm not going to dwell any longer on the development of BomberMario (The next article will be entirely devoted to it) but I really insist on the amount of work that was much more important than anything I could have imagined at the beginning.
BomberMario was put online in the summer of 2017, when I was 17 years old.
Today the game is still online and can be downloaded on its mini-site. After the development of BomberMario finished, I was proud of myself : My first video game entirely realized by my care finally finished !
I remember a day in high school, shortly after I put it online, telling a friend during our TP.
This one wanted to see the result with his own eyes and downloaded it, then another person in the room did the same, then another one.
And 5 minutes later, a good third of my class was networking at my game.
That's when I realized for the first time that I had done something great and that I had huge potential for the future.
The downloads have scrolled.
And the time too.
Even though the work done was impressive from the point of view of my entourage, it was only a grain of sand compared to the video game mastodons, such as Uncharted. (Although this is not the kind of game I'm aiming for)
I then thought about starting a second full game.
But based this time on a much more recent concept.
I've had a lot of proposals, including an alternative to Pokémon that I finally decided to forget, given the truly impractical side for a single developer.
Then I turned to another classic video game, much more known : Super Mario Bros.
And especially to the mobile version released a few months earlier : Super Mario Run.
Its particularity ? The hero runs automatically and the player's only mission is to make him jump.
An excellent concept, neither too simple, nor too complex to program.
However, I once again wanted to customize my game so that it differs from all the fan projects that are simple copy-paste.
At first, I wanted to replace the player with a Pokémon with a particular power.
And then, as the first levels took shape, I wanted to add different Pokémon, each with its own feature. (Flying, swimming, walking in the lava, ...)
This concept had been in my head for some time : Several Pokémon in the same level, each having an unprecedented power.
The basic idea came to me while playing PokéPark 2 : Some hidden areas offered this kind of concept but with only 5 levels on the whole game, timed at 120 seconds for the most and limited to 4 usable Pokémons. As for BomberMario, the development was very long and full of obstacles.
Once again, I had to make some adjustments, normally final, based on an experimental version of the game.
For example choose the speed of the player, the height of his jumps, the maximum length of a jump, the number of Pokémons, ...
Small anecdote : During development, many people pointed out to me that the player was not moving fast enough and advised me to increase his speed.
Except that when I have already completed 15 levels based on this speed, I can no longer modify it.
If I double the speed, a space of 6 blocks can be crossed in a single jump while I designed the level with in mind that this passage is impassable.
At one point, I even considered letting the player change his direction at will, like in a classic Mario Bros, but again I had to go back because of problems on the levels already completed...
Evidently, if I had anticipated these situations at the beginning, I could have found a solution to implement them.
But I didn't realize it until much later.
Then I planned to put 40 levels, all different from each other.
But the levels should allow fun as much by picking up coins as by fighting enemies or looking for flags, all while keeping a mind puzzle.
Sure, the level should not look like a maze, but it should not be too linear either.
Except for the first levels, which must remain as accessible as possible, to hook new players.
I also had to set up many traps to force the player to alternate between different Pokémon, each being a predefined location in the level.
Thus, each level took a considerable amount of time to design between the thinking, production and testing phase to avoid a Pokémon getting stuck in a portion of the level. As I write these lines, Super Pokémon Run is in "Beta" version.
This means that all features and levels are present but that the game has many bugs that will be fixed by its release.
I hope to be able to put it online in a few months, ideally before the end of the year, and that many of you will enjoy it.
I will also publish an article when it comes out to tell in more detail the development and the many problems I have faced.
This is how I became an independent developer with a passion for video games !
Of course, I ignored many details that I will tell you next time, otherwise I would have had to write a whole book to be able to tell you everything.
But let's come back to the initial question : Why want to create a blog ?
In fact, the idea of being able to share his knowledge with the whole world goes back to the beginning of my career...
I had some friends who were interested in computers and I was pleased to explain to them in detail what they did not understand : I was asked questions as well on the best language to start programming as on the implementation of a SQL injunction.
And since I'd been developing for so much longer than they had, I thought it was normal to answer their questions. But the biggest problem was mostly that I was often asked the same questions and had to repeat my explanations from the beginning to each person who asked me : "If C++ is better than C, let's start directly with C++, no ?"
And every time, I had to explain again from the beginning that the notion of object-oriented being very complex, a beginner should rather start with the C. (Again the subject is debatable but the question is not there)
At that time, I already had in mind the idea of a blog on which I will give my advice to as many people as possible, both on the choice of a language to start with and on the best way to vertically center a block in CSS.
But at the time, I hadn't dared to get started.
For fear of not being interested, of not having enough to say, of not being regular or simply of not being experienced enough for others...
And I left the idea open, preferring to concentrate on my other projects.
But as I continued my learning, I finally realized that computing is above all based on sharing knowledge and ideas.
After all, what could be more encouraging than, when we block on writing a regular expression in PHP, to search on Google and see that other people have fallen before us on this problem, as well as the way they solved it?
This motivated me to open my own blog : After all, since I started programming, I've had a lot of problems and now I can solve most of them in record time. (Although I still get stuck for a couple of hours on a silly problem after all)
I think I got the hang of it when I went to computer school : Most students had almost no programming knowledge and often came to me wondering why this or that part of code didn't work as expected.
And when I helped them, often in a fraction of a second when they had sometimes been blocking for several days, their answer was : "Oh but yes, why didn't I think of that earlier ? Anthony, you are a real genius !".
All this has led me to the idea that my experience could be beneficial to a maximum of people wishing to launch themselves into the world of computers. I then started to make some drafts of a computer blog.
I wanted this one to be made up of various and varied articles, without being limited to development strictly speaking.
After all, we can just as well talk about Unity 5's novelties by being a game developer as give our opinion on the Nintendo Switch as a player !
Because before being a developer, we're all players deep down...
The summer is finally coming, I decided to dive more seriously into the realization of my blog...
First designs, first previews, topics on which to make an article and even a prototype.
The blog launch is fast approaching.
After a long period of hesitation, I finally decided to launch.
This is my blog, I hope you like it.
Anthony Khelil