April has arrived, Easter has already been celebrated (it won't be this early again until 2160) and the nights are getting lighter in the UK after we entered British Summertime. Until now, I have been catching up on a back catalogue of films that I have missed over recent months, during the dark Winter nights.
I love or hate films on two grounds; storyline and accuracy. For that reason, the two latest films I watched failed to impress. Snakes on a Plane starring Samuel L Jackson has to be the worst decision of his career. The CGI effects were great, although I'm sure herpetologists might not be so enamelled. The film would have been better if it had not attempted to shoehorn a storyline into it. Nancy Drew was one for the family. Although well presented for the target audience, there were glaring and potentially fatal errors in the facts. Someone choking, for example, does not require CPR - the Heimlich Manoeuvre has been the solution for many years now.
The same judgements I apply to films can be easily and effectively applied to any game you plan to author. Researching similar films and games is priceless. Ask yourself; Why do I love that film? What makes me switch off from that game? The two pearls I take from last weeks viewing are simple. Firstly, don't create something just because you found a new effect. Secondly, don't lose the audience of your technically perfect game by forgetting to create a believable scenario.
April has arrived, and it has brought a new batch of creativity. MPL3D Solar Sytem is released, and joins the ranks of outstanding commercial products. There are two development platforms nearing completion, along with updates to both DarkBASIC Professional and FPS Creator. In amongst, you can learn how to animate for platform games, and tweak FPSC shaders, along with other news and views.
Until next time,
A new update is now available for FPS Creator. Version 1.08, available from the main FPSC website. It not only delivers the performance boost requested by over 75% of those FPSC users polled, but also introduces a handful of new features. Here are some of the highlights of the latest release.
As Update 1.08 is released, the next installment is already in progress. There will be many of the features requested and included in the FPSC roadmap published earlier. These include:
A new version of FPS Creator X10 has been released, now at V1.08, which includes some minor fixes and support for Model Pack 3 for X10, which has now been added to your Order History if you own this model pack. The new version now includes a serial code check, so make sure you have your DVD case handy to re-enter your serial code within the software. We have added this to support the impending release of the downloadable version of the product. More information on this will be revealed in a future issue. The latest changes in V1.08 include:
Use the Update feature within FPSC X10 to download the latest version.
Are you a great modeller, but don't have the time to create an entire model pack? Do you have some great models sitting on your hard drive collecting dust? Have you ever wanted to turn your modelling hobby into a source of income but did not know how to sell them? Or maybe you already sell your models via other online channels?
The Game Creators have created a new portal which answers all these questions, and makes it effortless for you to sell your models to the entire FPS Creator community. If you believe you can produce high quality game models to the standards expected from the community, email Rick Vanner with sample screenshots of your finished models. If you pass the grade, you will be given access to our beta program to upload and test your content with the latest version of FPS Creator. You can set a price for your model and even include preview art and a description for your item. When the store goes live with your content, you will get a 50% split of all revenues your model generates, and because the store is built into the heart of FPS Creator you can be sure thousands of users will be browsing your models time and time again.
The Game Creators are looking for content ranging from simple domestic models - such as tables and chairs - all the way through to animated characters and fiendish weapons. We will provide you with help in the form of MAX files to rig your animations, applications to produce preview shots of your model and support you as you prepare and upload your models. The great news is that ultimately we'll be rolling the store out to our other game creation products so whether your customers are painting a level in FPS Creator or compiling assets for their latest Dark Basic Pro project, with a single click of a button they can be transported to the store to check our your models.
We already have freelance artist adding models to the Game Creator Store with almost 500 products ready for release.
This screenshot reveals the upcoming foliage capabilities that will become available through update 1.09. It uses new assets from the TGC store, as explained in the article above. You can specify static geometry that has order independent one bit transparency and no collision data, which is ideal for grass and shrubs, and also for trees and bushes. The implementation of this feature has become available only after careful considerations of optimised assets.
We have completed the finishing touches to Model Pack 3 for FPS Creator X10 and thisis now available in your Order History, if you are an exisiting owner. Note, you will need the V1.08 update to FPSC X10, as detailed in the previous article. The pack includes fixes which make third party assets less inclined to fail when running them through the X10 engine. Due to the way in which X10 is optimised, there are often substantial changes required to models and assets before they can work best in X10, and as each model pack is converted to X10 the process shall become increasingly faster. Model Pack 3 features an extensive collection of new rooms, platforms, structures, doors and windows for your DirectX 10 creations.
There are two significant projects under way at the moment in DarkBASIC Professional. Both are nearing completion, and both need the help of the larger community to ensure their success. Before we take a look at these, let's get up to date with the latest changes to the language itself.
A new update is now available for Dark Basic Professional. Upgrade 6.7 includes a host of bug fixes, a small performance optimization and a number of minor enhancements.
This compilation is mainly as a result of feedback at the TGC 2007 convention.
The following functionality encompasses the changes described earlier.
CALLBACK code when DBP app loses device and regains device:
'?D3DDeviceLost@@YAXXZ' and '?D3DDeviceNotReset@@YAXXZ' are called
CALLBACK code when DBP app successfully resets device:
'?D3DDeviceReset@@YAXXZ' is called
These additions can be used by TPC DLL authors to instantly detect when the user ALT+TAB out of a full screen exclusive application. The following code can be added to an existing TPC DLL code to export the 3 decorated functions required for the new callback system:
#define MYDLL __declspec ( dllexport )
MYDLL void D3DDeviceLost ( void );
MYDLL void D3DDeviceNotReset ( void );
MYDLL void D3DDeviceReset ( void );
A minor update has been uploaded and is available from the download history of existing users. It includes some small bug fixes, and speed optimisations in various areas.
The Intel website is presenting a number of video interviews from GDC 2008. Among them is an appearance by Lee Bamber, discussing the N-Core Revolution. It's quite an eye-opener for those who have not yet considered the implications of this milestone in hardware that will govern how software is designed. Crucially, Lee spells out the future for anyone who isn't prepared to make the shift to new technologies. Click the image to watch the video.
In the second video, Lee talks about the unusual path taken towards optimising FPSC X10 for multicore processors. Artificial intelligence, lightmapping and video capture take advantage of multicore processors, here is how it all started.
Sequential programming is out. Parallel programming is in! According to Lee Bamber, that's the future, but what does that mean for Dark Basic Professional and DarkGDK users who are predominantly sequential coders? For future users of DBP and GDK, it means nothing less than blistering performance without touching a single line of parallel code. That's right; all the parallel code will be built into the engine, hiding the complexity of CPU scaling and so retaining the ease of use that has made our products so popular. Future versions of our technology will effortlessly spread your application across however many cores are available, with the flexibility to take control of n-core logic yourself or leave it entirely for the engine to handle. TGC recognise the impending arrival of n-core architectures, and will work to ensure you have the tools to produce cutting edge applications and games.
Warwick Game Design is a student society at the University of Warwick, open to anyone with an interest in video games and how they are made. They provide support, learning and practical experience for students of any skill level. Their current President is Jonathan Gover, known on the forums as TheDarthster. TGC were honoured to sponsor their latest 48 hour game-making competition, with $180 USD of vouchers for the winners.
The competition has no restricion on languages used; the latest winning entry named Shifty Trains is written using ActionScript 3. On a personal note, it takes me back to the original game which I played endlessly in the eighties on a tabletop arcade machine! Congratulations to the winners.
PureGDK is currently in beta phase, but now at the crucial stage of needing user feedback. In summary, it is an intermediary compiler and a set of command libraries that interfaces the DarkBasic Professional and PureBasic language at compile-time. This allows DarkBasic Professional commands to be compiled and debugged right out of the PureBasic IDE. It also brings a powerful new command set to both PureBasic and DarkBasic users alike. Both DarkBasic Professional and PureBasic are required to compile.
PureGDK comes with support for 22 third-party plugins which adds over 1,000 new commands to the already impressive Darkbasic Professional command set. PureGDK also provides a plugin framework which allows anyone to effortlessly add support for their favorite plugin.
PureGDK integrates two separate products, thus bringing the combined power to your toolset. As well as the already familiar DarkBASIC Professional commands, new users to PureBasic will find an expanded arsenal of functionality to encompass in their projects.
The image here is a snapshot of the multiple camera demo program. You can download it along with the PureBasic code that produced it. A further 18 demonstrations of various other aspects - covering most functional areas of DarkBASIC Professional - are available from the PureGDK website.
As a bonus, Matt has also produced a further demo exclusively for the newsletter. You can find the download at the end of this article, alongside other useful links.
Matt (aka Mistrel) is now looking for beta testers to stabilise the product before a full release in the coming months. You can join the testing program at his website and be part of what looks to be a promising new slant on DarkBASIC Professional.
|PureGDK Forum WIP thread|
|PureGDK Fire Demo|
Magnus Esko is Digital Awakening, a Swedish development company. Right now, Magnus is fully immersed in Simple Game Toolkit (working title), currently published as Prototype 4 and available for testing, debugging and critique by the community. The software is intended to make 2D game development easy enough for anyone to learn while being powerful enough for professional use. SGT is developed around the 4 core values of being easy, solid, fast and powerful. With no programming required it's mainly for artists, designers and writers. It is scheduled for commercial release later this year.
The development is carried out in DarkBASIC Professional, harnessing the additional power of BlueGUI and AdvancedSPRITES. Magnus has been using DarkBASIC since 2001, and so is a veteran to most of us. Nevertheless, he confesses to learning how to resolve problems as he meets them, going as far as creating features like pathfinding himself using old fashioned pencil and paper. You'll find this feature amongst other gameplay-related additions in Prototype 5, released shortly.
The latest prototype adds many new aspects, which will also give newcomers a flavour of what the application is all about:
The opportunity to take your pet project and make it a commercial concern is something many indie coders dream about. Magnus has taken this step, and so I asked him what advice he could give to other would-be entrepreneurs. Living in Sweden, he relates to the situation in the Nordic region, but the practises of securing funding can be applied globally.
"Everyone who wants to start a new company in Sweden may apply for a bit of money that would represent a salary for a few months, this is way lower and way harder to get these days compared to some years ago. I got it for four months last year. The office I have is currently rent-free, it's an incubator for new small companies where anyone can get a free office for a little while.
"Digital Awakening has also been involved in an EU financed project known as "Young Entrepreneurs in Barents". Barents is a region near the Barents Sea with the northern most parts of Norway, Sweden, Finland and a small chunk of Russia, including Murmansk. During this project I've had the chance to meet companies interested in using SGT professionally.
"There are grants to apply for to use for investments but as you still have to pay half of it, I haven't invested much yet. This is a problem for a company like mine; I don't have expensive machines to buy and it is a long time before I can earn money. I'll be looking at patenting some of my ideas and there may be further funding for this. There are also ways to get funding over here if you want venture capital or if you are a university/college student, but neither applies to me.
"What sort of funding and help you can get depends largely on which country you live in and also where in that country you live, so anyone else looking for financial assistance should try to find an advisor. A government employment office might be a good start; or if you are a university/college student check if there's anyone there who can help you out.
"Currently I'm thinking of organizing a small convention/meeting of my own with a crash course on how to use my software and a lecture on some game design basics, targeting companies and schools interested in using the program. It would be a chance for them as well to meet each other for discussions on how to use the program and some networking, as well as giving me feedback and requests on features they want.
"Most importantly, I believe in my software and I really want to see it come true. There's a whole lot of potential in it, I just have to get it far enough to start selling it. "
The results of importing the standard demo level look promising, and feedback has been positive. The forum thread has an impressive array of screenshots and full details of this plugin.
3D World Studio is an intuitive modelling application, including features like lightmapping, constructive solid geometry, vertex manipulation, translucent and masked shadow effects, and an improved entity system. New tools in the latest version include slice, extrude face, and arch primitives. Visit the 3D World Studio page for full details.
Applications don't get much larger than MPL3D Solar System. It would be fair to say that this one is astronomical, in all senses of the word. Manuel Perez de Lema Lopez and his team have used DarkGDK to map out the majority of the close known universe. Stretching beyond our own Solar Sytem, it reaches out to include another 120 extrasolar planets amongst over 10,000 mapped objects in this interactive simulation. Having being priveleged to experience the pre-release product already, I can see great potential as a tool for hobbyist stargazers, and also in education. One issue I recall from my school days is not being able to represent Earth and it's neighbours realistically in a book due to the vast distances between them. This overcomes that problem.
Based on scientific data, every planet has been carefully reproduced as a visual representation, alongside the technical details. You can explore our own planets, the exoplanets mentioned earlier, nebulae, star clusters, several galaxies and even Sagittarius A, the black hole that exists at the centre of our own galaxy.
Manuel has enlisted three others to produce this complex program. Matthew Alvarez is an astronomic advisor, ensuring the accuracy of the simulation. Bruno Gallego Martin has composed the sound tracks, and Maite Cambronero Hellin has ensured the quality of the final product. As well as DarkGDK, used over Visual Studio 2005 (this project has been in existence long before the latest version of the GDK), the team have also incorporated EzRotate and DarkShader to great effect.
As a user of MPL3D Solar System, you can expect an immersive experience:
Take a look at some of the screenshots from MPL3D Solar System, and take the time to watch the preview video. Visit the website for full details on purchasing, the full version is planned to be available from April 1st, 2008. You can use the following voucher code to receive 10% discount if you're suitably impressed by the downloadable demo:
To complement the release of MPL3D Solar System, Manuel has agreed to share the insights needed to creating wonderfully bright, glowing objects. The code is produced using the original DarkGDK, but can be easily applied to the latest versions.
A set of ghosted plains pointing to the camera are sufficient to do the job (the technique is usually known as 'billboarding'). In MPL3D, they use pre-rendered textures that give the glow sensation around the stars. Ghosting these planes gives the best results, because it's additive blending will make them much brighter when two or more of them are overlapping.
To set up these kind of planes just follow this code:
dbMakeObjectPlain ( plain_object_number, plain_size, plain_size) ;
dbSetObject( plain_object_number, 1, 1, 1, 1, 0, 0, 0);
dbGhostObjectOn ( plain_object_number, 0 );
dbDisableObjectZWrite ( plain_object_number );
dbSetObjectAmbient( plain_object_number, 0);
Use the plain_size that best fits your media and planet or star object, and then position it every loop like this:
dbPositionObject( plain_object_number, star_X, star_Y, star_Z);
dbPointObject( plain_object_number, dbCameraPositionX(), dbCameraPositionY(), dbCameraPositionZ());
Now you'll need at least two planes to make the ghosting additive blending more spectacular: one fixed with the star strikes, and another one for creating a permanent ambient glow around the star. Textures are very important, and best results are achieved when mixing similar colours, while maintaining the textures differently.
For the planets, an additional ghosted or transparent sphere is used, as well as another ghosted plain (one should be enough). To make the planet bright in just one side, just find the vector that joint the light source (the star in this case) and the planet, every loop, and then offset the plane in this direction, this code shows how to do it:
dbSetVector3 ( vector3, x_planet - star_X, y_planet - star_Y, z_planet - star_Z);
dbNormalizeVector3( vector3, vector3);
dbMultiplyVector3 ( vector3, displacement_factor * dbObjectSize(planet_object _number) );
dbPositionObject( plain_object_number, x_planet-dbXVector3(vector3), y_planet-dbYVector3(vector3), _
dbPointObject( plain_object_number, dbCameraPositionX(), dbCameraPositionY(), dbCameraPositionZ());
Find the displacement_factor that best fits your media, usually a 0.15f gives good results.
Finally, to make the lava glow at the unlit side of the planets, you will need a black texture with the lava areas painted with the desired colour. Once you have created your object and textured it, use this last texture as this:
dbSetDetailMappingOn (planet_object_number, lava_texture_number);
This will make the highlighted areas at the lava texture to glow irrespectively of the light sources.
Don't forget to use neat textures, as they are the key for a good visual experience.
Did you know you can change some of the built-in FPS Creator shaders if you want to? I bet many of you did not know FPS Creator had shaders! Even when full effects mode is switched off, there is still one shader that is used to render characters to the scene.
This character shader, is called FASTBONE.FX, and can be found at 'Files\effectbank\fastbone\' in the installation folder of FPS Creator. By default it has been created to facilitate fast GPU skinning of animating characters, and of course texturing and lighting.
You may find when creating your games that the characters are washed out and seem to be using a lot of ambient and non-directional light to illuminate the surface of the character. You can change this lighting very easily by opening the FASTBONE.FX shader in NOTEPAD, and changing the following line:
gogo = (max(0, dot(netNormal, L))*SurfColor*0.25) + (SurfColor*0.75) + AmbiColor;
To this line:
gogo = (max(0, dot(netNormal, L))*SurfColor*0.8) + (SurfColor*0.2) + AmbiColor;
Essentially this means that 80% of the light that illuminates the character will come from the directional light source, and only 20% will come from area lighting which is made up of all the lights in the vicinity. When you make this change, you will notice your characters have a striking look as they use much sharper lighting in the scene. In the example opposite, the left hand character shows the standard shader. The right hand character has inherited the updates.
Also, for those up for a little fun, would you like to turn all the characters in FPS Creator into green ghosts? Here is how you do it. Find the line:
return tex2D(colorSampler, Tex) * Diff;
And change it to read:
return Diff * float4(0,1,0,0.25);
Make sure you keep backups of your important files before changing them, especially shaders, and bear in mind that when you reinstall and update the software you may lose changes you have made.
Last month saw the start of a platform game, laying out the foundations on which to build. This month continues to build on those foundations. Again, the source code is far more in-depth than the tutorial, so download it and review the techniques alongside the article.
As promised last month, the blue blob is gone! - may I introduce you to Bruce, the star of this retro fueled platformer. Our game is going to be loosely based on the classic C64 and Spectrum platformer Bruce Lee, published by Datasoft and Ocean in 1984. It was a typical collect and jump affair, with lots of difficult timing and jumps, and a fair share of strategy thrown in. Bruce had a green nemesis, there is also a little ninja who appears to be on a break in the screenshot of the original game. Both these characters will be added over the coming installments.
I don't believe there is much that can be learned by trying to replicate a game exactly, so our game will be loosely based on the original, a remix with it's own level designs. The core gameplay will remain the same...
For a platform game, there is some decent Kung Fu going on, along with 2 types of jump, very elaborate climbing, and even laying flat on the ground when needed. All these different actions require some careful coding and planning, and that's what this part of the tutorial is going to focus on. With platform games, it's important to lay some ground work before getting down to actually designing the game layout. For that reason the main character is introduced with most of his actions in place, this will allow accurate testing while designing the level layouts; there's no point in making Bruce try to do the impossible. It's also a lot more fun to design levels if you can instantly test them out.
The animation system we're using relies on a typed array, with several properties that are used to decide how to handle each animation. The type contains the following variables:
These properties are set with a function call for neatness, for example, the running loop:
global anim_run=01 : set_anim(0,01,"RUN", 0, 0, 9, 39, 14, 34, 0.70, 0)
The actual running loop has transitions back to idle, so if Bruce is idle, he will start from an idle stance and go into the first real loop frame (14), then when he reaches the end of the loop (34), the frame will be set back to 14 again. Both start and end frames are always specified, even if they are the same. Here the actual loop frames are shown in red, the transition frames are blue. Frames 9 and 39 are identical, used throughout the animations as a standard idle frame.
The update_player() function handles all of Bruces actions, each action is assigned a global ID number for clarity; it can get really confusing if you only use the ID number itself. There is a lot of logic in the player handling function, really it's best to study the code for this as there are so many factors that can affect what Bruce is doing. One major factor is when the player is on a ladder, this is initially detected when the player presses up when near a ladder. They will grab onto it and the player mode is set to 10, or anim_hang. There are 5 modes associated with hanging on a ladder, idly hanging, and 4 directions of movement. If Bruces feet can get onto the ladder then the frame number is offset by 45 frames. This saves time because there is no point adding another 5 modes just for a pair of feet, so basically if the feet can go on the ladder, and the player mode is in the correct range, the animation frame is offset.
The properties that are set in the animation system control the type of loop, what direction Bruce will face, and what movements are allowed. When Bruce is lying down for instance, there is no movements possible, so the movement setting is 1, which will disable any movements. These settings are as follows for now at least, although we will no doubt add to these in the near future.
I used CharacterFX for animation, it's a cheap and straightforward animation package, works very well with DBPro. There are other cheap animation packages like Fragmotion for example, which work in much the same way. One thing that I've learned is that you can never get all the animations right straight away, things always need tweaked, so I expect Bruces animations will change during the course of this project.
The test demo controls have changed a bit since last time, before all we had to worry about were running and jumping, now we use spacebar to attack. If Bruce is running when you press attack, he will go into a flying kick, if he's idle then he'll punch straight ahead. He can also lie flat on the ground by pressing the down key, jump straight up and diagonally depending on if Bruce is moving, and even jump from ladders if you press up while moving off them.
The character collision has changed slightly to allow more inbetween checks. Bruce is around 15 units high, and each block is 5 units, so if left unchanged, Bruce could end up impaled on blocks!. Now the player collision check can deal with any height, and a block collision check function has been added to allow ladder detection.
The test level is now a simple 2x2 screen affair, with lots of ladders to climb on.
As we add other characters, we will use the same global animation ID's, but will specify unique character numbers. Right now all of the players properties like position and speeds are single variables, next time we will tidy these up into a character array which will hold all the information for all characters. For example the player would be character 0, Mr.Green would be character 1, and the ninja character 2 - in the original game it is possible to play 2 player mode, the second playing the part of Mr.Green, either co-operatively keeping the ninja at bay, or just annoying Bruce. By organising the player properties into an array, it's far easier to implement multiplayer mode, and AI, hopefully there will be someone to punch in our game very soon!
Now that our star is in place, next month we'll take on the level editor. We will also get rid of the Neapolitan ice cream block graphics! In the meantime, get familiar with the code and understand exactly how it ticks.
A few links you may have missed over the past few weeks...
CrazyBump is a new product in it's beta phase. When released it will cost $99USD for the indie developer, but until April 15th it is free to use. The normal maps it produces are excellent, watch their video to see how they look.
Long time forum member and avid contributor Ric has extended his skills to online Flash games. Using Box 2D physics, also available as a plugin for DB Pro, this is a highly addictive game.
Particle Sandbox is a useful tool for DarkBASIC Professional developers who use DarkPHYSICS expansion pack particle effects as it allows developer to create and tweak their particles real-time as well as export particle emitter code directly to paste into their own product.
Swap 'n' Go is an old classic that is getting a makeover, all thanks to David Gervais and whoever has the motivation to join in and contribute. The aim is to produce a final that is worthy of Showcase status, and shows the capabilities of DB Pro to their full potential.
The 20 Line forum board is one that doesn't get too much attention these days. It's actually a home for some interesting concepts and often ingenious coding to create something special out of very little. This month Pasky has posted not one, but five code snippets to demonstrate various effects and techniques. Each one is worthy of merit and illustrates just how much can be achieved by thinking outside of the box.
This entry demonstrates many aspects. It starts with modelling from primitives to create a very convincing spider. The texturing completes the effectiveness of the model. Animation is applied to the spider to bring it to life in an extremely lifelike manner, and finally it is tracked across the landscape by a wandering camera.
Here, Pasky has created a story in just 20 lines of code, cleverly avoiding language barriers and the massive overhead of any audio. Along the way, this code demontrates the implementation of simple physics and shadows, along with timing and object orientation to animate the storyline.
If you thought it was impossible to create a medialess car racing game complete with car, textured track, barriers, mountainous landscape, start and finish lines and starting lights, think again! This is a great example of the use of simple objects to create a convincing arcade-styled environment.
This one is for the purists. There are only 20 individual lines of code to create this interesting simulation of caterpillar motion, with no concatenation of multiple commands per line. The end result is a visually effective reproduction which cannot be appreciated without watching.
This demonstration is the result of lateral thinking, to turn what is considered an intensive effect into a ridiculously simple implementation. What the screenshot does not highlight is that this technique works for any surface with no additional effort - you can cast shadows on rough terrain, walls, tables and chests - anything and everything!
Each month we pluck one lucky subscriber from the newsletter mailing list and award them a free copy of DarkBASIC Professional. The email address of this month's winner is: firstname.lastname@example.org If this is you then send us an email to claim your prize.
If you have something you'd like featured in a future issue then please get in touch and include as much information as possible (including where applicable: screen shots, URLs and zip files).
Issue 63 deadline - April 28th.
"In the long run, a single-planet species will not survive. One day, I don't know when, but one day, there will be more humans living off the Earth than on it." - Mike Griffin, director of NASA