Alan Edwardes

Cloud Software & Game Development
  • About
  • Projects
  • Blog

Most Used Tags

  • estranged
  • git
  • light
  • website
  • game
  • asset
  • level
  • editor
  • jenkins
  • code
  • file
  • lambda
  • player
  • unreal
  • dns
  • amazon
  • script
  • cloudfront
  • email
  • blueprint
  • engine
  • world
  • streaming
  • s3
  • shadow

Posts in 2021

  • The Art of Mirror's Edge on 11th of Apr
  • Serving Static Websites Using Lambda@Edge on 20th of Mar
  • Thread Safe Random in C♯ on 16th of Mar
  • Spotting Fake Indie Game Key Requests on 11th of Mar
  • Jenkins Library for Unreal Engine 4 on 13th of Feb
  • Three Approaches to Readable Materials in First Person Games on 7th of Feb
  • Cheap Synthetic Monitoring with AWS Lambda on 24th of Jan

Posts in 2020

  • Generating Mipmaps for Render Targets in UE4 on 24th of Dec
  • Routing DNS over HTTPS Using Raspberry Pi on 6th of Oct
  • Tips for Building Games with Unreal Engine 4 on 3rd of Oct
  • Serving Localised Assets from S3 Using Lambda@Edge on 17th of May

Posts in 2019

  • Automating macOS Notarization for UE4 on 23rd of Nov

Posts in 2018

  • ISO Country Code to Unicode Flag in C♯ and JavaScript on 22nd of Jul
  • Serverless Git LFS for Game Development on 6th of Jan
  • Adding Custom Map Checks in UE4 on 3rd of Jan

Posts in 2017

  • Building and Deploying a React App Using AWS Lambda on 24th of Dec
  • Git HTTP Username and Password in Environment Variables on 22nd of Dec
  • Capturing and Uploading Screenshots in UE4 on 20th of Dec
  • Using Capsule Shadows on Large Objects in UE4 on 8th of Dec

Word "estranged"

Viewing subset of posts matching the word "estranged".

Jenkins Library for Unreal Engine 4

Posted February 13th, 2021 in game-development

For Estranged: The Departure, I released on Steam many hundreds of times, all at the push of a button using a tool called Jenkins.

At its core, Jenkins is a job scheduling system, where a job consists of some commands to run. You can define the job in the Jenkins interface or, as I prefer, in a Jenkinsfile which lives at the root of your source control repository.

I won't explain how to get a Jenkins server and attach a Windows build machine to it as there are better resources out there to explain that:

  • How to Install Jenkins on Ubuntu 20.04 | DigitalOcean
  • Jenkins Open Source Automation One-Click App | Marketplace | Linode
  • Step by step guide to set up master and agent machines on Windows

This post outlines the general-purpose Jenkins library I developed for Estranged. The library can be found here:

  • https://github.com/alanedwardes/Jenkins.UnrealEngine.Builder

Continue Reading »

Three Approaches to Readable Materials in First Person Games

Posted February 7th, 2021 in game-development

In Estranged: Act I (2014) and Estranged: The Departure (2020) a lot of the storytelling was via newspapers and interactive screens, using different approaches in each game. In this post I will document those approaches and discuss the benefits and drawbacks of each.

  1. [Full-Screen Take Over]
  2. [First Person Camera]
  3. [Cut-Scene Camera]
  4. [Conclusion]

Continue Reading »

Tips for Building Games with Unreal Engine 4

Posted October 3rd, 2020 in game-development

I have released Estranged: The Departure on 3 platforms, Windows, macOS and Linux, and I will be bringing it to the Nintendo Switch and other platforms in the coming months.

This blog post covers my experiences as a solo developer, working with Unreal Engine since 2014 (without access to the UDN), and what to look out for if you are new to the engine.

I intend to keep this post updated (a living document).

Continue Reading »

Automating macOS Notarization for UE4

Posted November 23rd, 2019 in game-development

One of the trickier requirements introduced with macOS Catalina was the requirement that all applications must be notarized, for any kind of distribution.

Xcode does have tools to do this for you, but when you're building software that is bootstrapped by its own build process (such as a game), or you automate the build and deployment of your app, you need to use the custom workflow.

This post will discuss the entire notarization process for an Unreal Engine 4 game, but the process is the same for any app bundle.

Continue Reading »

Serverless Git LFS for Game Development

Posted January 6th, 2018, updated July 18th, 2020 in cloud-software

For Estranged, I needed a simple, cheap way of storing binary files. All solutions I tested required me to host a server, or me to pay someone to host a server. I wanted to avoid the flat fee for a constantly running server, and use something completely serverless with a pay-for-what-you-use model.

I settled on using a GitHub private git repository (free) and an LFS (large file storage) backend using Amazon Lambda, Amazon S3 and Amazon API Gateway.

This write-up is a follow up to my older YouTube video covering the manual setup. This guide uses a template for a 1-click deployment of all resources mentioned in the video.

Continue Reading »

Adding Custom Map Checks in UE4

Posted January 3rd, 2018 in game-development

The map check function in UE4 offers level designers an insight into things that are going wrong inside their levels - for example a static mesh actor with no mesh.

Two errors in the Unreal Engine 4 map checker output, against two actors which have null static meshes.

You can also harness this power in your own project to run anything in the game world through a custom set of rules specific to your content.

For example, in Estranged, all surfaces in all levels need to have a physical material assigned to them.

This assignment has various functions, but most importantly dictates the footstep sound when the player walks on the material, and the bullet decal and particle effect to spawn when the surface is shot.

Continue Reading »

Capturing and Uploading Screenshots in UE4

Posted December 20th, 2017 in game-development

For Estranged, I wanted the ability to capture the contents of the frame buffer, compress it, and upload it to a REST API. This allows users to attach screenshots to an in-game feedback window, to simplify the bug reporting process.

Unreal Engine 4 has APIs around all of those pieces, and in this post, I'll cover sticking them all together.

The full header and source file from the Estranged code is available as a GitHub gist. Below are the important excerpts.

Capturing a Screenshot

This is a two step process. First, you need to register a callback for when the screenshot is captured, then you request a screenshot:

void UEstScreenshotTaker::RequestScreenshot()
{
    GEngine->GameViewport->OnScreenshotCaptured().AddUObject(this, &UEstScreenshotTaker::AcceptScreenshot);
    FScreenshotRequest::RequestScreenshot(false); // False means don't include any UI
}

void UEstScreenshotTaker::AcceptScreenshot(int32 InSizeX, int32 InSizeY, const TArray<FColor>& InImageData)
{
    // See below
}

Continue Reading »

Using Capsule Shadows on Large Objects in UE4

Posted December 8th, 2017 in game-development

Capsule shadows are a great feature of Unreal Engine as they allow characters to cast soft shadows even with a game which relies on only static lighting.

The Last of Us 1 used this to great effect, as levels had a lot of areas which didn't receive dynamic lighting, and characters still felt grounded in the world using the capsule shadow technique (below).

Ine of the characters from the game The Last of Us, and their capsule shadow.

Source: Arnage on the Unreal Engine 4 forums

The use of this does not have to be limited to characters however - the technique can be applied to other set pieces. The only caveat is that they have to be skeletal meshes, not static meshes.

Continue Reading »

Æ

© 2021 Alan Edwardes