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.

--Joep

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.

-Matthew

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

dinsdag 30 november 2010

From Marketing to Production

As the snow begins to fall and mass hysteria sweeps the nation over a bit of frozen water, we all start work with ice cold enthusiasm here at the Xform offices. Even the mice seem to be too cold to come out and grab our breadcrumbs. The end of the year is always the perfect time for a bit of contemplation on what has happened in the last year. Mainly because there’s nothing else to do of course. I’m staying inside as much as I can from now on, but before I get cabin fever I want to reflect on some videogame related memories and thoughts for the future.

I started in videogames as a writer. I was so bored with the movie theory I had to read for my study (“Film- and Television sciences” at the University of Amsterdam) that I decided to apply my own  theories to videogames. Videogames played a very small role in the curriculum as a part of “New Media” the major (nowadays you would call it a Master) I decided to follow. 

I ended up at a Dutch television show about videogames for an internship. It’s a show called Gamekings and they still make damn good television now. These guys were really cool and I enjoyed my time there very much. I learned a lot about work and life in general there and made some good friends. Plus, I got to travel all over the world as a cameraman on location.

After that I made a clean break there, because it felt wrong staying there not knowing what I really wanted (as always with me). I ended up at now defunct Playlogic International N.V. as a Product Manager. My first experience with an actual “office space” got me depressed for a while. But I did see potential in the company at that time and felt the motivation to push on. After 2,5 years I jumped ship just in time and joined Xform.
Now it’s time to switch my work once again, from marketing into hardcore production. I think videogame production suits me the best, because marketing involves too much lying and betraying your conscience in general, not a strong point for me. Being part of a real production company, seeing how products get made and actually get finished is a great experience.  Plus, more importantly, you actually get to see the fruits of your labor, once you put something in you’re instantly rewarded with the result of what you do. I’ve had contacts with production at all times during my marketing times and always wanted to know everything about the project. In marketing you’re always treated as someone who doesn’t know what it takes to make a game and your requests are always greeted with a very deep sigh. I think I’ve always known how it works a bit, because I’ve worked in television production, but at Xform I can finally see it firsthand. Browsergame production is actually the most hands on I’ve ever seen videogame production work. It’s production in its purest form and at Xform  games tend to be pure fun.


-- Erik

maandag 29 november 2010

Office Space Invaders

Hi all,

Bad news! We had a break-in this weekend. Another one…

A couple of months ago we were also ‘targeted’ and all of our game consoles were taken. This time nothing is missing,.. Fortunately… The door to one of our offices was kicked in, but the only valuable thing in there is a TV and it is probably too heavy to carry anyways. Nevertheless, it is a pain in the ***. The door needs to be fixed, a visit from the cops, etc. All sorts of time-consuming tasks you don’t need or want when starting a new week on Monday morning.

Honestly, I don’t really care that much if they would take the PS3 again as long as the leave our computers alone. When something like this happens it always reminds you of making sure your work is properly backed up and safely stored. Thankfully, we've always done this since the beginning. Not only by making regular hardcopy backups (DVD storage and external hard disks), but also by storing your work on multiple computers at work and at home (using file versioning software). So if things go wrong again we’ll always have the most recent developments versions of all of our projects. It is a shame you have to keep this all in mind. Making sure that whatever happens; theft, fire, airstrikes, alien invasions (I am blaming the aliens for this one), nuclear detonations and earthquakes your work is never gone. Wouldn’t want to start Burnin Rubber 4 from scratch again…



Well, to end this post on a positive note. This week we will be starting to work on an update of one of our games. Of course I can’t tell you anything about it, only that it is going to be awesome! Again… ;)

--Pieter

vrijdag 26 november 2010

Turning 2D into 3D

Dear readers,

I've been waiting for artists to continue my work on the platform game, but they were all put on other projects. So it was just me working on the platform game, which is not very exciting. In the meantime I've been working a little bit on a side-project, something that would be useful for the level designers. The levels for our platform game are in 3D and currently our artist Matthew has little bits and pieces that he has to copy and put together to make a level. Only in the 3D program we're using this is not a fast process. Matthew suggested using a 2D tile-program and then converting the 2D tiles to 3D as in the 2D tile-program you can create the level much faster. Good idea, but easier said than done of course. So I investigated a little to see if it would be doable within a short amount of time because if it takes me more time than Matthew gains by it then it might not be worth doing. But I was able to do it within one day and it works nicely and gives us a quick and easy way to make levels. The level designer no longer has to attach vertices himself or detach the grass objects on top. On conversion I also made it so that each disconnected piece of ground becomes an object which makes the game run more efficiently (as we can choose not to display ground objects which are not in the player's view). The level designer will still have to place custom items manually in the 3D program, but the 2D is very nice for quick prototyping.

Test level designed in 2D map editor:









 Converted to 3D:









I think I took more time programming this than if it was all done manually, but I learned more about scripting in the 3D design-program we're using plus the names of objects are always correct. So it's very useful :)

-- Stijn

woensdag 24 november 2010

Minigame Mayhem

The time management game is making good progress. We are entering the final stage of development. Which doesn't mean that there is less work to do. We took a look at the game to see how it plays at this moment. How long it keeps us interested and entertained while playing. In my opinion the game is pretty solid already. But we decided to add a little more to get some variation in the gameplay. At this point most of the 'Levels' you can play feel pretty much the same. They vary in difficulty but the gameplay is generally the same. This is where we want to make a change.











Diederik came up with the idea of adding minigames. Imagine collecting a bucket and a brush. Then fill the bucket with water and take it to an animal to wash it. The minigame to play could be to wash an animal within a certain time limit. Washing for example, could be done by dragging over the animal with a brush as cursor. When the player succeeds, extra points are awarded. This way we 'break' the straight forward point and click gameplay of the main game.

The first 'wash' minigame is currently working with mockup graphics. It seems to blend into the game pretty good. If it works out as planned we probably keep this in the final game. And of course, add more different minigames.

-- Joep

dinsdag 23 november 2010

Just another awardless day…

We at Xform find ourselves at the office again for another day of work. Lately it seems just a tad bit more meaningless than normal… Why? It’s because we didn’t win anything last Thursday at the Dutch Game Awards :(

I’m kidding ofcourse, we’re slightly disappointed, but we don’t need recognition from a… well from anyone really. The fact that a single Xform game gets played by more than a 100.000 people each day is recognition enough that what we do is liked by a lot of people. However, with all that said, we have won a little bit in spirit with Flipper. The game won an award for “Best Mobile/Handheld Game” and the jury credited its only developer Hugo Smits (Goodbyegalaxygames) for this huge achievement in designing and programming the game on his own. The term “Bedroom coder” was used to describe what he had achieved on his own… literally in his bedroom (in Dutch we normally tend to say: “attic coder” for that type of person, just to emphasize the loneliness of it all). He has had a lot of help from us in publishing Flipper, but as this prize is meant for the development, it’s only right that he should take the credit for this on his own. It was great to see Hugo shining with his red owl on stage, a great crown on all his efforts and hard work. It’s still unclear what will happen with Hugo’s upcoming Flipper 2 but I’ll try to keep you up to date as much as I can what will happen from our standpoint. Nothing has been decided on this new game yet, so it’s up to Hugo!


It wasn’t all bad… for me at least… I was able to claim two awards with my former colleagues for a game I’ve worked on in 2009 and 2010. It’s a testament to the open and kind character of the Xform people that I was able to join my ex-colleagues in celebration of the award for “Best Visual Design” and “Best Audio Design” for the game Fairytale Fights. It was my old employer Playlogic that developed and published this game and I helped (my ass off) to make it! The company has unfortunately filed for bankruptcy in the summer of this year. This was after the game proved unsuccessful, with a very small chance the company will start over under new management, but this chance remains minuscule at this point. I decided not to stay for all the pictures at the award ceremony, this is something that the PR person should do, he still represents the company, together with the composer of the game, responsible for the audio. I’m working at Xform now! Next year we should definitely win a prize, as someone that has joined the company very recently I think there’s so much worthy of appreciation in the Xform line up, it’s high time for us to get the recognition we deserve from the jury. In the meantime millions of gamers will play our games, for now that really is all we need to keep going…

-- Erik

Color correction on textures











Hi all!

The last few days I've been working on some color correction for the textures for the water race game.

In most 3d games, the designer wants to achieve a certain ambience in the level he is building (i.e. dark, gloomy or maybe bright, sunny or even red and vulcanic). Nowadays, this is done by using techniques such as ambient occlusion, realtime pixelshading and shadows and fancy postprocess color correction on (parts of) the screen. As you might have guessed, we can't use any of that :(

Although for some games we do use lightmaps for more defined shadow and shading, sometimes this makes the whole game just too big and sluggish. So for now, we just use real cool retro realtime vertex shading and fogging.

Vertex shading can color the object's faces darker depending on the vertex's position and orientation toward one or two lights. Not really a lot of control on final tinting unfortunately. But at least it gives some more definition to the object's form and perspective.

Next to this we use fogging of objects in the distance. When used with a nice atmospheric skybox this can work really well. We don't want to fog too much though since it may interfere with our transparent objects and particles. Doh!

If done properly, this usually looks pretty okay, but not very special or unique. We sometimes like to add some additional color correction to the base texture to achieve more color depth and tinting, as seen in the final results picture above. Of course, this will make the texture only useable in one particular ambience! For our project, this is no problem.

In step 1, the darker tints in the base texture are desaturated. Often the darker tints of a particular texture are just darker version of the same color. This sometimes makes color spectrum a bit dull and fake. Maybe you could even add a step here to make the lighter colors more saturated.

In step 2, we create a gradient map that defines the color scheme for our level and apply that to a copy of the base texture. We then blend that with the prior result to make the texture fit more into the environment.

In step 3, we add just a tad of fog color to the texture. This will make it blend even more into the environment and sky. It removes too much unwanted distracting contrast and is more pleasing to the eye.

Back to work!

-- Diederik


vrijdag 19 november 2010

Turn around, every now and then...

An important feature of platform games is enemies. Enemies that will try to harm you and make the levels harder and more diverse. From a level designers perspective you want to be able to place enemies wherever you'd like, so for a programmer there is no hard-coding enemy behaviour like "when the x coordinate is greater than 5 then turn around". Instead enemies should be able to find their own paths. When the enemy bumps into an object he should turn around, so we might think "Ok, let's use the collision report that the physic engine will give us", but that won't do because sometimes the enemy needs to turn around when there is no collision. "What?" you might say... well, we don't want enemies to run off platforms and in to pits, so they should turn around at the cliff but we won't get a collision report. We might introduce a new invisible kind of object and place that at every cliff, but our level designers won't like it. So let's explore a ray casting solution.



We cast a ray from the center of the enemy (a collision box, see image). W is the box width, H is the box height and L is how far to look ahead, R is the length before the ray hits the ground (on flat ground, ignoring slopes for now). This diagonal ray captures both to turn around on objects that are on the enemies path as well as to turn around when reaching a cliff. If the ray hits an object within distance R then there is some object in front of the enemy, but this doesn't necessarily mean the enemy should turn around. It could be that the ray hits the player in which case we don't want the enemy to turn around because we want the enemy to hurt the player. So some objects the ray hits should be ignored. When the ray hits an object at a distance exactly R then it's the ground the enemy walks on and it shouldn't turn around. If the ray didn't hit any object (ignoring the player) within distance R (plus a little bit) then we should turn around otherwise we will fall down possibly in to a pit which we don't want.


Now let's also explore slopes. Slopes sort of ruin our solution so far because now when the enemy starts walking up a slope we will get a ray hit with the ground within distance R as shown in the image. What we can do to avoid turning around now is taking into account the normal of the point on the ground we hit. If the normal is not strictly up (Y axis) or strictly to the side (X axis, the walls are also ground) then we've hit a slope and we won't turn around. It gets more tricky when walking down a slope. What we would like to know is "the distance along the ray when we can be certain we're not looking down a slope, but we're at a cliff and we should turn around". This depends on the steepest slope we have in the game which is 2 units right, 1 unit down. The ray we cast has "slope" (W/2)+L units right, H/2 units down. Looking at the image above at "Walking down a slope" we want to find the distance where the ray intersects with the slope. To calculate this we start at the intersection point and walk back until the difference between ray and slope is H/2. The equation to solve then becomes ((H/2)/((W/2)+L) - (1/2)) * t = H/2 in which t is the unknown which can be calculated by t = H/(H/(W+2L)-(1/2)). Note that (H/2)/((W/2)+L) should be greater than (1/2) or else t will be negative or when they are equal we get division by zero (meaning they never intersect). The distance S after which ray R intersects the slope then becomes sqrt(t^2 + (t*(H/(W+2L)))^2). This should actually be a bit more cause I haven't drawn the worst situation (Can you see what is the worst situation?). Now if ray R hits a slope and the distance along the ray is greater than S then we should still turn around (this situation can happen if we're at a cliff but somewhere below there is a slope).

And now that I've thought this out, it's time to code it. There are still little things to take into consideration, but this will do for the most part.

-- Stijn

donderdag 18 november 2010

Fixing Potholes

As the week draws to a close certain events return like a vicious cycle. The ending of the workweek at Xform is usually the sign that some sort of Alpha, Beta or Gold Master Candidate (GMC) milestone for one of our games needs to be finished. This milestone is then delivered to one of our customers for their approval and (depending on the type of milestone) to receive comments on playability and design from them.

In the Alpha version you get real happy that there’s something there to begin with. The process of planning and brainstorming on the game design document finally gets expressed visually in a playable game.

By the time you reach the Beta version more elements come into play and there’s a lot more to think about. As the only dedicated artist, lots of requests land on my plate for assets that need to be enhanced beyond the lower grade visuals that might be in the game up until that point. For this version you want the game to look a lot closer to final, but it should be clear that there’s still a lot of tweaking to do in order to have the game ready for launch.

Once you get to the point of the GMC, you’ll be fixing potholes everywhere. It’s a lot less about getting the game to work and a lot more about getting the game to work perfectly. The analogy works very well because of our racing game heritage, but is of course, also very true for our differently themed games. There can literally be bits and pieces missing in the scenery that might only come up when someone falls through them while playing. It’s a process of fixing and filling the world with believable textures and I’m afraid I have to get right back to work in order to do that. On top of all the work today we’ll be leaving earlier today for the Dutch Game Awards, so I’ll have to make it count!


-- Matt

woensdag 17 november 2010

Learn to play!

I'm currently working on the 'Tutorial' mode for the time management game. We are going to display the tutorial as a text bulb on screen, filled with text telling the player what to do. We decided that the player always has to click through a tutorial message. Of course, the tutorial can be skipped entirely.












A system like this is pretty tricky to develop. It has to be modular, so it is easy to add more tutorial messages and actions for example. We use some sort of scripting from external files to tell the game which tutorial message to display at what time. Some tutorial messages have triggers, to force the player to do a certain action before the game can continue. These triggers are partially defined in the main code, or better said 'hard coded'. And partially defined in the external scripts.

Currently the only drawbacks of the system are the hard coded triggers (and long scripts.. to define all the tutorial messages..). It would be better to have these completely working on their own from the scripts. So we can manage the tutorial message system entirely from external scripts.

(Not the most exciting update.. but hey, work can't be always exciting! )

-- Joep

dinsdag 16 november 2010

The Dutch Game Awards

I’ve mentioned this before, but every year the Dutch gamedevelopers get together in an abandoned train hall near Amersfoort station. If Utrecht is the place where all the traintracks in our country come together (Utrecht is very much in the middle of Holland) then Amersfoort is the place where all the trains used to cool off when they were done transporting everyone around the country.

It is in a hall where these trains used to be repaired that the Dutch Game Awards will take place. Both Amersfoort and Utrecht play a central role in the development of Holland as a government subsidized gaming country and Amersfoort even hosts Game in the City completely in their city, putting it on the map not only as a gaming-, but also as a very creative city, due to a huge push from the government and other cultural funds. Unlike most of these government projects, these actually seem to work and have a very positive vibe to them.

Xform isn’t a company that is subsidized in any way (yet), most of the companies nominated for the awards aren’t either. The Dutch Game Awards are the awards that unite all Dutch developers and publishers and is more to honour the development, boost the morale and bring all the developers together in one room. This year, the biggest Dutch game publisher (and my former employer) is honoured posthumously with a nomination for their game: Fairytale Fights. A game I have worked on too… The Fairytale hack ‘n Slash fighter has a lot of my (and a lot of my colleagues’) ‘crunchtime’ in it and it would be nice to see the game get one award since the company that released it is officially bankrupt now and will probably not restart any time soon.

One of the organisors mimicking the look of the award: an Owl with sharp edges that could easily poke your eye out!

As I posted before right here; we’re nominated for four categories with three of our games: Burnin’ Rubber 3 (Best Online Game), The Adidas Neighborhood (Best advergame, Best visual design) and ofcourse Flipper (Best Handheld/Mobile game). If you haven’t voted yet for the Control Industry Award, please subscribe yourself to the Control Magazine newsletter (Control Magazine is the official host of the dinner party) and you can still cast your vote for this year’s winner.

Fingers are crossed. We’ll see you there!

-- Erik