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:
II. Choose Your Engine and Dev Stack
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 a cloud of ideas on paper, you can start putting together your Game Design Document (GDD).
The core elements of your document will include:
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.
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, afterUnreal 4, getting access to hundreds of masters became much easier. 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.
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 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, 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, and 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.
The 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 support with a Substance Plugin for UE to allow quick iterations on your textures right in Unreal. 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.
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 to 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.
Even the most experienced game developers know that no matter how good an idea is, 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 a 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 “to-do” 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 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 milestones and project statuses to see 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 having 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 into the project and workflow, 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.
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.
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 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.
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.
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 leading provider of managed 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 particularly 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.
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 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.
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:
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.