Saturday, November 17, 2012

Continuing on the post I wrote yesterday, Brainstorming about Bubbles (Part 1), I will make some more decisions and brainstorm some more about elements to be used in "Burstin' Bubbles".

Status

OK, this is what I have so far; I will make a game in C++ (with SFML) called "Burstin' Bubbles" involving levels based on historical economic bubbles. I still don't have any idea what the mechanics will be, how long the game should be playable, what the graphics will look like and how the game should feel.

Step 6. What will the player do?

So, what do I want the player to do? I know the game will be made with 2D graphics, but that still leaves much room to what the actual gameplay will be. For example, you can make a game of one of the following genres;

All of these games are made using sprites, even the fairly new games Awesomenauts and FarmVille. I don't want to pin myself down to a genre, but I can use the elements of the genres that I like to make something cool. So, I'll define what genres I would want to incorporate in this particular game. Here's the new list;

  • 3rd Person RPG 
  • Real Time Strategy 
  • Simulation 
  • Shooter/Arena 

But what are the strengths of these genres? Here's another list!

3rd Person RPG

  • Free-roaming
  • Large worlds
  • Many hours of gameplay
  • Character Building
  • Room for storytelling

Real Time Strategy

  • Fast gameplay
  • Short games
  • Many ways to win / Non-linear
  • Easily expandable (Extra units, maps, etc.)
  • Suitable for multiplayer

Simulation

  • Suitable for real-life-related events
  • Direct transfer of knowledge
  • Useful for predicting results (business cases, economic bubbles, etc.)

Shooter/Arena

  • Quick, immersive gameplay
  • Easily expandable (extra levels, guns, etc.)
  • EXPLOSIONS!
  • Multiplayer-suitable
What do I want the player to do in this game? I can pick some from above and form an idea. For example;

If I pick Character Building, Shooting/Explosions, and a 3rd person point of view in a simulated world I would have a Shoot 'M Up with upgrades in a setting relatable to an economic bubble of the past (for example the Tulipmania). I decided to work with the concept of levels before.
So, imagine a "Legend of Zelda: A Link to the Past"-viewpoint, with the violence and speed of "Awesomenauts", in a 17th century setting, causing or preparing for the burst of the bubble.

Step 7. Justifying decisions

An idea got into my head just now, meant for the story line. (Yes, I am chaotic.) The player will be someone from the future, time-travelling to the economic bubbles of the past to find ways to prevent or limit the effects of an upcoming bubble in his own period. This way, I can justify the jumping from one period in time to another, using a fancy interface to select a level.

Status 

What do I have so far? Here's a list!
  • Game will be made in C++ (with SFML)
  • It will be called "Burstin' Bubbles"
  • Game will have multiple levels
  • Perspective will be 3rd person, like LoZ: A Link to the Past
  • Player is a time-traveller, analyzing bubbles of the past.
  • In the fancy interface, the player can select the level to visit.
  • The player can get upgrades. (Character Building)
  • The NHTV-deadline is 7th of January. I want to have at least a tech-demo done by then.
  • I have no idea how I will accomplish the Art-side yet! Will use home-made placeholders for now. 
The next post will be about thinking of what weapons the player can use, what the goals will be and maybe a first sketch of the interface as well. 

Wednesday, November 14, 2012

I've already begun brainstorming for the NHTV intake-assignment with the theme "Bubbles". I will explain the very short brainstorm-process I had, with colorful images and explanations of said process.

Step 1. Write stuff down!

Write down stuff about bubbles. Basically making a word-web, only more colorful and more messy. It works though.
As you can see (and if you can read it), I wrote down words involving Bubbles, but also some things relevant for games like "bubbleshields", "Bubble Shooter", and some less relevant stuff like "Facebook", of which is sometimes speculated it is (involved in) an economic bubble.

Step 2. Connect some dots!

Connecting dots. I now have a list of words involving "Bubbles". If I put some words together, I might be able to get a cool name for a game which I can then design. I wrote some titles down, some terrible, some quite catchy. I made two very small word-webs for two of those titles as seen below.
These are combinations of words I wrote down earlier. I like "Burstin' Bubbles" the most. It has that "Breaking Bad"-smoothness. "Absence of Substance" is more cryptical, but I think it can be interesting. The title sucks though.

Step 3.  Choose something!

Choices, choices. It's quite imminent that I'll pick "Burstin' Bubbles" as title for my game. I can make these fast choices, because my focus is the code, not the game design.
Now, for the next choice; what will be the actual subject? Bubbles can be a broad subject. You can think of an economic bubble, a liquid bubble, a soap bubble, an antibubble and even a term used in Poker (if someone gets "eliminated on the bubble" in a tournament, that person is the last person to drop out without payout).
I like economical and political topics, like the dot-com boom and events like Black Tuesday. Speculation about whether Facebook is or isn't (part of) a bubble interest me.
Then again, the physical working of a liquid bubble interests me as well. 
That I have interest in a particular subject doesn't mean that I have a good understanding of said subject.
Because I want to expand my knowledge in the subject of economic bubbles, I will use that as a subject for my game.

Step 4. Google some stuff!

So, what am I going to make? I haven't got a clue (yet)! From this step on, I am designing/making decisions while I write this post. First, let's google some stuff related to economic bubbles!

When I googled "Is Facebook a bubble?", I quickly stumbled upon a site called "Economic Times", part of the "Indian Times". The post is about whether Facebook IPO [First time a company sells stock to public] is a sign of a new tech bubble. That's not the biggest value of this post for me, the real value for me is the short list of great bubbles in the past (like the Tulipmania and the Dot-com Boom).
When I saw this list, I immediately thought of them as levels for the game or at least inspiration for levels. This is mostly my mind making hasty decisions, but I actually like the idea of a multi-level game with different crashes. This way, I can teach myself and the players some stuff about the economic bubbles of the past!

Step 5. Sleep

So, what do I have so far? I will make a game in C++ (with SFML) called "Burstin' Bubbles" involving levels based on historical economic bubbles. I still don't have any idea what the mechanics will be, how long the game should be playable, what the graphics will look like and how the game should feel. Defining and designing these aspects will be done in Part 2. But first, it's time to sleep for me, because I slept like shit last night and I have to get up early. 

Nighty-night, me readers. Think big now.

Tuesday, November 13, 2012

Last Saturday I went to the view day of the NHTV to look at the IGAD-programmes. After a three hour travel I arrived in Breda, accompanied by Luc. We walked through the school to check out some student work and hear presentations about the Programming-courses and the 3D Visual Art-courses. I was mindblown by the quality of work delivered there and the Programming-courses fit and completed my dreams and ideas of what a capable Game Programmer should be able to do.
Not only are there courses to teach Mathematics, C++ Programming, but also stuff like CG, HLSL, Assembly, Code Optimizing, Data Structures & Algorithms. Mostly stuff you will find in any Computer Science-programme, but I didn't really expect it that low-level. I want to do it though, I am extremely excited to follow all of those courses.

But first, I will have to get accepted to the Game Programming-programme. To achieve this, I will have to make a game with the theme "Bubbles" and fill in some stuff at a site of which the link will be mailed to me within a week. The deadline for this is the 7th of January, 2013.
I've already set up the project and made the initial commit and push to GitHub. I will design the game first, but I've made some choices on the technical site already. I will use C++ with SFML. I'm not using SDL because I am having problems getting it to work and there appear to be issues running SDL on an i7. Apart from that, I've made something with SFML before (a raw techdemo of an Asteroids-game)

Now for the design-work...
I have no idea yet what I'm going to come up with, but I will keep this blog up to date with the design-choices and the technical choices as well.

Tuesday, October 23, 2012

Here is another update on the level editor I'm making. I had some struggles with the WinForms and XNA combination, because I couldn't use the Content Pipeline the way I was used to.

When you ran the program, it build all the assets with MSBuild in a temporary directory and removed those when you closed the program. This did allow me to use the assets, but the loading time became higher and higher if I added more assets. 

Changing the build directory

I figured, if I changed the build directory of the ContentBuilder-class (the one that handles the MSBuild-stuff), which I used from the WinForms example, it would build the files to a directory that wouldn't be deleted and was easy to find back. This gave me a folder of .XNB's which I could load directly using Content.Load<>(). Much faster!

But it was still rebuilding the files over and over. After some thorough investigation I noticed that the .XNB's get removed from the build-directory as part of the MSBuild-process. There wasn't a way to stop MSBuild from removing the files that already exist. So I still had long loading times. 

Moving the files

After some fiddling and thinking I came up with the idea to move the .XNB's to another folder just after the buildprocess. It worked! And it was one of the first times I've used recursion for something useful! (looping through the directories and finding the files that need to be moved.)

Keeping it up to date

The next problem was keeping the files up to date. If I change a file, I want it to be built to an .XNB for immediate use. I made a Console-app which updates every three seconds to see if files are changed. It uses an XML-file that saves the assets with information such as the path to the file, the type of the file (model, texture, shader), the last update time and the last build time. If the build time is earlier than the last update time, the file needs to be rebuilt and it will do just that.


The Clockwork Asset Builder is a Console-app that runs in the background with a little log that shows errors and which files get rebuilt. The "removing build-folder" is the removal of the temporary folder which gets cleared by MSBuild anyway. 

This program will be used in the background during the use of the level editor. I will build in functionality to make it automatically reimport adjusted assets, so you can see the changes immediatly!
You can check the code on GitHub if you're curious how it works. If you have any suggestions, let me know!

Monday, October 22, 2012

Instead of making an entire site to show some videos about projects I've done so far, I will post it here. Much more user-friendly and compact!

Most of my work was made at the USAT, during my two years of enrollment. That's where I picked up programming (so that means I've started programming two years ago!), by making a Flash game. Which I unfortunately lost due to a human error on my FTP server. If anyone reads this: MAKE BACKUPS and not on the same server as the site itself. Pressing delete from your root folder is almost never a great idea.

Anyway, back to the projects. I will show you the top 5 of the games I made that I like the most.
I've done the most of the programming of these projects. In some situations there was another programmer 

1. Fins of Liberty

Deadline: December 21st, 2011
I like this game the most humor-wise, but not code-wise. I had a lot of trouble to get the movement of the fish to work properly and the collision was a pain as well. When you were swimming, you could swim into a corner and break the collision. Which happened very often.
The audio consisted of three layers. The volume per layer depended on a factor in-game. For instance the drum-layer depended on the distance between the waiter and the fish. 
The game was made in Unity by the way.
The movement of the waiter was done by another programmer, which started as an ambitious path-finding project but became a waypoint-to-waypoint system. 

2. Garuda (Global Game Jam 2012 entry)

Deadline: January 27th, 2012
Garuda was a GGJ-entry of which the theme was Ouroboros. After a brainstorm that took way too much time we decided to make a game where the goal is to die and reincarnate as many times as possible. You can do that by flying in the trail the other player leaves behind when hunting for your trail. This game was made in Unity and the idea was to make it a LAN-game, but due to a lack of knowledge and time at that moment, we decided to make it 2-player splitscreen. We had problems with the movement at first, because we included the Z-axis rotation, which became incredibly confusing and annoying. We looked at Diddy Kong Racing and used the flying movement that they had.
I didn't do all of the coding in this project, but I've worked on the movement, the collision trail, the GUI. Basicly everything that's left to do when using Unity.

3. Tiny Knights

Deadline: May 11th, 2012
Tiny Knights was my first game made in XNA. This was also my introduction to shaders. I made a little directional light-system, made a GUI-system and made some basic gameplay. The game is based on plants vs. zombies, only simpler. The goal of this version of the game is to repel the enemy attackers until you have enough cash to be practically invincible. This is because I didn't have enough time to make a better AI and a destructible castle for the enemy.
This is one of my cleaner coded projects, because XNA forces you to work in a more Object Oriented way and Unity just lets you drop scripts on objects. I still have the code and the executable for this project, to be found here; http://www.2shared.com/file/Cz6_tHAu/Tiny_Knights.html

4. C-Pew-Pew (Asteroids clone)

Deadline: June 14th, 2012
In a mission to learn C++, I made a game in SFML (SDL, only easier to use in my opinion). It's an easy game made in a short amount of time. You simple shoot asteroids, they disappear, new asteroids spawn and you shoot those as well. I didn't have enough time to implement the splitting of asteroids, but that's perhaps something for the next game.
Download of the code (you will need SFML and VS2012 to run it, but the .cpp's are readable);
http://www.2shared.com/file/MxuLI7d4/SFMLTest.html

5. Clockwork Age

Deadline: None, just started this two weeks ago.
Clockwork Age is a steam-punk RPG that I am making with a friend of mine, Luc van de Mortel. I will make a level editor (as seen in this picture and on many posts on this blog) and a third-person-like gameplay. I can't give any details, because there aren't any yet. This project is made to expand our portfolio and make something awesome. We will make as much as possible before we start our study in September 2013. 
I use Git and GitHub to keep track of my code and to show people the code I make.

And the rest?

The rest of my work includes lost projects(like my first Flash-game), barely working experimental games involving an installation, mostly made to create an experience more than a game. I also make websites, but I don't really find that relevant enough for a Game Programmer portfolio. I also want this to be a short overview of things that I want to show. If I finish other projects, I will make a new portfolio-post with a link to this one as well.

Saturday, October 20, 2012


I finally got the camera controls to work properly. The orbiting, panning, zooming, scrolling and keyboard-movement now work the way I planned. All the movement is done in the CameraMan-class, a member of the Camera-class.

The problem was that I couldn't get orbiting around an object to work without messing up rotations. After a lot of googling I found a useful way to accomplish this. The idea of setting the position to a transformed Vector3.Backward and scaling it by the distance of the actual position and the target works like a charm.

I begin the orbiting by determining the amount the camera should rotate. I use the relative mouse position and divide that by 500. I add those numbers to a Rotation-vector3 saved in the Camera-class. When that is done, I use Matrix.CreateFromYawPitchRoll with my Rotation-vector3 to get my Rotation-matrix, which is also saved in the Camera class.

After that I create a float called 'dist' which is the distance from the actual camera position to the target.
Then I transform the position with Vector3.Transform(Vector3.Backward, Camera.rotationMatrix);
I am using Backward to easily reposition my Camera. After the transform, I scale the position by the 'dist' and voila. I have a rotated camera. It only assumes the cameraTarget is 0,0,0 at the moment. So just add the cameraTarget-vector to the camera's position.

The rotation matrix will be updated whenever the camera is rotated, so you will always have a good rotation matrix for transforming the up-vector and the right-vector. This makes panning the camera very easy. It's nothing more than Camera.Up = Vector3.Transform( Vector3.Up, Camera.rotationMatrix );

Now that this is settled, I will work on the caching/storing of the assets built by the XNA pipeline and Picking/Selecting objects.

The answer on this question helped me to fix this situation; http://gamedev.stackexchange.com/questions/25448/orbiting-a-specific-point-orbiting-camera

Friday, October 19, 2012

Clockwork Age is a project I am doing with a friend of mine, as preparation for the study we want to do at the NHTV in the Netherlands. I am aiming for the Game Programming-direction and Luc is aiming for the 3D visual art. We both stopped our study at the Utrecht School of Arts & Technology, because we both disliked the way the school treats its students, we both wanted to specialize something. We chose to do this after completing two full years at the USAT.

Clockwork Age

Clockwork Age is going to be a third person RPG-like game in an era called the Clockwork Age. This era is  a Steampunk-inspired environment in a post-medieval setting. The world will include at least one small village, a big city, lots of terrain and the room to add more. 
We do not aim to complete this project, we only aim to get as far as we can and learning as much as possible during this project.
I will work on the tools we will use to do so, including a level editor (with a terrain editor), an asset-builder, for combining assets like models, textures and effects into a usable asset in the editor and the game.
I will also focus on building the game itself. The character movement, the physics, the particles, the shaders and everything necessary to make something awesome. I am currently using XNA to achieve this.

This is what I have so far:

It is a Windows Forms-application running an XNA View. Clicking the assets on the left will currently import  it to position 0,0,0.
You can save the scene and you can load other scenes. The scene-files are simple text-files with a reference to an asset in the asset list, a position, rotation and scale. The rotation and scale are currently not implemented, but will be in the near future. 

Upon starting the Editor, the Asset List will build. It will gather all resources from a .assets-file and add them to the content pipeline. This is quite inefficient, due to rebuilding every asset at every run and I am going to fix that. The problem is that I do not have access to the Content Pipeline as easily as in an XNA Game-application. It will not save references and all .xnb files are saved in a temporary location until the application closes.

I will try to fix this, right after I fix the camera-controls. 
I am having problems with them, because I can't decide whether I want to use a direction  relative to the -position as a camera-target or an actual target.
Using an actual target makes it easy to orbit around, but makes movement a bit harder. Using a direction makes it hard to orbit around, because the direction should be normalized and orbiting around a Vector that is 1 unit away from you isn't really useful.

More will follow soon!
Subscribe to RSS Feed Follow me on Twitter!