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; } }
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); } } } }
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; } } }
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 }; } } }