Spring Game Development Wrap Up

Contents

This trimester has been a wild ride with many interesting twists and turns along the way.  There have been many projects I have worked and contributed on, different bodies of knowledge I have been exposed to and a lot of reflection on my professional practice and soft skills.  These will be covered along with how I plan to move forward over the holiday break and into next trimester.  So let’s begin!

Virion

Virion, the second project from last trimester, was stripped back and had it’s focus re-targeted towards the tablet market.  This was done during the Make-A-Thing week in September and a number of design ideas were put into the ring to see where this project will take us.  I managed to put together a build and pushed it to Apple’s TestFlight platform for testing and was presented at the Student Showcase.

In addition to the iOS build of Virion, I built a map editor for Virion within Unity that allows the team to create levels with an easier and improved workflow.

Virion_MapEditor

Chickuzi

Make-A-Thing also gave birth to another project that I contributed to.  It is a single-player third person voxel shooter that has some crazy flair to it.  The title of the project was called Chickuzi’s Revenge: Chickuzi’s Revenge and it won two awards at Make-A-Thing: Best Game and Best Game Sound.

It garnered enough support from the audience with a heavy demand for multiplayer and as such the team decided to make it official and take it on as a Major Project.

I wasn’t eligible to enroll in Major Project Development (CIU212) this trimester as I am a trimester behind the rest of the team.  The completion of Studio 2 was a prerequisite.  So this left me with the decision to either walk away from the project, or take on additional workload without official recognition towards my degree.  I decided to join the project unofficially and it has been an interesting experience so far.

My contributions to this project so far has been software design, guidance on project management and programming, the development of a level conversion tool and recently I have also implemented a level loading system.

The level loading system parses a supplied Minecraft Schematic file, builds out the Cubiquity volume data, and instantiates any lighting and map entities defined.  This happens behind a progress driven loading screen and additively loads additional scenes where other system layers are needed.

chickuzi_test_level

Over the holiday break and throughout next trimester I will continue contributing to the project.  The team’s intention is to release the game onto Steam through the Greenlight program next year sometime.

 

Studio 2

Studio 2 covered a large number of topics in the first six weeks with the main focus of Math, AI, Tools and Rendering.

Math

Math covered many topics such as quaternionsmatrices, vectors, colour, curves, splines and more.  The amount of math was largely a recap from my days in Math C though I felt it was well needed as I continue my adventures into Game Development.

Tools

Several lectures were given that covered aspects of procedural generation and MAXScript (3DS Max scripting language).  This provided insight into tools that could be created that will be very beneficial to future projects.

AI

The AI portion of the content was fun and interesting.  Several topics covered included movement, strategy, vector fields, path finding, finite-state machines, genetic algorithms, neural networks, flocking and emergent behaviour.

Daibot Sprite
Daibot Sprite

Two AI bot tournaments were held so we could demonstrate the knowledge we have accumulated.  The bots were C++ libraries we would build using a skeleton provided by our facilitator.  The first tournament was in an open arena while the second was in a maze.  Bumping into walls or opponents had collision damage taken.  And we were able to customize the appearance of our bots which I took the opportunity to do.

My bot utilised the A* algorithm to assist with pathfinding and was implemented very early on.  To help minimize wall collisions, I also implemented a form of vector fields.

The main strategy employed when engaging with an enemy was to rush them down and using a large health buffer to hopefully crush them before they kill me.  This was successful on both official runs against Dave’s bot.

There is a vast amount of knowledge still to be learned for AI and over time I plan on expanding this.

Rendering

While shaders and Ogre3D was encouraged for learning more about rendering.

The shader screenshots above were created on Shadertoy which allows users to create fragment shaders using WebGL.

Playing with Ogre3D has been fun and I managed to implement Bullet3 with Ogre3D in a tech test to see how hard it would be to do.

I plan on using the knowledge learned in the rendering lectures to learn OpenGL, DirectX 9 and 11, while continuing to learn Ogre3D over the next six months.

Trust Project

During the same time frame, the game designers of Studio 2 focused more on emotion based game design and created two games each.  In week six we began the transition into the third project with a main focus of Trust.

Zurvivor

The Studio 2 trust project was the major project of the unit where cross discipline collaboration is highly encouraged.  The project I was the lead programmer for was Zurvivor.  The initial ideation for Zurvivor went much longer than expected and was tough on Rowan.  Several concepts and quick prototypes were knocked back but eventually it led to a success concept.  Zurvivor is a local four player co-op non-violent zombie survival game.  The goal is survive five days by collecting food and medication within a town while trying to not starve to death or become infected.  The final challenge to the game is to successfully vote out anyone that you think is infected or you will not survive.

This project pivoted a number of times, including an early transition from 3D to 2D which introduced several technical challenges that needed to be solved.  Unity does not provide a path finding solution out of the box for 2D games.  This problem was solved in two stages with the first being a proof of concept but highly unoptimized version of the A* algorithm using  a grid.  Once that was proven, I redesigned the system to be similar to Unity’s 3D NavMesh system and optimized it as much as I could in the time frame I had.

Rowan and myself felt that Zurvivor was well received at the gallery event.

Sellout

This was the other Trust project produced in Studio 2 this trimester where Hayden and David were the main developers.  I created an AudioManager script for this project along with showing Hayden how to setup the animations on the characters models.

Analytics Platform

Dave and myself started creating an prototype analytics platform for use with Unity based games.  The key technologies that were to be used was: Unity & C# for the client library and PHP & MongoDB for the server side.  We planned out, documented and started building this platform but eventually realised that the upcoming Trust games would not benefit from an online analytics platform as it is primarily an offline game.  Depending on requirements needed next trimester, we may take this project further then.

 

Studio 3

Studio 3 covered more specialised topics such as optimisation, multi-threading, ray tracing, networking, embedded systems such as Arduino, and converting weather data into MIDI sequences.  This unit was also done unofficially and does not count towards my degree this trimester.

Raytracer

This project had an objective of taking an unoptimized raytracer and attempt to get it to produce the same image  and quality as the original but in a shorter render time.  This project was interesting to tackle as I dived in and researched various optimisation techniques.  I wasn’t familiar with spatial partitioning algorithms, SIMD or data-oriented design and discovered after researching each of these topics that they gave significant optimisation improvements to the raytracer.  Multi-threading using the Parallel Patterns Library was used to help improve performance by distributing the workload of the application across multiple cores.  For more information on how the ray tracer performed before and after can be found in this blog post.

Draw Client

The second project for Studio 3 was a draw client.  A working server application and packet definitions were provided.  We were tasked to give users the ability to blindly draw to the server by clicking into a canvas and sending the packets to the server to display.  I created a C# prototype of the packet sending functionality within a couple of hours and later converted it to C++/SFML to help familiarize myself with SFML’s networking functionality.

C# Draw Client Prototype
C# Draw Client Prototype

Additional functionality was added to the C++ version where it generates 8-bit style heatmaps based on user activity, improved pixel drawing, and receiving other client cursor information and displaying that.

Heatmaps
C++ Draw Client & Heatmap

 

Flocking Simulation

This project required additional optimization, adding constraints to the simulation world, implementing analytics with heat maps and creating a tool for external users to operate.

In the past I haven’t played with box2d directly before, and this lead me to research this physics library in a little more detail.  Contact listeners were used to add additional functionality like explosive forces when boids collided or turning prey into predators when a prey collided with a predator.  The chain shape was used to create a boundary in the simulation world to prevent the boids from flying off forever.

Research was done into quad trees to see how they would improve the performance of the flocking simulation.  This needed to be carefully as it could impact the influence each boid had on the other boids.  In the end I decided to disable the quad tree implementation as I felt it impacted the influences too much with smaller gains in performance.

A configuration tool was created using C# and WinForms where the configuration was dumped into a JSON file before calling the simulation application.  The simulation application would read in the configuration file and run against the settings provided.  Statistics and a heatmap is generated post simulation and outputted in the form of a HTML page to allow the user to view in their default web browser.

Parthiv’s Weather Project

The final project for Studio 3 was the creation of Parthiv’s weather station and the conversion of the collected data into a MIDI sequence.  The weather station hardware consists of:

The hardware required some assembly with soldering and snapping the shields together.  Once it was assembled and seemed to operate correctly with USB power, it was setup to collect weather data at a residence near the campus.  The collected data consists of temperature, humidity, pressure and light and was collected at a rate of one entry per second.

Unfortunately we ran into an issue where the power adapter we originally used was only supplying 3.3V and causing the RTC to not provide proper timestamps.  This was difficult to detect at first as the USB power supplied the necessary 4.5 – 5V to power the RTC chip when we were debugging this issue.  After reviewing the schematics and documentation for the data logging shield, it was discovered that the RTC chip does require approximately 4.5 – 5V and was fixed by finding an adapter that could supply that much voltage.

Once we had enough sample data, we began using the values to map to instruments available in the MIDI sequencer.  We were able to generate a music sequence that sounded like backing music for a horror soundtrack.  The conversion was created in C# with the help of the MIDI dot Net and CSVHelper libraries.

SAE Programmer Wiki

Recently we have been setting up another wiki for games students and staff to use and help supplement studies.  We did manage to setup a MediaWiki installation but unfortunately it fell over while importing the old wiki data (or when an extension was being installed).   The old wiki was a wealth of information for students but was shutdown last year(?) as Campus Online was supposed to replace it.  Unfortunately Campus Online did not take off as expected.  Steve is looking into DocuWiki (and other wiki systems) to see if one exists that provides the functionality that is needed with an easier admin interface.

Helping others

Throughout the trimester I made myself available to other students for support and guidance.  This has been a very rewarding experience as helping others is something I love to do.

Some of the topics I feel I have helped with are:

  • project guidance and support
  • hard & soft skill assistance
  • motivation and inspiration

Looking forward I hope to help others in the upcoming trimesters while improving the methods in how I do so.

 

SAE Games Slack

In addition to all these projects, I setup a Slack domain for SAE Brisbane Games students to communicate on.  It has been well adopted by Studios 1 and 2, and some staff have also joined in.  Some feedback from students is that it has made it easier for project groups to communicate and liaison with external talent (such as animators and audio students) as they can sign up and join the group discussions.  If this carries on next trimester, I can see the Slack really taking off and becoming a major component of the Studio units.

Closing out

Overall I have completed a massive amount of work and contributed to many projects, events and cohort.  I have pushed my soft skills to breaking points and learned a lot from it.  It has been an exciting three months and I anticipate that next year will be just as amazing.

Leave a Reply

Your email address will not be published. Required fields are marked *