Industry Project: Recap


The Project

The development process of FlexiFeedback has been a thoroughly enjoyable one. Though it had it’s fair share of troubles and has not yet met all of its outlined goals, I am proud of what I have accomplished.

The original layout, displayed over a Legally Distinct™ block building game.
Mockup Layout
The current layout of the game with all new debugging text!
Current Layout

Though only functional and not polished, all the elements of my proposed user interface have been implemented and tested. Process of creating these elements worked towards the next intended outcomes of the project: gaining experience in the Unreal Engine, blueprints, and C++.

Checkbox Implementation
C++ HTTP POST Request
Blueprint Node of HTTP Request

While originally designed to make a variety of API requests directly from the game, I came to the conclusion that reworking the project to include a back-end server would instead speed up development.

Redesign server's application architecture diagram, which I thought was very pretty.
Server Design
JavaScript Handler for New Feedback

This redesign led to exploring a variety of MIT licenced (“The MIT License | Open Source Initiative”, 2019) libraries for JavaScript, which did significantly speed up development. This server allowed me to achieve my goal of posting these reports to GitHub’s Project Boards, and inspired the creation of an administration page for developers.

Creating New Project Board Columns
Administration Page

Through the creation and implementation of this server, and the C++ code I had written for the feedback panel, I was finally able to achieve my primary goal: I was able to send feedback from the game to the project board.

After this was successfully implemented the time had come to submit my project, and thus I wasn’t able to complete all of my outlined goals. In the allotted time I was not able to implement Discord or Slack summary posts as I had intended, nor was I able to produce a fully polished version of the user interface.

Due to these missing features, I chose not to submit this application to the Unreal Marketplace as intended. In it’s current state it could be published as it does successfully perform its core functionality, but it is lacking adequate depth of features and its unpolished user interface would be unappealing to is intended market.


The Industry

The original intent of this project was to gain industry relevant experience with new tools to further myself professionally and become a more desirable applicant. To achieve this, I had decided to create this project and gain experience with the Unreal Engine, C++, and Blueprints.

These tools are still in demand in their respective industries with hundreds of results when searching for C++ and software development jobs (“Software Developer C++ Search”, 2019), and hundreds more results when searching for game designer jobs (“Game designer Jobs”, 2019).

Through the project’s redesign I also gained increased familiarity with web development tools and JavaScript, which are also skills in demand in the software development industry (“How to become a Software Engineer”, 2019). The redesign also demonstrates my willingness to learn new techniques and use varied technologies to achieve my goals, which will endear me to potential employers looking for adaptable employees.

I believe that this project positions me well for future interviews in the games industry by demonstrating key skills and understanding of development with the Unreal Engine, blueprints, C++. Furthermore, it has made me a more desirable candidate for employment within the software development industry by expanding upon my web development skills and allowing me to demonstrate adaptability with new technologies.


References

Top skills for software engineers. (2019). Retrieved 2 November 2019, from https://www.monster.com/career-advice/article/software-engineer-skills

Software Developer C++ Search. (2019). Retrieved 2 November 2019, from https://www.seek.com.au/software-developer-C%2B%2B-jobs

Game designer Jobs. (2019). Retrieved 2 November 2019, from https://www.glassdoor.com.au/Job/game-designer-jobs-SRCH_KO0,13.htm

The MIT License | Open Source Initiative. (2019). Retrieved 2 November 2019, from https://opensource.org/licenses/MIT

How to become a Software Engineer (2019). Retrieved 2 November 2019, from https://www.seek.com.au/career-guide/role/software-engineer?campaigncode=lrn:skj:sklm:cg:jbd:alpha

Content Search – UE4 Marketplace. (2019). Retrieved 2 November 2019, from https://www.unrealengine.com/marketplace/en-US/assets?keywords=feedback

Unity Asset Store – Feedback Content Search. (2019). Retrieved 2 November 2019, from https://assetstore.unity.com/?q=feedback&orderBy=0

Game Developer: Job Description, Duties and Requirements. (2019). Retrieved 23 August 2019, from https://study.com/articles/Game_Developer_Job_Description_Duties_and_Requirements.html

How to Get a Job in Gaming. (2019). Retrieved 23 August 2019, from https://www.adzuna.com.au/blog/how-to-get-a-job-in/how-to-get-a-job-in-gaming/

FlexiFeedback for Unreal

FlexiFeedback For Unreal is an in-game feedback panel that allows players to send reports of many kinds from the game to the developers GitHub Project Board. This project was designed to expand upon my skills as a developer and gain industry relevant experience.

FlexiFeedback is comprised of three major parts: the in-game feedback panel, an administrative web page, and a back-end server which runs the page and handles feedback reports.

The feedback panel gathers information directly reported by the player such as what type of report they are making, how they feel about the issue, any comments they have, and optionally information about their gaming system. When players attempt to send partially complete information, or if an error occurs while attempting to send that information, the feedback panel will inform them of the issue before allowing them to move on.

When feedback is completed it is then sent to the back-end server for processing.

The back-end server for FlexiFeedback is written in JavaScript, and accepts feedback reports formatted as JSON objects. This data is then processed before being cached in a locally run Redis instance and stored in an S3 Bucket.

Finally, these reports are posted to the appropriate columns on a GitHub’s Project Board, alongside regularly updated summaries of each column.

Feedback Panel Layout
Submit Warning Panel
Blueprint Node of HTTP Request

The last part of FlexiFeedback is an administrator’s page hosted on the back-end server which regularly retrieves summary information from the server, and provides them with an easy automated way to set-up their project board for FlexiFeedback use.

Where do I find FlexiFeedback?

You can read more about FlexiFeedback’s development in my blog post Industry Project: Recap and more about the design and building process in my blog posts here.

As of the time of writing, FlexiFeedback is unavailable for download or purchase, as it is still in active development. Some planned features include: more developer tools on the administration page, sending and storing a screenshot of the player’s view when they send a report, Discord and other application integrations, and a Unity Engine release.

Kowloon Exigency

Kowloon Exigency is a short top-down shooter made in a team of four, focusing on creating an intriguing and visually complex level design.

Within this team of four I undertook the roles of narrative designer, version control manager, cinematographer, and level designer.

In my role as a level designer, I created four level tiles for the project.

These tiles included a slum-like street, a run-down office corridor, a busy office space, and a penthouse balcony where the final boss battle takes place.

My tile designs are included in more detail below!

Four Level Tiles

In my roles as cinematographer and narrative designer I developed extra features for our game’s camera. These features included changing it’s position to ensure the player’s avatar is always in view, moving to show cutscenes, and shifting perspective at the end of a level.

In addition to developing the camera, I also implemented the cutscenes I designed. These cutscenes were designed to fulfill both narrative and gameplay functions, by conveying story and guiding the player towards their objectives.

More of my cutscene and camera work can be found in more detail below!

In my role as version control manager, I ensured that the integrity of the project files was maintained. I achieved this by reviewing the additions in each commit, managing pull requests, and resolving merge conflicts when they arose. This project was the culmination of 41 pull requests and 106 commits from four team members over the course of a month.

Slum Street Tile

Office Space

Office Corridor & Penthouse Balcony

Cutscenes, Camera, and Narrative

Keeping the Player Avatar Visible
Dossier Narrative Introduction
Police Blockade
End of Level Perspective

NoRhythm

NoRhythm Trailer

NoRhythm is an arcade rhythm game designed and created in three days by a team of two for Ludum Dare 45. This game was inspired by the theme “Start with nothing” and it’s design was driven by the musical talents of my teammate. NoRhythm was created in the Unity game engine with a total of 67 hours of cumulative work from both team members.

My roles in the project were producer, programmer, game designer, and UI designer. I developed and implemented all user interface and gameplay elements, created level design tools for my teammate, and created marketing materials for publishing.

NoRhythm was published to GameJolt, it can be played and downloaded from the links below!

Industry Project: Backburner

Week 6 Burndown

This week this project had to take a back seat to other projects with sooner deadlines, and I only accomplished part of what I had originally planned.

This week, I finished implementing Redis for caching and Amazon’s S3 for long-term and cross-instance storage. In addition, I added a administration page with a login page to allow developers to have a simple centralised control system for their server.

Demonstration of Caching, Long Term Storage, and Admin Page

Redis and S3

This week I spend the majority of my time working on the Redis and S3 code to cache data locally and store data across instances in the long term. During this process I again encountered race conditions, which slowed development. Both my Redis and S3 functions were returning undefined objects instead of the data they were supposed to fetch.

I solved this issue by sourcing and implementing an alternative library for Redis: Async-Redis. This library promisifies the functionality of the standard Redis library, such that it is usable with async/await.

With this sorted, I looked into different libraries to perform the same promisification of the AWS-SDK. After some time of looking, I was not able to find a library to do this for me, so I experimented with restructuring my code. Shortly into restructuring, I discovered that the AWS-SDK has promise methods for many of its functions, which allowed me to neatly solve the race condition issue with S3.

Admin Page

While working on the Redis and S3 code, I found myself wishing for a simpler way to run my testing code. I slowly came to the conclusion that a simple Web page served by the server might be the best option to fill that need.

This page setup was relatively quick and easy to implement, as I was able to repurpose work from other projects. I added a page to ask for login details, and check those details on the server side before sending a response to the browser. When polished, this will act as an administrative tool for developers to manage the server from a user-interface instead of a command line.

Demo Video of Admin Page

Until Submission

Week 7 Burndown Plan

The plan for the next week includes finishing the GitHub implementation, adding the Discord API calls, then writing the C++ calls to contact this server from the Feedback Panel. Beyond this point, I plan to move on to polishing the Feedback Panel with some textures and animations, and documenting the installation procedures for both the server and the panel. Ideally, I will end this next week with all necessary features implemented and polished.

Industry Project: Server

For the remaining time until submission, I will be undertaking the same tasks as last week, as I was not able to see them to completion within the week.

Industry Project: Server

Burndown Chart for Week 5

This last week I spent working on the back-end server as described in last week’s update. This mostly went well, but is taking longer than expected.


What made it in?

For next week, I am planning to build the back-end server and test the GitHub and Discord API calls through it, write and test calls to the back-end server in C++, and link those calls to the Feedback Panel in the Unreal Engine.

Industry Project: Rework

So far of my previous list, GitHub API through Octokit REST has been mostly implemented (as seen in the demonstration video above). All of the necessary API calls have been written and are in the process of being logically structured and tested. While writing and testing these calls, it became clear that a setup command and a local data cache would become necessary very quickly. To that end, I have begun implementing Redis as a caching service, and writing a server endpoint to set up a project board with minimal developer work.

What’s not in?

From the above quote, Discord’s API calls have not yet been implemented but have begun to be investigated, and the C++ code necessary to link the Unreal Feedback Panel to the back-end server has not yet been written either.

Plan for next week

Week 6 Burndown Plan

The plan for the next week includes finishing the GitHub implementation, adding the Discord API calls, then writing the C++ calls to contact this server from the Feedback Panel. Beyond this point, I plan to move on to polishing the Feedback Panel with some textures and animations, and documenting the installation procedures for both the server and the panel. Ideally, I will end this next week with all necessary features implemented and polished.

Industry Project: Rework

Week 3 – 4 Burndown Chart

As the chart above shows, this week I worked for less hours than planned but achieved significantly less progress than intended. This lack of progress is due to unforeseen issues with making API calls in C++, and the amount of time spent tackling the bug of screenshots not displaying.

The images below show the final state of the project at the end of these two weeks: all proposed user interface elements have been successfully implemented, and a new solution for managing the API calls has been designed.


Sentiment Radio-Buttons

Radio Buttons proved to be more complex than I had originally anticipated, as they are not a default UI feature within the Unreal Engine. So instead, I constructed my own radio-buttons using check boxes and a surprising amount of blueprinting. The final implementation below will report the user’s sentiment in a range of -2 to 2, as depicted by emotive faces in the mock-up.

Getting the Screenshot Working

This was to be the first of two unfortunate hurdles: the screenshot wasn’t appearing on the UI but was demonstrably updating correctly on the debugging block in the level. I spent a significant amount of time scouring the internet for answers and experimenting with different variations on the blueprints, before finally arriving at the solution.

The solution was something that I had experimented with as part of the problem solving process, but hadn’t seen due to inexperience with the Unreal Engine: the UI can’t render a render texture, but it can render a UI material. With that revelation, it became clear that the rest of my blueprint was working!

Screenshot Displaying in UI

C++ and PC Info

The last element of my proposed UI design was retrieving and optionally sending some PC info to help developers. To do this, I started down the path of learning C++ to write my own blueprint functions.

Thankfully, C++ has some built-in functions for retrieving PC details, so my first foray into C++ was mostly learning from examples.

PC Details Blueprint

Thus, as seen below, my proposed UI was all implemented and functioning as intended.

All UI Implemented

C++ and API Research

The last part of my week was to explore my chosen API’s and begin creating API calls in C++ to be executed from inside the game. This quickly ground to a halt as it became clear that making these API calls wouldn’t take the form that I was familiar with. In other projects I have primarily used URL based calls, like those of the YouTube API. The GitHub and Imgur APIs are both written primarily for use with CURL which I am not familiar with using in code.

So, I turned to finding a C++ library which could be used to make these calls more easily. While looking for GitHub libraries I discovered that there were many language options, but there was not a library for C++. Instead, I began to look for a CURL library for C++ and found curlPP which seemed to be what I needed.

I downloaded and attempted to install curlPP by bringing it’s code into the source files of my Unreal project, and found that the Unreal Engine didn’t recognise them. After some searching online, I found a few answer posts detailing ways to include libraries into Unreal projects. While following these instructions, I found myself continually hitting build errors in the project. I attempted to separately build the curlPP files to include them, on the recommendation of a different answer post, to no avail.

Finally, I attempted to find examples of creating HTTP header requests from the ground up in C++. Many of these examples suggested using a library first, but I found some which had example code written with only the standard C++ libraries. While attempting to implement some of their code I found that I continued to run into build errors, leading to the realisation that writing this all in C++ manually would be time-inefficient and continue to hold back development.

Rework: Server

After discussing the C++ issues with a friend, I came to the conclusion that a slight rework of my original idea would cut down on the problems I was facing and speed up development. Originally, it was intended for the game to GET and POST to the different API’s directly to cut-down on developer setup time.

The approach I now intend to take is to create a back-end web-server written in JavaScript which will handle the various API calls, and cut down the number of calls made directly from the game client. This change means that instead of making six or more unique API calls in C++, I will only be writing two: one to post feedback information to the server, and one to post the image to the server.

I believe that this redesign will reduce the remaining time on the API calls by approximately three hours due to my familiarity with JavaScript and the availability of API libraries.

Server Design

The above diagram demonstrates the intended flow of the tool from the user through the game and server to the various APIs. The game will send the feedback and the screenshot to the server, where the screenshot will be saved in an Amazon S3 Bucket for later reference. This screenshot’s URL will then be retrieved and passed to the feedback section.

While the screenshot uploads, the server will simultaneously request a project board of the submitted feedback type and retrieve a summary card from that board. The player’s feedback will then be posted as a new card to that board with the screenshot URL, and the summary card will be updated to include the new feedback.

Finally, the server will perform some analysis on the feedback data to find hot-spots in levels where players have been sending reports most and the average sentiment of reports in that area. The server will then post that analysis with the summary information to a discord server of the developer’s choosing at regular intervals.

This rework has a few benefits. Firstly, many APIs have official or third-party libraries for making use of the API significantly simpler. This will speed up development by cutting down the amount of work required to implement and test each call. Secondly, this removes the security risk of publishing work with API keys to the public as the remote server will have these keys instead. Finally, this reduces processing and networking load done in the game client. Originally, it was intended to perform some analysis and generate summaries from within the game client before posting, where now the server will bear this load.

For Next Week

For next week, I am planning to build the back-end server and test the GitHub and Discord API calls through it, write and test calls to the back-end server in C++, and link those calls to the Feedback Panel in the Unreal Engine.

Burndown Plan for Week 5

At Any Cost

Cover Page
The Empyrean Bulwark Faction
Ships Section

At Any Cost is a science-fiction tabletop role-playing game (TTRPG) setting built upon the Fate Accelerated TTRPG system.

In the year 13812, mega-corporations have long divided the solar system up amongst each other. In this corporate government landscape tensions are running high as inter-corporate vies for power strangle competition in the face of dwindling new resources. When a new solar system is discovered a power vacuum was created, drawing the attention of these mega-corporations to it. Whether it be via the means of force, negotiation or sabotage, the colonization of the Tyche System means life or death for a corporation. As the risk of outright war ever looms over everyone involved, the only thing stopping it from escalating is the thin veil of peace that the masses still believe in.

At Any Cost page 7

The world of At Any Cost was created from by combining the team’s individual world concepts. When filtering down our ideas to their most primitive form we found a unifying theme – humanity. Specifically, how humanity will fare in the face of a new space era, and the political structures underlying a technologically advanced multi-planetary society.

For the month long duration of the project, I took on the roles of producer, editor, and a writer.

In my role as a writer, I took on the tasks of designing and writing two of the nine factions in our setting including the Empyrean Bullion. This faction’s purpose was twofold: to drive exploration in the second solar system through mining opportunities, and to create corporate ties which then drew lines of alliance in the sand.

In addition to writing factions, I undertook the writing of the two solar systems: the Sol System and the Tyche System. The Sol System is the re-contextualization of our own solar system within the world of At Any Cost. Each planet has been colonised by corporations and average citizens over the last two millenia.

The Tyche System is an entirely fictional solar system which is the closest to the Sol System. This system was designed as a mostly uninfluenced solar system to allow a greater variety of stories to be told in At Any Cost.

The last of my writing on the book took place in the combat and character advancement sections. Here I altered the Fate Accelerated base combat system to add a combat variant for space ships, and associated character sheets. Secondly, I added a variant character advancement system which drives characters to focus on personal goals more than combat, as is often the case in traditional TTRPG’s.

Finally in my role as producer and editor, it was my job to manage team meetings, create and maintain the project tracking spreadsheet, and to perform the full editing passes of the document.

As yet this project is unavailable for public download, but when it does become available, a link will be added here.

Industry Project: Beginnings

Chart showing 12.5 hours of work for the week, out of 55.5 hours total on the project
Burndown Chart for Week 2

Unfortunately, due to other work the week prior, this project had to be started in what was intended to be the second week of development and is a catch-up week. Though I didn’t completely catch up this week, I managed to make up about one third of the last week’s time. For more detail, see the project board.

This gif demonstrates the state of the UI elements of the project at the end of the week. So far, the UI is opening and closing,


Learning Unreal

The beginning steps of working on my industry project is starting to learn how to interact with the Unreal Engine. I decided to start my journey into Unreal by exploring it’s built-in tutorial system through the lens of unity, which guided me through all the elements of the editor.

During this process, I found myself experimenting with the material editor borne of my familiarity with Unity’s new rendering pipelines, and made a couple of cool effects.

I then began to experiment with scene objects and blueprints, deciding to make an object interact with the world in unintuitive ways.

Building the Prototype UI

The next step for the week was beginning the prototyping process for the UI elements of the project, as per my initial mock-ups. This process expanded upon my rough understanding of the Unreal Engine’s Blueprints, and by the end of the process I felt very comfortable programming visually.

Taking the Screenshot

Taking the screenshot felt like the perfect next step as conceptually it was the next most complex part of the design. This proved itself quickly true, as I encountered difficulties in trying to keep frame overhead low, mismatched type errors, and determining which type of camera to use.

I discovered that the SceneCapture2D camera was the camera which would serve my purpose best, and that it was not able to be spawned and destroyed in code. This was solved by creating a blueprint of the object, finding it by class, then manually capturing the scene.

Screenshot Function Blueprint

Finally, when I had reworked my screenshot functions, I tested it by creating a material from the render texture and applying it to a cube in the scene demonstrating that the rendertexture is only updated when the submit feedback panel is opened.

Screenshot Functionality

Experience for Industry


The Experience

As the journey of completing a university degree comes to it’s long awaited close, the time has come to broach the job market. Some job research later, and as discussed in more detail below, I found that both the games and software development industries look favourably upon many transferable skills.

From reading through these common requirements I noted a number of other skills which I did not have that were similarly transferable. After brainstorming for a while, I came up with an idea to for a new project which combines several skills into one manageable package.

To further myself professionally, I will undertake a project that will teach me development skills for the Unreal Engine and C++, expand upon my user interface design experience, and teach me more about web services and API calls.


The Industry

The games and software development industries seek out similar candidates but with select different skills. Both industries frequently require employees with a few years of programming experience, understanding of algorithms, demonstrated teamwork, and independent development experiences.

Current games development opportunities tend to require Unity Engine experience, as it has come to be a widely spread engine for small and medium sized games on a variety of platforms. These opportunities sometimes require graphics programming, user interface design, and artificial intelligence experience in addition to more general development skills. (“How to Get a Job in Gaming”, 2019) Many game developer job listings also seek out candidates who have Unreal Engine and C++ experience, which so far is outside of my skill set. (“Game Developer: Job Description, Duties and Requirements”, 2019)

Software development roles look for candidates who have experience with Databases, web development skills such as JavaScript and HTML, Quality Assurance testing, documentation, and program maintenance skills. (“How to become a Software Engineer”, 2019)

Many of the listed requirements for such positions I have already met through my studies, such as Unity and C# development skills. I have demonstrated these through my various game projects, but there are still many ways I could expand upon them to further myself and my portfolio in the eyes of potential employers.

Some of these absent skills and experiences in my repertoire are web services and API’s, C++, Unreal Engine, player feedback systems, and publishing works. These are the skills I have chosen to work on for my portfolio and professional development.


The Project

To gain experience with my chosen skills I will develop an in-game player feedback system for the Unreal Engine which will collate and post player feedback to a specified GitHub project board, then notify developers via Discord or Slack. This project when completed will be published to the Unreal Marketplace.

The Unreal Engine is a prime choice for this project as in addition to being a desirable skill for games development, it also uses C++ as its primary language which is in demand in the software development industry. Some research on the Unreal Marketplace shows a gap in the market for such a project as there is only one comparable piece of software currently available. (“Content Search – UE4 Marketplace”, 2019)

This tool will be comprised of back-end code and a set of customisable user interface elements in the Unreal Engine which allow the developer to select types of feedback they want to collect. Some example feedback types include: screenshots, player written comments, feedback types (bug, comment, etc.), self reported player moods, severity, system information, and game world location.

These pieces of information are vital to accurately identifying and debugging various software projects. For example, players may find specific and rare locations where the object geometry of a level can allow the player to escape the intended play area, which developers may otherwise not find. By allowing players to quickly report these issues and collecting both screenshots and game world locations, developers can far more reliably identify where problems have occurred. Similarly, players reporting their mood at various points aids designers in identifying what is and isn’t creating the player experience they want. This information is typically only gained from in-depth playtesting which takes time and resources to achieve.

This feedback will be posted to a GitHub project board of the developer’s choosing, where it will be sorted by feedback type and grouped with similar feedback. These reports will be posted by making calls through the GitHub API, and sorted by project boards containing developer set keywords. Sorting reports this way allows the developers to customisably and easily identify trends within the information they receive.

The developers will be regularly notified about the number and types of reports that are posted to these project boards via Discord or Slack. These notifications will be sent through their respective API’s whenever a chosen number of feedback reports have been appended to project boards. In addition to alerting the developers, these notifications will provide some minor analytics of the users recent feedback such as word and report type frequency, average player moods, recent report severity, and game world hot-spots among player reports.

This tool aims to help developers further understand and track both the issues with their game, and what is working for their game. By developing such a tool, I am able to demonstrate key understanding of what information is required to efficiently maintain and improve both software and game projects. This project also allows me to ambitiously expand my skill set to skills I did not find time for during my degree and further catch the eye of potential employers.


References

Content Search – UE4 Marketplace. (2019). Retrieved 23 August 2019, from https://www.unrealengine.com/marketplace/en-US/assets?keywords=feedback

Game Developer: Job Description, Duties and Requirements. (2019). Retrieved 23 August 2019, from https://study.com/articles/Game_Developer_Job_Description_Duties_and_Requirements.html

How to become a Software Engineer (2019). Retrieved 23 August 2019, from https://www.seek.com.au/career-guide/role/software-engineer?campaigncode=lrn:skj:sklm:cg:jbd:alpha

How to Get a Job in Gaming. (2019). Retrieved 23 August 2019, from https://www.adzuna.com.au/blog/how-to-get-a-job-in/how-to-get-a-job-in-gaming/