Timeline

Global Game Jam 2017 in Thailand!

So for the last 5 months I’ve been travelling around South East Asia, which has been amazing, but I have been finding myself increasingly missing making games. So a few weeks ago, while I was in Vietnam, I remembered that global game jam was just around the corner, so I signed up for my nearest jam site, which turned out to be Rangsit University in Bangkok.
I thought the idea of developing a game in another country could be a fun new challenge, I mean I wasn’t even sure if there would be anyone that spoke English.
So on the 20th, I rocked up to Rangsit University and got myself registered for the jam.

The first thing that shocked me was the scale of the Thai dev community, there were over 100+ registered jammers! Far more than any Jam site I have ever been to before. Most of the jammers were students, but there were a couple of attendees from local game companies. I soon found myself a team of local game developers.
Team

And then the theme was announced was “Waves”. We struggled with coming up with a concept that everyone was happy with at first (the theme was very similar to one I had for Rezzed earlier in the year which didn’t help), but we eventually settled on a concept that revolved around two people bouncing waves between them by entering increasingly difficult button combinations.

DSC_0609

As it was Donald Trump’s inauguration day, the games avatar soon become an angry shouting Trump. We managed to get the prototype working within a few hours, and I went back to my hotel for the night, my team mates had no such luxury however…

It’s probably also worth mentioning that the Jam site provided catering for the whole 48 hours for the jam, as well as free energy drinks, snacks and Coffee, they provided more food than I could ever possibly eat. It was a massive departure from game jams I’ve attended previously

Eventually we finished our game and named it “Top Trumps” after the card game. We were voted 3rd in the popular vote of around 30ish games, which was nice! Although our game turned out to be pretty silly, I had so much fun making it. It was also great in another country, the energy in the room was intoxicating and I made a bunch of new friends to boot. I can’t wait to for GGJ2018!

Games By The Sea

It was Develop Conference in Brighton last week, and as always, it was a blast. The Sofa Squadron crew hit up lots of the parties: Marioke, Special Effect party, and the incredibly popular Games by the Sea.

We had a very special reason to be at Games by the Sea, because we were showing Super Block Party in public for the very first time! GBTS is probably the perfect place to show a party game because there is a brilliant atmosphere, friendly crowd and plenty of free beer.

We set up our stand with plenty of merch, and managed to take a few photos of the crowds around our game along with a few selfies! The mood was high and we were so very excited to be showing Super Block Party to everyone.

display_merch

Since Games by the Sea takes place during Develop conference, lots of the audience were fellow games developers and designers. It was rather scary showing the game to people who know so much about games design, but it probably helped. Designers are notoriously honest so we could count on having genuine feedback!

img_20160713_200227

It being the first time we’ve had new comers play our game, we learned a lot about where Super Block Party is really working. When making a party game for up to eight players, it’s obviously difficult to test ideas with enough new users, so the insight from demoing the game last week has been invaluable. We learned that people on the whole ‘got it’ quite quickly, but we still need to work on announcing objectives and providing enough player feedback to make the game even more competitive. Luckily, these are incremental improvements and we know the core gameplay is pretty robust and highly enjoyable.

The event was an amazing success for us with barely a vacant controller all evening. Lots of people came to play and some rivalries began to emerge between players. In an evening of competitive fun, we heard lots of roars of laughter and friendly competition coming from our stand. It was a brilliant event and we can’t wait to demo again!

img_20160713_200147

Thanks to Unity and all of the event sponsors, and extra mega thanks to Edd and the rest of the Games by the Sea crew for putting us up and hosting such a wonderful event.

Unite Europe 2016

DSC_0271

Last week myself and fellow Plug-In developer James were lucky enough to be sent to Unite Europe in Amsterdam to check out what’s changing with the Unity engine and see what cool new stuff is on the horizon.
We spent the majority of our time (when we weren’t watching the various talks and presentations) checking out the Made with Unity showcase. I was really impressed with the variety and quality of the upcoming games, and it was great to chat to the other devs about their methods. It was also great to try out some of the VR games coming out the indie community.

One of the games in the showcase, that I absolutly loved, was called Pode. Pode is a puzzle platformer mixed with Lost Viking style problem solving. The visuals were cute and charming and the gameplay feels quite relaxed and zen like. Although the developers insisted the version we played was still pre-alpha, it was one of the most polished games on display.

pode_screenshot_04

Of all the talks that I saw over the week, my favorite was probably the following talk by Alex Trowers. It details the journey he went through with his partner Leanne Bayley to create a game before the arrival of their child. I also loved that the slideshow was an actual game, and the presentation was so personal and heartwarming.

Overall I really enjoyed my first time at Unite Europe and I’m looking forward to seeing what Unity have in store for us next year.

DSC_0297

 

 

We won EGX Rezzed Game Jam 2016!

So over the weekend we were invited to take part in the Creative Assembly game jam at rezzed Having previously only previously participated in a 48 hour game jam, I was slightly worried about attempting to make a game in just 8 hours.

So when we rocked up to rezzed we were told that the theme for the game jam would be flux with the three diversifiers being liquid, sound and waves. I initially drew a complete blank upon hearing the theme, but luckily my team mate Michael was able to scribble together a game idea.

QJYbbzSI

We decided make a rhythm based game where you had to press a button in time to a rippling wave. After seeing the drawing Jules (my other teammate) said that it looked like it could be based in a pond and soon she had some sketches with frogs in a pond.

frog_sketchSo I rapidly began hacking away and after a little while I had an initial prototype.

DesktopOne of the biggest issues was ensuring that all the music would be kept in time. I created BeatCounter script that would give me callbacks every time the audio played a beat or completed a bar.
At about the 6 hour mark we has our game feature complete, which gave us 2 hours to add polish. This game us time to add particle systems and to make the frogs bop their heads in time with the music (just by listening to the beatcounter callbacks).

GameGifOn Saturday we had to give a presentation of our game which you can see below. Shortly afterwards we were announced to be the winners, much to our disbelief.

Photo by @Lobo_Demon

Photo by @Lobo_Demon

You can check out the awesome music Michael made on soundcloud:

I had an such awesome time at this jam, and I met so many lovely people and saw some really cool games being made. We have now released Toadal war on itch, so feel free to check it out 😀

 

Global Game Jam 2016

Icon

Please excuse the rushed sentiment of this blog post, but having finished coding our game for Global Game Jam ’16 words are starting to fail me. You can view our game over here:

http://globalgamejam.org/2016/games/dances-elder-gods

So the theme for 2016’s GGJ was that of ritual, so we instantly started thinking of tribal communities worshiping their deity of choice. We started brainstorming in the pub on Friday night. Here are some sketches from then, (it’s surprising how close they are to the finished product).

Blog1

blog2

Initially we were unsure whether to make a straight rhythm game, or opt for a mastermind (board game) style game where you have to guess the correct pattern. Eventually we settled on the later.

So we began development of the game, and I created an early prototype which had some form of dance input.

Screen Shot 2016-01-31 at 20.22.48

Michael (@Mikey_PB) then worked on creating all the sfx and music, only sampling his voice to meet the “Loudmouth” GGJ diversifier (which totally worked for our style of game). Jules (@julesRGB) then squirrelled away creating us some art work while Kylie (@TajunShadow) worked creating us some low poly environments. Here are some of Jules’ early sketches:

IMG_20160131_201946

IMG_20160131_202143

IMG_20160131_202354

and by the end of Saturday (!) we had a fairly stable build of our game.

Test

Then on Sunday we put on the finishing touches on the game, adding in new sounds effects and adding the animated monster in the background. Here’s a gif from the final game:

Gameplay

Connect GitLab to Trello

One of the things that I have always found useful when working with task tracking software, is the ability to see a list of all git commits associated with a given issue. Currently commit tracking is only supported for Business class users, and so far only GitHub is supported.
Here I will explain how you can get Git to automatically link your trello cards with your git commits.

1) Firstly, install node and node trello,

sudo npm install -g node-trello

2) Next get an app key from trello using the folowing link: https://trello.com/1/appKey/generate

3) Allow Git-hook to use your account – https://trello.com/1/connect?key=KEY_YOU_OBTAINED_FROM_STEP_TWO&name=git-hook&expiration=never&response_type=token&scope=read,write

4) Unzip the attached ZIP file into your .git directory for your project (this file may be hidden for you). So the path should be your_project_path/.git/hooks

hooks

5) You may need to make the script executeable

chmod +x your_project_path/.git/hooks/*

6) Open the post-to-trello file in the hooks folder and fill in your key, token, repo link, and board id. To get you board ID, go to your trello board in a browser and append “.json” on the end of the URL e.g. https://trello.com/e/aaaaaa/my-board.json

Now anytime you mention a card number in a commit message like this : “#44 Some message”. Your comment should appear on your card. Credit to mashihua for the initial Git -> trello code.

Screen Shot 2016-01-27 at 13.07.09

Mr Penguin

For the last couple of lunchtimes I have been working with my technical director Alan to create a bubble machine that could respond to our social media presence.
Meet Mr P

Mr p

We brought a kids bubble machine for a couple of quid and modified the switch on top so it was linked by a transistor. This transistor was then enabled and disabled by the GPIO socket on a Raspberry Pi, which we then switched on and off using a simple node.js program.

IMG_20151005_133209

The Twitter API has two REST callbacks which are were helpful for us to respond to our presence.

Firstly, one call to get the all the retweets of the logged in user
Secondly, one call to get the list of followers

I wrote the program to poll these callbacks every minute and to detect any changes.

Lastly, the program also posts to our company Slack channel, detailing what Mr P is excited about.

Screen Shot 2015-10-12 at 11.53.41

 

Here’s a copy of the source code and here’s a video of the little guy in action.

Life After TestFlight

So TestFlight has been taken down today and rolled into the new iTunes connect service. Unfortunately the new service came with bunch of restrictions that make it pretty much useless for me, including:

  • 30 day limit on build beta testing
  • 25 user limit for internal builds
  • An Apple review required to release to more than 25 users

So what can be done, without requiring testers to fiddle around with iTunes?
Now with the enterprise developer account it is well documented that you can serve IPA files using a URL, but this functionality is also available to normal Apple developer account users, but with a little bit of tinkering.

Firstly create a Ad-Hoc IPA that you would normally upload to Testflight.
Next you will need to generate a manifest for your IPA (this used to be done for you, but the feature has been removed from Xcode 6). Here’s a copy of the template that I use to populate mine:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
   <key>items</key>
      <array>
         <dict>
            <key>assets</key>
            <array>
               <dict>
                  <key>kind</key>
                  <string>software-package</string>
                  <key>url</key>
                  <string>REPLACE_URL</string>
               </dict>
            </array>
            <key>metadata</key>
            <dict>
               <key>bundle-identifier</key>
               <string>REPLACE_BUNDLE_ID</string>
               <key>bundle-version</key>
               <string>REPLACE_BUILD_VERSION</string>
               <key>kind</key>
               <string>software</string>
               <key>title</key>
               <string>REPLACE_APP_NAME</string>
            </dict>
         </dict>
   </array>
</dict>
</plist>

Replace the strings, and use the URL that your IPA will be hosted at (this address does not need to be https).
You will then need to upload this manifest file to a server which is uses https. I ended up using a Amazon S3 bucket as they are currently offering a year free trial for new users. If the manifest file is not on a server which uses https, the download will not work on iOS 7+ devices.
Once you are hosting both the Manifest file, and uploaded your IPA, you should be able to download your IPA onto a device using the following link:

itms-services://?action=download-manifest&url=https://REPLACE_MANIFEST_URL

this link can then me emailed or on a webpage, and will allow any user in your provisioning profile to download your app directly on their iOS device.

Recording and Playing Back Gameplay In Unity

One of the core features required for Dora and Friends was the ability to record and playback Unity gameplay. As well as being able to playback gameplay, we also had a requirement for users to be able to scrub through the gameplay and export the gameplay data to a video.

The basic structure for the replay system we developed was as follows:

RecordingManager
The Recording Manager is responsible for polling any objects that we may want to record, and checking if they have made any changes since the last frame. If a change is detected the objects transform data will be recorded for that frame, otherwise we logged the index of the previous frame the object was updated on.

RecordableObject
The Recordable Object simply contained a list a variables that we wanted to record, with a series of helper methods to get and compare the various variables.
Here is a copy of the data we ended up recording for our game:

    public class RecordableData
    {
        // ID of sprite displayed (for 2D objects)
        public ushort spriteId;
        // ID of parent objects, as we're only recording local movements
        public ushort parentId;
        public ushort frameNumber;
        public bool activeSelf;
        // Should object tween it's position for this frame
        public bool tweenPos;
        // Local XYZ coordinates
        public PositionData positionData;
        // Local quaternion data
        public RotationData rotationData;
        // Local scale
        public ScaleData scaleData;
        // RGB values for objects that change colour
        public ColourData colourData;
    }

It may be worth noting that it is much better and easier to record Quaternion rotations rather than Euler angles as they are more deterministic, and you won’t have to deal with angles wrapping from 360 to 0.

PlaybackManager

The playback is responsible for working out which frame the game should display during playback, and which objects it should move. The playback manager should be able to handle skipping frames and interpolating between frames, as the playback frame rate of the game may not necessarily be the same as the recording framerate.
In Dora & Friends, I ended up using a system that played pretty much exclusively interpolated frames, as the chance that the time passed between the frames would ever be identical. This also resulted in much smoother playback, and allowed us to record at lower framerates. I did allow objects to turn on and off the tweening where appropriate.

To serialise the replay data we used the excellent protobuf-net library. This tutorial outlines a great way to export custom structs as a binary file.

Another library worth mentioning is the iVidCapPro library, which provides a framework for exporting Unity3D gameplay to encoded video on iOS using the GPUImage Library. I ended up using a version of the library (modified to allow faster than realtime export) to save the gameplay videos to the devices.

Similarly, intel have just released this tutorial for the INDE Media Pack, which could be used to video export on Android. Although I have yet to test out it’s functionality.

Creating a font

While developing Super Jump Golf I have been playing around with some of the existing games developers have produced using Cocos2D. One of the features that consistently stick out on my mind when playing most of the games is the difference a unique font can bring to the game.

Using bitmap fonts can also potentially improve load times over true type font, since the bitmap images won’t have to be generated at runtime.

Cocos2D supports bitmap fonts in in the form of a .fnt file and a bitmap font atlas. There are free tools avalible, such as Heiro (OSX) and BMFont (Windows), which will create these files for you, but will require the true type font (.ttf) to be previously installed on your system. Once you have created the true type font you can always use it later for promotion material for the game. So how do you create a True Type Font?

One option is to use Inkscape, an open source vector graphics program. Inkscape can simply import your bitmap images, trace the bitmap to make a vector (saleable) image and assign the selected graphic to a desired character. One of the downsides of the new SVG font editor however is that there isn’t currently any way to create fonts which aren’t fixed spaced. If you’re intending to create a mono-spaced font then this is by far the easiest solution to creating a font. You can find a tutorial on creating a webdings font using inkspace here.

The next option, and the option I ended up choosing is to create a font using a program such as Font creator. Font creator provides a simple interface and editor to allow you to change the spacing between each character.

While the process can be quite time consuming, it can be significantly reduced by first creating a vector image trace using Inkscape and importing the postscript (.eps) file into Font Creator (the bitmap image tracer that comes with Font Creator didn’t work too nicely with my character set).

fontImage

Once you have saved and installed the font, just load up Heiro or BMFont and you should be good to go. Another bonus of creating a TTF file is that you won’t have to resize your bitmap image for each size font that you need for your game, since the TTF can simply resized and a new font file generated.

fonttest