Game jam tips and tricks - February 13 - Live from HQ

WHAT
Now that Global Game Jam is officially in the rear view mirror, it’s a good time to reflect on how our projects went, and an even better time to start planning for your next jam. On this episode of Inside Unreal, game jam veteran and Epic’s Blueprint wizard, Michael Noland, will share tips and tricks to help you make your next jam your best jam.

Image credit goes to IT IRL, the top UE4 Global Game Jam game at the Playcrafting + Microsoft NYC site.

WHEN
Thursday, February 13 @ 2:00PM ET - Countdown

WHERE
Twitch
Youtube

WHO
Michael Noland - Lead Engine Programmer - @joatski](https://twitter.com/joatski)
Victor Brodin - Community Manager - @victor1erp](http://twitter.com/victor1erp)

ARCHIVE
Game jam tips and tricks | Live from HQ | Inside Unreal - YouTube

Always looking forward to tips and tricks. :slight_smile:

will happen the Winter Jam 2020?

@GamesIndie There won’t be a Winter Jam, but we’re planning similar contests and Unreal Game Jam during spring. Stay tuned!

Is their going to be an example file available for practise after this livestream is done?

[QUESTION] Is it possible to make a small game(probably of game jam size) without using the mouse when blueprint coding?

Honestly Im sort of joking and legitimately asking

Starting a post to share some resources and links. I’ll update this post again after the livestream.

Free Asset Editors

Free assets and example projects

Organization tools

  • https://trello.com/ (digital sticky notes)
  • Slack or Discord (for team organization, more important in remote/distributed jams)
  • **TortoiseSVN / TortoiseGIT - **GUIs for working with SVN and GIT repos
    **Beyond Compare or Araxis Merge - **Paid merge tools that are not free but are miles better than what ships with any SCC package (only really relevant if your project contains C++)

Misc. stuff

Note about using Marketplace content (or other paid content)

Some jams require you to release the source code and assets to your jam project, which means in this case you can’t use “Paid Content” from the marketplace (as you aren’t allowed to redistribute them in uncooked source format, see EULA - Unreal Engine for more details). If you’re only releasing a cooked/packaged build (and the jam doesn’t have rules like ‘you must create all assets during the jam’) then you can use anything you have licensing rights to.

Can’t get enough jam in your diet?

Practice makes perfect.

Cheers,
Michael Noland

I’m afraid you need some method of controlling the cursor (e.g., via a mouse, touch pad, or an assistive device) in order to use the Blueprint Editor, it is not possible to use from the keyboard alone, though there are a number of keyboard shortcuts to help productivity.

Cheers,
Michael Noland

Thanks for the link to the fancy game name generator. :slight_smile:

Just like a jam, there wasn’t enough time to cover all the topics I wanted to touch on, so here are some more things from my notes that I didn’t have time to cover in the stream:

Want to indicate something is friendly or dangerous or valuable?

  • The easiest way to provide a bit of extra gameplay indication is a colored highlight. You can use a Fresnel node (docs here) in your material to blend in an edge glow. Combine with a sine wave to make it pulse, or fade it in based on distance so it only shows up on distant objects; lots of these ideas can be combined together.
  • It’s a bit more work (and a bit more expensive on the GPU), but you can also make important game objects (e.g., your allies or a way point marker) show up even behind walls by using custom depth (tutorial here)

Centralize your knobs/tweakables

  • You can use curve tables or data tables in order to store a bunch of data together (both can be imported from a spreadsheet, and data tables can also be authored directly in the editor). You’d replace the local float or struct with a data table row handle or curve table row handle instead.
  • You can use composite data tables / curve tables to make a list of hierarchical tables, e.g., to allow local overrides of rows, to selectively override things for specific game modes / playlists, or to avoid contention when working in a team.
  • Even if you don’t go this far, consider promoting tuning constants to be variables and organizing all the tweakables for a given actor in one category together so they’re in one place instead of spread out all over the BP.

Make Macros

  • Note that macro libraries ask you what your parent class is for a reason. For example, you can make a macro library with parent class of Pawn to ‘namespace’ the macros to only show up when working with Pawns, and to be able to directly access functions/variables introduced in a Pawn.
  • (Jam-only) Add a macro to get your typed game instance or player controller, avoiding a separate cast every time you use it (or use interface messages instead). In a non-jam environment, you should probably have native base classes and do better routing to get to your stuff; see the discussion of GetPlayerController(0) on the stream.
  • Quick-and-dirty cooldowns: You can make a macro with a gate node and a delay node to make a simple cooldown node, or crack open the gate and reimplement it to do more complex behavior (e.g., provide an additional exec output for ‘tried to use while on cooldown’ to e.g., play a sound, and another for ‘just came off cooldown’).

Make Cheats
Speed up your workflow by adding console cheats and debug commands bound to keys.

Some things that might be useful to do as a Key bind:

  • Add a key (e.g., M) that reloads the current map (quick reset without restarting PIE)
  • Add a key that spawns another enemy/coin/etc… in front of the player
  • For a large world, add a key that jumps you in the direction you’re facing (e.g., J to jump/teleport forward to whatever a capsule trace says you’d hit in that direction)
  • Add a key to toggle on/off debug drawing code, or spit out information about whatever the player is looking at

Some examples for console cheat commands (note that you can have arguments/parameters to these cheats, such as the name of an enemy to spawn)

  • Add a cheat that gives you a specific weapon or item
  • Add a cheat that spawns a specific enemy or encounter or wave
  • Add a cheat to grant XP or gold or etc…

You can open the debug command console with the ` key (top left of your keyboard, just below Escape). In both C++ and BP, you can mark functions as exec (BP events are automatically marked exec) and call them as long as there’s a ‘route’ to them. There’s more info here Creating simple tools in UE4 – part 1 – Michael Noland's Blog, but for game jam purposes there is always a route to your player controller, cheat manager, and the possessed pawn.

  • Console cheats are best put in a subclass of CheatManager (and point to it from CheatClass in your player controller settings).
  • However, you can also call a function/event on any arbitrary blueprint using “ke * NameOfEvent [EventInputs]” (* is a filter, you can use the name of a class or an actor instance to limit it to only hitting those, or just use * to hit everything that has a function of that name).
  • Ditto for level script blueprints, by using ce NameOfEvent (note: no */filtering).

Notes:

  • For anything not concentrated in a cheat manager class (which is automatically disabled in shipping), consider making a macro node that has a branch inside which detects whether or not cheats are allowed and using that as the first thing in the exec path. This makes it easy to turn them all off for your packaged build.
  • When working in C++, cheats and panic switches are often best done as a CVar or self-registering console command, but that’s not an option for BPs.

Quick tools to speed up level design

  • You can mark a function in a Blueprint as CallInEditor, and it will show up as a button on the property panel in the level editor.

  • You can do stuff like randomize elements of your prop or switch between different styles/materials in an array or whatever you want when the button is clicked.

  • You can also move stuff from the construction script to a button in order to give you more explicit control over when it happens.

  • You can randomize or adjust appearance in a material based on the world position, so placing a bunch of otherwise identical objects doesn’t look too samey (e.g., pick a ‘random color’ from a little color variations LUT or offset your noise texture by using UVs based on ObjectPositionWS), docs here

Drive visuals/gameplay from animation

  • Anim notifies (docs) are your friend (you can add an event anywhere in an animation or anim montage asset, e.g., to play a footstep sound, fire a weapon/trigger an ability at just the right moment, to spawn and then destroy a prop used as part of the animation, etc…).
  • You can even use them to alter gameplay, e.g., indicate a window of invulnerability during an animation (use anim notify states instead of regular anim notifies for anything that you need to guarantee to clean up; an ‘off’ notify might get culled if you are blending out when it triggers, while a state that got the start called will always get the end called too in that case).

Juice up your HUD or title screen logo

  • You can use materials on text widgets (e.g., to make them pulse or blink)
  • You can animate the size/offset to make text fly in or fade out or bounce when a number goes up/down
  • Make meters/gauges for your unique gameplay mechanics (e.g., if you can build up charges or do more damage when at full health or etc…, show that off in the corner of the screen or even better on some in-world element of the character)

Before you ship

  • Consider adding a key bind to the Escape key to call QuitGame (if you have in-game and front-end, maybe it first takes you to the front end, and if pressed there actually quits). Packaged games run in full screen by default and a jam game rarely has a regular menu that allows the user to select Exit/Quit, so this is a quick way to let people out without having to Alt+F4.

Cheers,
Michael Noland