woensdag 29 december 2010

Building a new world

Hello readers!

I had a few days off this week so I don't have much to tell about time management game's progress. Instead I want to talk about the process we used creating the Burnin Rubber 4 environments a while ago.

The first step to take is to create a so called 'mockup' of the environment or 'world'. This stage is very important, mistakes made here are hard to fix later on. The city mockup of Burnin Rubber 4 was done by creating a large flat plane with a basic roadmap texture on top. Basic box shapes were added to define some architecture and buildings. Simultaneously the environment was tested by driving through the mockup world. This gives a rough idea of what the distances are and what size of world we're dealing with.

For Burnin Rubber 4 it was very important that the road mesh was perfect. By road mesh I mean everything that has to do with the 'floor' or ground the player is driving on. It can be a real pain to create all those roads, there are more than you'd think there are. I created a so called 'construction set' to make this process quicker and more enjoyable as well.

These pieces all 'tile' with each other. Building the roads with these pre defined meshes saves a lot of time. And I really mean a LOT! Too often I see people trying to create something similar by creating such roads poly by poly. I agree it works, but it is really time consuming. Even if you're done with the modelling work you still have to do the unwrapping. Bye bye time...

The process of building environments or art assets in general using this technique is called modular modelling / modular design.


dinsdag 28 december 2010

2010 Online game of the year

I hope you all have had a very nice Christmas! This year seems to be a lot more hectic with the holidays being in the weekend. You really need those two extra days as a bonus on top of the weekend, this year we even have new years day in the weekend too. That’s just not right…

As you’re reading this Hydro Storm has moved up to the third spot on the shockwave.com “most played” section of the homepage. In varying compositions, Xform games continue to dominate the chart with at least 150.000 players for our games every single day.

This is something that isn’t bound to stop in the near future, so let’s hope 2011 will give us a lot more plays on the site (don’t forget to tell all of your friends to play our games!). It’s only fair that with all these plays and clicks we have two nominations for ‘online game of the year 2010’. Both Burnin’ Rubber 4 and Race to Rome have been nominated. We would appreciate it very much if you guys would like to help us make either Burnin’ Rubber 4 or Race to Rome the online game of the year on shockwave.com.

So cast your vote here! And of course: thanks to all of you guys for playing like crazy all year!

-- Erik

vrijdag 24 december 2010

Boss Level

Dear readers,

Last Friday me and Joep needed a decent version of our games and we're given a list of issues that we should change/fix. We did our best, but weren't satisfied at the end of the day. So Monday and Tuesday we continued fixing bugs. The newest addition to my platform game is the boss level. About two weeks ago we had a meeting discussing the behaviour of the boss (a baboon). The baboon has certain modes. A mode is for example to chase after the player or to taunt. A very common sight in platform games (and which we also do) is that after hitting the boss a couple of times, the boss will start doing something else to break the monotony. This we call a phase. Phases exist of a list of modes together with their duration. The modes in the list are then played sequentially and cycle when at the end. So phase one can be described as (ChasePlayer, 10seconds), (Taunt, 1 second). In this way it's very easy to adjust a phase.

I did have some trouble getting it to work decently with physics. Sometimes I could get stuck and I would have to restart the level which is unacceptable of course. Placing new physic objects is also a delicate matter: if the new physic object overlaps with an existing physic object you'll get unexpected results. It all seems to work nicely now so the next step will be creating more levels and enemies. Here's a little preview of the baboon:

(In case you're wondering: the black bar on his eyes is intentional as we don't like to give everything away. He's not a sex offender in our game or anything. Don't worry...)

Have a Merry Christmas!

-- Stijn

donderdag 23 december 2010

A special Animal

As we are nearing the deadline for the Zoo time management game and the holidays we at Xform have to push extra hard to finish all the work. Last week we decided the Zoo game should have a few extra animals to make the game more varied and interesting. I won't give them all away but there's one I would like to reveal to you. It's a special animal which is very near to our heart here at Xform. At the beginning of this year I went together with Pieter and Diederik to the Game Developers Conference in San Francisco. Of course we had to do some business there, but the main reason we went there was to have some fun. So where in San Francisco do you go to have fun......the Zoo!! After a long taxi ride we eventually arrived at the Zoo which is located near the west coast. We were all psyched up to see some magnificent animals but couldn't help feeling disappointed once we entered the zoo. It seemed like the animals had an off day, they where lying around doing nothing not even bothering to look up when we passed by. We came across a kangaroo which seemed more dead then alive, an ice bear in the middle of a depression and a seal that should have died a decade ago. But then something happened, we came across a cage which seemed empty at first, so we looked around to find the animal which belonged there. And there it was lying in the corner looking at us with his cute little eyes, this animal was clearly happy to see us as probably most visitors would pass him by without a notice. It was a Tapir, it looked like a bastard child of a hippo and a guinea pig, we immediately felt connected with this animal so we hanged around the cage for a while and took some pictures to remember him by.

This is why we unanimously decided the Tapir should make it to the Zoo game as a special animal. Below you can see some concept art, just now I've finished the 3D model, unwrap and bones setup. I'll post you guys a screen shot of the final tapir when it's done.

We'll be returning to San Francisco next year to visit the GDC and when we can find the time we'll be meeting up again with our favorite tapir.


woensdag 22 december 2010

Stressing in the zoo!

The time management game is getting better and better. Last week I solved a lot of (small) bugs and worked on the flow of the game. I also made a new build of the game to be attacked by some of the people over here in the search of bugs. Next up is the 'arcade' mode. You might think, arcade mode in a time management kind of game?.. Yes! The time management game will feature a more action based gameplay mode.

The arcade mode will generally be the same gameplay as the player will face in the campaign mode. But it will be much much harder. For a start, the player will begin right in the middle of a 'game situation', instead of gently building up to the rush of visitors and demanding animals. The animals will need a lot more attention and the zoo will be more crowded during the arcade mode. This will force the player to make it's decisions faster. When finishing a 'day' or 'stage' during the arcade mode, the player will advance to the next one. If the player doesn't meet the current 'day' or 'stage' targets and the end of the game session, it is game over.

The arcade mode will be unlocked if a player finishes the normal campaign. During the arcade mode the player is able to find some hidden objects and unlock trophies only unlockable in the arcade mode.

-- Joep

Hydro Storm has arrived!

The storm has arrived! Sweeping across shockwave.com like a torrent of explosions and post-apocalyptic water racing mayhem!

I present to you: Hydro Storm!

Hope you like the trailer, check out the game here!

-- Erik

dinsdag 21 december 2010

A storm is coming...


Today our newest game will be released. I’m saying “will be” because the launch will take place in the United States of America and the day starts there as our European working day draws to a close. To “blow the whistle” now would be a bit premature. That’s why I’ll make sure to have a trailer posted here tomorrow in a special blogpost/newsblast on top of the normal one. Of course, I’ll also post a link to a playable version of the game. I mean, that’s the great thing about gaming in your browser right? Instant playability!

Meanwhile, I’ll be drafting a press release for the game and will include some cool screenshots to send out tomorrow. On top of that we really want people to review our game! We’re currently looking around online to send everyone we can a heads up of our newly released game. But, of course we would like to see our game reviewed as much as possible (we believe in the quality you see). Are you someone who reviews browser- or online games? Are you familiar with someone or a site that does this (well)? Please let us know, we would love to see our games reviewed on your site. If you have any info that might help us out, please send me an email.

Keep checking www.shockwave.com for our newest game and while you’re there, check out all of our cool games like the Burnin’ Rubber series and Redline Rumble Revolution. Let’s see if we can claim the nr.1 spot on the site again for a while…

-- Erik

maandag 20 december 2010

Turning 2D into 3D: Level creation

In one of Stijn's earlier posts you guys could read about how we're doing the level editing for our platform game. He has created a custom 'tool' that enables us to do the level editing retro style. How cool is that. The last few days, I tested it out a bit and it all seems to work!

Our level creation workflow now looks like this:

1. Build level in 2D editor, export to data file.
2. Import data file and build 3D world in 3D modeling package. Export 3D world to 3D file.
3. Test in game.
Back to the 2D editor to make adjustments, until the basic level shape is okay. Then, we can add enemies and pickups to the level and test that some more. If that is fine we can finalize the level (make it look prettier!).

It might seem an awkward way to do things (and of course it would be really cool if step 2 was totally automated). But in fact, being able to make adjustments in a 2D editor turns out to be a real timesaver. Especially since it's very nasty to make size changes in 3D (keeping the mapping of the objects correct).

That's it for now!

-- Diederik

woensdag 15 december 2010

A lot of little things

Since my post last week I've been working on a lot of small things. Mainly fixing some interface related issues. Some icons were displayed when they shouldn't. There was a major issue with the minigames where some interface elements were or weren't displayed at all. I also worked on the options screen and some 'dialogues' which pop up when the player unlocks a trophy for example. I used the slider system from Stijn to create the sound and music volume sliders in the options screen.

This week I also worked on the game's intro 'cinematics'. The time management game features a small story, which is being told before playing. It is displayed using still images accompanied with some text. There are also some extra elements which 'blink' to make some stills more clear. 

Currently all of the still images (made by Matthew!) are in the intro sequence. The timing between the images still needs tweaking. Also the texts to display in the intro haven't been finalized. For now it is ok, this friday we'll need to have a new build of the game. And there are still a lot of other things to do too...

-- Joep

dinsdag 14 december 2010

Rush Beta/New Kids Turbo!

This week we’ll be rushing to make a new version of our platform game for this Friday. At this point both of our newest games will be ready to go out for evaluation just before the Christmas work slump kicks in. I’ve heard some companies even close their offices for the entire month of December, lucky them… The bigger the company is you work for, the more they’ll be influenced by other companies’ schedules. This whole feeling that working in between the holidays is useless gets reinforced because there’s no one to do business with. This spirals into an escalating scale of being unable to do anything at all, possibly aided by a large train defect that will pop up every other day during the harsh weather. This results in a numbing effect for those involved that makes working very useless indeed. You start thinking: let’s work again when this whole mess is over…

I think that’s a good thing, go ahead and forget the capitalist institutions that rule us all for a few days and celebrate life and love while eating till your stuffed! But, when you’re a small developer life is completely different….

There’s no one to blame for not working here at Xform, the work will have to be finished anyway. We’re not dependant on other businesses like the big corporations are. Our production results are what we make of it and responsibility is carried by everyone almost equally. No use in shoving your tasks onto someone else’s desk, it will wind up right back on yours the next day.

This week almost everyone at Xform will have to work on one project in order for it to get to a more playable state next Friday. I’m not directly involved in producing any assets normally, but I’ll be finishing the trailer for our aquatic racing project this week, so in a way, I’ll be part of production for a week. On top of that, I’ll be responsible for making sure that everyone can do their job and have all the tools that they need to do their job, and of course that they’re not malnourished (a lot).

Today is still special though. We’re going to check out the New Kids: Turbo! movie in the theaters. It’s almost impossible to describe to a foreigner how these characters fit into Dutch society, but believe me, you can find them in real life if you look hard enough. They’re funny as hell and it’s going to be crazy! Check out the trailer, kut:

Untill next week!

-- Erik

vrijdag 10 december 2010

Minigame sneak preview

Dear readers,

This week the minigames for the time management game have been finished. I've worked on the giraffe and monkey minigame. In the giraffe minigame the player has to tickle the giraffe's neck causing him to laugh which will allow you to give him medicine. The animations for it are very funny (Good job, Joep). The only thing we're still missing is a laughing giraffe sound. Here's a little sneak preview:

The monkey minigame and the other minigames our intern Richard made you'll see when the game is ready which shouldn't be too long from now.

Now that the minigames are finished I'm back to working on the platform game. I'm currently working on a boss level, coding the boss behavior. Unfortunately I don't have boss animations or even poses yet. This means I can code the behaviour but visually you won't see too much, which makes it harder for me to see if the behaviour is right. Next week the beta version should be ready, I'm not sure we'll make it though. But I'll let you know next week :)

-- Stijn

woensdag 8 december 2010

Unlock them all!

Many games today feature so called 'Trophies' or 'Achievements'. Also some of our own games have them. The time management game won't be an exception. While playing, the player can unlock trophies. For example, by delivering 10 banana's to the monkey, or by filling up 10 buckets with water. Hopefully this will give the game a higher replay value. People have to play the game more than once to unlock all the trophies. These will be saved locally on your computer. So after you've played, you can comeback and play again without losing your progress :)

In the time management game there will be around 25 trophies to unlock. Varying from simple ones, such as delivering 10banana's to a monkey and trophies which are very hard to unlock. Finishing the complete game with a perfect score for example. To manage these I created a system which keeps track of each trophy's progress. I started by creating a data array which contained a list of trophies and their states, locked or unlocked. This was of course the easy part of the system. Nothing fancy. The difficult and cool part of the system is a second array which keeps track of each trophy's progress. All the trophies have different 'Goals'. So they can't use the same 'progress' data all the time. Therefor each trophy's progress is a unique list. This list consists out of 2 values. One value determines the target 'Score' of the specific trophy. We can say, the target of the 'BananaTrophy' = 10. The player has to deliver 10 banana's to unlock the 'BananaTrophy'. Then the other value in the list is the progress, or better said, the amount of banana's delivered in the game. When the player delivers a banana the progress value of the 'BananaTrophy' gets increased. Once per frame I run a function to check if there are any trophies that have enough progress to meet the target. If so, the trophy gets unlocked and the player gets a notification.

Doing it this way makes it very manageable for me to see if a trophy gets unlocked, is unlocked, is almost unlocked etc etc. Since it is dynamic and not 'hardcoded' it can be expanded without much of a trouble. One thing that has to be hardcoded though is the part where the trophy's progress value gets increased.

-- Joep

dinsdag 7 december 2010

Trailers and explosions!

Trailers tend to be great tools to highlight how cool your game is. Trailers for Xform games have one big attraction: explosions! That’s pretty much always the main feature of our games and logically, also our trailers. I’ll be working on a trailer for our most recent game in the coming weeks. Finally, our action-packed, highly exciting, aquatic racing game extravaganza is only a few weeks from release. 

Of course, I want the trailer to reflect the highlights for our most recent effort. So explosions will be the main ingredient for the movie. These explosions will indeed be caused by weapons, which will play a major role in the form of pick-ups during the race to shoot your opponents with. And in turn for them, to shoot you with if you’re in the lead…

Next up are the environments, which, together with the explosions will be the stars of the game as they’ll play host to lots of secrets and shortcuts. Actually they’ll be the scenes for huge, massive, epic, explosions themselves! How that will work out, you’ll have see for yourself once it releases in a few weeks time (don’t worry, we’ll keep you updated on the actual release date right here). Or you can simply check out the trailer here very soon! We’re really interested in how people will like our new release…

So stay tuned for more news on our newest release and the accompanying trailer in the coming weeks. I’ll keep you guys updated as much as I can!

-- Erik

maandag 6 december 2010

Beat the rush! Join us now!

It's that time of year again! No, not the holidays! It's internship season! For us, it's all about working through loads of applications and portfolios looking for programming or art talent. As you know, we're pretty lazy folk at Xform. So, if there are any crazy people out there considering applying, here are some tips to make our (and your) life just a bit easier.

The Application
At Xform, we always ask for a proper motivational mail, an up-to-date C.V. and, most importantly, relevant and accessible portolio work. So don't call us and expect to be hired at the end of the conversation. And don't let your school do all the work for you either!
The mail should be a short introduction to you and what you do. Why are you applying at Xform and not some other company? What is your goal after you finish your education? If it isn't landing a job in gamedevelopment, don't bother; internships are scarce as is!
It's always good to have previous fulltime work experience. Even if it isn't in the games-industry. So be sure to list everything on your C.V. All information should be good (providing an incorrect telephone number doesn't make a good first impression). Please state if you're a boy or a girl (to avoid emberassing situations)!
Have a place on the web to display your work. It should be easy to navigate and it should work, doesn't matter if it's your own fancy website or a personal space on a community site. Make sure that the stuff you show is good enough and works (even though that might limit quantity). If you've worked on a lot of team-efforts, make clear what your attribution was. And please: have a proper non-idiotic email address.

The Interview
Okay, so we want to meet you in person. Be on time. We really appreciate nice color prints of your work. Also, don't hesitate to bring crappy older work. It can give us a good idea of where you started out from and how fast you learn. If you really need to bring a notebook, make sure the battery is full and you have the stuff you want to show ready (and tested!). Don't worry too much about things we might ask. It's all about getting a good idea if someone fits in the team or not.
At least try to make an effort not to come across as a total moron. Unless of course, if you ARE a total moron. Then it's good that we get an honest early warning.
The most important thing is that you get a good impression of what working at Xform is about. We usually give a small tour and an impression of what we're working on and how we do it. Remember, it could be the place you'll be spending a lot of time, so don't hesitate to ask if you're curious. Please let us know if you have special needs or diseases! Don't think you'll surprise us though ;).

Can't wait for your mail!

-- Diederik

vrijdag 3 december 2010

A change of project

Dear readers,

This monday I was told at our weekly meeting that I was to work on a different project than the platform game I have been working on. This came as a surprise to me and I wasn't sure if I was happy about it. It's like when you work on your personal project, abandon it for a few weeks and then come back to it, only to find that you forgot the details/bugs of your project. Comments in the code usually help you to get back in to the project faster, which is why I always try to comment my code, even code that seems rather trivial at the time. But at the same time, a change is nice and when I get back to the platform game there will hopefully be more art available as our artists are continuing work on it.

As Joep mentioned, I'm now working on 2 minigames in the time management game and they're coming along nicely. In the process of making these minigames we found we needed a graphical user interface slider. As sliders are common in user interfaces I made a script which attempts to deal with sliders in a generic way so it can be used across multiple projects. Usually sliders are used either horizontally or vertically, but in our game we have a slider that's placed diagonally. So to keep it generic it would be best to have a slider that can be placed in any orientation. The problem then is when we move the slider to find a correct slider position based on our mouse position. In a horizontal and vertical slider this would just be to take the x- and y-coordinate of the mouse respectively, but in an arbitrary orientation both mouse coordinates need to be taken into account. We do this by projecting the mouse cursor on to the slider (see image): projecting a point on a line in such a way that the distance is minimal (the angle between the slider line and the line between the projected point and the mouse cursor point is 90 degrees).

In the images the slider defines the line segment which is shown as a solid red line. The line segment is part of a line, shown as a dotted red line. The line is parameterized with t in such a way that the start of the line segment is associated with t=0 and the end of the line segment is associated with t=1. When projecting we obtain a t value which corresponds to the projected point P. When 0 <= t <= 1 then the projected point is on the line segment. When t < 0 or t > 1 then the projected point is outside the line segment and we set t to 0 and 1 respectively to keep the slider button on the slider. In this way you can define a slider in any rotation and it will still work correctly :)

-- Stijn

donderdag 2 december 2010

Color Correction on textures PART TWO

Hi All,

Finally I have found the time again to write you guys a blog post, the past few weeks have been very busy as we've been finalizing the "water race game". One of the major tasks we have to do at the end of each project is the color correction of the textures, Diederik already wrote a post on how this is done on a single image, I would like to show you guys one way of color correcting multiple instances of the same image in one file.

For our game we need the same set of four water particle images for each track, but they all have to be color corrected to match the environment of each track. One of the most common ways to do these kind of tasks is to create Photoshop Actions for each image, but I would like to show you another way to adjust multiple images at once. This is how I did it for the water particles:

Click on the images for larger versions!

I created a Photoshop file and imported the images that needed to be corrected, in this case four water particle images, and turned each image into a Smart Object. Next I aligned and placed them into a Group Folder which I gave the name of the first race track. I also set the folder blend mode to Normal (instead of the default Pass Trough). This prevents adjustment layers placed in this group to affect layers outside of this group. Next I paced a Gradient Map Adjustment layer (for color correction) inside the track Group Folder and on top of the Smart Objects. So in this case the Gradient Map only affects the Smart Objects inside the Group Folder.

At this point the color correction for the first track was done now I only needed to create a copy of the Group Folder for each Track, move the whole folder so the images don't overlap and do some color correction by adjusting each copy of the Gradient Map Adjustment Layer.

Now I have one big Photoshop file which contains the corrected water particles for all the games tracks, but how will I save this into multiple images? Here’s where Photoshops Slice tool comes in Handy. With his tool you can mark and name area's (slices) in your Photoshop file which can be saved as multiple images in just one go ( It’s amazing!) by using the Save for Web and Devices option. Finally Just copy each image in the right directory and we're done.

Setting up a file like this can take some time, but once it's done it can make your life a lot easier.

Cheers, Matt

woensdag 1 december 2010

The other way around: 3D to 2D..

Last week we were experimenting with minigames in the time management game. To see if this kind of variation of gameplay would add anything good to the game. In my opinion it works very well, also the other guys over here think it is a good idea to have them. So this week we decided to keep them and continue to work on the other minigames. Stijn is going to help me and Richard to get these done.

Today I'm working on the interface mockups for the minigames. Our interfaces are actually 3D objects, instead of 2D bitmaps. The interface objects are rendered 'on top' of the camera in the game.


Imagine these 3D objects which represent buttons and frames etc, to be connected together in specific order. Also known as a parent->child hierarchy.
For example. Imagine a small object called 'Options'. Every button/frame which to has to be displayed in the options screen is a child of this object. In the game we use a function to hide or show one complete parent->child tree. To show the 'Options' screen in this example, we only have to 'Unhide' or show the 'Options' root. Which then shows all of it's childs too, the complete options screen.

This makes it much easier to manage menu's, popups, option screens etc. It is critical though to have the 3D file which contains all of this hierarchy information well organized. One wrong link and the system won't work correctly.

-- Joep