Hello everyone, As some of you may remember over the past few months I have slowly been working on rewriting the USA Games developer documentation for our developer’s website. At this time the developer site is still down, but I have started once again working on the web pages, tutorials, and programming documentation for new game developers. As a result I have recently made some decisions where I am planning to go with the new programming and developer documentation for the USA Games website. The first problem was deciding on what game programming API to officially support in the USA Games documentation. As there is a good solid dozen game APIs out there like SFML, SDL, Microsoft DirectX, Microsoft XNA Framework, SlimDX, etc it was fairly hard to settle on any specific API to get started with. A lot of it largely depended on fairly specific factors like what programming language you were going to use, what platform/platforms you were going to support, what features you needed, and things like that. I felt trying to support all of the possible combinations of programming languages and APIs was an incredibly daunting task. Not to mention confusing for anyone new to game programming and game development in general. So I decided to research all of them and find out which API had the best features, most cross-platform support, was the easiest to program with, etc. fortunately, after months of research I’ve found what I’m looking for in this regard. Thanks to my months of research and testing I’ve decided to update all the documentation to officially use SFML. SFML, the simple fast multimedia library, is a cross-platform DirectX-like API for Mac OS, Windows, and Linux. As game APIs goes it is very easy and straight forward to use. In terms of programming languages supported I know it officially supports C, C++, Python, Ruby, C# .Net, and Visual Basic .Net for sure. So right off the bat this API can be used with most of the popular programming languages out there today. One of the features that really caught my attention right away is the fact that SFML acts as a front-end for various other open source game APIs such as OpenGL and OpenAL. Both of these APIs usually ship with Mac OS and Linux out of the box, and are considered to be as good as Microsoft’s Direct3D and DirectSound APIs for windows. SFML’s input handling is fairly decent, and is almost as good as DirectInput in my opinion. So what I’m saying here by switching the documentation to SFML instead of the Microsoft APIs like DirectX or XNA you, the gamer, aren’t going to lose out in terms of a lot of high-quality features by learning to use SFML instead. It is not only easier than either DirectX or XNA it is nearly as good as far as features goes. I’m not saying SFML has every single feature DirectX has in a strict feature by feature comparison, but SFML can certainly be used to create high-quality games right up there with GMA’s Shades of Doom and Tank Commander pretty easily. Then, there is the whole issue of cross-platform support. While this may or may not be an issue for some of you personally it still is an issue to consider. There are a number of blind and low vision computer users that use Mac OS or Linux instead of Windows as their primary operating system. I myself use Ubuntu Linux 10.04 as my primary operating system and only load Windows for certain games or some project that can only be done in Windows only. As a result there is a growing market for non-Windows specific games. That’s where something like SFML comes in handy for a game developer. For example, here is a simple way you could create a cross-platform game with little effort using SFML. Let’s say you use a language like Python 2.6 and want to create a game using SFML. You download install the SFML C++ runtime libraries and then install the PySFML SDK for Python 2.6. Once that’s done you can write your game in Python. Once you are ready to redistribute the game you have a few options how to redistribute it. You can create a platform executable using something like py2exe which creates a self-contained Python package with a *.exe file for that specific operating system. Alternatively you could simply run the game using the Python interpreter, let it convert the *.py files to *.pyc files, and then ship the *.pyc files which should run on any system where there is a Python 2.6 interpreter and PySFML SDK/runtime. If you wanted to you could simply post the original Python source which could be downloaded and run on any platform without a lot of changes. At most a person might have to reset a few path variables etc, but this is one way in which cross-platform games could be accomplished by using SFML and not sacrifice a lot of features in the process. The second issue I had when writing the USA Games tutorials and documentation was simply what programming language to use. There are quite a lot of them and again what you use really depends on what exactly you want to do with it. How advanced the game project, what operating system/platform you are going to use, whether or not you wanted commercial or free documentation, etc. Lots of choices here in terms of what programming language/languages to officially support through our website. Over the past 10 years or so the number one question I get from interested new programmers is what programming language should I use? That is a truly difficult question to answer. Especially, in terms of documentation, because every programming language has its own unique pros and cons. In short there is no right answer to that question. You have to pick the one that is right for you, and if you don’t know those pros or cons it makes it hard to decide. For example, in my personal opinion C++ is really the best programming language for game programming over all. It is supported on every operating system; there is lots of free and commercial documentation available, free compilers such as MinGW, and so on. However, despite all the good things I could say about the language it is not right for everyone. It is not, strictly speaking a newbie friendly language, and plenty of things like handling strings of text isn’t as easy or as straight forward as other programming languages. So obviously I have to weigh the pros of using C++ for game development against my intended target audience that is widely made up of people with absolutely no programming experience at all or those who have only experimented with languages like Visual Basic. In that light C++ is not a good starting point. On the flip side is a language like Python. I personally think the language is too simplistic, ignoring a lot of coding conventions for the sake of being easy, etc but that’s just me. The fact is though as a training language for a new programmer/game developer it actually would serve as a great intro to game development. Python was designed to be a light weight, easy to use, scripting language that has grown into a powerful programming language that can be used to create anything from a simple shell script to a full fledge program like games and screen readers for Mac, Linux, and Windows. The Linux screen reader I am using now, Orca, was written in Python. The NVDA screen reader for Windows was also written in Python so regardless of my feelings about Python the language has my grudging respect as being able to write anything you want to create quickly and simply. Tack on an SDK like PySFML and you’ve got yourself an easy way to break into programming without delving into advanced programming too quickly. I do think in this respect Python is probably a good starting place for the documentation.
So what I have concluded is that what I really should do with the USA Games developer programming tutorials is teach the new programmer how to program games exactly the way I was taught professionally. For example, when I was taking my programming courses in college I had to take a quarter of Visual Basic before I could sign up for a course on C/C++. After I took the C/C++ course I understood why the course on Visual Basic was required. Quite simply because I was taught some fundamentals about general programming using an easier language before delving into some more complex programming using a language like C++. In a way what I am going to do is no different. Except instead of supporting a Microsoft specific language like Visual Basic I’ve decided to use Python as my newbie starter language instead. It is powerful, supports SFML, and there is lots of free documentation out there on the language. Plus it works for a Mac, Linux, or Windows developer so has the widest possible use for accessible game developers. >From there we can progress to more complicated programming languages such as C/C++ and improve a developer’s programming skills. What I hope to accomplish here is to keep people from jumping out of the frying pan into the fire proverbially speaking. Take it one step at a time and let you, the new developer, take your time and learn at your own pace. If you find you learn Python and that works well for you that is good. If you wish to write more professional games using C++ that documentation will be available too and can give you a more advanced education. In time I hope to support more operating system specific languages like Visual Basic .Net as well, as I know there will be some who want to go that way too, but my aim right now is to start out very basic and teach an open and cross-platform design from the beginning. It is my personal opinion that proprietary technologies such as Visual Basic do more harm than good in the long run as it limits both the developers’ and the customers’ choice to a specific technology and platform. Not to mention will cost you, the developer, more money in the long run to use. Some technologies like AutoIt just aren’t worth your time realistically speaking. AutoIt is just not a viable programming technology for serious gaming and its limitations are numerous. That’s why I feel supporting something like Python, Ruby, and C++ right off are much better solutions than some of the alternatives like .Net, AutoIt, whatever. So the languages I have chosen to document and support are all good for someone on a free/low cost budget, are well documented and supported, support multiple operating systems, and support SFML. It doesn’t get much better than that in my opinion. The final issue I wanted to address is besides documentation I wanted to create a central repository for compilers, tools, and developer kits for aspiring game developers. Somewhere where a newbie could find all this stuff without having to search all over creation to get it. Since I know full well my target group is aimed towards blind and low vision developers on a fixed income that meant whatever development tools and APIs I posted would have to be fairly inexpensive and accessible. It would make no sense to post something that was very difficult to use, nor would it make sense to have you purchase a fairly expensive piece of software like Visual Studio Professional just to find out if you liked programming games or not. This is another reason why I have decided to step away from the Microsoft specific technologies for documentation and instructional purposes. For one thing while it is true that Microsoft does offer free versions of their Visual Studio development tools, Visual Studio Express, they are little more than practice compilers in my opinion. For one thing they are all hobbled in some way missing tools, libraries, and features you can’t get unless you purchase Visual Studio Professional or Enterprise. For example, if you were a Visual Basic .Net developer and you want to keep hackers/crackers from pirating your game you will need a tool called dotfuscator which will insure the executable can’t be decompiled back into Visual Basic source code, and the MSIL code isn’t readable. If you want Dotfuscator you have to buy Visual Studio Professional. If you want to use the official Microsoft Setup Installer complete with DirectX, .Net, and other dependency checking you need Visual Studio Professional. If you want to recompile your game for a platform other than the default one such as a 64Bit processor you are out of luck. You definitely need Visual Studio Professional. That one more than any of them really bites because most of the computers sold over the past couple of years are all 64Bit machines which makes that a real serious problem for game developers. If you use Visual C++ Express there are a number of core Windows libraries such as ATL and MFC support that doesn’t ship with the Express compiler. For all those reasons you kind of get the idea that other than using Visual Studio Express for practice or simple application development Microsoft isn’t going to give you much without paying the big bucks up front. Then, there is the accessibility issue. Recently I upgraded to Visual Studio 2010, and immediately regretted it. As is Microsoft’s current trend Visual Studio 2010 is far less accessible than Visual Studio 2008, and despite trying to script it, make set files for it, I eventually decided to go back to Visual Studio 2008. Just like Office 2010 is less accessible than Office 2007 Visual Studio 2010 is just as equally less accessible than Visual Studio 2008. To be honest this trend Microsoft is on has me just downright disgusted with all their software products right now. To make a long explanation short I don’t feel Visual Studio 2010 and later is a direction that we, as blind game developers, should go just because Microsoft appears to be making less and less effort to produce accessible development tools and APIs. In my personal experience the tools that always worked best for me are the simple commandline compilers and tools that can be run from the Windows command prompt or from a Linux terminal window such as MinGW. While those compilers are constantly being upgraded and new versions are coming out they are just as accessible now as they were ten years ago. They are free, are fully featured compilers, and are for the most part easy to use once you know how to use them. Best of all if you use the same compiler on Mac, Linux, and Windows it is a simple case of learn once use anywhere. For example, if you did something like Gcc game.c –o game That would compile game.c and create a binary executable file called game.exe. Since gcc, the GNU C/C++ compiler, is available for several different platforms it is an excellent development tool for C and C++ developers. It actually is probably the most widely used C/C++ compiler in the world and it costs you nothing to download and use. Its only drawback is that it doesn’t come with a IDE, graphical user interface out of the box, but there certainly are free IDEs floating around for gcc/g++ if you need or want one. Basically, what I plan to talk about and support in my programming documentation are simple and basic programming tools that are usually free and that have helped me over the years. For example, even though I own a full copy of Visual Studio 2008 Professional it might surprise many of you that the majority of the programming done on Mysteries of the Ancients was done in a Linux text editor called Gedit. For those of you who don’t know Gedit is essentially a Notepad-like program that ships with most distributions of Linux with a few extra goodies like a spell checker, dictionary, multiple document support, and so on. In other words nothing fancy. Just a basic text editor that happens to be fairly accessible and can handle several text documents or source files at once. I could have used Windows Notepad or something equally generic if I really wanted to. In short, one of my college professors had a motto he often used which was, “keep it simple stupid.” As it happens that advice has proven itself to be as true today as it was back then. Often times the simple tools like Notepad, Gedit, whatever are just easier and more accessible than the big expensive tools like Visual Studio. Often in my experience most of the programming books I have read that talk about Visual Studio spend pages upon pages giving directions to point here, click that, drag this, and drop that, and so on. Books like that just end up being both frustrating and useless, because we don’t work that way. Even though there are usually hot keys to accomplish the same thing I’ve found why bother fooling with a big graphical compiler/IDE like Visual C++ when I can accomplish the same thing with an easier and simpler tool. So with that in mind I’m going to follow my own advice and try and document the tools I use and skip over the graphical IDEs like Visual Studio until I get into more advanced topics or if I have to discuss something like SAPI 5 which works best with visual Studio. However, for the most part there are free and easier software solutions out there that can usually accomplish the same with a lot less confusion and are far more accessible too. Sincerely, Thomas Ward Try Linux the free and open source desktop solution. Let’s live in a world free of Windows and Gates. --- Gamers mailing list __ Gamers@audyssey.org If you want to leave the list, send E-mail to gamers-unsubscr...@audyssey.org. You can make changes or update your subscription via the web, at http://audyssey.org/mailman/listinfo/gamers_audyssey.org. All messages are archived and can be searched and read at http://www.mail-archive.com/gam...@audyssey.org. If you have any questions or concerns regarding the management of the list, please send E-mail to gamers-ow...@audyssey.org.