Game Jamming with UE4
/As I'm just starting to get into Indie development after 12 years of AAA game development, I wanted to enter a Game Jam as quickly as possible. Luckily, The Idle Thumbs community organizes a regular game jam called Wizard Jam that was absolutely perfect for me. The rules and timeframe are pretty relaxed so I decided I wanted to spend about 3 days building a game in UE4, using as many of my own assets as possible. So, I decided to learn lighting, modeling, and animation and build a simple game. The end result is General Interest, a minimal RTS where you command an army of interest-earning securities to take over the market/colored terrain rectangle.
The game is nothing special, but I wanted to write up some of my thoughts on the process of making something for a Game Jam as it may help others. There are other resources for this including the UE Wiki and tons of video tutorials. Because I'm a programmer with limited art skills, most of this advice assumes some basic experience with coding in UE4. Anyway here we go!
Getting Started
When you're making a game for a jam you probably want the smallest amount of content and code possible, so when you make your project you need to be careful. I started with a Top Down C++ project because I was making an RTS, selected PC as target, and brought in starter content. After my project built I jumped back into the editor and started pruning things. First, you may want to delete much of the starter content. I ended up deleting everything other than the materials, but don't delete things you may want to use. Also at this point I went into the Edit->Plugins menu and disabled lots of plugins. The default setup includes things like VR that you won't want in your project (unless it's a VR game of course). This would also be a good time to enable any marketplace content you're going to use, I didn't end up using any for this project. Finally, make sure you go to the Edit->Project Settings page and fill in your project description details, as you're about to generate some code classes
The next step is to build out the framework for your game. As I am a programmer by trade I wanted some new base classes and structure, that I would then iterate on via blueprint subclasses. The easiest way to do this is to do File->New C++ Class. In my case I wanted a new Game Instance (which is a class that sticks around between levels so can be used for things like high score saving), but depending on your template you may need a new Player Controller or Character as well. Once you have your c++ base classes you should then make blueprint subclasses of all of them, which is where you will do the rapid iteration. Just making the classes isn't enough, you'll have to tell the project to actually use your new classes from the Maps and Modes page of project settings, or on a specific map using world settings. I had a title screen and several RTS maps so I ended up making two separate game mode blueprints.
Making Your Game
Okay, we have the classes, now to actually add stuff to them! What to do next depends on your game, but because I was making an RTS I decided to implement the hp/money generation in c++, the input handling half in both, and all of the visual/audio entirely in blueprints. So my first task was to make a Data Table base class:
USTRUCT(BlueprintType) struct FInvestmentStats : public FTableRowBase { GENERATED_BODY() /** Max/starting HP for this investment */ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Stats) float MaximumHP; };
I added a bunch of stats here and made a separate structure for the terrain info. The next thing I started doing was adding a bunch of BP events and public variables to my Character subclass:
/** Targeted character to interact with */ UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Control) AGeneralInterestCharacter* TargetedCharacter; /** Blueprint callback when hovered over */ UFUNCTION(BlueprintImplementableEvent) void OnSetHovered(bool bInIsHovered);
Once I was done building out the C++ framework I then went back to the editor and started using it. I made Data Tables for my investment and terrain stats and filled them out with bad guesses at fun values. I then went into my Character BP subclass and started implementing all of my events. I then spent 2 days iterating by adding new events, implementing them, tweaking values, etc. How to build your game depends heavily on your game genre and your personal skill set, so look for more general UE4 information online if you need help with this part. There's one more step:
Releasing Your Game
Okay, you're happy with how your game works when you playtest in the editor, the final step is to get into an actually releasable state. This can be a bit confusing, so let's go through the steps:
- Test your game using Launch: If you use the Launch drop down and select your PC it will cook and create an almost-final version of your game. Things like cheats will still work, so you can look for and address any issues that may pop up. Notably it defaults to full screen.
- Change your cook settings: By default if you don't set anything up it will cook all of the content in your game, but that might pull in things you don't want and bloat your download. The easiest way to do this is to modify the List Of Maps to Include in the Packaging Settings. For a game jam game that's probably enough.
- Prune your cook content: I also turning on Exclude Editor Content When Cooking and Create Compressed Cooked Packages. This will break any uses of editor content like the built in sounds, though, so you may need to clone a few assets.
- Enable Shipping: If you don't want your users to have access to cheats, enable For Distribution. This isn't a huge deal for game jam games but it will also make your download smaller.
- Make a packaged build: To do this go to File->PackageProject->Platform. This will ask you where to save it, then it will take a few minutes to build and create a final packaged build.
- Test your packaged build: When you package it creates a Platform folder, and inside that a GameName.exe. This is a tiny executable that just launches your real one, which is in GameName/Binaries. Anyway launch GameName.exe and if it works you're good to go.
- Create a distribution package: This depends on where you are distributing, for Itch.io you want to make a Zip file called GameNamePlatform.zip, containing all of the contents of the Platform folder. You want GameName.exe to be in the topmost directory. You can safely delete the manifest, but you need everything else,
- Distribute it: For Wizard Jam this was dead simple because it integrates right into Itch. So I made an Itch account and set up my game page where I could upload my zip file. You want it to be "no payment", and make sure to select the right platform for your zip file. If you do this properly it will work from both the itch website and the desktop client.
And there you go! That's an overview of how I built my game jam project in UE4, skipping over all the hard-to-describe actually-making-the-game bits. If you have any questions or comments you can either email me or leave one here. Good luck with your game jamming!