Ultima Game Developer: Hardware and Software Requirements for Game Development
If you get into development, what should you have before you begin? How can you improve your process?
A lot depends on what you do. If you are a programmer, your needs are different than if you are a graphics artist. However, if you are a developer, you need to be aware of the needs of each member of your development team, since you will be the one in charge of making sure everyone is comfortable.
The first, and probably most important, piece that a development team must have is a BACKUP PLAN. Whether they spent their hours programming, hours sketching a new storyboard, or just finished composing ambient music for a scene, these efforts must be preserved.
This is done in two pieces: first is the Repository.
Your repository allows you to track changes between versions, which you add to each time a new item or revision of an existing item is produced. A repository allows you to revert changes, if it becomes necessary to go a different directory, or even branch an item, to produce multiple objects from the same base. One of the easiest repository programs to use, and the one that I recommend, is Subversion. You specify a server, and install the Subversion service there. Each workstation will have a Subversion control (I use TortoiseSVN), which allows you to extract existing files from the repository, add new or changed files to the repository, and compare versions. Subversion also has the benefit of wide support, which means you can check in and out changes from within applications, such as Microsoft Visual Studio.
Once you have a repository, you also need to implement Snapshots.
Snapshots are backups of files, which can allow you to restore everything in a folder, on a drive, or even across multiple drives from a single timeframe. A snapshot can be a backup file, which any operating system can create, or you can use programs to create a drive image and restore it. If you have a current server, I recommend using VSS, which is built into the Windows Server. I back up all changes to our working drives (each computer has a operating system drive, C:, and a working drive, D:, and we only save files for our projects to D:), and each workstation writes its VSS image to a network backup. These backup files are then archived to Blu-ray each weekend. If a computer crashes, just restore the VSS image from the last good backup, and its up and running in less than an hour.
Once you have your backup plan in place, you can look at your HARDWARE.
Hardware is partially dependent on what your target release will support. You will, of course, need those systems in order to test and debug the game itself. However, the majority of the development can be done from any type of system, as long as they can transfer files between them.
For programming, I tend to recommend sticking with Windows operating systems and using familiar tools, unless you have specific needs. I do all of my programming in Microsoft Visual Studio, or in the development console for the game engine (in my case, UDK). I do have a Mac OS X Snow Leopard machine for doing Objective-C programming, and for publishing to the Apple App Store.
For other tasks, I’ve let our team decide what they want to use. One musician uses Mac OS X and does all of his recording and editing in GarageBand and Audacity. I strongly recommend having a MIDI keyboard available for music, as it makes testing and changing audio much easier. The only real requirement is that the output files be compatible, so we have agreed on a specific format, such as all of our audio being saved as MP3 files using a specific codec (and at a specific bit rate, etc). Image files are all standardized as well (high-resolution PNG files, except as limited by the target media).
Other important hardware will be specific to your target. Trying to publish to XBox Live will probably be difficult without an XBox to test on, for example. Computers are probably the hardest target for software development, as their lifecycle can be measured in months. I’ll look at creating a second article for testing resources specific to overcoming that obstacle.
Much like the hardware used for game development, the software used can vary based on your requirements.
For audio, I recommend using a high-quality sound mixing program. For Mac systems, GarageBand is very good, as is Sound Forge for Windows. As a free alternative, Audacity is available for most operating systems and has very good support. For the majority of audio editing, Audacity is arguably better than retail applications.
Photoshop is a staple for image editing, but GIMP and Paint.NET are good free alternatives. Be aware that both Photoshop and GIMP can have a steep learning curve if you are using their advanced features, and both Photoshop and Paint.NET have a large number of plug-ins to handle additional tasks.
Programming is most often done in a studio product, such as Visual Studio or Xcode. Numerous free versions are also available, although I can not recommend any one over another. Most plugins will require one of the major studio editions, so sticking with them will have the most benefits for your programmers. I do all of my programming in Visual Studio, and Microsoft has “Express” editions available for free download (but are restricted for non-commercial development, but are perfect for learning to program).
If developing a 3D game, a modeling and rigging program is necessary. 3D Studio Max, Maya, ZBrush and MudBox are top-end products that are often used for content development. On a shoestring budget, Blender and Milkshape 3D provide some of the same basic modeling, but I have not been able to match the capabilities of the “Big 4” for complex or lifelike figures. Other modeling programs, like Houdini, LightWave, Poser, can be used if you have specific needs, but these are more expensive commercial products.
Some other software which can have use in game development can include:
- A Flash development tool, such as Creative Suite or FlashDevelop. Flash is used by UDK for the UI and menus, through Scaleform.
- A Java programming platform, Oracle’s JDK or Java EE, is required for creating Java applications, including all Android apps.
- The DirectX SDK can be useful for Windows programmers who are not using a preconfigured game engine. For cross platforms, the OpenGL API can similarly be used.
- Movie creation software can be used for cutscenes or machinima, but are becoming less popular than in the past. Having not used any specific video software for game development, I can’t recommend any specifically.
- Scripting tools, including Lua and Python, can complement the programming package for creation of content.
- Developers who are creating custom graphics engines should look at graphic programming engines, such as nVidia’s Cg.
- If developing for Windows, XBox, and/or Windows Phone, Microsoft’s XNA tools can help speed the creation of software that can more easily be ported between the systems.
So, what other tools do you guys use? What is essential, and what can you skimp on?