public override void Init()
        {
            Console.WriteLine ("PlayState initialized");
            //TODO: load the backgrounds and buttons and stuff here
            playBG = new Object("game");

            // seting up the new player
            player = new Player("YorkMay4","YorkMayCasual4",65,20,32f * 4);
            player.Position = new Vector2(64,630);

            string thisLevel = fileManager.LoadPlayer();
            CurrentLevel = fileManager.LoadLevel(thisLevel);
            CurrentProgress = new StoryProgress();
        }
        /// <summary>
        /// Loads the level.
        /// </summary>
        /// <returns>
        /// The level.
        /// </returns>
        /// <param name='Levelname'>
        /// Levelname.
        /// </param>
        public Level LoadLevel(String Levelname)
        {
            // the actual level that will be returned
            Level ret;

            int NumberOfLines = 0;
            string line;

            string ImageSrc;
            int numberOfObject = 0;
            int numberOfCharacters = 0;

            bool ObjectsRead = false;
            bool CharactersRead = false;
            System.IO.StreamReader file= null ;
            // Read the file and display it line by line.
            try{
             file = new System.IO.StreamReader(LevelDirectory+Levelname+".txt");
            }
            catch ( Exception e)
            {
                Console.Out.WriteLine(e);
            };

            ret = new Level();
            while((line = file.ReadLine()) != null)
            {
                if(NumberOfLines ==0)
                {
                    ImageSrc = line;
                    ret.SetImage(ImageSrc);
                    line = file.ReadLine();

                    if(line == "SNOW")
                    {
                        ret.LevelEmitter = new SnowEmitter(0,1920,1200,1000,10);
                        ret.LevelEmitter.Initialise(0,0);
                    }
                    else if(line == "NULL")
                    {
                        ret.LevelEmitter = new Emitter(0,0,0,0);
                        ret.LevelEmitter.Initialise(0,0);
                    }

                }
                if(NumberOfLines ==1)
                {
                    /// number of exits
                    numberOfObject = Convert.ToInt32(line);
                    for(int l =0;l<numberOfObject; l ++)
                    {
                        // temporary data that will be used to add objects to the level
                        string tempFileName;
                        Vector2 tempPosition;
                        InteractableObject tempObject;

                        // reads in data for object position etc
                        tempFileName = file.ReadLine();
                        NumberOfLines++;

                        // position
                        line = file.ReadLine();
                        string[] Positions = line.Split(','); // get postition from file
                        tempPosition = new Vector2(Convert.ToInt32(Positions[0]),Convert.ToInt32(Positions[1]));
                        NumberOfLines++;

                        tempObject = new InteractableObject(tempFileName);
                        tempObject.Position = tempPosition;

                        //if this object is an exit
                        line = file.ReadLine();

                        if(line=="true")
                        {
                            //read in what it exits to (file)
                            string tempExit = file.ReadLine();
                            NumberOfLines++;
                            //where ther position is in the next level when they exit
                            // position
                            line = file.ReadLine();
                            string[] exitsPositionStr = line.Split(','); // get postition from file
                            Vector2 exitPosition = new Vector2(Convert.ToInt32(exitsPositionStr[0]),Convert.ToInt32(exitsPositionStr[1]));
                            NumberOfLines++;

                            ret.AddExit(tempObject,exitPosition,tempExit);

                        }
                        // if not load in th action associated
                        // use the enum from the interactable object class
                        else
                        {

                            line = file.ReadLine();
                            NumberOfLines++;

                            /// sets the action to corresponding string in the file
                            ///  i may actually have to list all of them
                            if( line == InteractableObject.Action.EquipShiv.ToString())
                            {
                                tempObject.act_Action = InteractableObject.Action.EquipShiv;
                            }

                            ret.AddObject(tempObject);
                        }
                    }
                    ObjectsRead = true;
                }

                // read in number of characters
                if (ObjectsRead)
                {
                    line = file.ReadLine();
                    NumberOfLines++;

                    numberOfCharacters = Convert.ToInt32(line);
                    for(int l =0;l<numberOfCharacters; l ++)
                    {
                        string tempCharName;
                        Vector2 tempPosition;
                        AI tempChar;

                        // now read in who is in the level
                        line = file.ReadLine();
                        tempCharName = line;

                        // read in the position
                        line = file.ReadLine();
                        string[] Positions = line.Split(','); // get postition from file
                        tempPosition = new Vector2(Convert.ToInt32(Positions[0]),Convert.ToInt32(Positions[1]));
                        NumberOfLines++;

                        // now we use the character file to read in the character data
                        tempChar = LoadCharacter(tempCharName);
                        //tempChar = new AI(tempCharName

                        tempChar.Position = tempPosition;
                        tempChar.Name = tempCharName;
                        ret.AddCharacter(tempChar);

                    }

                    CharactersRead = true;
                }
                // now read all the actions
                if(CharactersRead)
                {
                    line = file.ReadLine();
                    int numOfAction = Convert.ToInt32(line);
                    for(int num = 0; num < numOfAction; num++)
                    {
                        line = file.ReadLine();
                        Level.Action tempAction;

                        int tempCharStat = 0;
                        int tempGameProg= 0;
                        float tempTime = 0.0f;
                        string tempCharName = "";
                        string tempProgStatName = "";
                        Vector2 tempPosition=new Vector2(0,0);
                        Level.Action.TypeOfCharStat enumTypeCharStat = Level.Action.TypeOfCharStat.NONE;
                        Level.Action.TypeOfGameStat enumTypeGameStat = Level.Action.TypeOfGameStat.NONE;

                        //types of action and reaction/affected party
                        Level.Action.TypeOfAction tempTypeOfAction = Level.Action.TypeOfAction.REMOVE;
                        bool tempEqual = false;
                        bool tempGreater= false;
                        bool tempLess= false;
                        string Affected;

                        string[] strFullAction = line.Split(';');
                        string[] strFirstLine = strFullAction[0].Split(',');
                        string[] strThirdLine = strFullAction[2].Split(',');
                        string[] strForthLine = strFullAction[3].Split(',');

                        if( strFirstLine[0] == "CHARSTAT")
                        {
                            // who's stat
                            tempCharName = strFirstLine[1];

                            // what type of stat
                            if(Level.Action.TypeOfCharStat.NONE.ToString() == strFirstLine[2])
                            {
                                enumTypeCharStat = Level.Action.TypeOfCharStat.NONE;
                                tempCharStat = Convert.ToInt32(strFirstLine[3]);
                            }
                            if(Level.Action.TypeOfCharStat.PLAYERDIS.ToString() == strFirstLine[2])
                            {
                                enumTypeCharStat = Level.Action.TypeOfCharStat.PLAYERDIS;
                                tempCharStat = Convert.ToInt32(strFirstLine[3]);
                            }
                            if(strFirstLine[4] == "<")
                                tempLess = true;
                            else if (strFirstLine[4] == ">")
                                tempGreater=true;
                            else if (strFirstLine[4] == "=")
                                tempEqual = true;

                        }
                        else if(strFirstLine[0] == "PROGSTAT")
                        {
                            // who's stat
                            tempProgStatName = strFirstLine[1];

                            // what type of stat
                            if(Level.Action.TypeOfGameStat.CRIPPLE.ToString() == tempProgStatName)
                            {
                                enumTypeGameStat = Level.Action.TypeOfGameStat.CRIPPLE;
                                tempGameProg = Convert.ToInt32(strFirstLine[2]);
                            }
                            if(Level.Action.TypeOfGameStat.FOODTRUCK.ToString() == tempProgStatName)
                            {
                                enumTypeGameStat = Level.Action.TypeOfGameStat.FOODTRUCK;
                                tempGameProg = Convert.ToInt32(strFirstLine[2]);
                            }
                            if(Level.Action.TypeOfGameStat.INSANE.ToString() == tempProgStatName)
                            {
                                enumTypeGameStat = Level.Action.TypeOfGameStat.INSANE;
                                tempGameProg = Convert.ToInt32(strFirstLine[2]);
                            }
                            if(Level.Action.TypeOfGameStat.TUNNEL.ToString() == tempProgStatName)
                            {
                                enumTypeGameStat = Level.Action.TypeOfGameStat.TUNNEL;
                                tempGameProg = Convert.ToInt32(strFirstLine[2]);
                            }
                            if(Level.Action.TypeOfGameStat.SLAYER.ToString() == tempProgStatName)
                            {
                                enumTypeGameStat = Level.Action.TypeOfGameStat.SLAYER;
                                tempGameProg = Convert.ToInt32(strFirstLine[2]);
                            }
                            if(Level.Action.TypeOfGameStat.SUICIDE.ToString() == tempProgStatName)
                            {
                                enumTypeGameStat = Level.Action.TypeOfGameStat.SUICIDE;
                                tempGameProg = Convert.ToInt32(strFirstLine[2]);
                            }

                            if(strFirstLine[3] == "<")
                                tempLess = true;
                            else if (strFirstLine[3] == ">")
                                tempGreater=true;
                            else if (strFirstLine[3] == "=")
                                tempEqual = true;
                        }
                        // the time
                        tempTime =(float)(Convert.ToDouble(strFullAction[1]));

                        // Action / reaction stuff

                        if(strThirdLine[0] ==Level.Action.TypeOfAction.CHANGEROOM.ToString())
                        {
                            tempTypeOfAction = Level.Action.TypeOfAction.CHANGEROOM;
                        }
                        if(strThirdLine[0] ==Level.Action.TypeOfAction.REMOVE.ToString())
                        {
                            tempTypeOfAction = Level.Action.TypeOfAction.REMOVE;
                        }
                        if(strThirdLine[0] ==Level.Action.TypeOfAction.SPAWN.ToString())
                        {
                            tempTypeOfAction = Level.Action.TypeOfAction.SPAWN;
                        }
                        if(strThirdLine[0] ==Level.Action.TypeOfAction.CHANGEOUTFIT.ToString())
                        {
                            tempTypeOfAction = Level.Action.TypeOfAction.CHANGEOUTFIT;
                        }
                        if(strThirdLine[0] ==Level.Action.TypeOfAction.QUIT.ToString())
                        {
                            tempTypeOfAction = Level.Action.TypeOfAction.QUIT;
                        }
                        Affected =strThirdLine[1];

                        // the new given position
                        tempPosition = new Vector2(Convert.ToInt32( strForthLine[0]),Convert.ToInt32( strForthLine[1]));
                        // set up now using the data
                        tempAction = new Level.Action(tempCharStat,tempGameProg,tempCharName,enumTypeCharStat,enumTypeGameStat);
                        tempAction.SetupAction(tempTypeOfAction,tempEqual,tempLess,tempGreater,tempTime,Affected,tempPosition);

                        // add it to the list
                        ret.AddAction(tempAction);
                    }
                }

                Console.WriteLine (line);
                NumberOfLines++;
            }

            // close your file!
            file.Close();
            file = null;
            Console.WriteLine("Total number of lines : " + NumberOfLines);
            return ret;
        }