Esempio n. 1
0
 private void LoadLevelData()
 {
     lock (this)
     {
         LevelBuilder2.Initialize();
         LevelParser.ParseRooms("Map_1x1", ScreenManager.Game.Content);
         LevelParser.ParseRooms("Map_1x2", ScreenManager.Game.Content);
         LevelParser.ParseRooms("Map_1x3", ScreenManager.Game.Content);
         LevelParser.ParseRooms("Map_2x1", ScreenManager.Game.Content);
         LevelParser.ParseRooms("Map_2x2", ScreenManager.Game.Content);
         LevelParser.ParseRooms("Map_2x3", ScreenManager.Game.Content);
         LevelParser.ParseRooms("Map_3x1", ScreenManager.Game.Content);
         LevelParser.ParseRooms("Map_3x2", ScreenManager.Game.Content);
         LevelParser.ParseRooms("Map_Special", ScreenManager.Game.Content);
         LevelParser.ParseRooms("Map_DLC1", ScreenManager.Game.Content, true);
         LevelBuilder2.IndexRoomList();
         m_levelDataLoaded = true;
     }
 }
Esempio n. 2
0
        public static void ParseRooms(string filePath, ContentManager contentManager = null, bool isDLCMap = false)
        {
            var cultureInfo = (CultureInfo)CultureInfo.CurrentCulture.Clone();

            cultureInfo.NumberFormat.CurrencyDecimalSeparator = ".";
            var xmlReaderSettings = new XmlReaderSettings();

            xmlReaderSettings.IgnoreComments   = true;
            xmlReaderSettings.IgnoreWhitespace = true;
            XmlReader xmlReader;

            if (contentManager == null)
            {
                xmlReader = XmlReader.Create(filePath, xmlReaderSettings);
            }
            else
            {
                xmlReader = XmlReader.Create(contentManager.RootDirectory + "\\Levels\\" + filePath + ".xml",
                                             xmlReaderSettings);
            }
            RoomObj roomObj  = null;
            RoomObj roomObj2 = null;
            RoomObj roomObj3 = null;
            RoomObj roomObj4 = null;
            RoomObj roomObj5 = null;

            while (xmlReader.Read())
            {
                if (xmlReader.NodeType == XmlNodeType.Element)
                {
                    if (xmlReader.Name == "RoomObject")
                    {
                        roomObj = new RoomObj();
                        ParseGenericXML(xmlReader, roomObj);
                        if (isDLCMap)
                        {
                            roomObj.IsDLCMap = true;
                        }
                        roomObj2 = (roomObj.Clone() as RoomObj);
                        roomObj3 = (roomObj.Clone() as RoomObj);
                        roomObj4 = (roomObj.Clone() as RoomObj);
                        roomObj5 = (roomObj.Clone() as RoomObj);
                    }
                    if (xmlReader.Name == "GameObject")
                    {
                        xmlReader.MoveToAttribute("Type");
                        var     value   = xmlReader.Value;
                        GameObj gameObj = null;
                        string  key;
                        switch (key = value)
                        {
                        case "CollHullObj":
                            gameObj = new TerrainObj(0, 0);
                            break;

                        case "DoorObj":
                            gameObj = new DoorObj(roomObj, 0, 0, GameTypes.DoorType.OPEN);
                            break;

                        case "ChestObj":
                            if (xmlReader.MoveToAttribute("Fairy"))
                            {
                                if (bool.Parse(xmlReader.Value))
                                {
                                    gameObj = new FairyChestObj(null);
                                    (gameObj as ChestObj).ChestType = 4;
                                }
                                else
                                {
                                    gameObj = new ChestObj(null);
                                }
                            }
                            else
                            {
                                gameObj = new ChestObj(null);
                            }
                            break;

                        case "HazardObj":
                            gameObj = new HazardObj(0, 0);
                            break;

                        case "BorderObj":
                            gameObj = new BorderObj();
                            break;

                        case "EnemyObj":
                            xmlReader.MoveToAttribute("Procedural");
                            if (!bool.Parse(xmlReader.Value))
                            {
                                xmlReader.MoveToAttribute("EnemyType");
                                var enemyType = byte.Parse(xmlReader.Value, NumberStyles.Any, cultureInfo);
                                xmlReader.MoveToAttribute("Difficulty");
                                var difficulty =
                                    (GameTypes.EnemyDifficulty)
                                    Enum.Parse(typeof(GameTypes.EnemyDifficulty), xmlReader.Value, true);
                                gameObj = EnemyBuilder.BuildEnemy(enemyType, null, null, null, difficulty);
                                if (xmlReader.MoveToAttribute("Flip") && bool.Parse(xmlReader.Value))
                                {
                                    gameObj.Flip = SpriteEffects.FlipHorizontally;
                                }
                                if (xmlReader.MoveToAttribute("InitialDelay"))
                                {
                                    (gameObj as EnemyObj).InitialLogicDelay = float.Parse(xmlReader.Value,
                                                                                          NumberStyles.Any, cultureInfo);
                                }
                            }
                            else
                            {
                                xmlReader.MoveToAttribute("EnemyType");
                                var value2 = xmlReader.Value;
                                gameObj = new EnemyTagObj();
                                (gameObj as EnemyTagObj).EnemyType = value2;
                            }
                            break;

                        case "EnemyOrbObj":
                        {
                            xmlReader.MoveToAttribute("OrbType");
                            var orbType = int.Parse(xmlReader.Value, NumberStyles.Any, cultureInfo);
                            var flag    = false;
                            if (xmlReader.MoveToAttribute("IsWaypoint"))
                            {
                                flag = bool.Parse(xmlReader.Value);
                            }
                            if (flag)
                            {
                                gameObj = new WaypointObj();
                                (gameObj as WaypointObj).OrbType = orbType;
                            }
                            else
                            {
                                gameObj = new EnemyOrbObj();
                                (gameObj as EnemyOrbObj).OrbType = orbType;
                                if (xmlReader.MoveToAttribute("ForceFlying"))
                                {
                                    (gameObj as EnemyOrbObj).ForceFlying = bool.Parse(xmlReader.Value);
                                }
                            }
                            break;
                        }

                        case "SpriteObj":
                            xmlReader.MoveToAttribute("SpriteName");
                            if (xmlReader.Value == "LightSource_Sprite")
                            {
                                gameObj = new LightSourceObj();
                            }
                            else
                            {
                                gameObj = new SpriteObj(xmlReader.Value);
                            }
                            break;

                        case "PhysicsObj":
                        {
                            xmlReader.MoveToAttribute("SpriteName");
                            gameObj = new PhysicsObj(xmlReader.Value);
                            var physicsObj = gameObj as PhysicsObj;
                            physicsObj.CollisionTypeTag = 5;
                            physicsObj.CollidesBottom   = false;
                            physicsObj.CollidesLeft     = false;
                            physicsObj.CollidesRight    = false;
                            break;
                        }

                        case "PhysicsObjContainer":
                        {
                            var flag2 = false;
                            if (xmlReader.MoveToAttribute("Breakable"))
                            {
                                flag2 = bool.Parse(xmlReader.Value);
                            }
                            xmlReader.MoveToAttribute("SpriteName");
                            if (flag2)
                            {
                                gameObj = new BreakableObj(xmlReader.Value);
                            }
                            else
                            {
                                gameObj = new PhysicsObjContainer(xmlReader.Value);
                            }
                            break;
                        }

                        case "ObjContainer":
                            xmlReader.MoveToAttribute("SpriteName");
                            gameObj = new ObjContainer(xmlReader.Value);
                            break;

                        case "PlayerStartObj":
                            gameObj = new PlayerStartObj();
                            break;
                        }
                        ParseGenericXML(xmlReader, gameObj);
                        var levelType = GameTypes.LevelType.NONE;
                        if (xmlReader.MoveToAttribute("LevelType"))
                        {
                            levelType = (GameTypes.LevelType) int.Parse(xmlReader.Value, NumberStyles.Any, cultureInfo);
                        }
                        if (levelType == GameTypes.LevelType.CASTLE)
                        {
                            StoreObj(gameObj, roomObj2);
                            StoreSwappedObj(gameObj, GameTypes.LevelType.DUNGEON, roomObj3);
                            StoreSwappedObj(gameObj, GameTypes.LevelType.TOWER, roomObj5);
                            StoreSwappedObj(gameObj, GameTypes.LevelType.GARDEN, roomObj4);
                            var spriteObj = gameObj as SpriteObj;
                            if (spriteObj != null && spriteObj.SpriteName == "CastleAssetFrame_Sprite")
                            {
                                spriteObj.ChangeSprite("FramePicture" + CDGMath.RandomInt(1, 16) + "_Sprite");
                            }
                        }
                        else if (levelType == GameTypes.LevelType.DUNGEON)
                        {
                            StoreObj(gameObj, roomObj3);
                        }
                        else if (levelType == GameTypes.LevelType.TOWER)
                        {
                            StoreObj(gameObj, roomObj5);
                        }
                        else if (levelType == GameTypes.LevelType.GARDEN)
                        {
                            StoreObj(gameObj, roomObj4);
                        }
                        else
                        {
                            StoreObj(gameObj, roomObj2);
                            StoreObj(gameObj, roomObj3);
                            StoreObj(gameObj, roomObj5);
                            StoreObj(gameObj, roomObj4);
                            StoreObj(gameObj, roomObj);
                        }
                        if (LevelEV.RUN_TESTROOM &&
                            (levelType == LevelEV.TESTROOM_LEVELTYPE || levelType == GameTypes.LevelType.CASTLE))
                        {
                            if (levelType == LevelEV.TESTROOM_LEVELTYPE)
                            {
                                StoreObj(gameObj, roomObj);
                            }
                            else if (levelType == GameTypes.LevelType.CASTLE)
                            {
                                StoreSwappedObj(gameObj, LevelEV.TESTROOM_LEVELTYPE, roomObj);
                            }
                        }
                        if (gameObj is PlayerStartObj)
                        {
                            var expr_65E = roomObj;
                            expr_65E.Name += "DEBUG_ROOM";
                        }
                    }
                }
                else if (xmlReader.NodeType == XmlNodeType.EndElement && xmlReader.Name == "RoomObject")
                {
                    if (roomObj.X < 10000f && roomObj.Name != "Boss" && roomObj.Name != "ChallengeBoss")
                    {
                        if (!roomObj.Name.Contains("DEBUG_ROOM"))
                        {
                            if (roomObj.AddToCastlePool)
                            {
                                LevelBuilder2.StoreRoom(roomObj2, GameTypes.LevelType.CASTLE);
                                LevelBuilder2.StoreSpecialRoom(roomObj2, GameTypes.LevelType.CASTLE);
                            }
                            if (roomObj.AddToDungeonPool)
                            {
                                LevelBuilder2.StoreRoom(roomObj3, GameTypes.LevelType.DUNGEON);
                                LevelBuilder2.StoreSpecialRoom(roomObj3, GameTypes.LevelType.DUNGEON);
                            }
                            if (roomObj.AddToGardenPool)
                            {
                                LevelBuilder2.StoreRoom(roomObj4, GameTypes.LevelType.GARDEN);
                                LevelBuilder2.StoreSpecialRoom(roomObj4, GameTypes.LevelType.GARDEN);
                            }
                            if (roomObj.AddToTowerPool)
                            {
                                LevelBuilder2.StoreRoom(roomObj5, GameTypes.LevelType.TOWER);
                                LevelBuilder2.StoreSpecialRoom(roomObj5, GameTypes.LevelType.TOWER);
                            }
                        }
                        if (roomObj.Name.Contains("DEBUG_ROOM"))
                        {
                            roomObj.Name = roomObj.Name.Replace("DEBUG_ROOM", "");
                            if (LevelEV.TESTROOM_LEVELTYPE != GameTypes.LevelType.CASTLE)
                            {
                                LevelBuilder2.StoreSpecialRoom(roomObj, GameTypes.LevelType.CASTLE, true);
                            }
                            LevelBuilder2.StoreSpecialRoom(roomObj, LevelEV.TESTROOM_LEVELTYPE, true);
                        }
                    }
                    if (roomObj.X < 10000f && (roomObj.Name == "Boss" || roomObj.Name == "ChallengeBoss"))
                    {
                        LevelBuilder2.StoreSpecialRoom(roomObj, GameTypes.LevelType.CASTLE);
                    }
                }
            }
        }
Esempio n. 3
0
        private void BeginLoading()
        {
            m_isLoading       = true;
            m_loadingComplete = false;
            var screenTypeToLoad = m_screenTypeToLoad;

            if (screenTypeToLoad <= 9)
            {
                switch (screenTypeToLoad)
                {
                case 1:
                    m_levelToLoad = new CDGSplashScreen();
                    lock (m_levelToLoad)
                    {
                        m_loadingComplete = true;
                        return;
                    }
                    break;

                case 2:
                case 4:
                    return;

                case 3:
                    goto IL_199;

                case 5:
                    goto IL_205;

                default:
                    if (screenTypeToLoad != 9)
                    {
                        return;
                    }
                    goto IL_1CF;
                }
            }
            if (screenTypeToLoad == 15)
            {
                goto IL_205;
            }
            if (screenTypeToLoad == 18)
            {
                goto IL_11E;
            }
            switch (screenTypeToLoad)
            {
            case 23:
            case 24:
                goto IL_205;

            case 25:
            case 26:
                return;

            case 27:
                goto IL_199;

            case 28:
                goto IL_E8;

            case 29:
                break;

            default:
                return;
            }
            m_levelToLoad = new DemoEndScreen();
            lock (m_levelToLoad)
            {
                m_loadingComplete = true;
                return;
            }
IL_E8:
            m_levelToLoad = new DemoStartScreen();
            lock (m_levelToLoad)
            {
                m_loadingComplete = true;
                return;
            }
IL_11E:
            m_levelToLoad = new CreditsScreen();
            var isEnding = true;
            var screens  = ScreenManager.GetScreens();

            for (var i = 0; i < screens.Length; i++)
            {
                var screen = screens[i];
                if (screen is TitleScreen)
                {
                    isEnding = false;
                    break;
                }
            }
            (m_levelToLoad as CreditsScreen).IsEnding = isEnding;
            lock (m_levelToLoad)
            {
                m_loadingComplete = true;
                return;
            }
IL_199:
            m_levelToLoad = new TitleScreen();
            lock (m_levelToLoad)
            {
                m_loadingComplete = true;
                return;
            }
IL_1CF:
            m_levelToLoad = new LineageScreen();
            lock (m_levelToLoad)
            {
                m_loadingComplete = true;
                return;
            }
IL_205:
            var rCScreenManager = ScreenManager as RCScreenManager;
            var area1List = Game.Area1List;

            m_levelToLoad = null;
            if (m_screenTypeToLoad == 15)
            {
                m_levelToLoad = LevelBuilder2.CreateStartingRoom();
            }
            else if (m_screenTypeToLoad == 23)
            {
                m_levelToLoad = LevelBuilder2.CreateTutorialRoom();
            }
            else if (m_screenTypeToLoad == 24)
            {
                m_levelToLoad = LevelBuilder2.CreateEndingRoom();
            }
            else
            {
                var levelScreen = (ScreenManager as RCScreenManager).GetLevelScreen();
                if (levelScreen != null)
                {
                    if (Game.PlayerStats.LockCastle)
                    {
                        try
                        {
                            m_levelToLoad = (ScreenManager.Game as Game).SaveManager.LoadMap();
                        }
                        catch
                        {
                            m_gameCrashed = true;
                        }
                        if (!m_gameCrashed)
                        {
                            (ScreenManager.Game as Game).SaveManager.LoadFiles(m_levelToLoad as ProceduralLevelScreen,
                                                                               SaveType.MapData);
                            Game.PlayerStats.LockCastle = false;
                        }
                    }
                    else
                    {
                        m_levelToLoad = LevelBuilder2.CreateLevel(levelScreen.RoomList[0], area1List);
                    }
                }
                else if (Game.PlayerStats.LoadStartingRoom)
                {
                    Console.WriteLine("This should only be used for debug purposes");
                    m_levelToLoad = LevelBuilder2.CreateLevel(null, area1List);
                    (ScreenManager.Game as Game).SaveManager.SaveFiles(SaveType.Map, SaveType.MapData);
                }
                else
                {
                    try
                    {
                        m_levelToLoad = (ScreenManager.Game as Game).SaveManager.LoadMap();
                        (ScreenManager.Game as Game).SaveManager.LoadFiles(m_levelToLoad as ProceduralLevelScreen,
                                                                           SaveType.MapData);
                    }
                    catch
                    {
                        m_gameCrashed = true;
                    }
                    if (!m_gameCrashed)
                    {
                        Game.ScreenManager.Player.Position =
                            new Vector2((m_levelToLoad as ProceduralLevelScreen).RoomList[1].X, 420f);
                    }
                }
            }
            if (!m_gameCrashed)
            {
                lock (m_levelToLoad)
                {
                    var proceduralLevelScreen = m_levelToLoad as ProceduralLevelScreen;
                    proceduralLevelScreen.Player = rCScreenManager.Player;
                    rCScreenManager.Player.AttachLevel(proceduralLevelScreen);
                    for (var j = 0; j < proceduralLevelScreen.RoomList.Count; j++)
                    {
                        proceduralLevelScreen.RoomList[j].RoomNumber = j + 1;
                    }
                    rCScreenManager.AttachMap(proceduralLevelScreen);
                    if (!m_wipeTransition)
                    {
                        Thread.Sleep(100);
                    }
                    m_loadingComplete = true;
                }
            }
        }
Esempio n. 4
0
 protected override void LoadContent()
 {
     if (!m_contentLoaded)
     {
         m_contentLoaded = true;
         LoadAllSpriteFonts();
         LoadAllEffects();
         LoadAllSpritesheets();
         SoundManager.Initialize("Content\\Audio\\RogueCastleXACTProj.xgs");
         SoundManager.LoadWaveBank("Content\\Audio\\SFXWaveBank.xwb");
         SoundManager.LoadWaveBank("Content\\Audio\\MusicWaveBank.xwb", true);
         SoundManager.LoadSoundBank("Content\\Audio\\SFXSoundBank.xsb");
         SoundManager.LoadSoundBank("Content\\Audio\\MusicSoundBank.xsb", true);
         SoundManager.GlobalMusicVolume = GameConfig.MusicVolume;
         SoundManager.GlobalSFXVolume   = GameConfig.SFXVolume;
         if (InputManager.GamePadIsConnected(PlayerIndex.One))
         {
             InputManager.SetPadType(PlayerIndex.One, PadTypes.GamePad);
         }
         InputManager.UseDirectInput = GameConfig.EnableDirectInput;
         GenericTexture = new Texture2D(GraphicsDevice, 1, 1);
         GenericTexture.SetData(new[]
         {
             Color.White
         });
         if (!LevelEV.LOAD_SPLASH_SCREEN)
         {
             LevelBuilder2.Initialize();
             LevelParser.ParseRooms("Map_1x1", Content);
             LevelParser.ParseRooms("Map_1x2", Content);
             LevelParser.ParseRooms("Map_1x3", Content);
             LevelParser.ParseRooms("Map_2x1", Content);
             LevelParser.ParseRooms("Map_2x2", Content);
             LevelParser.ParseRooms("Map_2x3", Content);
             LevelParser.ParseRooms("Map_3x1", Content);
             LevelParser.ParseRooms("Map_3x2", Content);
             LevelParser.ParseRooms("Map_Special", Content);
             LevelParser.ParseRooms("Map_DLC1", Content, true);
             LevelBuilder2.IndexRoomList();
         }
         SkillSystem.Initialize();
         var areaStruct = new AreaStruct
         {
             Name        = "The Grand Entrance",
             LevelType   = GameTypes.LevelType.CASTLE,
             TotalRooms  = new Vector2(24f, 28f),
             BossInArea  = true,
             SecretRooms = new Vector2(1f, 3f),
             BonusRooms  = new Vector2(2f, 3f),
             Color       = Color.White
         };
         var areaStruct2 = new AreaStruct
         {
             LevelType   = GameTypes.LevelType.GARDEN,
             TotalRooms  = new Vector2(23f, 27f),
             BossInArea  = true,
             SecretRooms = new Vector2(1f, 3f),
             BonusRooms  = new Vector2(2f, 3f),
             Color       = Color.Green
         };
         var areaStruct3 = new AreaStruct
         {
             LevelType   = GameTypes.LevelType.TOWER,
             TotalRooms  = new Vector2(23f, 27f),
             BossInArea  = true,
             SecretRooms = new Vector2(1f, 3f),
             BonusRooms  = new Vector2(2f, 3f),
             Color       = Color.DarkBlue
         };
         var areaStruct4 = new AreaStruct
         {
             LevelType   = GameTypes.LevelType.DUNGEON,
             TotalRooms  = new Vector2(23f, 27f),
             BossInArea  = true,
             SecretRooms = new Vector2(1f, 3f),
             BonusRooms  = new Vector2(2f, 3f),
             Color       = Color.Red
         };
         var areaStruct5 = new AreaStruct
         {
             Name        = "The Grand Entrance",
             LevelType   = GameTypes.LevelType.CASTLE,
             TotalRooms  = new Vector2(24f, 27f),
             BossInArea  = true,
             SecretRooms = new Vector2(2f, 3f),
             BonusRooms  = new Vector2(2f, 3f),
             Color       = Color.White
         };
         var areaStruct6 = default(AreaStruct);
         areaStruct6.Name        = "The Grand Entrance";
         areaStruct6.LevelType   = GameTypes.LevelType.GARDEN;
         areaStruct6.TotalRooms  = new Vector2(12f, 14f);
         areaStruct6.BossInArea  = true;
         areaStruct6.SecretRooms = new Vector2(2f, 3f);
         areaStruct6.BonusRooms  = new Vector2(1f, 2f);
         areaStruct6.Color       = Color.Green;
         var areaStruct7 = default(AreaStruct);
         areaStruct7.Name        = "The Grand Entrance";
         areaStruct7.LevelType   = GameTypes.LevelType.DUNGEON;
         areaStruct7.TotalRooms  = new Vector2(12f, 14f);
         areaStruct7.BossInArea  = true;
         areaStruct7.SecretRooms = new Vector2(2f, 3f);
         areaStruct7.BonusRooms  = new Vector2(1f, 2f);
         areaStruct7.Color       = Color.Red;
         var areaStruct8 = default(AreaStruct);
         areaStruct8.Name        = "The Grand Entrance";
         areaStruct8.LevelType   = GameTypes.LevelType.TOWER;
         areaStruct8.TotalRooms  = new Vector2(12f, 14f);
         areaStruct8.BossInArea  = true;
         areaStruct8.SecretRooms = new Vector2(2f, 3f);
         areaStruct8.BonusRooms  = new Vector2(1f, 2f);
         areaStruct8.Color       = Color.DarkBlue;
         Area1List = new[]
         {
             areaStruct,
             areaStruct2,
             areaStruct3,
             areaStruct4
         };
         if (LevelEV.RUN_DEMO_VERSION)
         {
             Area1List = new[]
             {
                 areaStruct5
             };
         }
     }
 }