For the past couple months, I have been trying to determine the best platform to become my primary language for game AI unit development, shaders, and working on theories of improving the Fridge-A* algorithm. However, choosing the right language has become an arduous task. Hardcore programmers will scream “C++ is the only way to go!” while the elites say “C is so much better than C++” and of course there is that one guy who comments “Why would you use anything other than Assembly language?” The problem lies in the fact that I am doing this work on my own and do not have XX hours to write an elaborate garbage collector, manage raw threads, or constantly keep track of hundreds of pointers. On the other hand, I must have enough speed and processing power to do the research and development I want.

Some suggest Java as a game platform as the language is respectable. However, graphics rendering speed and the Java gaming community is poor at best in my humble opinion. I did enjoy using BlitzMax back in the day, but the engine is simply not powerful enough to create something near commercial quality. Also, the popularity of the language is low, and I would have little professional use for learning more of the language. Flash AS3 is my primary profession; however, its performance leaves much to be desired at times. On the other side, Silverlight 3 is looking rather nifty, but the API still looks funky and doesn’t seem like the engine is really mature enough to do any major development in. Perhaps, if Silverlight 4 has near XNA speeds, better shaders and bitmap drawing, and the XAML to C# connection has less oddities in the API… it would be a contender for my list. Aside from the web platform, I could also go for a super high-end engine like Unreal Engine 3 or Source, but I couldn’t ever hope to produce something commercial with it because of the insanely expensive licensing (hundreds of thousands we are talking about!). Of course this is also Torque, but I have not been impressed with any of the games made on the platform, and there is a moderate cost to get started with it.

So I eventually evaluated my choices to XNA, haXe, and Unity3D:

xna logo

Pros:

  • Very fast (Fastest of the choices)
  • Great shader support
  • C# is a nice language with advanced OOP support
  • Xbox and Windows deployment
  • Free for indie users

Cons:

  • Meant really for just the xbox… there is little support for Windows only deployment and DRM concerns. Also, no luck for Macs.
  • Unlike the other two, XNA cannot steam which means a smaller audience because of the hassle of downloading
  • Super new so the community is not that large in general

haxe_logo

Pros:

  • Compiles out to Flash which 98% of users have already installed
  • Real-world benchmarks show 2x the speed of Flash 9 using code performance optimizations unique to haXe
  • From working with haXe, I will use that same knowledge to build javascript and neko scripts in the future if I wanted
  • I can use my existing knowledge of Flash to accelerate my development
  • Totally free

Cons:

  • No Flash IDE
  • Also super new with a small community and little to speak of tutorials
  • Still slower than unity3D and XNA
  • Currently does not support importing Flash libraries which reduces the amount of existing libraries I can bring over versus just using Flash AS3.

unity3d logo

Pros:

  • Fastest of the web 3D engine… also nice looking
  • Supports developed on Macs and now Windows
  • Uses Python for scripting
  • Supports large number of users for networking and shaders

Cons:

  • No free version to try things out (only 30 day trial)
  • Costly software (the indie license has a terrible roster of features making the Pro version the ideal choice)
  • Little resources and support for making 2D games… everything is geared for 3D development. This can be a negative thing for me as I like to develop quick 2D testing scenarios for AI scripts. From what I can see, there are few tools for doing advanced bitmap drawing.

Final thoughts:

In truth, I have not made up my mind yet. The pros and cons of all the solutions seem to make every choice the same weight in how it appeals to me. I could forsake all the above options and just go with C++ with Allegro or SDL, but they too have their ups and downs. Allergro is really slow without full DirectX/OpenGL support and SDL seems to have an aged API with little in the future for it. Also, neither of those libraries natively support shaders. XNA would give me all the speed I would need for what I am trying to accomplish, but using a language that streams over the internet would give me a much wider audience.

Well, what do you say readers? Are there other languages I should be looking at? For my next post on the subject, I will try to make some benchmarks in all of the three languages to test their true strengths.


Author: Jonathan Dunlap
Jonathan is a veteran software architect, author of IsoHill, humanitarian, and has worked with Bigpoint Inc, CrowdStar, ePrize, and Microsoft.
Be Sociable, Share!