new void Start()
    {
        rosetta = GameObject.Find("Rosetta").GetComponent <Rosetta> ();
        mcRef   = GameObject.Find("MasterController").GetComponent <MasterControllerScript> ();
        ds      = mcRef.getStorage();

        mcRef.playMusic("QAMusic");

        /* retrieve status from MasterController general storage */

        /*enabled = new bool[qa.Length];
         * for (int i = 0; i < qa.Length; ++i) {
         *
         *      enabled [i] = mcRef.getStorage ().retrieveBoolValue ("QuestionSetIsEnabled" + i);
         *
         * }
         *
         * header = new int[qa.Length];
         * for (int i = 0; i < qa.Length; ++i) {
         *
         *      header [i] = mcRef.getStorage ().retrieveIntValue ("QuestionSetHeader" + i);
         *
         * }*/
        keyChannel = ds.retrieveIntValue("CurrentFlameIndex");
        nLevel     = ds.retrieveIntValue("Level");
        if (nLevel == 0)
        {
            nLevel = 1;
        }
        imageSwitch.setChannel(keyChannel);
        keyImage.GetComponent <Image> ().sprite = imageSwitch.getSprite();

        string sss = obtainTexts.getStringId(keyChannel);

        youGotAKeyText.GetComponent <Text> ().text = rosetta.retrieveString(sss);

        state = QAControllerState.idle;
        questionLetterOutput = 0.0f;
        elapsedTime          = 0.0f;
        answerGO             = new GameObject[maxAnswers];
        currentQuestion      = 0;

        //string curLev = ds.retrieveStringValue ("CurrentLevel");
        //int n = ds.retrieveIntValue (curLev + "NumberOfKeys");
//		int n = ds.retrieveIntValue ("GlobalQACounter");
//		ds.storeIntValue ("GlobalQACounter", n + 1);
//
//		n = FirstSetIndex + (n % (LastSetIndex-FirstSetIndex+1)) - 1;
//
//		bankIndex = n;

        qa = QAHelper.getNextBank();

        qa.reset();
        qb = qa.getNextBank();
        qb.reset();

        nMisses = 0;

        flowerAnim = flower.GetComponent <Animator> ();
        spark1Anim = spark1.GetComponent <Animator> ();
        spark2Anim = spark2.GetComponent <Animator> ();
        spark3Anim = spark3.GetComponent <Animator> ();

        keyImageFader       = keyImage.GetComponent <UIImageFader> ();
        youGotAKeyTextFader = youGotAKeyText.GetComponent <UITextFader> ();

        particles.Stop();
        spark1.transform.localScale = Vector3.zero;
        spark2.transform.localScale = Vector3.zero;
        spark3.transform.localScale = Vector3.zero;
    }
    public void parse(QAIngest ingestRef)
    {
        List <string>     questionList      = new List <string> ();
        List <string>     setNameList       = new List <string> ();
        List <int>        numberOfAnswers   = new List <int> ();
        List <int>        correctAnswerList = new List <int> ();
        List <string>     answersList       = new List <string>();
        int               correctAnswer;
        List <StringBank> sbList     = new List <StringBank> ();
        List <GameObject> prefabList = new List <GameObject> ();

        // Structure is:

        //  +
        //	<name of the set>
        //	-
        //	<question 1>
        //	/
        //	<answer 1 to question 1>
        //	/
        //	<answer 2 to question 1>
        //	...etc
        //	-
        //	<question 2>
        //	/
        //	<answer 1 to question 2>
        //	...etc

        int answerNumber;
        int questionNumber;

        AllTerrainParser parser = new AllTerrainParser(ingestRef.fileContents);

        parser.setParserMode(ParserMode.begin);

        GameObject newStringBankGO;
        GameObject GO;
        StringBank newStringBank;
        Object     prefab;

        int ojojo;

        ojojo = parser.dataSize();

        while (parser.charAtHead() == '+')
        {
            questionList      = new List <string> ();
            correctAnswerList = new List <int> ();
            sbList            = new List <StringBank> ();
            prefabList        = new List <GameObject> ();

            parser.scanToChar('+');               // go past '+'
            parser.scanToNextLine();              // onto next line
            parser.setParserMode(ParserMode.end); // move end head until the end of the line
            parser.scanWhileNotNextLine();
            string setName = parser.extract();
            setNameList.Add(setName);
            parser.setParserMode(ParserMode.begin);
            parser.scanToNextLine();
            while (parser.charAtHead() == '-')
            {
                numberOfAnswers = new List <int> ();
                answersList     = new List <string>();
                answerNumber    = 0;
                correctAnswer   = -1;

                parser.scanToChar('-');                  // scan past '-'
                parser.scanToNextLine();                 // move onto next line
                parser.setParserMode(ParserMode.end);    // end head until the end of line
                parser.scanWhileNotNextLine();
                string question = parser.extract();
                questionList.Add(question);
                parser.setParserMode(ParserMode.begin);
                parser.scanToNextLine();                  // onto next line
                string link = "";
                if (parser.charAtHead() == '$')
                {                 // link found
                    parser.scanToChar('$');
                    parser.setParserMode(ParserMode.end);
                    parser.scanWhileNotNextLine();
                    link = parser.extract();
                    parser.setParserMode(ParserMode.begin);
                    parser.scanToNextLine();
                }

                while (parser.charAtHead() == '/')
                {
                    parser.scanToChar('/');
                    parser.scanToNextLine();
                    parser.setParserMode(ParserMode.end);
                    parser.scanWhileNotNextLine();
                    string answer = parser.extract();
                    if (answer.ToCharArray() [0] == '*')
                    {
                        answer        = answer.Substring(1);
                        correctAnswer = answerNumber;
                    }
                    answersList.Add(answer);
                    parser.setParserMode(ParserMode.begin);
                    parser.scanToNextLine();
                    ++answerNumber;
                }

                // if found, store link in server
                if (!link.Equals(""))
                {
                    WWWForm form = new WWWForm();
                    form.AddField("setId", setName);
                    form.AddField("questionId", questionList.Count);
                    form.AddField("link", link);

                    string script = Utils.WisdominiServer + "/registerLink";
                    WWW    www    = new WWW(script, form);

                    if (www != null)
                    {
                        while (!www.isDone)
                        {
                            // wait?!?
                        }
                    }
                }

                numberOfAnswers.Add(answerNumber);
                correctAnswerList.Add(correctAnswer);

                // at this point we have gathered: set name, question, and all answers
                // we can produce a StringBank(Respuestas... )
                newStringBankGO = new GameObject();
                newStringBank   = newStringBankGO.AddComponent <StringBank> ();
                newStringBank.reset();
                newStringBank.phrase = new string[answerNumber];
                for (int i = 0; i < answerNumber; ++i)
                {
                    newStringBank.phrase [i] = answersList [i];
                }
                newStringBank.extra = "Respuestas" + setName + questionList.Count;
                GO = PrefabUtility.SaveAsPrefabAssetAndConnect(newStringBankGO, "Assets/Prefabs/StringBanks/" + ingestRef.outputFolder + "/StringBank(Respuestas" + setName + "_" + questionList.Count + ").prefab", InteractionMode.AutomatedAction);
                prefabList.Add(GO);
                sbList.Add(newStringBank);
            }             // end of while '-'

            // at this point we have gathered all questions in the set,
            // we can produce a StringBank(Preguntas... )
            newStringBankGO = new GameObject();
            newStringBank   = newStringBankGO.AddComponent <StringBank>();
            newStringBank.reset();
            newStringBank.phrase        = new string[questionList.Count];
            newStringBank.correntAnswer = new int[questionList.Count];
            for (int i = 0; i < questionList.Count; ++i)
            {
                newStringBank.phrase[i]        = questionList[i];
                newStringBank.correntAnswer[i] = correctAnswerList[i] + 1;
            }
            newStringBank.extra = "Preguntas" + setName;
            GO = PrefabUtility.SaveAsPrefabAssetAndConnect(newStringBankGO, "Assets/Prefabs/StringBanks/" + ingestRef.outputFolder + "/StringBank(Preguntas" + setName + ").prefab", InteractionMode.AutomatedAction);
            prefabList.Add(GO);
            sbList.Add(newStringBank);

            // and finally, we can create the StringBankCollection prefab

            GameObject           newStringBankColGO = new GameObject();
            StringBankCollection newStringBankCol   = newStringBankColGO.AddComponent <StringBankCollection> ();
            newStringBankCol.bank     = new StringBank[questionList.Count + 1];
            newStringBankCol.bank [0] = prefabList [prefabList.Count - 1].GetComponent <StringBank> ();
            for (int i = 0; i < sbList.Count - 1; ++i)
            {
                newStringBankCol.bank [i + 1] = (StringBank)prefabList [i].GetComponent <StringBank> ();
            }
            PrefabUtility.SaveAsPrefabAssetAndConnect(newStringBankColGO, "Assets/Prefabs/StringBanks/" + ingestRef.outputFolder + "/StringBank(Preguntas" + setName + ").prefab", InteractionMode.AutomatedAction);

            DestroyImmediate(newStringBankColGO);
            for (int i = 0; i < sbList.Count; ++i)
            {
                DestroyImmediate(sbList [i].gameObject);
            }
        }         // end of while '+'
    }