Automated nightly builds in UE4

Spoiler alert: this post is going to wind up sounding a lot like an advertisement for Shadow but none of the things I’m doing are specific to Shadow.

So the other day I was talking with my brother and he mentioned that he had recently started using Shadow, a streaming high-end PC gaming platform. He seemed to really like it and mentioned that you get your own dedicated virtual box and not just a front end to some gaming system. That part really intrigued me.

I’m getting to the point in one of my projects where the
building times for getting good lighting are really killing me. I had looked into automating that process but even if I did I’d rather not have it taking my development machine out of commission to do so.

So this is the part that really interested me in shadow. If I could set up a nightly task on a shadow machine to check out my latest code and do a full lighting build and all, that would be well worth the price to me that shadow was charging. So I looked into it and not only was it possible it was relatively easy to pull off.

To accomplish this I created a new folder inside my project directory called “Automation” and I created 4 .bat files inside of that.

I split the workload into 3 separate files because there’s a good chance that as I work on this I’m going to be making changes to the build lighting file. By separating that one from the update from git command I can check in without needing to worry about a file overwriting itself . There’s 3 main tasks to get this built correctly.

  1. Pull from Git
  2. Build the lighting
  3. Build the playable executable

Pulling from git: This part should be straight forward enough. I want to pull the newest files from git and blow out any changes I may have locally. As I don’t develop on the shadow machine this shouldn’t be a problem. DO NOT DO THIS IF YOU ARE STTING THIS UP N A DEVELOPMENT MACHINE. So my UpdateFromGit.bat file looks something like this:

git reset --hard origin/master
git pull origin master

Building the lighting: Most of the functionality unreal uses to build your project is available from the command line. After a little bit of google-fu I was able to come up with the following code snippet to build the lighting for each of my maps. Currently there’s only one line because I’m only building one map, but I expect this file to grow as I start including more maps.

REM Gameplay_Proto Map
"C:\Program Files\Epic Games\UE_4.21\Engine\Binaries\Win64\UE4Editor-Cmd.exe" "C:\Projects\GitRepos\MilosManyNightmares\MMN.uproject" -run=resavepackages -buildlighting -quality=Production -allowcommandletrendering -map=Gameplay_Proto

The above is my specific Build_Lighting.bat file. Yours is likely to have different values but as long as it follows this format is should work fine.

(Path to UE4Editor-Cmd.exe) (Path to your project file) -run=resavepackages -buildlighting -quality=Production -allowcommandletrendering -map=(Name of map you want to build the lighting for)

The REM line at the top is just comment to myself so I know what line corresponds to what map at a glance.

Building the playable executable: So the command line for this is actually pretty complicated. Luckily enough Unreal comes with a tool that will build that command line for you. If you open up a project and then click on the window panel you should see an option for “Project Launcher”

Once in that window you’ll see an option to create a new profile. Go ahead and create one.

Inside you’ll see a series of options. I highly recommend reading the actual dcumentation for this section( https://docs.unrealengine.com/en-US/Engine/Deployment/BuildOperations ) but for now here’s the cliff notes of how to fill it out.

  • Project
    • Browse to the project you want to build
  • Build
    • Check the build checkbox
  • Cook
    • Switch the option to “By the book”
    • choose your platform and culture
    • Select which maps to cook.
  • Package
    • Switch the option to package and store locally and give it an output directory to put your build.
  • Archive
    • Don’t archive
  • Deploy
    • Don’t deploy

Once that’s done try launching the profile to make sure your project builds correctly.

If you notice the highlighted line starts with “parsing command line”. Use the button at the bottom to copy that line and insert it into your text editor. Remove everything before the words BuildCookRun and replace them with the path to your RunUAT.bat file, ususally located at (UE4folder)\Engine\Build\BatchFiles\RunUAT.bat .

Create simple batch file to run the others: After all that all you have to do is create a simple .bat file to call the other 3. Mine looks like this:

call UpdateFromGit.bat
call Build_Lighting.bat
call Build_Executable.bat

And that’s about it. After that you can just create a scheduled windows task or if you don’t have admin privileges on the machine use any third party scheduler to call the build_all.bat file some time in the night.

So here comes the shameless shadow plug. I’ve found that offloading this to my shadow is a really nice and clean way to accomplish this task, pus it allows me to do all the other shadow stuff when it’s not building like play games anywhere. If you are interested in giving it a try please use my refer-a-friend code ( ROBU3USP ) and we’ll both get $10 bucks off. Either way I hope this post helps.

The Audio Visual Behavior Augmentation System


A postmortem for A.V.B.A.S


So what is AVBAS? I’ve never worked on a project that’s been harder to explain than AVBAS. AVBAS was inspired by my love for bizarre community produced creepy pasta stories like the r/nosleep subreddit or the SCP boards. I loved the idea of having stories that people knew are fake but interacted with as though they were authentic. I wanted to make something like that but I wanted to go one step further. I wanted to make a short series of stories about some evil VR software, but then I wanted to actually make the software as well. So that’s what I did.

AVBAS at it’s core isn’t a game, it’s a new way of telling a story and I think that’s what made it so confusing to people. If you come at it from the standpoint of trying to experience a narrative through an interactive medium I think you’ll enjoy it. If you come at it expecting a traditional horror game I don’t think you’ll like it very much.

The Story

I’ve always been fascinated with the idea of hypnosis. I used to watch episode after episode of Darren Brown when I was younger, and on a few occasions I’ve tried to hypnotize myself with minimal success. I think it’s crazy that there’s a thing that can supposedly tap into people’s subconscious to change their behavior and we don’t have a strong scientific consensus on exactly what hypnosis is. I think the fact that it’s uncertain makes it more interesting. I feel like it’s that uncertainty that facilitates the reader’s willing suspension of disbelief.

I think in that way it really builds on the ideas of SCP and nosleep. In those forums everyone has to reply and post in character so blur the line about what’s real and what isn’t. I mean there’s a common shared understanding what is and isn’t, but the more we can blur the line the easier the willing suspension of disbelief is and the more exciting the story is. It works much in the same way that The Blair Witch Project used found footage and the rumor that it was all real, to heighten excitement within the film.

It was my hope that in choosing an already uncertain topic like hypnosis I could blur the line a little more and give the story a little plausibility. I’d blur the line further by posting it to nosleep in character with an account I had created specifically for this purpose, and then blur it even further by creating the software from the stories. It’s all about making it just plausible that a little part of you suspends your disbelief and you find yourself engrossed… Well that was the idea at least.

You can read all three parts of the story here:
Part 1
Part 2
Part 3
I recommend that if you haven’t already read them that you read those before continuing, they aren’t very long and I think they are pretty good, but then again that might be my own personal bias talking. Anyway here’s a “too long; didn’t read” super condensed outline for those of you who don’t want to read them.

Super Simple Plot Outline

  • Post #1
    • Poster describes his job; explains that he’s working as an intern on a cool new VR cure all, a piece of software that will hypnotize people into quitting smoking, losing weight or whatever else people need.
    • All seems to be going well except for a few test subjects that appear to be having adverse reactions called “The Owl People”.
    • Poster realizes that all of the people with the adverse effects are getting a custom build of the software that the rest of the test subjects are not getting.
    • The poster asks the rest of the forum for advice.
  • Post #2
    • The poster is notably more shaken up in his writing style than the first post.
    • Poster explains that he’s been fired from his job, that he’s stolen a copy of the software and that he’s tried the software out on himself.
    • He says he didn’t notice anything strange in his version of the software.
    • He later hangs out with his friend Marcus, one of the owl people from the first act, and Marcus explains to him that the owl people version of the software changes each time you use it.
    • The poster tries AVBAS again only to black out and then wake up realizing he’s finished an entire session.
    • He starts to describe a character from the software invading his day to day life, a character he refers to as “the Narrator”.
  • Post #3
    • The poster is now fully under the control of the AVBAS software.
    • He’s says he has made friends with the owl people and the narrator.
    • He explains that AVBAS has made him kill one of the Owl People but everything is OK now.
    • The poster explains that it’s now his goal to share the AVBAS software with the world.

The Software

The software is a series of six experiences. By closing the game and starting it back up the player is presented with the next experience. The best way to play it is to put on the headset, plug in your earphones (This one is important) and relax in a comfortable chair. You don’t need the controller or anything. Just relax and try to do what the narrator says. Most of the experiences follow a similar formula, the player finds themselves in a room with a narrator reading a script.

The scripts

I actually studied pretty hard to get the scripts as authentic as possible. They start with a hypnosis induction technique and then transition into a deepener and then usually finish with the narrator waking you back up. I didn’t want the horror elements to come from the script itself. I wanted that part to sound as genuine as possible.

The audio

The audio was extremely important to me for this project. I wanted a lot of the subconscious cues fed to the listener through the audio. I actually got a friend of mine, David Waltenbaugh who is really into spatial audio, to do a lot of the music. I think he absolutely knocked it out of the park. One thing you might not notice in playing the game is that the music exists in 3 dimensions. That is to say that each note has a physical location in space and as you move around the room you’ll notice that certain notes are louder in different parts of the room.

On top of the spatial notes there’s a couple of other important tricks at play. The entire time you are in an experience you are getting hit with something called binarual beat. There are two constant sine waves playing in your ears, one about 5 Hz lower than the other. The effect creates a beat in your brain that your ears aren’t actually hearing. It’s a technique used for meditation that I think really adds to the experience.

Tonal keys are also at play here. I wanted the relaxing parts to be really relaxing in order to offset the darker parts. So I made sure all the audio you hear in the good parts is in a major key, and I mean all the audio you hear. The Narrator’s voice is processed so that even the minor harmonics are stripped out of the audio file, which I think really shines through when the game gets dark and suddenly everything goes either minor or atonal.

If you listen closely you’ll notice that we even made use of a thing called a Shepard tone in the floating experience. The Sheppard tone is an optical illusion for your ears. It’s a note that always sounds like it’s going up in pitch. In an experience where you are supposed to feel like you are floating I found that it really made a strong subconscious play on your brain.

The experiences

I wanted each experience to be similar but different enough that the player wasn’t sure what to expect the next time. The first experience is simple. Nothing happens in it. The narrator just reads a script and then the user is returned to a screen the says to remove the headset. This experience is designed to lower the player’s guard and their expectations.

The second experience I called “The Watch”. It’s is designed to look very similar to the first except this time the narrator has a pocket watch. This experience first brings movement into the world. As he talks the world slowly morphs into a giant tunnel that the player is spiraling through. The effect is disorienting in a way that plays well into the hypnosis.

The third experience is supposed to be a message from the makers of AVBAS themselves. It starts with the player alone in a dark vast empty map. An orb circles around the sky and as it gets closer you can tell that it;s playing music. It continues and as it does more and more of the world becomes visible. Once the music stops the narrator kicks back in, except his voice is glitchy and he begins too question you on how to acquired the software and warns you not to use it.

The fourth experience I call “Weightless”. This one starts the player in a vast room filled with tall pillars. White orbs spiral around the play space and slowly float upward. Once the hypnotic induction finishes the player finds themselves floating up into the sky.

The fifth experience I called “The Grove”. It starts out a lot like the first experience except there are more trees. As the narrator reads his script the trees slowly begin to grow. they begin to wrap around the narrator’s body and neck. Once the induction script has finished the colors of the world begin to change and everything becomes a massive red spiral.

The sixth experience is the “Number Room”. I allude to the number room heavily in the stories. It’s the room that subconsciously delivers messages to the player. I based the idea off of old soviet numbers stations. A narrator reads you a series of numbers in a room that slowly transitions to be covered in numbers.

What worked

Well the first thing that worked is that I finished. Which is more than I can say about a lot of my projects. This was the first long term (non-game jam) game I’ve ever finished. So I have to be a little proud of the fact that it’s done.

I feel like the story posts came out pretty good. Stephen king quality they are not, but I feel like as a developer’s first foray into writing they came out great. They taught me that I actually really like writing too. While I don’t think I’ll do another long form text/game project like this again anytime soon, the idea of just writing no sleep posts for fun does really appeal to me.

All the little subconscious hypnosis cues in the game particularly the audio worked really well. You definitely feel different coming out of it than you did going in, which I’ll take as a success. Play-testers have commented about how relaxing and soothing the game is… which I guess is good, but it’s a strange reaction to something that at it’s core is supposed to be a horror game.

What didn’t work

The biggest thing that didn’t work is that I was unable to include a link to my software from the nosleep posts. It was my original intention to include a link to the software in the final nosleep post. Unfortunately the mods determined that they couldn’t let me post a link in my post because… there might be a bug in my software… Yeah that’s the actual reason they gave me. And no I’m not claiming my game is bug free by any stretch of the imagination I’m just saying it seems like an oddly arbitrary reason to not allow something that in no way violates their rules, but anyway…

Without the link to the software in the post I think that once people finished the story they just ended there. I tried posting links to the story and the game on a bunch of other boards, but I feel like most people on other boards don’t want to dedicate enough time to read through a series of posts and then play a VR game, and if people just jump straight to the game it doesn’t make any sense.

The other big thing that didn’t work is that there isn’t really any horror in the VR portion of the project. It adds to the creepy story but as a standalone the software just doesn’t work. I tried to keep jump scares and things like that out of AVBAS because it felt cheap to me. I wanted to play on a sense brooding and I wanted the user to feel like maybe they were being hypnotized by this thing they just found on the internet. Unfortunately people like jump scares and classic horror elements. In hindsight I should have made the VR portion of AVBAS strong enough to stand on it’s own.

I think the choice to make “exiting the game and re-opening it” the method to get to the next experience was really confusing to people. I wanted it to be cryptic. Something that people figured out on their own and got a sense of reward for being clever, but I feel like that might be over valuing people’s opinion of my software. Unless they were really impressed the first time they played it’s unlikely they are going to do it again. If I were to do it again I’d probably just kick the player out to the lobby and give them the option to try another experience.

Reception and promotion

From the start I knew this wouldn’t be a project that most people would enjoy. I didn’t want to make something that a lot of people would kinda like, but rather something that a hand full of people would really enjoy.

My first nosleep post received a decent reception by my standards, especially for a first post from an unknown author. It was fun interacting the commenters in character. Subsequent posts received less attention though, probably because they were parts 2 and three of a story that most people hadn’t read part 1 of.

Some people attached to it from the first post though. I was messaged early on by RamblingRamm on youtube, that they wanted to read my stories on their channel. I was flattered and you can find parts 1-3 of their narration here, here, and here.

My game was also got the let’s play treatment by JoyJoy Moto Games in a style in line with the stories which I thought came out really cool.

But even with all that as of 1/10/2019, seven months after I first put the software out there, I’m sitting in the lower half of double digit download numbers, which isn’t great for a free game. That number for sure isn’t helped by the fact that the software is aimed at VR, a platform with a limited install base, but even still it’s lower than I’d like.

This game has given me great opportunity to try my hand at self promotion within the game development space. Once I realized that no one might ever play this thing I had to come up with ideas on how to promote it. My first idea was to make a trailer. I got a friend of mine, Nick Crowley to help me stitch together a game-play trailer. It came together pretty well, but also suffered from low viewer numbers.

My next attempt was to see if I could get any press attention. I used Vlambeers presskit() software to whip together a little presskit site and I sent it out to a bunch of bloggers, press and youtube personalities. What surprised me wasn’t who I didn’t hear back from, which by the way was all of the VR bloggers, press and youtube personalities, but who I did hear back from. The local arts and culture magazine decided to do a small piece it. While them being willing to write about my game was really cool, it unfortunately still didn’t drive a lot of traffic my way either.

Final Thoughts

I wouldn’t call AVBAS a success and I wouldn’t call it a failure either. While not many people got out of it the experience that I was hoping they’d get, I had more fun planning and working on this game than I have on any other project. I don’t regret it and I’m glad I finished it. Most people won’t understand it and I’m fine with that. I feel like it’s a real piece of my imagination that made it out of my head and I’m happy it exists.

If you want to play AVBAS it’s available for free on itch.

2018 Retrospective

A new year a new blog. 2018 was a pretty big year for me as a developer but it kept me busy enough that I never had a chance to write about most of the things that happened. So I figured now would be as good of a time as any to reflect on this past year. So here are my accomplishments/failures in as close to chronological order as I can get.

Magfest 2018

a small fraction of magfest’s arcade cabinets

I started 2018 out by doing something I’ve never done before. I showed a game I had worked on at a real convention. I had actually never even been to a convention before so this was an entirely new experience for me.

My makeshift VR booth

I showed off UFO Rodeo in a slightly more polished state than when I had showed it off at the science museum. It was a crazy weekend. Highlights included:

  • Super bad winter weather
  • A game breaking bug discovered by the first person to try the game out
  • Joining Ward-Games for an episode of their podcast
  • 1 set of completely destroyed vocal chords from repeating the same instructions over and over and over and over…
  • And a pretty much 24 hour a day party of video games and music
yours truly somewhere around 3 in the morning of the second day

There’s a ton more I could write but I don’t think anyone wants to read it. Magfest turned out to be a great experience. One that I hope to do again some year.

Ludum Dare 41: Foos Fight

2018 marked a year where I was able to complete in two separate Ludum Dare game jams. The first was Ludum Dare 41 where the prompt was “Combine 2 Incompatible Genres”. I choose foos ball and pinball and created a game called Foos Fight. You can download and play it for free from the link below:

What went right:

  • Game finished on time
  • Game was playable either as a local two player game or against an ai controlled opponent.
  • I was able to play with Unreal’s level sequence system to create some pretty cool transitions.

What went wrong:

  • The pinball aspect of the game felt pretty tacked on. none of the pinball elements counted toward the game’s score.
  • AI player just moves at random.
  • The balls have weird physics issues that can cause them to get stuck or act in a way you don’t expect.
  • The controls while similar to those you’d find in a foos ball table were pretty obtuse to have to use.

Foos Fight is a fun little game if you’ve got a sec and a couple of xbox controllers hooked up to your computer. I’m not sure what I would change if I had to do this one over again. I might play with bringing some more elements from pinball such as lights and scores, but I feel what this game really needed was just another layer of polish.

VRVA

VRVA is a small group of VR enthusiasts here in Richmond VA that was started by a friend of mine. In 2018 he became too busy to continue maintaining the group and setting up meetups, so I stepped up to help keep the group afloat in his absence.

Although I’ve managed to forget my equipment on more than one occasion and we almost always seem to show up to locations were the staff had no idea we had scheduled a meeting despite prior coordination I feel like the group has been a success. We try to meet once a month for VR and drinks. If you are in the Richmond area come out and join us its a lot of fun! https://www.meetup.com/VRVA-Virtual-Reality-RVA/

AVBAS

I really want to tell you guys about this one as it’s the biggest project I worked on this past year but I feel like it deserves it’s own post. I’ll try to make a full break down of this project my next post and once it’s up I’ll link it here. In the mean time you can check out the game in the link bellow.

Ludum Dare 43: The Sacrificial Liam

The theme for LD43 was “Sacrifices must be made”. I made a little game where you played a clone named Liam. It was a comedic puzzle game where you had to kill yourself in strategic locations and then use your dead body to get past obstacles. You can download it for free from the link below.

What worked:

  • People seemed to like this one. It scored higher than any Ludum Dare entry I’ve made before. It’s final score put it in the top 100 entries and it got 5th place for the funny category.
  • For the first time ever I textured almost everything in substance designer which was great practice, and might be my new go to for game jams to do ease of use and speed.
  • I narrated this one which I feel added a lot as opposed to the text on screen option that I usually opt for.

What didn’t work:

  • I ran out of time. The game ends abruptly after three stages with a screen that just says “I ran out of time.” I really need to work on my time management skills and preventing scope creep.
  • The game came out really weird. There’s some stuff in this one that I just have to chalk up to being pretty sleep deprived.
  • There’s a bunch of glitches. I couldn’t get the gravitational death thing to look right so I played around with gravity a lot. The outcome is that jumps have a weird feel to them and can have unintended consequences.

All in all I guess I have to be proud of this one because it did really well by my standards. I just don’t know why. I feel like personally this was one of my weaker entries for a Ludum Dare.

…And lastly a big thank you to everyone!

There were a bunch of other events and booths and projects that I had the opportunity to participate in this year, but for everything that I’ve written about and for everything that I didn’t get to write about there have been people who have helped me every step of the way. From setting up booths, to play-testing my games for me, to helping me record audio, to just coming out to one of my events and saying hi. Thanks a lot guys. It’s been a really great year!

2019

So what’s coming for me in 2019? Well once again I’ve started the year out doing something I’ve never done before, I got engaged! I’m extremely excited and I imagine planning for that will probably take up a decent chunk of my time. That having been said I still plan on joining some game jams, posting some dev blogs and working on VR games. I’ve recently started dusting off a project of mine that I haven’t worked on in a really long time. Keep an eye out for some new Milo’s Many Nightmares updates soon!

Upcoming Events 06/2018

Hey there’s a couple events coming up that I’m going to be at:

  • 6/16/2018 – Indie Games Expo at Champion Brewing Co. 
    • Starting at 1 I’ll be demoing VR stuff I’ve been working on along with a bunch of other local indie developers at Champion Brewing. Come on out, have a drink and see some of the awesome stuff local devs have been working on!
  • 6/28/2018 – VRARA 
    • The VRARA will be having a meeting focused on the use of VR in entertainment. I’ll be back answering questions and afterwords I’ll be available for game demonstrations. The meeting will once again be at Shockoe in Scott’s addition.