Code Visualisations

Very shortly (later today, in fact) we'll have our first Beta build of sphereFACE online! Meanwhile, this update is going to tell you all about the state of the codebase as it currently stands, along with some pretty visualisations.


But first a bit of history. Unlike many of our games which started as submissions for game jams, and were consequently rushed furiously at the beginning, sphereFACE came about from an idea for a gameplay mechanic alone. As such it brewed slowly and was developed gradually over a fairly long period, slowly simmering, if you will. We made this video today to visualise the growth of the code over its history so far:

The attentive among you will have noticed this video's first dates going quite a way back - the first lines of code were written back in February 2014, and development continued slowly as a side-project while we worked on our last release AdvertCity. We had a chance to show off the early alpha build at a few exhibitions - most notably MancsterCon 2014 and Manchester Day 2015 - which gave us a lot of feedback from play testers and gave us a number of ideas for how we can improve and complete the game.

Background development of sphereFACE had to go on hold while we pushed for our final AdvertCity steam release, and you can see a pause in the action in the video above, before the final burst of activity at the end. Once we released AdvertCity, we finally had time to start making proper progress towards finishing sphereFACE, and were able to launch this Kickstarter with a view to bringing it from alpha into beta testing. And here we are now.

The codebase

Some statistics on the codebase as it currently stands:

  • Total files: 473
  • Files containing code: 134
  • Lines of code: 14821
  • Code comments: 3242
  • Repository age: 542 days
  • Repository size: 113MB
  • Code changes: 670 commits by 6 authors
  • Last relased build: Alpha 3.8.3036.16703
  • Next build version: Beta 3.8.3037.16707

For those of you unfamiliar with revision control systems, when we talk about a "commit", we're talking about one complete change to something in the code. A commit might change just one line, or it might change dozens of files - generally we try to keep it to one commit per bug fix, or per feature added, or other significant change. So each commit can basically be seen as some small measurable improvement to the game. Here's a glance at what the recent commits to the repository look like:

The repository is the central place where all commits get uploaded, so multiple authors can work on the same code collaboratively without having to be in the same place. Here are some graphs showing when we tend to be most busy - all times are in UK time.

Number of commits by hour of the day

Commits by hour of the week

It seems Monday night is our busiest!

"Punchcard" view - commits by time of week


The repository for sphereFACE contains every resource needed to build it, excluding some system libraries. We include those libraries that are more obscure or may be trickier to build, and exclude those we can reasonably expect to be found on every developer's system already. The repository also contains a few other bits and bobs, such as graphical assets including originals needed to produce final publicity images, fonts, icons, audio, and various tools we've built to help us verify the code, assist with the compilation process, generate content, or just generally keep things tidy. But a picture is worth a thousand words, so here's a map of the repository:

The arrows point out which source files include which headers, showing the connection relationship between the individual files.

This second image shows the same relationship, but with a strong repelling force between the nodes and a different layout algorithm, that shows the modular nature of the repository a bit better:

Finally here's a sneak peek from a video we'll be releasing at some point in the next week on our Youtube channel showing our work on our various repositories in the last few years - sphereFACE is one of these branches: