If you’re a game development enthusiast like myself and want to start building games, it can be a daunting task to get started. With the right tools and process in place, even a small team can create an amazing game experience. From novice to veterans, use this guide to familiarize yourself with some of the great resources the community has developed to help you get started on your next game.
In this guide, I’m going to cover the following topics:
I. Documenting Your Game Idea
II. Choose Your Engine and Dev Stack
III. How To Get Organized
IV. What To Code In
V. Get Into The Community
I. Documenting Your Game Idea
Just like with writing, it can be difficult to put something on paper even though your head is full of ideas. Start with sketches. Don’t try to put everything together in one day. Come back to your sketches and try to lay out a story. Once you have cloud of ideas on paper, you can start putting together your Game Design Document (GDD).
There’s a lot of game design document templates out on the internet that you can use for free. I found this template on the Unity forum by Benjamin Stanley and this one on Gamasutra’s blog by Jason Bakker.
The core elements of your document will include:
Introduction – Think of this as your elevator pitch. I think it’s important to start here before you get into the details. It will help simplify things as you move forward.
Game Description – Decide on a theme and a genre that you’re game will be in. This is important for categorization and understanding who your audience will be.
Characters and Plot – Decide on who your characters will be and what the landscape will look like.
Mechanics, Assets, Game Flow – Decide on what systems will be required for all elements of the game including the backend system, visuals and sound.
Timelines – As with the elevator pitch, this is also fundamental because it will keep you and your team from going down a rabbit hole. With the amount of things you can do with building games, it’s easy to try to perfect every aspect of the game. A timeline and tool that helps you keep to that timeline are important.
I won’t get into monetization in this post but I think it’s important so I’ll be doing a follow up blog post based on interviews I’ve done with game developer agencies that have raised funding and have executed their game successfully in the market.
And you can add everything into a Wiki for further collaboration. Assembla has a Wiki tool you can check out and might come in handy once you choose a repo and project management tool which I’ll discuss later in this guide.
II. Choose Your Engine and Dev Stack
As someone that has been playing and building games as a hobby for 15 years, I get super excited about all the new trends that are developing in the gaming industry. Epic Games is always at the forefront of these new trends. From the old days of Unreal tournament to today’s Gears of Wars 4 mega hits, Unreal powers the AAA small and large games today on consoles and PC’s. Their newest incarnation is the culmination of years of experience working with millions of developers to provide the most robust game stack out there bar none.
For the purpose of this guide, I will be referencing Unreal as the engine of choice although there are many other great ones out there like Unity and CryEngine.
When I first started in Unreal, the fastest way I learned was to copy and reverse engineer what the masters had done. Luckily, with Unreal 4, getting access to hundreds of masters is now at your fingertips. The engine samples are a great source for assets and should last you well beyond the first prototypes of your game. Unreal Marketplace has a growing number of high quality content available which can be used to give your world more life without having to deep dive into Maya or Blender out the gate.
Fast prototyping of Levels
Use basic primitives and the BSP tools to block out the basic environment for your game. It’s easy to get distracted by spending too much time on that fancy looking M16 rifle you’ve always wanted in your game or have button press animation look truly next-gen; you have to remind yourself that none of that matters if the core game isn’t solid or even exists. Unreal Engine 4 uses a Physically based Rendering (PBR) shading model. If you’re new to PBR, check out this introduction to PBR in Theory and Practice, they’re both really good reads. The official documentation has some additional information on PBR specific to Unreal Engine 4, including a couple of really interesting references at the bottom if you’re technically inclined.
My favorite modeling apps are Maya LT and Blender (free). I personally prefer Maya over Blender. Maya is a great tool but there are plenty to choose from. Once you get further into your game and levels you’ll be jumping between Maya and Unreal Engine a lot creating meshes, content for final polish so pick one and stick with it – it will take you many months to get good at the main workflows. A good idea is to set aside one hour a day for 60 days to spend time in the tool doing basic things. Every day, build on top of your skills from previous days – don’t try to do anything fancy right away – you will just get frustrated. Before you know it you’ll be creating models like a pro and at the very least get comfortable enough to make models that are pre-production quality. If you’re looking for that final polish, you can hire or find professionals on websites like Upwork that have lots of experience on very niche techniques.
Photoshop is the tool you want to be using. I know Gimp is great but nothing beats best in class and as you progress, Adobe is the tool all professionals and agencies use. I know Adobe costs money but for the vector graphics and overall texturing work you get with Photoshop, it’s really not that expensive for the value you receive.
Substance is an amazing tool to paint your 3D models in a more procedural and natural way. It’s highly recommended and has full Unreal 4 support with a Substance Plugin for UE4 to allow quick iterations on your textures right in Unreal 4. There is an Indie Pack for sale with both Designer and Painter on Steam. Once you get further into your game and levels you’ll be jumping between Photoshop and Unreal Engine a lot creating textures so pick one and stick with it; it will take you many months to get good at the main workflows.
Automation is your Friend
If you have one or more programmers on your team, or are handy with Python yourself, take some time off and review your pipeline to see where improvements can be made. It’s best to do this early on in production and have multiple reviews along the way. Be open to feedback from your artists and actively ask if you can help them out. Writing small Photoshop scripts to simplify exporting or writing a tiny launcher to make multiplayer testing and setting up play tests makes it easier for your entire team (and possible testers you have get involved). Automation is your friend and for a little bit of upfront pain it pays massive dividends on the backside to remove human errors from a process that happens hundreds of times over and over.
III. Get Organized
Even the most experienced game developers know that no matter how good an idea, project mismanagement can wreck everything. Project management is a complex subject and is as important as art, programming and design. While it’s generally accepted that simple “waterfall” model of development isn’t enough for studios, flexible development models for your vertical are harder to implement than they look and require daily patience.
As a developer, it’s a clunky experience to open a web browser or email client to see information about tickets or my “todo” list for the day. The more integrated these tasks are into the developer’s tool stack the more likely the entire team will use it right? I know project management is not the fun stuff to talk about but it’s fundamental to a successful game development project.
When setting up your project management tool, make sure you can customize milestone and project statuses to how your team operates. At Assembla, we use statuses like “New, In Progress, In Review.” Get your team accustomed to moving tasks into different statuses according to their due dates. It will save you headaches down the road when you have dozens of tasks in play. Here’s a project management template for game developers that is publicly available. You can also copy this template for free if you have an Assembla account.
Game developers know about big files so you need as much storage as you can get. Go with a tool that has unlimited storage for all your media files. You want to be able to visualize progress within the tool without have to leave the app. It’s important to consider a project management tool that can scale so you don’t have to worry about migrating data in the future.
Using Version Control is essential for your own sanity, even when working as a solo developer. Don’t trust your hard drive and don’t trust your late-night code changes, use Version Control instead. Looking back at how I started in development on a small team back while in university (not knowing about this “Version Control” thing that is now commonplace in my life) we used manual sharing of code and content changes between machines. Because of this, we lost many textures and code features in the process. Use Subversion, Git, Perforce to safely store and manage your game source. Using concise messages when committing your changes helps others in the team know what’s going on.
Assembla has always been really close to the developer community and we serve hundreds of small studios that host their projects and code with us to build great experiences. As Assembla’s CTO, one of the most important things I’ve observed talking to customers and looking at their workflows is how valuable it is as a project management tool, to have source control in the same workflow as Level and Character design so you can have an end to end process.
Assembla’s versioning engine delivers blazing fast workflows with on-demand Perforce cloud hosting and SVN. There are no limits to file type or size. Our container architecture scales with AWS power, scale and availability. For the most demanding studios we offer on-premise solutions for SVN scaling to the largest and most secure environments. You can also bring your favorite Perforce and SVN tools and IDE’s into the project ask workflow and let Assembla coordinate your team and store everything in your pipeline. Later on in this guide, I’ll cover which source code technology to use and why.
IV. Start Coding
Once you’ve finalized on your idea, what engine and dev stack you’re going with and how you intend on staying organized, it’s time to get into the actual development of your game – the fun stuff.
Develop in Blueprint or C++?
First, what is Blueprint? Blueprint is Unreal Engine’s visual scripting language. It is layered on top of C++ and any code you write can be exposed to and used by Blueprint. It’s a very powerful tool to quickly setup content and pieces of logic, especially when prototyping. That does not mean it’s only a prototyping language. An entire game can be build using Blueprint, never touching C++.
There are frequent discussions about “which language is better” and I believe there is no straight answer to this. It depends entirely on the scope of the project, the team and proficiency with either. Taking a door as example, one might implement the abstract interaction logic in C++ (User presses a key, perform a trace against the world and call a function on the hit object) and build the definition of a door (animate on the function call, assign model, sliding sound etc.) in Blueprint.
Many studios use Unreal Engine 4 and prototype using Blueprint to rapidly get a feature up and running. If the prototype is promoted to a real feature it will be reviewed and considered to re-do it entirely in C++ or simply perform a cleanup pass on the Blueprint instead. While some may opt to do their entire game in Blueprint which is possible, others may do the bulk of it in C++. There has been no reason yet to not build your entire game in Blueprint if you wish and it’s currently extremely popular with many tutorials created daily on how to make just about anything in Unreal Engine without the use of C++.
If you’ve never coded in C++ before it may very well be quite intimidating at first. I would recommend to start learning the editor environment, game framework and basic Blueprint first – it will make the transition into C++ easier since you’ll be more familiar with class names and conventions that apply to both Blueprint and C++.
Don’t worry about run-time performance between C++ and Blueprint until you see it’s a problem and bottleneck for your game. For pretty much all of your gameplay logic Blueprint will be fast enough. If you’re doing a lot of heavy operations in a tight loop, you may run into performance issues, again – don’t optimize until you know it’s a real problem by measuring.
Keep Code Clean with Naming Conventions
At Assembla we have a very rigorous code review process that ensures code stays clean, consistent, maintainable. These are super important when building and maintaining a large software system. Games are no different. This stuff sounds boring, but is so important to nail down early. Others (and your future self) will need to immediately understand what you meant by UberHighRezTexture_Final.DDS two months down the line. It’s not very search friendly, and does not tell you anything about its contents except that it’s a texture and “HighRez”? So agree on a naming convention for both code and content with your team.
Epic published a great naming convention for everyone that is a good base to start from. You can use it as a starting point and of course change whatever you like. For code we stick to Epic’s coding standards. It may take some time for you and your team to get used to new conventions. The fastest way to ensure this is successful is to create a proper software development and release pipeline using rigorous code reviews. Find the right code review tool and institute it into the culture to favor fast failing – it’s OK if your merge request gets rejected 10 times due to whitespace issues! These small details are what separate a well maintained codebase from one that is not.
Choosing A Source Code Technology
If you’re building mission critical games, are managing tera-byte scale repositories of content from source files to videos to content assets and need dedicated support to meet critical SLA metrics, then you should choose Perforce. Perforce is the go to choice for teams managing large projects with large infrastructure concerned about collaboration and continuous code integration via branching and dedicated support. Media and gaming companies choose Perforce for a reason – it’s the best in breed for managing your content pipeline the fastest and the most secure.
Assembla is the sole provider of On-demand Perforce in the cloud. Perforce repositories are available in seconds and can be federated into other workflows alongside other repository technologies. Overlay your project execution process with our innovative code commenting/blame tools and connect our code review capabilities your favorite continuous integration and continuous delivery pipeline such as Jenkins.
If you’re running most of your team on Windows, have security and compliance requirements on traceability and have large projects above 1GB for content such as media and gaming, then SVN is the preferred option. SVN brings together the best blend of centralized repo technology with key features from some of the best distributed repo technologies. SVN is the go to choice for simple and large co-located Windows focused projects concerned about performance and security. Overlay your project execution process with our innovative code commenting/blame tools and connect our code review capabilities your favorite continuous integration and continuous delivery pipeline such as Jenkins.
I know Git is the most widely used code repository and you might wonder why not Git? Perforce and SVN ensure visibility and control. With these version controls, you can see which files are checked out and by whom, something you cannot do with Git.
What differentiates your domain from the “Github” ecosystem is Big Binary Files. SVN and Perforce are particular good at managing this complex problem. Moreover, binary file management offered by Perforce ensures large files of any type are handled as efficiently as standard text-based “code” assets, with no impact on system performance. Game developers can version everything—including code, config files, and large binaries like 3D models, video, audio, and designs with our class-leading on-demand Perforce and Project management solution.
Prevent others from overwriting your binary files while you pixel perfect the latest monster tessellation model for the next release.
Here are the go to repo tools to manage Perforce and SVN:
TortoiseSVN – Windows Explorer integration, I find this the best tool when dealing with Subversion. To set this up with Assembla check out this guide.
P4V – Visual client for Perforce, works really well and is the default when dealing with Perforce in my experience. To set this up with Assembla check out this guide.
Epic has several version control plugins available that ship with the engine. Perforce is the default and the de facto choice for game studios due to its native ability to deal with the massive amount of data that goes in and out of a game studios repository system during the development process.
Unreal Engine 4 requires Visual Studio 2013+ or XCode on Mac, the community edition is free for students and teams of 5 or smaller. I use this tool every day and it works great – integration into Perforce comes courtesy of the great plugin from Perforce here. Check this article out for how to set up Visual Studio for UE4.
V. Get Involved
There are countless events, virtual and in person, free and paid, where you can go out and meet other game developers. These are opportunities not only to learn but to also find people to join your team. If you want to start testing your skills, one of the events that we’re proud to sponsor is UE4Jam – a hackathon style event where teams spend a weekend competing developing games as per the announced theme.
I also recommend reading lots of documentation. The good thing is there is lots of it, the challenge is knowing which articles to read and why. Here’s a laundry list of resources I recommend bookmarking:
Unreal Beginner tutorials, guides on content creation & importing, and Level creation.
Epic’s Getting Started page – This page has links to many interesting resources on the engine and game framework & editor basics. It helps if you have prior Unreal Engine (UDK) experience as much of the game framework structure is the same between both engines. The engine contains several templates and examples that will help you get started with a variety of game types including vehicle, dual-stick shooter & side-scroller templates.
Unreal 4 YouTube Channel. Epic released a ton of great tutorials on numerous topics that I recommend going through when starting out. They develop new videos every month so subscribe to their channel to continue learning.
Unreal Marketplace includes a couple of great sample projects by Epic Games. I recommend walking through the Content Examples projects to discover the many cool features available in Unreal 4. There are hundreds of hours of content to download, load and study.
Game Framework – Unreal Engine 4 shares much of its naming and structure with UDK / Unreal Engine 3. If you’re familiar with the previous engine you should have little trouble transitioning into the new (C++) framework. If you’ are not familiar, I strongly urge you to read the documentation and get a feel for Unreal’s structure. It’s absolutely essential to feel comfortable with some of the most commonly used base classes (Actor, GameMode, Character/Pawn, PlayerController, HUD) even if it’s only their basic function and usage. A lot of your code will be built on top of these few classes so knowing how to use them effectively is essential.
Replication documentation. If your game includes a multiplayer component and you’re comfortable with the game framework then this is a good place to start learning the basics of networking your game. This is an advanced topic and you may need to come back to the docs a few times to truly understand the concept and implementation of networking principles in Unreal.
Introduction to Blueprint Networking. This is the official YouTube channel that covers most of the principles you’ll need to get started.
FPS Shooter Game. This is a good reference for replication in C++. (available in the Unreal Launcher)
Keep in Touch
One of the most exciting things I’ve been working on at Assembla has been a native integration with the Unreal Engine 4 Editor in terms of Assembla and Project Management.
As you can see, I’m super passionate about building games and an Unreal integration is just the first step Assembla is taking to help game developers build better games. If you want to get updates about this plugin and get early access, please submit your contact information below.