public override BattleMap LoadTemporaryMap(BinaryReader BR) { PlayerRoster = new Roster(); PlayerRoster.LoadRoster(); Load(); DataScreen.LoadProgression(BR, PlayerRoster, DicUnitType, DicRequirement, DicEffect, DicAutomaticSkillTarget, DicManualSkillTarget); //Initialise the ScreenSize based on the map loaded. ScreenSize = new Point(Constants.Width / TileSize.X, Constants.Height / TileSize.Y); IsInit = true; RequireDrawFocus = false; TogglePreview(true); int DicMapVariablesCount = BR.ReadInt32(); DicMapVariables = new Dictionary <string, double>(DicMapVariablesCount); for (int i = 0; i < DicMapVariablesCount; ++i) { DicMapVariables.Add(BR.ReadString(), BR.ReadDouble()); } CursorPosition.X = BR.ReadSingle(); CursorPosition.Y = BR.ReadSingle(); CameraPosition.X = BR.ReadSingle(); CameraPosition.Y = BR.ReadSingle(); ActivePlayerIndex = BR.ReadInt32(); GameTurn = BR.ReadInt32(); VictoryCondition = BR.ReadString(); LossCondition = BR.ReadString(); SkillPoint = BR.ReadString(); ListBackground.Clear(); int ListBackgroundCount = BR.ReadInt32(); for (int B = 0; B < ListBackgroundCount; ++B) { ListBackground.Add(AnimationBackground.LoadAnimationBackground(BR.ReadString(), Content, GraphicsDevice)); } ListForeground.Clear(); int ListForegroundCount = BR.ReadInt32(); for (int F = 0; F < ListForegroundCount; ++F) { ListForeground.Add(AnimationBackground.LoadAnimationBackground(BR.ReadString(), Content, GraphicsDevice)); } sndBattleThemeName = BR.ReadString(); if (!string.IsNullOrEmpty(sndBattleThemeName)) { FMODSound NewBattleTheme = new FMODSound(FMODSystem, "Content/Maps/BGM/" + sndBattleThemeName + ".mp3"); NewBattleTheme.SetLoop(true); sndBattleTheme = NewBattleTheme; } string ThemePath = BR.ReadString(); uint ThemePosition = BR.ReadUInt32(); if (!string.IsNullOrEmpty(ThemePath)) { FMODSound NewTheme = new FMODSound(FMODSystem, "Content/Maps/BGM/" + ThemePath + ".mp3"); NewTheme.SetLoop(true); NewTheme.PlayAsBGM(); FMODSystem.sndActiveBGMName = ThemePath; NewTheme.SetPosition(ThemePosition); } Dictionary <uint, Squad> DicLoadedSquad = new Dictionary <uint, Squad>(); int ListPlayerCount = BR.ReadInt32(); ListPlayer = new List <Player>(ListPlayerCount); for (int P = 0; P < ListPlayerCount; ++P) { string ActivePlayerName = BR.ReadString(); string ActivePlayerType = BR.ReadString(); bool ActivePlayerIsHuman = BR.ReadBoolean(); int ActivePlayerTeam = BR.ReadInt32(); byte ActivePlayerColorRed = BR.ReadByte(); byte ActivePlayerColorGreen = BR.ReadByte(); byte ActivePlayerColorBlue = BR.ReadByte(); Player NewPlayer = new Player(ActivePlayerName, ActivePlayerType, ActivePlayerIsHuman, false, ActivePlayerTeam, Color.FromNonPremultiplied(ActivePlayerColorRed, ActivePlayerColorGreen, ActivePlayerColorBlue, 255)); ListPlayer.Add(NewPlayer); int ActivePlayerListSquadCount = BR.ReadInt32(); for (int S = 0; S < ActivePlayerListSquadCount; ++S) { Squad NewSquad; UInt32 ActiveSquadID = BR.ReadUInt32(); bool CanMove = BR.ReadBoolean(); int ActionsRemaining = BR.ReadInt32(); float ActiveSquadPositionX = BR.ReadSingle(); float ActiveSquadPositionY = BR.ReadSingle(); float ActiveSquadPositionZ = BR.ReadSingle(); string ActiveSquadSquadName = BR.ReadString(); string ActiveSquadCurrentMovement = BR.ReadString(); bool ActiveSquadIsFlying = BR.ReadBoolean(); bool ActiveSquadIsUnderTerrain = BR.ReadBoolean(); bool ActiveSquadIsPlayerControlled = BR.ReadBoolean(); string ActiveSquadSquadAI = BR.ReadString(); int ActiveSquadUnitsInSquad = BR.ReadInt32(); int CurrentLeaderIndex = BR.ReadInt32(); int CurrentWingmanAIndex = BR.ReadInt32(); int CurrentWingmanBIndex = BR.ReadInt32(); Unit[] ArrayNewUnit = new Unit[ActiveSquadUnitsInSquad]; for (int U = 0; U < ActiveSquadUnitsInSquad; ++U) { string UnitTypeName = BR.ReadString(); string RelativePath = BR.ReadString(); string TeamEventID = BR.ReadString(); if (string.IsNullOrEmpty(TeamEventID)) { ArrayNewUnit[U] = DicUnitType[UnitTypeName].FromFile(RelativePath, Content, DicRequirement, DicEffect, DicAutomaticSkillTarget); } else { foreach (Unit ActiveUnit in PlayerRoster.TeamUnits.GetAll()) { if (ActiveUnit.TeamEventID == TeamEventID) { ArrayNewUnit[U] = ActiveUnit; break; } } } ArrayNewUnit[U].QuickLoad(BR, Content, DicRequirement, DicEffect, DicAutomaticSkillTarget, DicManualSkillTarget); } NewSquad = new Squad(ActiveSquadSquadName, ArrayNewUnit[0], ArrayNewUnit.Length >= 2 ? ArrayNewUnit[1] : null, ArrayNewUnit.Length >= 3 ? ArrayNewUnit[2] : null); int ListAttackedTeamCount = BR.ReadInt32(); NewSquad.ListAttackedTeam = new List <int>(ListAttackedTeamCount); for (int U = 0; U < ListAttackedTeamCount; ++U) { NewSquad.ListAttackedTeam.Add(BR.ReadInt32()); } NewSquad.SetLeader(CurrentLeaderIndex); NewSquad.SetWingmanA(CurrentWingmanAIndex); NewSquad.SetWingmanB(CurrentWingmanBIndex); if (!CanMove) { NewSquad.EndTurn(); } NewSquad.ActionsRemaining = ActionsRemaining; NewSquad.SquadName = ActiveSquadSquadName; NewSquad.ID = ActiveSquadID; DicLoadedSquad.Add(ActiveSquadID, NewSquad); if (NewSquad.CurrentLeader != null) { //Do not spawn squads as it will trigger effect that were already activated if (Content != null) { NewSquad.Unit3D = new UnitMap3D(GraphicsDevice, Content.Load <Effect>("Shaders/Squad shader 3D"), NewSquad.CurrentLeader.SpriteMap, 1); } if (!string.IsNullOrEmpty(ActiveSquadSquadAI)) { NewSquad.SquadAI = new DeathmatchScripAIContainer(new DeathmatchAIInfo(this, NewSquad)); NewSquad.SquadAI.Load(ActiveSquadSquadAI); } NewPlayer.IsAlive = true; ActivateAutomaticSkills(NewSquad, string.Empty); } NewSquad.UpdateSquad(); //Load the Battle Themes. for (int U = 0; U < NewSquad.UnitsInSquad; ++U) { for (int C = NewSquad.At(U).ArrayCharacterActive.Length - 1; C >= 0; --C) { if (!string.IsNullOrEmpty(NewSquad.At(U).ArrayCharacterActive[C].BattleThemeName)) { if (!Character.DicBattleTheme.ContainsKey(NewSquad.At(U).ArrayCharacterActive[C].BattleThemeName)) { Character.DicBattleTheme.Add(NewSquad.At(U).ArrayCharacterActive[C].BattleThemeName, new FMODSound(FMODSystem, "Content/Maps/BGM/" + NewSquad.At(U).ArrayCharacterActive[C].BattleThemeName + ".mp3")); } } } } NewSquad.CurrentMovement = ActiveSquadCurrentMovement; NewSquad.IsFlying = ActiveSquadIsFlying; NewSquad.IsUnderTerrain = ActiveSquadIsUnderTerrain; NewSquad.IsPlayerControlled = ActiveSquadIsPlayerControlled; NewSquad.SetPosition(new Vector3(ActiveSquadPositionX, ActiveSquadPositionY, ActiveSquadPositionZ)); NewPlayer.ListSquad.Add(NewSquad); } } GlobalQuickLoadContext.SetContext(DicLoadedSquad); for (int P = 0; P < ListPlayer.Count; P++) { for (int S = 0; S < ListPlayer[P].ListSquad.Count; S++) { if (!ListPlayer[P].ListSquad[S].IsDead) { for (int U = 0; U < ListPlayer[P].ListSquad[S].UnitsInSquad; ++U) { for (int C = 0; C < ListPlayer[P].ListSquad[S].At(U).ArrayCharacterActive.Length; C++) { Character ActiveCharacter = ListPlayer[P].ListSquad[S].At(U).ArrayCharacterActive[C]; ActiveCharacter.Effects.QuickLoad(BR, ActiveParser, DicRequirement, DicEffect, DicAutomaticSkillTarget); } } } } } for (int P = 0; P < ListPlayer.Count; ++P) { for (int S = 0; S < ListPlayer[P].ListSquad.Count; ++S) { ListPlayer[P].ListSquad[S].ReloadSkills(DicUnitType, DicRequirement, DicEffect, DicAutomaticSkillTarget, DicManualSkillTarget); } } int ListMapScriptCount = BR.ReadInt32(); if (ListMapScript.Count != ListMapScriptCount) { throw new Exception("An error occured while loading the map."); } for (int S = 0; S < ListMapScript.Count; S++) { ListMapScript[S].Load(BR); } ListActionMenuChoice.Add(new ActionPanelPhaseChange(this)); return(this); }