DragonBox - a Kahoot! company

(BETTER DISPLAY HERE)


I’ve been at DragonBox for 3 years as a Unity Game Developer, and I’ve worked on :

Improving a learning app used in many schools

DragonBox School is a learning solution that engages students through digital and physical activities including videogames and storybooks. At the same time, it offers teachers a set of innovative tools to deal with each pedagogical goal in the math curriculum.

I worked on the application part : a big project composed (among other things) of more than 50 Sandboxes, which are scenes where students can directly play with abstract concepts to make them their own. Each of these sand boxes are also used to create many variations scenes, that are quizzes or challenges. All off this organized in a solution where the progression is articulated following the school curriculum, and where all the tools are given to the teachers so that they can monitor and follow the learning of their students.

My contributions to the project have been multiple and in many forms. Here is a non-exhaustive list of subjects on which I have worked :

  • Gameplay

    Create new mechanisms, quizzes, sandboxes, and different kind of activities …

  • Tools

    Each quiz or challenge can be present several times in several different chapters and is composed of a succession of tasks. The level design of a quiz/challenge is described by a CSV, one line = one task, the form of these CSV is common to all the quizzes. So we have several thousands of CSV files and several tens of thousands of lines representing the tasks of a CSV.

    LD example for an activity : Cardline

    I’ve created tools to validate the integrity of all this LD, to help editing it quickly, to generate it automatically for some activities, or to facilitate the work of the level designers and of the QA. Tools to automate patches that had to be applied to all our LD. Tools to modify several hundred scenes simultaneously.

    There are specific tools for certain activities as well. Using the Cardline example, I created a bundle system using scriptable objects so that level designers can easily create groups of objects that can be compared to each other. Then they can reference them in the level design CSV to create original questions.

    And many other tools …

  • Refactor

    We had an old internal package named Skeleton, which was about 10 years old and had evolved into a kind of big pasta code with several features that had nothing to do with each other but that were all intertwined : Different ways of handling localizations, font handling, math expression formatter, old UI components that were still used in the project, random utilities for everything and anything, base code for some activities … Several of these features had become useless in this project but we couldn’t get rid of them because of the other features we needed.

    One of my biggest refactoring task was to fragment all these responsibilities into different packages to be able to import the necessary packages only, to be able to make each package evolve individually and much more easily, to get rid of the functionalities that we do not use anymore.

    After that I was able to break a lot of dependencies way more easily by getting rid of old depreciated stuff and by standardizing several things (there were so many different ways to handle UI, some of them 10 years old, and there were 3 different ways to handle localization).

    I also had to rewriting some other old parts of the codebase that could not be integrated with the new developments.

  • Debug
  • Design
  • Graphic design

    Animations, FX, Shaders, UI

  • Text to speech

    Text to speech for accessibility is based on the narrator, and provides a lot of contextual informations. Disabled people often have their own narrator customized according to their needs, but without prior settings it may not look good. This was about seting up a more basic text to speech that works for everyone, based on the installed language packages on the device.

  • Demo mode

Releasing a game

Kahoot! Multiplication Games - Apps on Google Play
Go on an epic journey to become a multiplication superstar with Kahoot! Multiplication by DragonBox. Have a blast with over 20 different wacky and exciting multiplication games that will make you fall in love with the times tables and set you on a path to becoming a true master of the multiverse.
https://play.google.com/store/apps/details?id=com.kahoot.multiplication&hl=en&gl=US

We were between 2 and 3 developers (depending on the period), 1 and 2 graphic designer, 1 producer / game designer (not full time), and the production time will have been about 8 months.

I especially worked on :

  • Creating mini games

    I’ve implemented several mini games, and I’m responsible for the graphic and game design for some of them.

    Pachinko (cf gallery bellow) is an example of a game where I did everything (even the sound design).

  • Architecture and game systems
    • Scene management
    • Learning progression
    • Game modes
  • Production : translations / sfx / musics

    I was working with two freelances : a composer and a sound designer with whom we have iterated several times to obtain all our sound assets. I was in charge of communicating with them, describing our needs, and integrating their work.

    Our game was translated in 13 languages. We used the Crowdin platform to manage the localization and I was in charge of providing contextual informations to translators.

  • UI
  • Design
  • Shaders
    • A sprite deformation fragment shader to create a “Doodle” (cf gallery bellow). With tools to tweak it easily and with an integration with Text Mesh Pro.
    • Animations and FX (cf gallery bellow)
    • Different types of masks.

(The sound has a slight offset in the videos of the gallery below)

Maintaining and refactoring several old games

Games I’ve worked on :

Kahoot! Geometry by DragonBox - Apps on Google Play
Kahoot! Geometry by DragonBox: the game that secretly teaches geometry.We invite you on an exciting learning adventure in the world of shapes! Discover the fundamentals of geometry with your family through a game-based experience. Watch your kids learn geometry in a matter of hours, without them even noticing they're learning!
https://play.google.com/store/apps/details?id=com.kahoot.geometry
Kahoot! Algebra by DragonBox - Apps on Google Play
Kahoot! Algebra by DragonBox - The game that secretly teaches algebra Kahoot! Algebra by DragonBox, an app inluded in a Kahoot!+ Family subscription, is perfect for giving young learners a head start in math and algebra.
https://play.google.com/store/apps/details?id=com.kahoot.algebra5
Kahoot! Algebra 2 by DragonBox - Apps on Google Play
Kahoot! Algebra 2 by DragonBox: A fun, game-based algebra tutor that fits in your pocket. **REQUIRES A SUBSCRIPTION**Access to the contents and functionality of this app requires a subscription to Kahoot!+ Family. The subscription starts with a 7 day free trial and can be cancelled at any time before the end of the trial.
https://play.google.com/store/apps/details?id=com.kahoot.algebra12
Kahoot! Learn Chess: DragonBox - Apps on Google Play
Kahoot! Learn Chess by DragonBox is an immersive, interactive game for kids (recommended for age 5+) and adults who'd like to learn to play chess and challenge their minds. Join grandmaster Max on her adventure to solve puzzles and beat bosses across multiple levels".
https://play.google.com/store/apps/details?id=com.kahoot.chess

Things I’ve done :

  • Punctual debugging and maintenance on these games.
  • Refactoring and Account Service integration

    Refactoring was needed to be able to easily integrate our Account Service solution. And to be able to easily switch several components of the games (login, analytics, levels, …) depending on the context. And thus be able to release the games in their B2B or B2C version without difficulty.

    Some games are old + our current coding conventions and guidelines are not in place + the developers who worked on it are no longer present. It implied an additional work of analysis and refactoring.

    The Account Service Integration also involved some changes to the games themselves, specific to B2B versions.

Making our solutions more accessible

The first step to make our products more accessible for motor and visually impaired users.

Main wanted features

  • Screen reader
  • Navigation : alternative control options
  • Distinguish elements that trigger changes from non actionnable elements

I’ve found an open source package that was almost matching these requirements and I forked it to have the necessary missing features.

Fork additions

  • Handle our localisation components and other custom components
  • Handle popups
  • Handle additive scene loading
  • Localize contextual informations
  • Handle PointClickHandler buttons
  • Add option to navigate without screen reader
  • Add option to disable screen blocker
  • Bug fixing
  • Add icons in editor hierarchy view

Integration

Our projects contain a lot of scenes, and the integration requires adding a component to all objects that need to be “accessibilized”, and another object to a parent that constitutes an “accessibilization group”. It is then necessary to define the order of priority of the groups for navigation, the priority of the objects within a group, the possible addition of contextual informations, localization keys, other information specific to certain components, ... This requires a lot of work, so I created a tool to speed up integration, iterations, and testing (cf gallery bellow).

Producing analytics to monitor our apps

Using Amplitude which is an analytics platform. We use it by integrating the various APIs and SDKs provided to make our application capable of triggering events. The events can then be processed in the Amplitude web platform to monitor retention and other metrics, create views to help to balance the game, detect issues…

Here is a gallery of some examples.

Integration of the “Amplitude Analytics Unity SDK”

A plugin to simplify the integration of Amplitude iOS and Android SDKs into Unity projects I’ve integrated it to all our solutions via our package overlay.

Create a package overlay

Add additional features like :

  • Automatically add relevant user properties
  • App info utility
  • Geolocation Utility : special handling for GPDR countries

Create a new package for Editor / Pure Desktop

Unity SDK does not support pure desktop or Editor. I’ve created a plugin based on the HTTP V2 Amplitude API to overcome that. I used the same interface as our Amplitude SDK overlay and we use this package or the overlay depending on the platform, thanks to Zenject (our dependency injection framework).

Many other things …

Account service

Package that handle all the BTB layer of our apps. Users of our school product also have access to our games. The purpose of this package is to make them share several useful systems for this purpose.

I worked on the frontend integration of the interfaces specific to this package. And on the integration of this package on multiple games.

Kahoot Family

Package that handle the BTC layer of our apps, and integrates them into the Kahoot! ecosystem.

Previously our games were standalones, now they are sharing multiple systems like : connection, In-game purchases, subscriptions, …

On this project, I worked on the frontend integration and on analytics.

Tech stack

  • Asynchronous operations using Unitask
  • Package management :
    • Formerly : our own package manager named Uplift
    • Now : our own private npm registry server using Verdaccio
  • Continuous integration : using Jenkins, Fastlane, and our own tool to build our projets

This is roughly organized and is not exhaustive, but it gives a good overview of my experience at DragonBox.

Selim Bennani