Towards an Optimized Project Structure

Introduction

In the past years, I got to take a look at a lot of different project structures, all of which have their individual up- and downsides. When I became the Lead Programmer of Daedalic Entertainment, I had to come up with what Mike McShaffry calls some kind of “bullet-proof directory structure”.

Based on his best practices in Game Coding Complete, I came up with the following one, which is used by most of my projects in some way or another now.

Project Structure

  • Bin
    • Main Project
      • PC
      • Mac
    • Tool 1
    • Tool 2
  • Documents (Game Design Document, Technical Design Document, Milestone Agreements, …)
  • Localization
    • English
      • Texts
      • Images
      • Speech Files
      • Cinematics
    • German
  • Media (Raw)
    • Images (Backgrounds, Concept Art, Characters, Items, …)
    • Meshes
    • Textures
    • Icons
    • Sound & Music
    • Cinematics Footage
  • Release
    • Demo/Full
      • Platform
        • Language
          • Installer
          • Patches
  • Source
    • Main Project
      • Source Files
      • Make Files
      • Levels & Imported Assets
    • Tool 1
    • Tool 2
  • Test
    • Debug Build
      • PC
      • Mac
    • Release Notes
    • QA Tools (Cheats, Unlock Tools, …)
  • Vendor

The Bin folder always contains the latest build of the game. You should be able to hand out the content of this folder to the press or clients at any time. If you’re developing any  game-specific tools (e. g. editors), their latest builds can be found here as well.

The directory Documents contains all texts and spreadsheets required for developing the game, such as balancing tables, the game design document or technical specifications.

The Localization folder contains spreadsheets with all game texts that are shown to the user, as well as all media that has to be localized.

All raw non-localized media, such as .wav files and Photoshop files are stored in the Media directory. Note that the Media folder contains raw files, only. All exported assets such as .png or .mov files should go to the Source directory explained below. Images that have to be localized, speech and cinematics should be stored in the Localization folder instead.

All setup and patch executables can be found in the Release folder.

In the Source folder you can find all source code and project and solution files required for building the game. All exported assets, such as .png or .mov files, can be found here as well. They are tied into the project structure in order to allow quick automated builds and they are replaced by the artists as required. If there are any game-specific tools in development, like editors or localization tools, their source code can be found here, too.

The directory Test always contains the latest nightly build. This build is used for internal testing, only, and writes verbose debug output for easier bug tracking. Here you can find the latest release notes, too, as well as anything else required for testing the game, such as cheats or tools for unlocking achievements.

The Vendor folder is meant to contain all third-party software that is required to develop and build your project. The idea behind this folder is that you should always be able to checkout the project anywhere and build it immediately without having to setup anything else.

Conclusion

Using the folder structure presented above, you ensure that every single file can be found at a single place, which makes it easier to keep all of them up-to-date. Additionally, you minimize the required time for finding any specific file, and thus increase the efficiency of your whole team.