Project Fizzyo – Archipelayo

Our first trailer

Winner of the International Serious Play gold award, Archipelayo aims to set a new standard for games used to enhance physiotherapy. Archipelayo is a series of mini games designed to be used by children, aged 6-16, with Cystic Fibrosis – a lifelong, incurable disease. The disease causes thick sticky mucus to build up in the lungs and digestive system which leads to multiple health problems such as repeated chest infections, shortness of breath and lack of proper food absorption amongst many others. To reduce risk, sufferers of cystic fibrosis must clear their airways through various Airway Clearance Techniques or ACTs. Working with Project Fizzyo and Microsoft, Archipelayo has been developed to be used in conjunction with the children’s ACTs. The game is played using the Fizzyo sensor which is attached to the Acapella, a device used to aid the clearance. The sensor turns breaths into computer inputs which can be used as controls for the game. Regular physiotherapy can reduce the health risks of CF and improve life expectancy; however, the process is tedious and proper adherence to their treatment is poor. Archipelayo is designed to increase adherence and encourage proper technique whilst making the children’s daily, grueling treatments fun with a variety of minigames.

Currently our game, alongside others, is being used within Project Fizzyo’s clinical trial. The trial involves 160 patients aged 6-16 being monitored for a six-month period to see the effects the games have on the patient’s adherence to, and efficacy of their physio regimes. As the patients play our game, data is captured such as their breath quality and playtime. The trial is taking place at Great Ormond Street Hospital, an internationally renowned children’s hospital in London

The main menu system

There were 2 programmers in total and I was responsible for the main menu, blow dart minigame, the breath bar and breath set system (reused across all minigames), the achievements and the majority of the analytics. To see more follow us on twitter: @konglomerateG

The game could be split into three main focus points from my side of the development:

  • Analytics
  • Developing for accessibility
  • Keeping the efficacy of the physio exercises


As the game is being used in a clinical trial we can record important data as the children play such as which minigame encourages better breaths, which minigames the players return to and how long they play each one for. Data is bundled and sent through the Unity Analytics system after each minigame is finished etc to allow us to compare minigames for which produce the better quality of breaths and more. Not only does this allow us to continually improve the game based on the data accumulated but to further the research into how gamification can help physiotherapy, providing data and statistics to prove it. Below is our end of minigame and end of session analytics events.

public static void ReportEndOfMinigame(string levelName, float minigameStartTime)
        Debug.Log("End of minigame report: ");
        Debug.Log("LEVEL NAME: " + levelName);
        Debug.Log("TIME_IN_MINIGAME: " + (Time.time - minigameStartTime));
        Debug.Log("BREATHS_DURING_MINIGAME: " + minigameBreaths);
        Debug.Log("GOOD_BREATHS_DURING_MINIGAME: " + minigameGoodBreaths);

        if(0 > Time.time - minigameStartTime)
            Debug.Log("ERROR TIME IN MINIGAME BELOW 0");

        AnalyticsEvent.Custom("Minigame_Session_Details", new Dictionary<string, object>
            { "Minigame_Name", levelName },
            { "Minigame_Time", (Time.time - minigameStartTime) },
            { "Minigame_Breaths", minigameBreaths },
            { "Minigame_Good_Breaths", minigameGoodBreaths }

        minigameGoodBreaths = 0;
        minigameBreaths = 0;

    public static void ReportEndSession (float time) 

        Debug.Log("End of session report: ");
		Debug.Log ("TOTAL_SESSION_TIME: " + time);
		Debug.Log ("TOTAL_SESSION_BREATHS: " + totalBreaths);
        Debug.Log("TOTAL_SESSION_GOOD_BREATHS: " + totalGoodBreaths);

        AnalyticsEvent.Custom("Session_Details", new Dictionary<string, object>
			{ "Session_Time", time },	
			{ "Session_Breaths", totalBreaths},
            { "Session_Good_Breaths", totalGoodBreaths}


From the start of the project for me accessibility was a big focus. I wanted to do as many small things to improve the game for people with disability. To do this I pushed for changing of the balloon assets to not be solely differentiated by colour but also by symbol for colour blind players.I increased the font size and ensured it was against a contrasting background to be more readable for players with poor vision and the font itself was dyslexic friendly which was designed to be better for dyslexic players. Finally I added a selection system to allow the player to choose their number of breaths and sets they have been prescribed and the gameplay and scoring can then adjust around that specific players routine to not discourage any individual who may have lower or higher than average routines.


The game had to be encouraging the player to do the correct technique and reinforce the idea of the long steady breaths needed for the ACTs through all aspects of the game. The visual representation of the players breath is shown in the form of a bar filling up and originally took in the breaths pressure which may encourage short sharp breaths which aren’t desired. Now the bar fills over time based on that specific user’s maximum breath which is calibrated at the beginning of the session.

    void Update ()
        // If the bar isn't locked fill it when user breaths.
        if (!lockBar)
            if (beganBreath)
                breathTime += Time.deltaTime;
                fillAmount = breathTime / maxCaliBreath;

            // Links the fill amount float to the breathMetre.
            breathMetre.size = fillAmount;
        // When the bar is full lock the bar and shake the screen.
        if ((fillAmount >= 1) && (!lockBar) && (!reset))
            barFull.SetBool("barFull", true);
            lockBar = true;

        // Reset the fill amount.
            fillAmount = 0.0f;
            breathTime = 0.0f;
            reset = false;
            lockBar = false;
            barFull.SetBool("barFull", false);

The breath bar is extremely versatile and is used repeatedly with functions allowing the accessing of the variables within. The scoring system encourages the longer breaths as multipliers increase with higher quality breaths with a low quality breath resetting the multiplier back to zero. The game play itself also encourages the longer breaths and the achievements also tie in to rewarding better quality breaths for the player.