Friday, December 29, 2006

HAVE A HAPPY NEW YEAR 2007 ...

Well, the same as last week: I won't be publishing any new posts till next Thuesday so I just want to wish you all have a Happy New Year 2007 !!!

See you next 2007 ... ;)

PROBLEMS WITH FULLSCREEN MODE IN XNA?

Some members of the XNA community (including me) have experienced problems with XNA games when running on fullscreen mode -in particular, I have a GeForce 6600 GT card.

The problem: when a XNA game tries to get/set the presentation parameters for accepted fullscreen modes, it takes the list of rates accepted by the gfx card and in some cases uses the higher one -for instance, like 240 Hz on 800x600. Phewww! So you will see nothing more than a black screen and your monitor trying to warn you that something is attempting to set an invalid refresh rate.

The workaround: if the user forgot to (or cannot) forbid any rate above the maximum accepted vertical retrace on the gfx card, just catch the "PreparingDeviceSettings" event and then set a common rate like 60 or 72 Hz. How? In the class that derives from "Microsoft.Xna.Framework.Game" class, add the following line (say, within the constructor):

graphics.PreparingDeviceSettings += new EventHandler<PreparingDeviceSettingsEventArgs>(MyMethod); // "graphics" is a reference previously instanced as "GraphicsDeviceManager(this)" usually in the same constructor

Then add the following method in the same class:

private void MyMethod (object sender, PreparingDeviceSettingsEventArgs args)
{
args.GraphicsDeviceInformation.PresentationParameters.FullScreenRefreshRateInHz = 60; // for instance, or 70, 72, 75, etc.
}

I've modified the code of games like Rocket Commander and Wildboarders and it all works great!

Let's hope Sharky modifies Air Legends soon so that I can finally play the game.

Enjoy!

XNA: COUPLE OF NEW FRAMEWORKS

I was wondering lately what had happened with Visual3D.Net's CTP -due to be released this month, so I directed my browser ro V3D's forums so as to get some answers -which I did not, but for my surprise someone posted a couple of links to new XNA-targeted frameworks: "3D Evolution" and "XNA Magic".

To be honest, I didn't have time to browse 3D Evolution's site as much as I did for XNA Magic's one -I promise I will sometime soon, so I will talk about the latter in this post.

XNA Magic looks pretty cool. It reminds me of "Unity" (for MAC). The demo videos do a great job on showing off what this framework has to offer.

So, pay a visit to both frameworks' site and compare them while we still wait for V3D's CTP (c'mon guys, hurry up!).

More later.

Wednesday, December 27, 2006

Saturday, December 23, 2006

MERRY CHRISTMAS ...

Well, I won't be publishing any new posts till next Thuesday so I just want to wish you all a Merry Christmas !!!

Let's hope Santa brings peace and prosperity to those in the world who need them ...

XNA - PART 2 VIDEO

You wanted it, you've got it!

The second part of this series is showing in detail not only some of the games we are all already aware of, but new ones that you -like me- may have never heared of until now.

XNA GSE v1 is just the beginning ...

NVIDIA GEFORCE 8800 LAUNCH EVENT VIDEO

Published on GameTrailers.com, the video shows a few but still impressive images of what the new card has to offer to gamers and why not, developers.

If the computer-hardware industry continues to grow like this, and users eventually buy this powerhouses, techinques like static lightmapping may become an antique.

Coming next: XNA - Part 2 ...

Thursday, December 21, 2006

RECOVERING VISUAL C# EXPRESS' PROJECT TEMPLATES

After installing XNA GSE v1 I happened to find that the project templates that come by default with the express version of VS C# - that is, Windows Application, Class Library, Console Application, etc. - had vanished from the IDE's templates browser ... :(

My first desperate move was uninstalling and reinstalling the whole thing (of course, after a very laoud scream of terror), but before jumping to a pool where maybe there was no water at all, I though (and look how clever I am): "Weeelllll! Maybe it's time to watch some TV ...", but adding almost instantly: "... but first let's do some search on MS's forums so as to get some answers, put the blame on someone else and common daily things like that ...".

For my surprise I found not one but two threads related to a similar issue which gave me a relevant hint on the workaround. And as we are approaching Christams Eve I'm going to share with all of you ...

The solution is simple, just execute the following line -either through the command shell (cmd.exe) or browsing your windows explorer to "start > run":

"%vs80comntools%\..\..\common7\ide\vcsexpress.exe" /installvstemplates

Of course you'll have replace "%vs80comntools%\..\..\common7\ide\vcsexpress.exe" with the correct path to "vcexpress.exe" in your local machine.

Although it all should work, it may occur a catch: the templates might still be missing according to the IDE's templates browser (this happened in my case, meaning, another scary scream). No sweat! If you open the folder where "vcexpress.exe" is located you will also find a folder named "VCSExpress", right?

If you don't, contact your local administrator, who will recommend you to (un/re)install everything.

If you did, open "ProjectTemplates" folder and then "1033" folder so as to find at least 4 zip files (usually 6) containing the missing templates. Copy these zip files to "ProjectTemplates", run again the above-mentioned command line and voilá! The IDE now recognizes all of the installed project templates.

It seems that XNA GSE installation process changes the "cache" file located in a folder named "ProjectTemplatesCache" in a way that all of the project templates installed within the "ProjectTemplatesCache\1033" folder are disregarded.

Thus, after applying the workaround commented in this article you will find the recovered templates duplicated in the "ProjectTemplatesCache" folder (that is, 6 inside and 6 outside the "1033" folder) until a MS's team fixes future installers of upcoming XNA GSE versions ... ;)

See ya!

XNA GSE: UK LAUNCH

On10.Net has published a video covering the UK Launch of XNA Games Studio Express which includes an interview to Chris Satchell as well as some scenes of high-quality games that show off the power of the framework.

Stay tuned ...

Wednesday, December 20, 2006

XNA: MORE VIDEOS

Channel 9 has published "The Best XNA Movie in the UNIVERSE" ... or at least they claim they have ... ;)

... well, anyway, the video covers the official XNA launch event, so you'll find interesting interviews with the guys we can thank for bringing to life this baby named "XNA GSE" as well as some community members that attended the meeting.

On GameTrailers.com you'll also find a video new covering XNA GSE -in line with previous videos available on this regard at GT's site- with more interesting interviews: XNA - Part 1. This video can be also found on YouTube with some other XNA-related videos.

Watch this space ...

Tuesday, December 19, 2006

JOSEPH BARBERA DIES AT 95

More sad news for the comics industry: "December 18, 2006 - The other shoe has fallen. Joseph Barbera, co-founder of Hanna-Barbera and co-creator of such favorite anmation characters as Huckleberry Hound, The Flintstones, Yogi Bear, Scooby-Doo and The Jetsons, died of natural causes at his home with his wife, Sheila, at his side, in Studio City, California, today, Dec. 18, 2006, according to Warner Bros. spokesman Gary Miereanu."

My most sincere condolence to Barbera's family and friends.

No more posts for today.

['Tom and Jerry' is one of my favorite cartoons of all times.]

Friday, December 15, 2006

TWO INTERESTING ARTICLES ABOUT XNA GSE

Yeap. It's true ...
  1. New Opportunities Offered by XNA: interview to Lionhead Studios boss, Peter Molyneux -by GameIndustry.biz.
  2. XNA In-Depth: 4-page interview to Microsoft's Dave Mitchell -by Gamasutra.
See ya.

MY FIRST GRAPHIC AD: REALM CRAFTER

Wow! I'm excited ... I have witnessed the appearance of a graphic ad in my blog: "Realm Crafter - Make Your Own MMORPG". Sometimes it shows up at the top-left corner of the side bar.

It's very difficult to get those kind of ads even if you set "Only graphic ads". Believe me ...

This blog is going up in the world ... ;)

Anyway, Realm Crafter is a framework that helps you create a Masive-Multiplayer Online Role-Playing Game (MMORPG). Until this year-end (December 31st, 2006) you can buy the current version for only $65 and get the upcoming version 2 for free.

If you want to know more about this promotion visit RC's site as well as check out the public portions of its forums to see some screenshots and read some news related to version 2.

Later.

Thursday, December 14, 2006

DECEMBER 2006 DIRECTX SDK

Microsoft has released the latest SDK for DirectX.

Among what's new in the release you will find the official launch of DirectX 10.

I'm downloading it right now ...

Wednesday, December 13, 2006

GREEN LANTERN CREATOR DIES AT 91

Sad news for the comics industry: "MIAMI - Martin Nodell, the creator of Green Lantern, the comic book superhero who uses his magical ring to help him fight crime, has died. He was 91."

My most sincere condolence to Nodell's family and friends.

"In brightest day, in blackest night, no evil shall escape my sight! Let those who worship evil's might, beware my power... Green Lantern's light!"

No more posts for today.

NEW ARTICLE ABOUT XNA GSE

GameIndustry.biz has published an interesting article with an interview to Chris Satchell -general manager of Microsoft's game developer group.

The interview covers the launch of XNA GSE plus future plans for it.

See ya.

Tuesday, December 12, 2006

TORQUE X OPEN BETA AVAILABLE

Well, yes. It's true. I have received an email message from GarageGame notifying the availability of an open beta of TorqueX.

You can download and test the demo of it as well as pay a visit to the new forums areas related to this product.

Now, it's time for Visual3D.Net to come out, don't you think? Let's hope so ...

Later.

Monday, December 11, 2006

XNA GSE V1.0 RELEASED!!!

As you may already known -given the large amount of blogs' news pointing out the same- XNA GSE v1.0 is out. Check the official words from the XNA Team itself.

One question though, any news regarding the release of TorqueX? We are still on December 11th ...

Friday, December 08, 2006

XBOX 360: THE NEXT WAVE

I had forgotten this video -also available at GameTrailers.com- with more interviews to XBox360 product's managers covering some of the games published and to be published for this great console.

Ok, ok, this time I mean it! No more posts for today ... ;)

XBOX 360: BEYOND THE BOX

GameTrailers.com has also published a video with interviews to XBox360 product's managers who explain the new strategy on peripherals available for it: wireless technology.

I'm really a lazybones today, so this is it for one day!

A COUPLE OF NEW XNA VIDEOS

GameTrailers.com has published some interesting videos XNA-related:
  1. Rally X: "the classic racer hits Xbox Live Arcade and will have you grabbing flags to complete stages", and
  2. Tank Buster: "wreak havoc on the skies up above in this game created using the XNA software".

I don't know whether this one relates to XNA or not, but I like it: Mutant Blasting: "blast away in this sequel to the Live Arcade shooter".

Also, high-definition videos are available for the above-mentioned three -just do a little search 'cause I'm lazy enough today to avoid posting the links.

Enjoy!

Thursday, November 30, 2006

WE ARE ALMOST THERE!

Yeap! December is comming ... sales, presents, christmas, XBOX360, PS3, Wii, XNA, TorqueX, Visual3D.Net ... phewww! Everything accelerates as we approach the year-end.

For us, "indies", it is a very important month as we are waiting for the final release of XNA GSE and with it, the parallel releases of TorqueX and Visual3D.Net.

Developers post questions over and over in every forum asking for CTPs, betas, demos, screenshots and such, as if they were children traveling in a car with their parents and continuously asking them: "Are we there yet?".

Patience. Even if they need some extra time to finish the products it will benefit us in the end: more stability, less bugs, more fun.

In the meantime, check "HeroEngine", it seems quite interesting. Unfortunately, neither demos nor prices are available in the site so I cannot comment about it (I don't know about the engine itself but the tools seem to be .NET-based). If someone has more information about this framework please drop me some lines.

Cheers!

Tuesday, November 28, 2006

A COUPLE OF INTERESTING ARTICLES

Checking my RSS subscriptions I have found two interesting articles:
  1. Securing High-Score Games: an article of the latest "Casual Games Quarterly" publication (by the IGDA) which talks about the different ways to set up online secure high-score tables, and
  2. Indies Will Lead The Way In Next-Gen Development: an article published by GamesIndustry.biz where it is pointed out that small teams will spread innovation.
Ah, yeah: don't forget to pay a visit to AniBoom's site and try to find my "crappy" 3d-animation. Remember that I said I had created it with v2.5 of a very well-known 3D-animation package. What are you waiting for? Just go and start searching for it ... it will amaze you ... ;)

Well, that's all for today.

Monday, November 27, 2006

ANIBOOM AWARDS 2006

I have received an email from the creative director of "Aniboom", a new website dedicated to host and share animations, inviting me to pay a visit and check the site out.

Although the site is currently in a beta phase -it works better with IE than Firefox, let me tell you that I have really found some high-quality videos, cut-scenes, 2d/3d animations and demo reels.

But the interesting thing is that these guys are carrying out a competition for a total of $50k in prizes: five categories, $5k for the winner of each category, and $25k for the "grand prize" winner.

Check the rules, choose a category and upload your creation. There's still time for new entries, so hurry up!!!

Who knows? Maybe I decide to submit a 5-minute sci-fi animation I created back in my old days as a student of 3D animation by using 3DS Max 2.5 ... and yeah, you've just read it right, I said v2.5, so imagine how astonishing it could be ... you have no opportunity against my demo reel ... whooooooahahahahaha ... ;)

I'll leave you with this very funny entry:



[BTW, thanks Einat for your kind words about my blog!]

Thursday, November 23, 2006

SERIOUS THOUGHTS ABOUT XNA GSE - PART II

Where were we? Ah, yes ... "Will I succeed by using XNA GSE?".

Let's face it: like everything in life, time will tell. Time will prove you were right or wrong but, is it worth trying? Straight answer: yes, provided you are able and capable of facing and breaking through a tight membrane formed of strong competition.

Like you, everyone is competing to get community, market, publishers and or employers' attention. No matter how shared in common a colleague may behave along the road, it all summarizes to a simple fact: in the end, to some extent, everyone is thinking "that prize has to be mine!". C'mon let me hear "not me". Anyone? (don't panic, just continue reading, ok?)

So, what could make one stand out from the rest? That's the key point.

A combination of skills, dedication, commitment and perseverance (not to mention finance resources to live on day by day).

"How could XNA GSE help me achieve my goals?" Interesting question. Personally speaking, for the first time I feel someone is providing a well-designed framework for game development with great potential.

Many companies offer many solutions to developers but you always find a catch: you have to learn a new language (either for hard-coding and or scripting), the language lacks a professional GUI and or IDE or even it is not an object-oriented one, there is no way you can extend the given framework, it lacks the proper tools, it does not provide the features you need, it does not handle with key aspects of game creation as expected, plenty of bugs, poor support, and so on.

Now we have a framework that plugs into VS2005, and thus to be used with .NET languages (in the case of XNA GSE it plugs into C# Express) which offers a set of tools and features (please read part I) designed from scratch to facilitate the process of creating a game from an object-oriented perspective and last but not least, with strong support. What is more, new tools are being created on top of XNA as TorqueX or will support XNA as Visual3D.NET and I believe we will soon see more coming.

But there is one more factor that XNA GSE is trying to impose which opposses to the fact that we are all competing in the end: a community of developers that really collaborate by sharing experience and knowledge. It's like saying "Ok, we are all trying to cross the finish line first but unless we help each other it's likely that none of us will even get there!". So far, MS is achieving this goal: code snippets, solutions, implementations and complete games are being shared by and to the XNA's community and there is no indication that it will stop. A lot of people, including me, is excited about this whole thing and participates in good mood, what in turn is a lot to say (I can list a bunch of forums where members try to tear each others apart, and newbies, are fiercely bounced and discouraged).

To sum up, this time one cannot complain that "we" do not have the framework and or tools needed (ok, an implementation of one of the "big" physics libraries for .NET/XNA would be welcome, like Havok's or Ageia's) or that there is no support (either from the developer or the community), meaning, now it is really up to each of us -or our teams- to create a game that catches everyone's attention.

So let's go for it!

Thursday, November 16, 2006

USER-CREATED GAMES, XNA GSE & INTELLECTUAL PROPERTY

There is an interesting article that discusses the topic of intelectual property rights of games created and shared by community users of XNA Game Studio Express.

Also, you will find another article regarding user-created content and the PS3 (Shhht! Apparently this is a secret).

Tuesday, November 14, 2006

SERIOUS THOUGHTS ABOUT XNA GSE

As we are approaching to the release date for XNA Game Studio Express v1, the following first question may come to one's mind: how successful will it be?

First of all let us consider one simple fact: if you want to program games using DirectX and C# then bear in mind that XNA is the successor of MDX, so unless you decide to implement your own wrappers to DirectX dlls (what would be like re-inventing the wheel) or try native-proned languages (like C++), you will end up using it, anyway.

Ok, but what is it with GSE? It is a framework based on XNA and mounted as an add-on for C# Express which provides a set of tools and implementations that let you program your games with ease. GSE takes advantage of XNA's content pipeline, brings a basic implementation to manage the rendering process (i.e.: initializes and sets the devices for you, handles the calls to update and draw functions, among other tasks) and let you deploy your game to XBOX360!

You may ask: where's the catch? You want it, so here you are. According to the XNA FAQ:
  • In order to develop, debug, deploy and play your games on XBOX360 you will have to join the "Creators Club" for a fee of USD 99 for a year or USD 49 for 4 months.
  • You cannot produce a commercial game for XBOX360 with the express version.
  • When you deploy the game to the XBOX360, and want to share it with other members of the club you will also share all your content and source code.
The good news is that all of the above does not apply when referring to the PC platform. Meaning? You can produce a commercial game for PC, without paying any royalties or fees, and without sharing your source code and or content.

So? Well, Microsoft has decided to catch a larger marketshare in the consoles industry by providing developers with handy, simple and inexpensive tools to build and deploy games for the 360. What is more, by doing so, contrary to what its main competitors do (that is, Sony's PS3 and Nintendo's Wii) MS is bringing to its equation a new relevant factor: "indies".

Being and "indie", go and try to produce a game -either commercial or not- for PS3 and or Wii and come back later for further talk. Just by calculating how much it would imply to do so would discourage you in the split of a second. It is hard to start an independent project and or small enterprise in the software industry, and it is harder in the game's one.

MS has noticed those facts as well as other two main things:
  1. The number of indies has increased in later years at a growing rate.
  2. Many of them use managed languages (like C#) to create their applications and games.
Moreover, some serious tools and frameworks are being developed and fine tunned to work along with XNA, either now or in the near future, like "TorqueX" and "Visual3D.Net".

Thus, will XNA GSE succeed? My guess is YES.

So the question becomes: will one succed by using XNA GSE? I will let that question unanswered until later posts ... ;)

VISUAL3D.NET CLOSED BETA

According to xeonx the close beta program for Visual3d.NET has started.

Check the forum's thread for more information.

Friday, November 10, 2006

TORQUE X NEWS

The guys from 360 Homebrew have posted some interesting information regarding the versions, price and release date for TorqueX.
  • TorqueX Engine Binary: free (for direct coding through .NET).
  • TorqueX Pro: USD 150,oo (will include source code).
Ok. That is cool for developers -like me- that love coding with C#. Now, what if you desperately need a level editor right now? Well, fear not. You will be able to use Torque Game Builder tool with TorqueX upon release of the latter.

When it is going to be released? Good you asked. According to what has been posted TorqueX will be released the same day XNA GSE is officially released.

So go ahead and check the demo of TGB.

Ahh! And don't forget the "XNA Homebrew Development Contest", where you may win some prizes from GarageGames, like TorqueX Pro and TGB -if you win the compo.

Hurry up!

Thursday, November 09, 2006

NEW VIDEO SHOWING XNA

The XNA Team has released a new video featuring games created with XNA.

In the video you will find games developed by members of the XNA community like Blobbit Dash, Sharky's Air Legends, and Particle Wars. Also, you will get a sneak preview of upcoming starter kits like "Pocket Jongg" and the superb "XNA Racer".

Enjoy!

Tuesday, November 07, 2006

BRING IT ON!!!

As announced, beta 2 version of XNA is out so for those of us who want to use C# to program videogames these will be interesting times.

Also, I have received an email message by GarageGame's postmaster announcing the closed beta program for TorqueX and at almost the same time RightRiot has confirmed that Visual3D.Net is coming towards the public beta release this month.

On the console fields, I have read an article published by Gamasutra where it is commented that Sony will be take more into account "indies" for game development for PS3 since, among other reasons, they deem XBox360 as its main direct competitor, mostly in the US market.

Thus, as said, everything is set for interesting times which will likely mean "opportunity".

The fun is about to start: many tests, assessment and decisions shall be done to choose the right framework but in the end, I guess we -"indie" developers- will be the winners.

Wednesday, November 01, 2006

RUMOR: BETA 2 TO BE RELEASED TODAY?!

So far it's no more than a rumor, but it has been said -don't ask where just do a Google search- that beta 2 version of XNA GSE would be released later today.

In the meantime, you can read David Weller's "How To" comments regarding migration to beta 2.

'till next time.

Tuesday, October 24, 2006

SPREAD THE WORD: XNA GSE BETA 2

Wow! Great news guys! Microsoft has announced the release of a second beta of XNA Game Studio Express.

No details have been provided yet regarding the new features and fixes it will contain but it has been commented that this version would possibly be deem as a final release candidate.

You can read the full story here.

Let's hope this one include the content pipeline, so keep fingers crossed!

Friday, October 13, 2006

MANAGED DIRECTX 2.0 NO MORE

Some of you may know that Microsoft had announced that the beta version of MDX 2.0 would expired on the first days of October 2006. As promised, it did. What is more, the beta has been removed from the latest SDK release.

Consequences? Either you go back to MDX 1.1 or move forward to XNA-supportive implementation.

Even though it has been clarified that XNA is not officially supported in the above-mentioned SDK, if you use and or ever used MDX 2.0, I believe that moving your programs to XNA is the right path to go -unless of course you cannot wait for its final release, given the features XNA currently offers as well as the upcoming ones.

So go ahead! Support XNA and please avoid the temptation of modifying the date in your system's clock to September 2006 ... ;)

Monday, October 02, 2006

GAME ENGINES AND OTHERS: PART 3 OF 3

At last! The final part of the series ...

Where were we? ... On part 1 I had introduced some general concepts about game engines and other components and on part 2 I had presented some examples for each category. Well, now is time to reduce the spectrum to .NET world.

There may be a lot of well-known components that I'll forget to mention (as wll as new additions made to the market and upcoming ones), so I recommend you for the n-th time to pay a visit to "DevMaster.net" and check the "3D Engines Database" section.

Not too many components were built for .NET using C# from scratch, but I can remember two of them which did: Purple# and Haddd.

Purple# was one of the first engines to appear that were written using C# 1.1 and if I remember well -please correct me if I'm wrong- it'd be ported to version 2.0 of .NET. However, things have been quiet for a while since no news have been posted and the forum's activity has almost stopped. Also, last time I checked the "Downloads" section had no files to download (?).

Tip: you can always use the rate of new posts, both for news and forum's threads, as a proxy of the activity related to the component's site. I mean, whether a component is still updated or under development, whether it has been abandoned by the developers and or its users, etc.

Haddd was one the most (relatively) recent ones to appear and was pretty much impressive. Open source, its rendering process was designed for the use of shaders (mostly, model 2 ones), a physics middleware was successfully plugged in and some AI implementations were interesting. Unfortunately, Haddd project was suddenly stopped. Fear not! Fortunately, the source code for the latest review was distributed free to the community and now there's a new successor: Jadengine.

What about components ported to .NET and or targeted for .NET but built upon non-NET components? "Err ... what? Please rephrase ..."

I remember AXIOM3D. This engine was built upon OGRE and let me tell you it was quite good on the offered features and open source. One of the things I liked most about it was the BSP implementation.

Then it came Realmforge GDK. Built upon AXIOM3D -but from a different team, this component was meant to ease your game-creation experience by providing a handy GUI which one could use to set and edit your worlds properties and such.

Both components were discontinued. Fear not ..... again! Visual3D.Net is on its way.

But, what is it? Well, to sum up, the next phase of evolution that results from the cumulative experiences of the developers of Realmforge3D (the original developer of AXIOM3D joined the project a few months ago). Correct me if I'm wrong but it has been built from scratch using C# and MDX so it's not AXIOM nor OGRE dependant anymore.

For what it can be seen in the screenshots and read in the forums, Visual3D.net promises to be a very useful framework when released with support to .NET Framework v2.0 and XNA Framework. A Community Technology Preview ("CTP") of Visual3D.net is comming this October so if you're interested don't forget to visit its site and sign up to get the latest news about the CTP.

Its nemesis? Or at least, for what I understand, TorqueX ... Garagegames' future product which is a combination of its newest product ("Torque Game Builder") and some features of other products (like "Torque Game Engine" and "Torque Shader Engine") all ported to XNA Framework. This also promises to be very useful so as to reduce coding time.

Some videos have been released to the public showing TorqueX's features and a public beta has been announced (even though no release date has been confirmed yet), so again if you're interested, go and sign up to receive the newsletter on the product.

As already said, Visual3D.net and TorqueX will both support XNA framework, so this match is going to be interesting ...

"Wait! You have mentioned XNA for the third time now ... but what is XNA?"

According to XNA's FAQ it "is not acronymed". XNA Framework is a collection of classes and tools that can be used for the production of DirectX-enabled programs with VisualStudio 2005 that can be run in both, PC and XBox 360 platforms. One of its most important features is the content pipeline it offers (a handy way of "incrementally" deal with your assets for the game, like meshes, music and sounds).

Think of it like the successor of Managed DirectX 2.0, given that it has been recently announced that no further development shall be provided for MDX 2.0. Sooooo, when you choose a component for your project bear this information in mind in order to avoid ugly surprises.

"Ok, but what is XNA Game Studio Express?". XNA GSE is the ... you know what? Just read it here (I promise I'll post my comments about it in future posts but currently you can find some source code for it I've already posted in this blog).

I cannot bring the series to a proper end without mentioning some other components that supports .NET technologies through the provision of wrappers which are worth checking:
  • 3Impact,
  • Irrlitch,
  • SDL.NET, and
  • Truevision3D.
I could include "3DState" to that list since it has been around for a long time now, but last time I checked there were no news nor forum page. The website was revamped with some flash components but it seems that there is no sign of further activity (?).

Remember MAC developers to check "Unity3D": based on its features, users' comments, demos and examples, this framework seems to have nothing to envy to PC-platform's ones. And yes, for those of us who may consider buying a MAC, Unity3D can produce cross-platform executables.

To sum up, as you can guess for what you have read in the whole series of posts, there are a lot of engines, middleware and frameworks which will help you produce videogames from square one (as well as, in some cases, other multimedia applications). Thus, the whole process of selecting the one/s for your project demands a high amount of man/hour efforts so as not to fail by making a wrong choice. Therefore, before starting a project make sure you spend some time to develop a systematic method to evaluate the component candidates efficiently in order to seek and get optimal results.

Well folks, I hope you have enjoyed reading "Game Engines And Others" as well as found it useful.

'till next time. See ya!

Tuesday, September 26, 2006

GAME ENGINES AND OTHERS: PART 2 OF 3

Monday you said? Yeah, right ... lazybones ...

Whatever ... On part 1 I had introduced some general concepts about game engines and other components, right? Well, today's post will concentrate on giving a few examples of some of the "helpers" that you may find in the industry, or at least, among "indies".

To do so, I'll will use the same categories of part 1, so If you don't remember the definitions and concepts, or you didn't read part 1 at all, you'd better go and read it first before we continue.

Ok, assuming you did. We shall continue ...

Ahhh, by the way, what you will see is how I see it, ... it's my blog, right? ... so feel free to re-arrange things up in your own list if you think that some component belongs to a different category.

(1.a) General-purpose engines.

If you had paid a visit to Devmaster.net as I suggested, you would have noticed the growing number of engines available in the market, like "Irrlicht", "3Impact", "C4 engine" and "Truevision 3D".

C# developers: although most of them are C++ original, some of them like "Irrlitch" provide a wrapper for .NET technology.

(1.b) Game-type-specific engines.

Our first classic match of the night: "Unreal Engines vs. Quake Engines". That is to say, "Epic Games vs. Id Software".

And lately, a new generation of engines that continue Quake III's legacy: "Doom III engine".

(1.c) Game-bound engines.

Well, to tell you the truth, you can include here any engine created for the sole purpose of developing one game and or sequels for that "title". In fact, the line between the previous category gets thinner when the engines starts to be modified in order to develop new "different" titles.

2. Game Frameworks.

From fully WYSIWYG frameworks like "GameMaker" and "Multimedia Fusion" -which you can get interesting results with, to full 3D-powerhouses like "A6 - GameStudio", "Quest3D" and "Torque Game Engine" -which let you target very ambitious projects, there are a whole range of frameworks to choose.

MAC developers: check out the cross-platform "Unity3D" engine.

C# developers: a new battle is coming: "TorqueX vs. Visual3D.Net". Buy your tickets ...

3. Game-Oriented Languages.

New GO languages are now entering the field but one of the classic battles of latest years is "Blitzbasic vs. Darkbasic".

Choose the contenders you prefer for each side, like Blitz3D vs. DB Pro, and enjoy the match.

OOP developers: both "line of products" above are non-OOP.

(4.a) Game-Oriented Middleware: Rendering.

I could mention too many components here like "Renderware" and "Gamebryo", but I will refer to OGRE (which stands for "Open Source Graphics Engine").

Contrary to what many of you may think, OGRE is not a game engine ... read the "Graphics" part of the "G" abbreviation ... ok, time to run away before the mob reaches me ...

Really. You can build your own engine by using its outstanding multiplatform-rendering capabilities, and you will likely find those who did, but OGRE only provides a set of C++ classes which will make your development life easier for rendering processes.

C# developers: yes, there's an OGRE.NET out there.

(4.b) Game-Oriented Middleware: Physics.

"Bring it on!". That's what companies that develop physics-prone components are saying one each other.

Havok, Newton, ODE, PhysX, Tokamak ... These guys have been around for so long now, and the battle still goes on.

Different type of licensing, different technologies, different features, different logic structure, different support, different approaches to the one domain they have in common: physics' mechanics.

C# developers: be aware that currently most of those companies neither offer nor support wrappers for .NET technology. You may find third-party wrappers, but no guarantees as usual ...

(4.c) Game-Oriented Middleware: Scripting.

Some AAA games have their own scripting language, like "Unreal Script". But there are general-purpose scripting languages that you can use, like "LUA" and "Phyton" (both well accepted in the industry).

Also, there are relatively new entries but yet powerful options, like "Gamemonkey Script".

And finally, I must mention one of the mostly used languages for internet-targeted games: "Actionscript" (built-in language for Adobe's Flash).

A tip for C# developers: with a bit of self-effort you can also use C# as your scripting language.

(4.d) Game-Oriented Middleware: AI.

Ok, you can either use scripting languages to modify the behavior of your game's "bots" or hard code your own implementations but there are some intereting components you may consider to use, like: "AI.Implant", "Renderware AI", "PathEngine", and "Memetic".

C# developers: see the tip in (4.c) above.

(4.e) Game-Oriented Middleware: Networking.

Last but not least, multiplayer stuff. Err ... getting a community of gamers together to play your game.

If you think that the other "areas" were tough, don't forget this one. Believe me. Point-to-point communication, client-server models, world updates, anticipation of each connected player's movements, etc. This requires a lot of patience and experience. Thus, not many games provide this feature.

Luckily, here come some components to the rescue, like Quazal's line of products, "Replica Net" and "Plane Shift".


Now, some final thoughts ... you may have heared about some of the above-mentioned "helpers" or even used them, but the fact is that in order to produce a game from scratch to completion you have to choose the right ones, that is, the ones that comply with all of the requirements for your project: budget, scope, technology, features, comfort, support, ... just to to mention a few.

But one thing is getting to know a bunch of components in order to pick the right one for you and your crew and other very different thing is to "wander" around them in a sort of "never-ending" testing, because you are either waiting for that long-awaited "saviour" component, you have played around so much that you don't know where the North is anymore, or you can't just make up your mind.

One of the huge mistakes that many "indies" usually make -I included- is playing around with some third-party components at the same time for a long time. You may say, "what's wrong with that? One should get to know a component before buying it, right?" I'll tell you what, the problem is that when you use, not one or two, but more components at the same time for a long time you face the risk of not getting to know none of them with the due depth of detail that you need in order to properly deal with your project.

In other words, don't play around with the components as if you were carring on the project it-self in a paralell manner through all of those components, like saying "the one that reaches the finish-line first wins the race" (if you compete with your-self in this one there will be no winner).

Just perform a set of small and accurate tests on the functionality that you need for your game in a sort of check-list verification: "Engine 1 ... checked, Communications ... checked, ... ". And then, having analyzed the pros and cons of the candidates, select one, get to know it deeply and start your project.

And please, don't look back until you finish it or otherwise you'll be only creating abbandonware, potentially speaking.

Just remember, there may exist no perfect components in absolute terms but relatively speaking, there is one (set of) perfect component(s) for your project if you manage to choose smartly. Or was it for soul-mates?

Anyway, part 2 is now finished. See you all next time ...

[... we will only focus on .NET based components]

Tuesday, September 19, 2006

DO THE MATH

In one of my previous posts, I had included some links to interesting sites where figures on sales were published and discussed. Remember those?

Now, do you want to know more about what "indies" should and souldn't expect? Well, if your answer is "yes", an I'll bet your answer is "yes", just read Jeff Tunnell's article.

Browsing the web I happened to find this site which is really interesting and instructive. Ok, enough talking ... just go, read the article and do the math.

See ya ...

Monday, September 18, 2006

GAME ENGINES AND OTHERS: PART 1 OF 3

There goes the weekend. I hope you have enjoyed it. Now it's time to get back to reality ... Mondays = kill-joy ... For some.

Remember last Friday's post? I had commented something about game engines, right? Ok, this is the first part of a small series of posts regarding game engines and other components like: game frameworks, game-oriented languages and game-oriented middleware.

As soon as you try to join the game industry you will run over a bunch of software components which may help you build a videogame from scratch, to some extent. Are all of these components a "game engine"? Quick response: "No". Why not? To answer that, let's first take some due notes of the following concepts:
  1. Game Engine: a software component that provides the core functionality that will help you implement "the whole" programming areas of the videogame.
  2. Game Framework: a suit of robust software and tools that offers a set of rapid and standard solutions to common program requirements and problems, all related to videogames.
  3. Game-Oriented Language: a language specifically built to let you program videogames with ease -or at least, (a bit) easier/faster than by using "general-purpose" languages.
  4. Game-Oriented Middleware: a software component that provides the core functionality that will help you implement only "a part" of the whole programming chain of the videogame.
The purpose of all of the above-mentioned type of "helpers" is to simplify the development and programming of videogames and, in general, to provide some sort of "re-usability".

By doing so, they usually bring at least one implementation layer between your final game and "low-level" libraries (like "DirectX" or "OpenAL"); generally speaking, "low-level" libraries provide access to computer/console hardware through a set of basic functions: take for instance "Application Programming Interfaces" (API) like "Direct3D" or "OpenGL", which can be considered as software abstractions of the "Graphic Processing Unit" of videocards (GPU), thus letting you handle and build "rendering systems".

Please, bear in mind that those 4 concepts are just one general and simple way of categorize the software components that you may find out there. Meaning, you could bring more categories to the field, rename or re-arrange the provided ones, but the important thing is that you realize that when you start to move down "the logic tree" trying to narrow general/base concepts, specificity may be found, and in turn, new categories may appear.

For instance, "Middleware" could sound too misleading for some since the word it-self wouldn't necessarily imply that it deals with just a part of the game-programming chain (contrary to "the whole"), but it'd imply that it brings at least one layer between your game and a low-level API (thus, some could deem "1" and "2" above as more general middleware).

Again, it's up to you to build your basic list of categories and place each component within them either with a great amount of certainty (for "obvious" choices) or "at a rough guess" (for "not-that-obvious" ones).

1. Game Engines.


If you remember one of my previous posts, when you want to program a video-game you will have to deal with lots of main logic areas: Rendering Pipeline, AI, Physics, Scripting, etc.

Game engines come at a hand to such purposes. They bring programmer-friendly solutions, methods, and techniques which will let you face the task of implementing each logic area according to the program requirements of your videogame.

In other words, a game engine will provide you with the proper software components so that you can program the core aspects of your game in a rapid and reliable way. This doesn't mean that you will press some button and, say, the physics of your video-game will be "auto-magically" programmed for you. Following the physics' example, it means that you'll have a group of pre-built functions that will help you set the proper physics' behaviors for your video-game, but how you assemble the puzzle is your Company's task, you team's task or your task.

What kind of game engines can be found? Well, basically there are 3 type of engines: (a) general-purpose engines, (b) game-type-specific engines, and (c) game-bound engines.

(a) General-purpose engine: offers a set of functions so that you can develop and program any type of video-game.

(b) Game-type-specific engine: offers a set of features so that you can develop and program a certain type of video-game. For instance, a "First-Person-Shooter" game (FPS).

(c) Game-bound engine: created for a particular "title" -or series. Its use is normally considered as "one-time" even though sequels of the game may appear, which use a modified version of the base engine.

Most of the (currently available) game engines were developed to be use with C++ language, which is the standard language for game development (alias, the language used by 99% of each and every "Pro"). They are usually deployed as a set of "dynamic-link libraries" (DLLs), or add-ons to the most-used IDEs (like Visual C++, Dev-C++, etc.), so that they can be easily referenced, integrated and used in your game's implementation.

Sometimes, it's curious and instructive to see how these engines have evolved during years. One may think that it all starts with a general-purpose engine and then everything moves in a top-down direction. Makes sense. However, one may go wrong sometimes ...

For instance, GarageGames' "Torque Game Engine" was originally designed for the game "Tribes 2". After that, the engine went public so that developers could use it to build "Tribe-like" videogames for a minimum price which varied as a function of the kind of licenses offered.

Since then, the engine has been modified in such manner that today is one of the most used multi-purpose cross-platform game engines among "indies". What is more, it can be considered a game framework since it offers a whole set of tools that help developers leverage the production pipeline.

Therefore, GarageGames' TGE moved along the whole range of types of engines, starting from "(c)" and upto "(a)".

2. Game Frameworks.

"A suit of robust software and tools that offers a set of rapid and standard solutions to common program requirements and problems, all related to video-games". Meaning?

Game frameworks usually go beyond than game engines do, in the sense that they not only provide the libraries you need to carry on programming tasks with ease but also bring a set of tools into play which help you develop parts of your game in a graphical manner.

By the use of "Graphical User Interfaces" (GUI), the developer enjoys a more controlled experience over areas of programming and design, generally resulting in a more comfortable interaction with game APIs. Although it cannot be always assured that desired results are reached thorough the only use of GUIs, some frameworks also offer the possibility of either using scripts to do a fine tunning of the final output and/or extend the game logic, or accessing the final source code before compilation.

Some years ago these frameworks only consisted of either an add-on to existing languages (the game engine) plus a game-level editor to create new levels for your game. Now-a-days, they have evolved to more complete systems formed by several tools which offer more features so as to produce more accurate results with less lines of source code manually inputted by developers.

Levels construction, pre-calculation of lights and shadows, creation and visualization of meshes and animations, setting of game characters and their respective behaviors, general rules for the game (like collisions and physics), integration of cut-scenes, shaders, music and sound, ... these are just a few elements in the list of features offered by top-most game frameworks.

3. Game-Oriented Languages.

What is the difference between a general-purpose language and a game-oriented one? Simple. With the former you can usually program any kind of software -limitations may appear depending on the language. Take C# for instance, with it you can implement from graphically-appealing applications to console command-type programs. With the latter, only video-game related software can be produced -some exceptions do exist, where multimedia applications can also be created.

Does this mean that I can only use game-oriented languages to create a videogame? No, you can also use general-purpose languages -like C++, C#, Visual Basic and Delphi- by plugging in add-ons, class libraries, game engines and or game-oriented middleware, where available.

Why using then a game-oriented language? That is a matter of assessment, resources and preference. These kind of languages offer their own syntax, commands and structure. Not all of them follow the Object-Oriented Programming Paradigm (OOP) and some of them sometimes consist of a wrapper of a base API (like DirectX) with some moddifications and additions to ease the user experience.

What is the difference with "scripting"? A script is interpretated at runtime. Game-oriented languages usually provide a compiler that converts the source code into machine code at compilation time. Also, many of these languages provide an "Integrated Devleopment Environment (IDE) which consists at least of an official source-code editor.

Should I choose an OOP-tailored language? Again, that is a matter of preference. Some may still find some comfort on using non-OOP languages, but believe me, once you start to understand OOP and appreciate the advantages of OOP languages, you'll use OOP and you won't want to turn back the page again.

4. Game-Oriented Middleware.

Contrary to the criteria that leads a component to be considered as a "Game Engine", this kind of middleware specializes in a certain "logic area of incumbence" of the game-programming chain. For instance, AI.

There is a new growing wave of enterprises that specialize in the production of middleware components that one can "hook" onto their game projects. One of the main advantages of this components is the strong set of features they provide plus a high grade of reliability. One of the "cons" is simple, the more number of components you use in your game project, the more difficult will be for you to assemble the puzzle and follow the evolution of each component. Moreover, performance hit should be monitor closely since using a great number of external components does not necessarily mean that performance will increase, a priori.

The main areas covered by game-oriented middleware are rendering, physics and artificial intelligence. But new specific solutions to general problems are appearing from time to time.

Again, like "game engines" do, game-oriented middleware is generally targeted to C++ market. Some wrappers may exist for other languages/technologies, though, generally provided by third-party enthusiasts. Therefore, if used in a project, these wrappers should be always used with caution, having analized the whole spectrum of options.

Ok, I have read carefully the 4 points mentioned above, but what should I consider so as to choose the proper game components for my game project? Good question: it will be covered in next posts, but here is a short list: price, licenses (royalties, terms and conditions, etc.), support, bugs, average period between updates, performance, features, target platforms, type of deployment/integration, type of files supported (for images, meshes, animations, etc.) and so on.

"I've read your interesting post but I cannot wait for the next 'part' of the series, so where can I find more information about game engines and such?". Impatient, uh!? Ok, you can then pay a visit to "DevMaster.Net" site, where you will find a very extensive and detailed database of engines -most of them ranked by users.

Soooo ... with these words we are reaching the end of this first part about game engines and others. I'm not sure so far but I guess this will turn out to be a three-part series. ETA for "Part 2"? Maybe next Monday ... but as usually said "it will be released when it is done" ... ;)

[We will continue to discuss game engines on later posts, focusing on some of the existing/upcoming engines for .NET]

Friday, September 15, 2006

THERE AIN'T NO TIMES LIKE THE OLD TIMES

Today I was thinking of posting some comments about some of the engines out there, but then I said "naaa! It's Friday. Let's take it easy and leave that for Monday".

So, what's for today? Doing some search for new posts in a couple forums I found some references to "old" games and I couldn't help remembering the old machines, old games, old sweet days. Snif! Snif! So let's go retro ...

Going back to the mid 80's I remember receiving my first computer ever: a ZX Spectrum Plus ... aahhh! My first love. Responsible for my passion on videogames. Titles like "Pssst", "Atic-Atac" and "Game Over" come very fast to my mind. Those were the days when you had to wait like 5 minutes or so until the game loaded into memory (48k ... wow!) while you prayed not to receive that nasty error message that appeared when the cassette player emmitted a wrong sound. Remember that? I bet you do. Then without loosing your hope, you used to rewind the tape, press "play" so that everything started again.

Then I switched to a "Commodore 128D" with a 5 1/4 drive. A whole new world for me. Just the fact of not having to use a tape was terriffic for me. Games like "Dig Dug" and "Bruce Lee" helped me tolerate those boring afternoons after high school when there was no one to call, no football matches, not even homework.

Then came an "Amiga 2000" (without hardrive I regret -too expensive back in those days) but again with an unknown hardware for me: a 3 1/2 floppy drive (I know what you're thinking: "what a challenge!"). This was a big change regarding visual quality: the graphics, colors, the cut-scenes. And also regarding sounds and music: my favorite? "Shadow of the Beast" (that guitar track that played when the game was over was really enjoyable). Games like "Prince of Persia" (with those impressive movements of the main character), "Lotus Espirit Turbo Challenge" and "The Blues Brothers" (a very funny platform game) caught my attention for hours and hours.

Finally, I bought my first PC computer: a notebook "Presario 1080". After that I realized something "I love notebooks". I have to admit that desktops are in general more powerful and you can get a better desktop for the same price or less than a notebook (especially if you buy the part separately and assemble the machine by your-self), but notebooks are quite more handy. With time I started to value more "handiness and comfort" than "hardware power" (yeah, I know, to some extent, since it has a direct relation to your needs as well as your purchasing power). We all know PC games but the first I played was "Pod" (since it came with my notebook), then "Primal Rage", "Alone in the Dark", the "FIFA" and "Star Wars" series (Rebel Assault, Tie Fighter, etc.), among others.

Now-a-days, I've got a 64-bit-processor desktop with the power to run smoothly each and every newest PC game in the market (like one of my favorites "Prince of Persia: The Sands of Time") but I still enjoy playing classic retro games, every now and then.

Well, that's all guys. Have a nice weekend!

[By the way, which are/were your favorites "retro" games?]

Thursday, September 14, 2006

MANAGED DIRECTX AND WINDOWS XP PRO 64-BITS

As most of you may know, there is no MDX support for x64 platform yet. So, in order to run any MDX program the platform target should be set to "x86" (that is, 32 bit).

For users of WinXP Pro x64 that want to run Managed DirectX code with Visual Sudio 2005 (also applicable to the XNA framework) -any version, take due note that there are two possible ways to avoid the nasty "Bad image format" exception.

As mentioned in Benjamin Nitschke's blog, the first one, is by modifying the "csproj" file with the notepad. Just locate and open the file and then add the following line:

<PlatformTarget>x86</PlatformTarget>

(if the "node" already exists, just replace it with the above-mentioned one).

The second one, is by using VS IDE it-self. Following this link for further instructions.

Stay tuned!

Wednesday, September 13, 2006

FRAMERATE COMPONENT FOR XNA

Just a quick note: I have posted the source code for a simple component that calculates and display the framerate of your XNA-game project.

Considerations:

  • You might change the namespace in line to your game's namespace.
  • Currently, the game window's title will be used to display the framerate (this will change when XNA supports fonts). As a workaround, you can use garykac's bitmap fonts example to modify this behavior.
  • If "Enabled" is set to false, framerates are not calculated (Current is set to 0).
  • If "Visible" is set to false, the current framerate value is not displayed (but yet it can be calculated if enabled).
  • When you want to show the decimal part of the framerate value (that is, "ShowDecimals" is set to true), you can set the display format to the fixed one (like "0.00").
  • You can also set whether the time step must be fixed or not.
  • You are free to modify/optimize the source code as desired. Please share your optimizations with the community.

Enjoy!!!

using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Components;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Storage;

namespace WindowsGame1
{
/// <summary>
/// Simple class to calculate the frame-per-seconds rate of your game.
/// </summary>
public sealed partial class Framerate : GameComponent
{
#region Instance Fields

private float deltaFPSTime;
private double currentFramerate;
private string windowTitle, displayFormat;
private bool enabled, visible, canDraw, showDecimals;

#endregion

#region Instance Properties

/// <summary>
/// Gets the current framerate.
/// </summary>
/// <remarks>
/// The 'Enabled' property must have been set to true to retrieve values greater than zero.
/// </remarks>
public double Current
{
get{ return this.currentFramerate; }

}

/// <summary>
///
Gets or Sets a value to enable framerate calculation.
/// </summary>
public bool
Enabled
{
get { return this.enabled; }
set
{
this.enabled = value;
this
.currentFramerate = 0;

if (this.Game != null && this.windowTitle != null && !this
.enabled)
this.Game.Window.Title = this.windowTitle;
}
}

/// <summary>
///
Gets or Sets a value to display framerate on screen.
/// </summary>
/// <remarks>
///
Currently, the framerate is shown in the window's title of the game.
/// </remarks>
public bool Visible{

get { return this.visible; }
set
{
this.visible = value;

if (this.Game != null && this.windowTitle != null && !this
.visible)
this.Game.Window.Title = this.windowTitle;
}
}

/// <summary>
///
Gets or sets a value indicating whether the time step must be fixed or not.
/// </summary>
/// <remarks>
///
If set to true, the game will target the desired constant framerate set in your main class ('Game1', by default).
/// </remarks>
public bool
IsFixedTimeStep
{
get { return this.Game.IsFixedTimeStep; }
set
{
if(this.Game != null)
this.Game.IsFixedTimeStep = value;
}
}

/// <summary>
///
Gets or sets a value indicating whether the framerate will display decimals on screen or not.
/// </summary>
public bool
ShowDecimals
{
get { return this.showDecimals; }
set { this.showDecimals = value; }
}

/// <summary>
///
Gets or sets a value indicating whether the decimal part of the framerate value must be display as fixed format (or as double format, otherwise).
/// </summary>
/// <remarks>
///
The 'ShowDecimals' property must be set to true in order to set the proper format.
/// </remarks>
public bool
FixedFormatDisplay
{
get { return this.displayFormat == "F"; }
set { this.displayFormat = value == true ? "F" : "R"; }
}

#endregion

#region Constructors

/// <summary>
/// Parameterless constructor for this class.

/// </summary>
public
Framerate()
{
InitializeComponent();
}

#endregion

#region Instance Methods

/// <summary>
/// Called after game initialization but before the first frame of the game.
/// </summary>
public override void Start()
{
this
.canDraw = false
;
this.currentFramerate = 0;

this.windowTitle = this.Game != null ? this.Game.Window.Title : String.Empty;
}

/// <summary>
///
Called when the gamecomponent needs to be updated.
/// </summary>
public override void
Update()
{
if (this.enabled)
{
// The time since Update() method was last called.
float elapsed = (float)this
.Game.ElapsedTime.TotalMilliseconds;

// Ads the elapsed time to the cumulative delta time.
this
.deltaFPSTime += elapsed;

// If delta time is greater than a second: (a) the framerate is calculated, (b) it is marked to be drawn, and (c) the delta time is adjusted, accordingly.
if (this.deltaFPSTime > 1000)
{
this.currentFramerate = 1000 / elapsed;
this.deltaFPSTime -= 1000;
this.canDraw = true;
}
}
}

/// <summary>

///
Called when the gamecomponent needs to be drawn.
/// </summary>
/// <remarks>
///
Currently, the framerate is shown in the window's title of the game.
/// </remarks>
public override void
Draw()
{
// If the framerate can be drawn, it is shown in the window's title of
the game.

if (this.visible && this.canDraw)
{
string currentFramerateString = this.showDecimals ? this.currentFramerate.ToString(this.displayFormat) : ((int)this.currentFramerate).ToString("D");

this.Game.Window.Title = "FPS: " + currentFramerateString;

this.canDraw = false;
}
}

#endregion
}
}

[We will discuss and focus on XNA GSE later.]

Tuesday, September 12, 2006

SAY AGAIN ... GAME DEVELOPMENT?

Now that you have done some deep research on OOP paradigm and C# programming we can approach a bit further to the main topic of this site. Shall we? (not there yet but getting closer, be patience)

Well, the main three questions that you should ask your-self before jumping into deep waters are:

  1. Which is the story-line of my game?
  2. Will I design and program the game engine by my-self?
  3. How the h#$& am I going to finance this project?

And yes, this is a short list.

1. Every game -even the simplest of all out there- has a plot, a story, a script; something that tells the player what the game is about, what he/she might do during game-play, the characters/roles that do exist, etc.

If you think it thoroughly, you may end up finding a bunch of similarities with filming: you prepare the set, you place the characters, you establish the rules, you are the director. The main difference is that game development goes some steps further since everything happens real-time and not in a (fully) deterministic way (meaning, every time the game is played things always differ sometime, somewhere, somehow).

But the point is: your game has to count on a script. At least some sketches of a plot (general idea), spots (places in the universe of the game), characters (who's the good, the bad and the ugly), missions ("take the flag"), stages (level 1, ..., level n) and any other objects/subjects of relevance (like key dialogs and possible cut-scenes, if any).

Lot of games have soared because they lacked of a (good) script. Technically speaking, these games may have introduced advances in the fields of game programming, superb graphic effects (GFXs) and astonishing sound effects (SFXs), but gamers flamed it -or even the game never shipped, because of a bad-designed, repetitive (monotonous sequel) or non-existing story-line.

It is always educational to read post-mortem articles of abandon-ware and finished products. Also comments of gamers about published games -AAA or not; you will be surprised to find that sometimes (rarely) a game succeeds even though GFXs are not that good.

2. Before starting to program the game itself there is always a "Game Engine" that lays beneath it. So, what is this "engine"? Think of it as the logic structure that will support the implementation of your game.

You will need to handle lots of aspects like, among others:

  • Loading/unloading assets to/from memory: meshes, levels, sounds, etc..
  • Rendering process: fixed pipeline vs. Shaders, lighting and shadows (static vs. Dynamic), post processing effects.
  • General mechanics (the so called "Physics"): collisions, gravity, rigid bodies, dynamic action, reaction and interaction of objects (cars, spaceships, .
  • Artificial Intelligence ("AI"): finite state machines, neural networks, flocking, etc.
  • User Input/Output: mouse, keyboard, joysticks, (force-feedback) game-pads.
  • GFXs: particles, billboards, water, clouds, skies, backgrounds in general, day/night cycles, lens flares.
  • SFXs: mono/stereo sounds, and 3D sounds.
  • Music: start/finish loop, midi or pre-recorded?
  • Story: cut-scenes management.
  • Main loop process: one thread vs. Multiple threads.
  • Gameplay: single-player vs. multi-player.
Ufff! I'm just tired of simply mention it, mate. You can build a generic engine (it can be used on other game projects of different types) or one specific to your (type of) project (it can be only used to produce, say, racing games or sequels of your game). Then comes the game programming: type of game, menu of the game, levels of the game, etc.

So there are two stages of implementation: (I) the game engine, and (II) the game.

The good news: you may not need to program a game engine and concentrate on the game itself. The bad news: even so, you will still have to deal with the above-mentioned areas. It's important that you know in advance that an engine will not handle all things for you, but provide you with "pre-made" implementations that you could use in order to handle those things. So where's the catch?

There are plenty of (full or partial middle-ware) engines out there you can integrate to your projects and use as a base for your games. The problem is that you have to integrate them properly, like assembling a puzzle. And this is not always that easy. As we will see in future articles, not all of the engines available in the market:
  • Handle all of the areas of a game as you wish (so you may end up bringing together multiple "partial" engines/components or implemeting by your-self the ones that there is lack of),
  • Target the .NET technology (you may end up using a third-party wrapper or creating your-own), and
  • Are free and/or royalty free (very important point).
Therefore, it's a trade-off:
  1. If you decide to design and implement (all of some of the aspects of) the game engine by your-self you could get trapped in something that either is out of your league, takes so much time that when your finish it you have not time/money left to implement the game or the standard technology has changed in the industry, or you decide to quite your original project and enter the game-engine buisness (that is, you offer your engine to the market in different flavors and licenses as many Companies do), and
  2. If you decide to use third-party engines -since there has been lately a boost in the number of engines available, you will have to choose carefully the one suitable for your project after a lot of testing: performance, bugs, support, how easy it can be integrated to your project (programming language, technology, etc.) and last but not least, price plus terms and conditions. Switching engines in a middle/advanced stage of the development process of a project is always very expensive in terms of time, effort and money. The nearer your project's deadlines are, the worse the price your project will pay ...
As any trade-off, a bad decision could result in "no shortcuts" for you and your team.

3. Tough one. Maybe you have resolved both two above with superb ease, but let's face it: do you have the needed resources to back up your idea from scratch to completion? Or do you know someone willing to finance your "Know-how"?

Game development is not a game. Period.

If you are (just about to get) in, you'd better realize that in order to succeed -either as a "pro" or as an "indie"- you will have to work full time on the project, or you will be eventually getting out of the industry with your tail between your legs.

And by "full time" I mean that you cannot share your time with other jobs if you expect to finish and ship your creation this century. Exceptions exist but it's a general rule.

Thus, the problem is: you have an idea, you believe in your idea, you have played tons and tons of videogames so you know what gamers want ... ok, basically, you feel in your gutts that your idea will rock ... now, "who is with me?" (you see that your shadow start to run away from you ... sad).

You need to feed your-self and -in many cases- your family. Plain and simple. So it is hazardous to quit a job to pursue a dream. So, unless you abandon your idea of being and "indie" and start looking for a job in the industry (or the worst-case scenario for you: getting back to your previous job totally defeated), you better start looking for ways of raising money to support your project. What in fact you should have been done/assessed before jumping to the swimming pool (aways look for water first).

There are many ways of accomplish this task, like:

  1. You have a job for years so as to save the money you will need (or that you think you will) to go on "solo" later.
  2. You start a joint venture with other people with the same goal (team), sharing risks, costs and profit, proportionally.
  3. You managed to find someone that know someone else that knows how to contact a final someone else who -maybe and almost remotely- could think of invest some capital in your project and are in the talks with this visionary ... ejem! ... businessman. In general, the percentage of your final proceedings in this situation will be as low as it could get (you knew that, of course). Risk-reward law.

There is some sites with interesting figures on their projects' costs and profits.

Dissapointed? Don't. Just bear in mind that nothing is as strightforward as it looks at first sight. Being and "indie" is always complicated. You don't have access to the same quantity and quality of resources that big companies have. It doesn't rain money and you have to eat. Time won't wait for you. A year and a half has gone, you are still not even close to a beta and the next season of "Lost" is coming ...

However, in spite of all of the above, you got the strenght to overcome these assymetries, right? That is one of the main things that will help you achieve your goals: your conviction. A needed but not sufficient condition. You will have to combine it with other factors like, among others: your capacity to solve problems efficiently, your speed to accommodate to changes in the industry (like techniques, technology, game-quality standards and so on), your skills as a developer/programmer, your wisdom to deal with potential investors and customers, your means to promote your game worldwide, the moral support of your family and close friends, and your growing collection of four-leaf clovers!

It always start with a dream ... now, let's check on the results of those six number I picked for yesterday's Loto ...

[Next time we will be talking about some of the .NET-based game engines out there so that you can go and check them]