Sign in to follow this  
trancient

XNA for professional game?

Recommended Posts

Hey all, I've just come across XNA and done a first pass of some of the info and am wondering if it is capable of producing a professional quality game. I only ask this because a lot of the descriptions I have come across seem to describe it as being for Students & Hobbyists. My goal is to make an indie game that is capable of being sold via alternative distribution channels, ideally, similar to the approaches taken by 'Intoversion'. XNA interests me due to the Rapid Development capabilities, compared to say a native C++ implementation. So is XNA viable for a professional, marketable game?

Share this post


Link to post
Share on other sites
Of course it is. XNA Game studio, at its heart, is just a nice framework built on top of .NET and DirectX 9. It's pitched towards hobbyists and students because C# and the XNA framework are a bit easier to learn than something like C++ with native DirectX, but that doesn't mean it's incapable of high quality work. After all, what makes a game fun and look good is the code and assets you add to it; not what APIs and languages used to create it.

Share this post


Link to post
Share on other sites
Thanks for responding, that's a fair reply, the reason for my enquiry was really clarification and confirmation.

On first glance the XNA website home page primarily focuses on 'community' targetting( which isn't a bad thing of course ), with little to no mention of professional capabilities, but maybe if you have the ear the web masters there you could persuade them to add in a little bit more about the 'Professional Grade' qualities you imply.

Maybe I was also hoping for a little discussion on the pros & cons of developing with XNA compared to a native implementation from some experienced users, but I'll suppose I should just dive right in myself!

Cheers.

Share this post


Link to post
Share on other sites
Check these out, especially the first 2.

http://youtube.com/watch?v=cKVRYBh7YK0
http://youtube.com/watch?v=TgChURF5fQE
http://youtube.com/watch?v=wiVAtkQ6a8s
http://youtube.com/watch?v=RRstw56Rlcs
http://youtube.com/watch?v=F5IPglddQes

Quote:
Maybe I was also hoping for a little discussion on the pros & cons of developing with XNA compared to a native implementation from some experienced users, but I'll suppose I should just dive right in myself!
There isn't much difference. You are using DirectX 9 and the same shaders.

XNA won't give you access to DX10 features.

Share this post


Link to post
Share on other sites
Quote:
Original post by trancient

Maybe I was also hoping for a little discussion on the pros & cons of developing with XNA compared to a native implementation from some experienced users, but I'll suppose I should just dive right in myself!



Yeah I definitely recommend just downloading the SDK and taking a look around. As far as native vs. XNA goes...for PC you're really not very limited at all. Sure you'll have the usual issues of managed code like some small bits of increased overhead from managed wrappers and making sure the GC doesn't get your way, but in my experience those really don't pose much of an issue for game development. In the end to me it really just feels like I'm using D3D9 through a very nice framework, and I don't feel like I'm anymore limited than I would be with native D3D9 in C++ (on the contrary, using a managed environment has allowed me to some really cool things with how my game, map editor, and common framework interact that would've been difficult, time-consuming, or awkward in native code).

For the 360 things aren't quite so rosy, unfortunately. The following have either come up already, or I can see them as being future issues for my current project:

-Strictly managed code only. Can't use any native libraries through interop or CLI wrappers. Can be a headache if you've got legacy native code you'd like to leverage, or if you want to use one of the popular physics libraries.
-The .NET Compact Framework implements a subset of the .NET class library. Not all classes are available, and not all methods of the availble classes are implemented.
-Floating-point performance is poor. Most of the 360's fp power is in the vector units, which you have no access to (and the CF can't auto-vectorize it for either).
-The CF's garbage collector causes more noticable compactions than on the PC. Keeping your live object count to a minimum (and avoiding auto-boxing) is crucial for minimizing latency.
-CF isn't very good at inlining, and isn't great at handling virtual functions either.
-No access to 360-specific goodies. This includes the tesselator, MEMEXPORT, and the special fp10 back-buffer format. No access to fp10 is a real big bummer if you want HDR, since going fp16 means doubling your eDRAM footprint and losing hardware alpha-blending. Alternate color-spaces are an option, but will bring up your shader complexity and instruction count (and possibly bring up other issues with blending or multi-sampling).
-No control over tiling. It just kicks in automatically when you're rendering to a buffer that can't fit in eDRAM.

All that said, working on the 360 through XNA is still very viable. Especially if your goal isn't to produce AAA-quality graphics, or anything like that.

Share this post


Link to post
Share on other sites
Thanks MJP, that seems like a decent run-down.

Re the PC side of XNA, I guess this is obvious to anyone familiar with .Net developement, but for me on looking into the deployment specs for a .Net app, I realised target systems will need have the .Net framework installed, plus the XNA framework to run which seems like a big barrier for marketing an Indie game to a non-technical audience.

It really seems to rule out XNA or any kind of managed framework for a marketable game, am I completely wrong in coming to this conclusion?

Share this post


Link to post
Share on other sites
If you wondering if a particular API or library is able to make a marketable game, then ask yourself this: "Is there anything about this API that will keep me from making a professional game?"

An installer would take care of dlls and frameworks needed for your game to run. Don't worry XNA comes with everything you need to deploy your game to the masses. Plus, most people by now have the .NET 2.0 Framework on their computers by now.

Share this post


Link to post
Share on other sites
Quote:
Original post by trancient
Re the PC side of XNA, I guess this is obvious to anyone familiar with .Net developement, but for me on looking into the deployment specs for a .Net app, I realised target systems will need have the .Net framework installed, plus the XNA framework to run which seems like a big barrier for marketing an Indie game to a non-technical audience.
You won't find many programs that DON'T need something installed on the target machine for them to run. Even a simple 'hello world' program in C++ needs the proper version of the C runtime to execute. You don't really notice when a program installs the newest Visual C runtime during setup, and all the random DLLs it needs. But because C# / XNA is new, and unknown to some people, this issue gets blown out of proportion.

What are the requirements of a standard C++ 3d game?

-Updated Drivers.
-Recent DirectX Redistributable
-A new C runtime that didn't ship with XP (VS 2005 or 2008 version)
-Dynamic Link Libraries for every library used
-etc...

It's no different with XNA / C# games. You just pack the xxxredist.exes onto the media which you ship your game, and install them from there if not present on the machine.

Share this post


Link to post
Share on other sites
You're probably right, I think I've found where the required frameworks can be accessed as redistributables ( I had assumed a user would have to be prompted themselves to install directly from the MS website, breaking the game installation ), although I'm still not certain...

Many thanks for all your input.

Share this post


Link to post
Share on other sites
You can find the required DirectX components and XNA redist installer in C:\Program Files\Microsoft XNA\XNA Game Studio\v2.0\Redist. Then you just add in one for .NET 2.0 and you're all set. The XNA redist installer is something like 2MB, the DirectX components total up to about 7MB and then the .NET 2.0 installer is about 22MB making it about 31MB of pre-requisite stuff. Not the greatest for small games, but it's not that bad really.

And in case you want the official listing, here's the MSDN page of what you need to distribute XNA 2.0 games: http://msdn.microsoft.com/en-us/library/bb464156.aspx.

Share this post


Link to post
Share on other sites
Quote:
Original post by trancient
You're probably right
I'm not talking out of my ass here.

Here you go. A simple google for XNA Redist got that as the first link. Here is the .net framework, while we're at it.

edit: I shouldn't have left the reply page open for 40 minutes, NickG beat me to it. [lol]

Share this post


Link to post
Share on other sites
It's really not very hard making an installer that will copy over your content and launch the installers for the needed redistributables. Personally I do it with a very simple Inno Setup script.

I agree that it's hardly ideal making users go through 4 installers, but there's really no way around that at the moment.

Share this post


Link to post
Share on other sites
So i have a question related to XNA..

Being a developer, naturally i am fairly inquisitive and want to know all the details..

The problem i have, coming from little to no DirectX programming background is that the XNA site and "documentation/tutorials" seems rather...Childish?

I dont want to do tutorials where i am just following instuctions and copying large chunks of code with little to no explanation as to what the calls are actually doing.

Copying some giant thing of code and saying "This initializes your DirectX window!" helps me none..thats basically what all of the tutorials in the 3.0 SDK documentation are like...

Are there good sites, or books out there with more technical knowledge? Or would it be a good idea for me to just continue learning/reading books on DirectX w/ C++ and apply that knowledge to XNA? I'm experienced with C++ and know a good deal of C#/VB.NET so choosing a language isn't a huge deal...

Right now i am reading the Introduction to DirectX 9.0c: A Shader Approach

Share this post


Link to post
Share on other sites
Quote:
Original post by trancient
XNA interests me due to the Rapid Development capabilities, compared to say a native C++ implementation.

So is XNA viable for a professional, marketable game?


I didn't see any formal engagement from Microsoft on the future of XNA.

See for example :
XNA and DirectX10

As long as you can be satisfied technologically by what is available to this day then XNA should suit your need (and you should go for it). But for your next project you may have to reconsider (or not depending on how things will have evolved).

LeGreg

Share this post


Link to post
Share on other sites
Quote:
Original post by FuzzeWuzze
The problem i have, coming from little to no DirectX programming background is that the XNA site and "documentation/tutorials" seems rather...Childish?
XNA Game Studio is generally aimed at helping hobbyist and students get started with programming. So that's kind of how they aim most of the educational content on that site. Personally I like the theme on that site. :)

But anyway, sites like Ziggyware.com, XNADevelopment.com, and Riemer's XNA Tutorials which offer tons of resources for more tutorials and there's always the full MSDN documentation for XNA Game Studio. Needless to say there are plenty of resources out there that are not geared towards copying code without explanation.

Quote:
Original post by LeGreg
I didn't see any formal engagement from Microsoft on the future of XNA.

What do you mean by this? Are you looking for some sort of promise that they won't close down XNA Game Studio in the near future? (By technicality 'XNA' will never go away since that is the branding used for all their game technologies now [including native DirectX].)

Quote:
See for example :
XNA and DirectX10
The XNA framework will not support Direct3D 10 simply because the Xbox 360 does not support Direct3D 10. That said even most professional PC games at this point do not support Direct3D 10. It's not all that surprising considering the rather small Vista install base. The XNA framework is intended to be as cross-platform as can be so that users can easily make games that work on both PC and Xbox 360 should they choose to do so.

If D3D10 is an important feature to you, then yes, you'll want to use either native Direct3D with C++ or something like SlimDX. However considering the small Vista base that even has the chance to leverage it (keeping in mind that a good portion of the already small Vista install base is likely not your target audience), I would say go for whichever API you find easiest to work with. The API choice is not going to make your game any better or worse, so it's really just which tool you want to use in the process.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this