The unique set of needs that arises with each new project at Dots often requires us to fashion our own tools in order to best optimize our workflow. Given that our brand places great import on the art that goes into our games, we end up spending a considerable amount of time working with meshes, and many of these are modeled with the intention of being vertex colored. Vertex colored meshes are very efficient to render and can sometimes achieve a more graphic, painterly effect on low poly meshes than other types of shading options. One drawback, however, is the amount of time it takes the modeler to paint each vertex of a fairly elaborate mesh. While this process is acceptable if it can be done only once, it quickly becomes prohibitive in the event of needing to make color adjustments or palette changes, since doing so would entail repainting the mesh by hand. To address this we made a custom tool that allows us to generate a color palette from a mesh’s vertex color data. It is implemented as a Unity component called the Mesh Palette Maker.Read More…
We recently implemented an in-app routing system to support deep linking for our games.
The main challenge of implementing in-app routing for mobile games is scalability. How do you prevent insane spaghetti code from tangling up your codebase as a result of your foray into deep linking? Can we do away with god classes that contain UI logic for every possible deep link in the game? Oh god, what about the race conditions (especially in games), where the system thinks you’re in one place but the UI is actually in another?
Our solution to this problem led us to develop a hierarchical control system called the Navigation System that is decoupled from UI logic.
Disclaimer: This post assumes basic familiarity with Unity.Read More…
Procedural Audio in Unity with Pure Data
Why? (aside from being cool)
In Two Dots, each time we release a new theme (every two or three app updates), we not only pick a new set of board and background colors, we also make a new set of sound effects. That means with each new theme, we need to generate, organise, and pack at least 40 new SFX (20 dot connects and 20 square connects of different lengths). Though our initial concern was file size, it turned out that rendering these was a huge overhead for our in house composers. Although each sound is essentially a different note (or chord) on the synth instrument, they need to be generated multiple times to get a clean and level render for Unity to import. They probably haven’t forgiven us for the time we needed them to re-render all the worlds at a higher volume yet… Generating these procedurally seemed like a good solution. If each new theme meant a new ‘instrument’ to define what the connects should sound like, the game at run time just needs to load that up, then play whatever note or chord is needed. Now we just needed a way to make these instruments, and teach Unity to play them.Read More…
Cassandra was a character from Greek mythology known for her gift of prophecy. Certain versions of her story report snakes that licked her ears, whispering predictions to her as she slept. In others the Greek God Apollo bestows her with the gift of prophesy in an attempt to woo her. At Dots, instead of using serpents or divine inspiration, we use the power of machine learning to make different predictions about our users.Read More…
“Don’t use value types with generics unless you HAVE to!”
I found that warning scrawled across a white board my second or third week at Dots. “Have” was quadruple-underlined for good measure.
In C#, a value type is any basic type like an
float, or any type definition declared using the
structkeyword. A generic class is a class like
List<T>that can hold fields of one or more parameterized types. Supposedly, mixing the two increases the size of your application’s executable by a significant degree.
Is this true?Read More…
Slush is one of world’s “must-attend” conferences for investors and startup entrepreneurs. Paul Murphy, our CEO, and Patrick Moberg, our CCO, were at Slush this year to talk about Dots. Their talks covers the whole Dots story—where we came from, where we are today, and where we’re going in the not-too-distant future.Read More…