I’ve felt a sense of acceleration throughout all of February. New understanding and connections have made for a very productive month. Expect to see new additional concept art intermittently throughout. If all goes well, this trend will continue. Here is the February recap.
One Step Tangent At A Time
The turn of the month had me upgrading to UE4.14. I made sure to back up the engine’s existing build, as well as my project. Epic Games Launcher makes all of these things surprisingly convenient to do. Once updated, much of my time was spent on becoming more organized. I already have a collection of inspiring art, and a playlist of thematically relevant music. Those two things come easily, and has always been a fun necessity on past creative endeavors. So far I’ve set up a card wall, design document, administrative document, frame data spreadsheet, and several other things I’ll spare the commas on.
532 frames of character animation have been planned for Netherlight’s alpha build. I started animating and quickly got back into a flow. I had forgotten just how much fun animation can be. I eventually decided to select only the few animations that I really needed for some basic prototype mechanics. So I stopped after posing the 258th frame. Each frame needs to be posed individually. The best shortcut I had available to me was setting animation curves between two of the poses and then keying the inbetweens to later be tweaked. The animation curves were then all set to step tangents, which removes any smooth transitions between them. Step tangent curves, combined with keying every frame creates a convincing stop-motion effect, similar to traditionally drawn animation. This will be combined with toon shader materials to help push that effect even further.
This stylistic decision was heavily inspired by the game Guilty Gear Xrd. If you’ve talked to me for any length of time, you probably already know that I am somewhat fond of this game. My decision to mimic Xrd’s graphical style was not entirely based in fandom though. The style also serves as an important aid in visual and mechanical communication. When the speed of a game’s combat system is at the upper end, important details tend to get lost. By giving the few frames that serve a mechanical purpose a bit more screen time, a clear visual queue is given to the player for when it’s appropriate to perform their next action. As I add polish to the alpha build’s combat system and start balancing for end-game character builds, I plan to dial up the speed within the limitations of network multiplayer.
The Test Chamber
I have been dissecting, removing, and adding things to that tutorial project I completed when I first began. My intention was to learn by way of breaking things and rearranging the pieces, which has been a hobby of mine since I was little. After a few days, I realized that I had converted most of it into something that was getting closer to my standards. I decided to continue using this same build, since the tutorial pieces have been almost entirely replaced with my own mechanics. The first pieces I changed out were the character’s run control, and the chase camera. I was sold on this new build once I saw the new character model and animations from my camera’s intended field of view.
My favorite part of an early game prototype is the moment I first see the animation and programming come together. Controlling a character and seeing them run on their own two feet is a feeling that is difficult to describe. Sharing that feeling with someone else is nearly impossible, as it’s honestly not very impressive looking to an outsider. The feeling is amazing all the same.
I’ve always liked the textures from Source Engine’s default orange map, so I created some of my own. They help to clearly show the relative scale of environmental geometry, as well as looking like something out of a science fiction training simulator. If I’m going to be staring at this same arena for a while, I at least want it to look cool. Adding in sprinting and walking mechanics was quick to do, as they were easily converted from existing movement states from the tutorial build.
Doing Something Right
On a Saturday afternoon, a day in which I normally do not stream, things got interesting. My viewer count was in the low single digits. I assume most of the usual Saturday viewers were watching the more popular developers for that day. Then I got a notification that user UnrealEngine was hosting me with 1 viewer. A single viewer meant that they weren’t hosting anyone prior. UnrealEngine’s Twitch channel has 22,000+ followers. For the duration of being hosted by them, I now had 22,000+ followers. That 1 viewer turned into many more over the course of the next hour. I rolled with it like it was any other day, but needless to say, I was totally stoked. I would be hosted by them until I stopped streaming for that day, so I did not want to stop. My mom then texted me and told me that my sister-in-law, god-daughter, and herself were in the city for a show. They wanted to meet me for dinner afterwards. I was not going to miss dinner with them, so that seemed like a fine place to stop.
The high from that weekend was dulled quickly during the following week’s streams. Whenever the player model would cling to a wall, a race condition would sometimes cause the physics to clip the model into the wall. The ground friction was then reduced to zero, causing the player character to slide around uninhibited by natural law, while the cling animation would awkwardly loop forever. This was not the behavior I had intended. I was stuck on this same bug for all 3 of my scheduled streams. I’m not sure what compels a viewer to watch someone debug and read issue threads for 3 days in a row, but new followers and regulars kept coming back. They offered advice and attempted to help me troubleshoot the problem. Despite the assistance, the bug persisted.
I was determined at this point to put the issue behind me. The next day, I hopped back on and streamed some brute force troubleshooting. I’m not certain why, but I got a new follower that day. “UnrealEngine followed!” popped up on my screen. I responded like I normally would, by acknowledging the follow and thanking… it. Now I was feeling torn. My brain was melting out of my ears from stepping through my Blueprint logic for the Nth time that day, but I was also pretty stoked again. The channel with 22,000+ followers was now following its 50th channel, mine. I did a little bragging on social media, then got back to work.
Lo-fi Lazy Sundays
I like to keep my Sunday schedule open. With no responsibilities to anticipate, I’m able to relax. I usually turn on some low intensity music and switch into a mode of slow productivity. I gravitate towards the usual chores and generally clean up the place, maybe plan some meals. This allows me to put my focus during the work week towards the important things. I will typically have much of the day remaining to do whatever. If i’m feeling it, that ‘whatever’ has been firing up Unreal Engine and continuing the clean up routine. With no pressure to accomplish any specific task on the project, I am free to play and look for anything I’d like to fix. Sometimes it’s nothing, feeling satisfaction with my progress for the week and moving on to other things. Sometimes I find a flow and get quite a bit done. I’ve been trying to stay aware of my time-spent to progress-made ratio.
During my refactoring, I was able to organize my Blueprints into a more encapsulated and readable pattern. I had a handful of Twitch viewers chatting about nothing in particular while I pushed nodes around the event graph. One of them chimed in about a specific node that I had stopped to look at. They recognized the Blueprint as the one I had been focusing on for the past week. “Is that DoOnce node for the wall cling mechanic?” they asked me. I told them yes, and that DoOnce did not behave in the way that I thought it should. Despite searching for relevant documentation and issues, nothing explained why DoOnce was doing things more than once.
DoOnce is a gate that allows an execution to pass through it only once. There is a ‘Reset’ execution pin on the node, that when triggered, will reset DoOnce to allow another execution through, but only once. The viewer informed me that DoOnce is refreshed every time its containing Blueprint is executed. That was it, and it all made sense. The Blueprint only exists when it’s called, and once the execution completes, the Blueprint’s state is removed from memory. Executions were sent through this Blueprint every frame, which is 60 executions per second, once per frame. Creating a variable separate from the blueprint to persist the state of DoOnce in memory allowed the node to behave the way I initially thought it would. The reset pin would reset this new variable. The wall cling mechanic worked.
Another bonus to this issue was how debug was handled. Many of the variables weren’t in scope for the built-in debugger to read, and therefore, were invisible to me. I created a class for outputting the values of everything I needed to see right into the game’s user interface. I now enjoy watching what is happening under the hood of my game while I test it. Data is beautiful. This is nothing fancy or new in the world of development, but it has become a useful tool that was fun to make. My habit of visually polishing placeholders more than I should would now benefit me. While I do not have the game’s UI completely designed yet, I’m planning to continue building on my debug UI using an Unreal Engine system called UMG. The UMG system is used to do all sorts of cool things with the UI. This debug overlay will become my gateway into learning proper Unreal Engine UI programming.
Closing Summary
I’m happy with how this month went. I’ve gotten more comfortable with Maya and Unreal Engine, which has sped up my productivity significantly. Blueprints are still a ton of fun and quite powerful. Not bad for a handful of 4 hour development sessions. Time-boxing has created more free time for me to unwind, without being distracted by the subtle anxiety brought on by the thought that I may have not been productive enough. This is a significant quality of life improvement for me.
The closing of this month had me implementing the first recognizable Netherlight trait, Base Stats. I’ve been eager to see elements of the tabletop start to take form in the project. I followed this with an effort to collect all of the years old art that was inspired by the tabletop sessions. I’ve been quite fortunate to have GMed for such incredibly talented and passionate people.


Seems like a pretty productive month. Your “setbacks” aside, I strive to match even a fraction of your productivity. It’s a depressing thing to have a passion, and then to willingly not pursue it. Your small successes help inspire passion to action. So keep these posts up!
I have yet to watch any of your streams, though I should be a conscious effort to do so. Congrats on the follow by UnrealEngine by the way. I know they have been an organization you have looked up to throughout the years.