Technical Spikes vs MVP

In software development (and product development in general) is a concept called MVP or Minimal Viable Product. According to Wikipedia it is “a product with just enough features to gather validated learning about the product and its continued development”.

My plan was to develop a Gravitas MVP in Unity and release it as quickly as possible. After reading a bit about some of the cool things I can do with Unity quite easily that would have been hard before, I inevitably got distracted. But it’s okay, since technical spikes are also an accepted part of software development (again thanks to Wikipedia: “a product-testing method that is used to determine how much work will be required to solve or work around a software issue”).

Specifically, one of the things I wanted to do in Gravitas was add a real lighting model, probably using normal mapping on the sprites. I had read up how to do this in MonoGame, but decided to see how quickly I could do it in Unity. The answer was about 2 hours. That includes the time to create the normal map for the ship (and finding a tool to help do that).

The tool I used incidentally is Sprite Illuminator from a company called CodeAndWeb. If you plan to do any 2D games I suggest you check them out. Their tools all come with trials, and the only reason I haven’t bought it is yet, is I’m deciding which bundle to get (I’ve already used Sprite Illuminator and I’ll almost certainly use Texture Packer. Physics Editor is probably less useful to me, but is only £10 extra with the other two).

Embracing Unity

For a long time, I’ve avoided Unity. The biggest reason was inertia from working with MonoGame, but I was also put off by the prospect of old versions of Mono and C# as well as being generally suspicious of development being so “editor focused” (I’ve tried quite a few drag-and-drop game development tools and ultimately found them frustrating).

But I’ve decided to get over it and have a go.

The number of amazing games released that have been made with Unity has persuaded me the last point is not an issue (or perhaps no longer an issue). More importantly, there have been a few specific recent developments that have piqued my interest.

Unity joined the .NET Foundation. Unity’s .NET support always worried me a little. Using old versions of Mono and C# was bad, and their support for JavaScript made me a little worried they might just drop C# altogether. This is obviously not going to happen now (at least in the near future).

Related to the previous point (but more to do with Mono being released under a permissive license) is that they really are pushing forward with an updated version of .NET.

The final reason is the discovery that Distinctive Games, a mobile game developer I used to work for have decided to use Unity for (at least) one of their upcoming games, Downhill Extreme 2.

The net result of this is that I have started working on another version of Gravitas in Unity. And after about half an hour I have a star field, and a ship (with a colorizable section) that rotates when you press left and right.

Xamarin Forms coming to macOS

Since .NET and Xamarin were open sourced, I’ve kept a casual watch on their repositories for interesting things.

Recently I noticed this pull request “Change appearance of NSTabView”. This immediately stood out since NSTabView is an AppKit (i.e. macOS) API as opposed to a UIKit (i.e iOS) API. A quick read of the details and is indeed about some difference between NSTabView and UITabBar.

The pull request is targeting the branch “macos” and it seems it’s been in development since at least August 17th.

Xamarin Android and “–no-version-vectors”

TLDR: An error containing “–no-version-vectors” is probably fixed by updating your Android SDK Build Tools to at least 23.

I recently upgraded a project to the latest version of Xamarin Forms and got the following error:

/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Common.targets: Error: Tool exited with code: 2. Output: ERROR: Unknown option '--no-version-vectors'

A quick $ grep -ri "no-version" . on the project revealed it was being used in a dependency brought in by the Forms update:

./packages/Xamarin.Android.Support.Vector.Drawable.23.3.0/build/Xamarin.Android.Support.Vector.Drawable.targets: $(AndroidResgenExtraArgs)--no-version-vectors

Long story short, this parameter is for the aapt tool in the Android SDK Build Tools from at least version 23. Updating through the Android SDK manager fixed it.

Betrayal at House on the Hill – Betrayal Character Cards for Android

Betrayal at House on the Hill is a board game published by Avalon Hill and designed by Bruce Glassco. The game is split into two parts. In the first, the players become trapped in a haunted house which they must explore, revealing rooms as they do. At some point the second part, the “haunt”, begins in which one player (generally) becomes a traitor and everyone plays out one of 50 scenarios pitting the traitor against the others.

An important part of the game involves tracking each of the player’s attributes (each character has a different range of possible values for each attribute). Since the included cardboard trackers can be loose and tend to slip out of place, a few different smartphone apps have appeared to help the situation.

The earliest Android version is Betrayal Character Cards. This app does the bare minimum needed. You can see a list of characters, see their attribute ranges and select the current value for each. As a small extra it also includes the birthday and hobbies of each character (which has a minor gameplay purpose).

Out of the apps available this is the simplest and has the least features. On the other hand this should run on the widest range of devices.