public override void Init() { base.Init(); GameRule.Init(); if (IsClient) { ListActionMenuChoice.Add(new ActionPanelPhaseChange(this)); } OnNewTurn(); }
public override void Update(GameTime gameTime) { if (!IsInit) { Init(); } else if (MovementAnimation.Count > 0) { MoveSquad(); } else if (GameMode == 0) { if (!ListActionMenuChoice.HasMainPanel) { if (ListPlayer[ActivePlayerIndex].IsHuman) { ListActionMenuChoice.Add(new ActionPanelPlayerHumanStep(this)); } else { } } ListActionMenuChoice.Last().Update(gameTime); } UpdateCursorVisiblePosition(gameTime); for (int P = 0; P < ListPlayer.Count; P++) { for (int U = 0; U < ListPlayer[P].ListConstruction.Count; U++) { ListPlayer[P].ListConstruction[U].SpriteMap.Update(gameTime); if (ListPlayer[P].ListConstruction[U].SpriteMap.AnimationEnded) { ListPlayer[P].ListConstruction[U].SpriteMap.RestartAnimation(); } } } }
public void InitPlayerBattle(Squad ActiveSquad, SupportSquadHolder ActiveSquadSupport, int AttackerPlayerIndex, Squad TargetSquad, SupportSquadHolder TargetSquadSupport, int DefenderPlayerIndex, bool IsActiveSquadOnRight) { if (TargetSquad.CurrentLeader.Boosts.AttackFirstModifier && !ActiveSquad.CurrentLeader.Boosts.AttackFirstModifier) { Squad ActiveSquadTemp = ActiveSquad; SupportSquadHolder ActiveSquadSupportTemp = ActiveSquadSupport; int AttackerPlayerIndexTemp = AttackerPlayerIndex; ActiveSquad = TargetSquad; ActiveSquadSupport = TargetSquadSupport; AttackerPlayerIndex = DefenderPlayerIndex; TargetSquad = ActiveSquadTemp; TargetSquadSupport = ActiveSquadSupportTemp; DefenderPlayerIndex = AttackerPlayerIndexTemp; } ActivePlayerIndex = AttackerPlayerIndex; ActiveSquadIndex = ListPlayer[AttackerPlayerIndex].ListSquad.IndexOf(ActiveSquad); TargetPlayerIndex = DefenderPlayerIndex; TargetSquadIndex = ListPlayer[TargetPlayerIndex].ListSquad.IndexOf(TargetSquad); bool ShowAnimation = Constants.ShowAnimation && ActiveSquad.CurrentLeader.CurrentAttack.Animations.Start.AnimationName != null; ListNextAnimationScreen.Clear(); NonDemoScreen.ListNonDemoBattleFrame.Clear(); ListActionMenuChoice.RemoveAllSubActionPanels(); SquadBattleResult AttackingResult = CalculateFinalHP(ActiveSquad, ActiveSquadSupport.ActiveSquadSupport, ActivePlayerIndex, BattleMenuOffenseFormationChoice, TargetSquad, TargetSquadSupport.ActiveSquadSupport, TargetPlayerIndex, true, true); AnimationScreen.AnimationUnitStats UnitStats = new AnimationScreen.AnimationUnitStats(ActiveSquad, TargetSquad, IsActiveSquadOnRight); SquadBattleResult DefendingResult = new SquadBattleResult(new BattleResult[1] { new BattleResult() }); if (ShowAnimation) { if (IsActiveSquadOnRight) { GenerateNextAnimationScreens(ActiveSquad, ActiveSquadSupport, TargetSquad, TargetSquadSupport, UnitStats, AnimationScreen.BattleAnimationTypes.RightAttackLeft, AttackingResult); } else { GenerateNextAnimationScreens(ActiveSquad, ActiveSquadSupport, TargetSquad, TargetSquadSupport, UnitStats, AnimationScreen.BattleAnimationTypes.LeftAttackRight, AttackingResult); } } if (AttackingResult.ArrayResult[0].Target.ComputeRemainingHPAfterDamage(AttackingResult.ArrayResult[0].AttackDamage) > 0) { //Counter. if (TargetSquad.CurrentLeader.BattleDefenseChoice == Unit.BattleDefenseChoices.Attack) { DefendingResult = CalculateFinalHP(TargetSquad, null, TargetPlayerIndex, BattleMenuDefenseFormationChoice, ActiveSquad, null, ActivePlayerIndex, true, true); if (ShowAnimation) { if (IsActiveSquadOnRight) { GenerateNextAnimationScreens(ActiveSquad, ActiveSquadSupport, TargetSquad, TargetSquadSupport, UnitStats, AnimationScreen.BattleAnimationTypes.RightConteredByLeft, DefendingResult); } else { GenerateNextAnimationScreens(ActiveSquad, ActiveSquadSupport, TargetSquad, TargetSquadSupport, UnitStats, AnimationScreen.BattleAnimationTypes.LeftConteredByRight, DefendingResult); } } } } if (ShowAnimation) { PushScreen(ListNextAnimationScreen[0]); ListNextAnimationScreen.RemoveAt(0); ListNextAnimationScreen.Add(new EndBattleAnimationScreen(this, ActiveSquad, ActiveSquadSupport, AttackerPlayerIndex, TargetSquad, TargetSquadSupport, DefenderPlayerIndex, AttackingResult, DefendingResult)); } else { NonDemoScreen.InitNonDemo(ActiveSquad, ActiveSquadSupport, AttackerPlayerIndex, AttackingResult, BattleMenuOffenseFormationChoice, TargetSquad, TargetSquadSupport, DefenderPlayerIndex, DefendingResult, BattleMenuDefenseFormationChoice, IsActiveSquadOnRight); NonDemoScreen.Alive = true; ListGameScreen.Insert(0, NonDemoScreen); } //AttackingSquad Activations. for (int U = 0; U < ActiveSquad.UnitsAliveInSquad; U++) { ActiveSquad[U].UpdateSkillsLifetime(SkillEffect.LifetimeTypeBattle); } //DefendingSquad Activations. for (int U = 0; U < TargetSquad.UnitsAliveInSquad; U++) { TargetSquad[U].UpdateSkillsLifetime(SkillEffect.LifetimeTypeBattle); } FinalizeMovement(ActiveSquad, (int)GetTerrain(ActiveSquad).MovementCost); ActiveSquad.EndTurn(); bool HasAfterAttack = false; ActionPanelDeathmatch AfterAttack = new ActionPanelMainMenu(this, ActiveSquad, AttackerPlayerIndex); if (ActiveSquad.CurrentLeader.Boosts.PostAttackModifier.Attack) { HasAfterAttack = true; AfterAttack.AddChoiceToCurrentPanel(new ActionPanelAttackPart1(ActiveSquad.CanMove, ActiveSquad, AttackerPlayerIndex, this)); } if (ActiveSquad.CurrentLeader.Boosts.PostAttackModifier.Move) { HasAfterAttack = true; CursorPosition = ActiveSquad.Position; AfterAttack.AddChoiceToCurrentPanel(new ActionPanelMovePart1(this, ActiveSquad.Position, CameraPosition, ActiveSquad, AttackerPlayerIndex, true)); } if (HasAfterAttack) { AfterAttack.AddChoiceToCurrentPanel(new ActionPanelWait(this, ActiveSquad)); ListActionMenuChoice.Add(AfterAttack); } }
public override void Init() { base.Init(); ListActionMenuChoice.Add(new ActionPanelPhaseChange(this)); if (GameMode == 0) { ListPlayer.Clear(); Player NewPlayer = new Player("Player", "Human", true, false, 0, Color.Blue); ListPlayer.Add(NewPlayer); if (ListSpawnSquad.Count > 0) { int SpawnSquadIndex = 0; for (int S = 0; S < ListSingleplayerSpawns.Count; S++) { if (ListSingleplayerSpawns[S].Tag == "P") { for (int U = 0; U < ListSpawnSquad[SpawnSquadIndex].UnitsInSquad; ++U) { ListSpawnSquad[SpawnSquadIndex].At(U).ReinitializeMembers(DicUnitType[ListSpawnSquad[SpawnSquadIndex].At(U).UnitTypeName]); } ListSpawnSquad[SpawnSquadIndex].ReloadSkills(DicRequirement, DicEffect, ManualSkillTarget.DicManualSkillTarget); SpawnSquad(0, ListSpawnSquad[SpawnSquadIndex], 0, ListSingleplayerSpawns[S].Position); ++SpawnSquadIndex; } } } } else if (GameMode == 1) { for (int P = 0; P < ListPlayer.Count; P++) { ListPlayer[P].Color = ArrayMultiplayerColor[P]; for (int S = 0; S < ListPlayer[P].ListSpawnPoint.Count; S++) { if (string.IsNullOrEmpty(ListPlayer[P].ListSpawnPoint[S].LeaderTypeName)) { continue; } Unit NewLeaderUnit = Unit.FromType(ListPlayer[P].ListSpawnPoint[S].LeaderTypeName, ListPlayer[P].ListSpawnPoint[S].LeaderName, Content, DicUnitType, DicRequirement, DicEffect); Character NewLeaderPilot = new Character(ListPlayer[P].ListSpawnPoint[S].LeaderPilot, Content, DicRequirement, DicEffect); NewLeaderPilot.Level = 1; NewLeaderUnit.ArrayCharacterActive = new Character[1] { NewLeaderPilot }; Unit NewWingmanAUnit = null; Unit NewWingmanBUnit = null; if (!string.IsNullOrEmpty(ListPlayer[P].ListSpawnPoint[S].WingmanAName)) { NewWingmanAUnit = Unit.FromType(ListPlayer[P].ListSpawnPoint[S].WingmanATypeName, ListPlayer[P].ListSpawnPoint[S].WingmanAName, Content, DicUnitType, DicRequirement, DicEffect); Character NewWingmanAPilot = new Character(ListPlayer[P].ListSpawnPoint[S].WingmanAPilot, Content, DicRequirement, DicEffect); NewWingmanAPilot.Level = 1; NewWingmanAUnit.ArrayCharacterActive = new Character[1] { NewWingmanAPilot }; } if (!string.IsNullOrEmpty(ListPlayer[P].ListSpawnPoint[S].WingmanBName)) { NewWingmanBUnit = Unit.FromType(ListPlayer[P].ListSpawnPoint[S].WingmanBTypeName, ListPlayer[P].ListSpawnPoint[S].WingmanBName, Content, DicUnitType, DicRequirement, DicEffect); Character NewWingmanBPilot = new Character(ListPlayer[P].ListSpawnPoint[S].WingmanBPilot, Content, DicRequirement, DicEffect); NewWingmanBPilot.Level = 1; NewWingmanBUnit.ArrayCharacterActive = new Character[1] { NewWingmanBPilot }; } Squad NewSquad = new Squad("", NewLeaderUnit, NewWingmanAUnit, NewWingmanBUnit); if (!ListPlayer[P].IsHuman) { NewSquad.SquadAI = new DeathmatchScripAIContainer(new DeathmatchAIInfo(this, NewSquad)); NewSquad.SquadAI.Load("SRWE Enemy AI"); } else { NewSquad.IsPlayerControlled = true; } SpawnSquad(P, NewSquad, 0, ListPlayer[P].ListSpawnPoint[S].Position); } } } }
public DeathmatchMap(string BattleMapPath) : this(BattleMapPath, 0, new List <Squad>()) { base.Init(); ListActionMenuChoice.Add(new ActionPanelPhaseChange(this)); }
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); }
public void InitPlayerBattle(bool IsActiveSquadOnRight) { int FinalActivePlayerIndex = ActivePlayerIndex; int FinalActiveSquadIndex = ActiveSquadIndex; Squad FinalActiveSquad = ActiveSquad; SupportSquadHolder FinalActiveSquadSupport = ActiveSquadSupport; int FinalTargetPlayerIndex = TargetPlayerIndex; int FinalTargetSquadIndex = TargetSquadIndex; Squad FinalTargetSquad = TargetSquad; SupportSquadHolder FinalTargetSquadSupport = TargetSquadSupport; if (TargetSquad.CurrentLeader.Boosts.AttackFirstModifier && !ActiveSquad.CurrentLeader.Boosts.AttackFirstModifier) { FinalActivePlayerIndex = TargetPlayerIndex; FinalActiveSquadIndex = TargetSquadIndex; FinalActiveSquad = TargetSquad; FinalActiveSquadSupport = TargetSquadSupport; FinalTargetPlayerIndex = ActivePlayerIndex; FinalTargetSquadIndex = ActiveSquadIndex; FinalTargetSquad = ActiveSquad; FinalTargetSquadSupport = ActiveSquadSupport; } bool ShowAnimation = Constants.ShowAnimation && FinalActiveSquad.CurrentLeader.CurrentAttack.GetAttackAnimations(Map.ActiveParser).Start.AnimationName != null; ListNextAnimationScreen.Clear(); Map.NonDemoScreen.ListNonDemoBattleFrame.Clear(); if (Map.IsOfflineOrServer) { AttackingResult = Map.CalculateFinalHP(FinalActiveSquad, FinalActiveSquadSupport.ActiveSquadSupport, FinalActivePlayerIndex, Map.BattleMenuOffenseFormationChoice, FinalTargetSquad, FinalTargetSquadSupport.ActiveSquadSupport, FinalTargetPlayerIndex, FinalTargetSquadIndex, true, true); DefendingResult = new SquadBattleResult(new BattleResult[1] { new BattleResult() }); } else { Map.CalculateFinalHP(FinalActiveSquad, FinalActiveSquadSupport.ActiveSquadSupport, FinalActivePlayerIndex, Map.BattleMenuOffenseFormationChoice, FinalTargetSquad, FinalTargetSquadSupport.ActiveSquadSupport, FinalTargetPlayerIndex, FinalTargetSquadIndex, true, true); } AnimationScreen.AnimationUnitStats UnitStats = new AnimationScreen.AnimationUnitStats(FinalActiveSquad, FinalTargetSquad, IsActiveSquadOnRight); AnimationBackground TargetSquadBackground = null; AnimationBackground TargetSquadForeground = null; if (ShowAnimation) { AnimationScreen.BattleAnimationTypes BattleAnimationType = AnimationScreen.BattleAnimationTypes.LeftAttackRight; if (IsActiveSquadOnRight) { BattleAnimationType = AnimationScreen.BattleAnimationTypes.RightAttackLeft; } ListNextAnimationScreen.AddRange(Map.GenerateNextAnimationScreens(FinalActiveSquad, FinalActiveSquadSupport, FinalTargetSquad, FinalTargetSquadSupport, UnitStats, BattleAnimationType, AttackingResult, out TargetSquadBackground, null, out TargetSquadForeground, null)); } if (AttackingResult.ArrayResult[0].Target.ComputeRemainingHPAfterDamage(AttackingResult.ArrayResult[0].AttackDamage) > 0) { //Counter. if (FinalTargetSquad.CurrentLeader.BattleDefenseChoice == Unit.BattleDefenseChoices.Attack) { if (Map.IsOfflineOrServer) { DefendingResult = Map.CalculateFinalHP(FinalTargetSquad, null, FinalTargetPlayerIndex, Map.BattleMenuDefenseFormationChoice, FinalActiveSquad, null, FinalActivePlayerIndex, FinalActiveSquadIndex, true, true); } else { Map.CalculateFinalHP(FinalTargetSquad, null, FinalTargetPlayerIndex, Map.BattleMenuDefenseFormationChoice, FinalActiveSquad, null, FinalActivePlayerIndex, FinalActiveSquadIndex, true, true); } if (ShowAnimation) { AnimationScreen.BattleAnimationTypes BattleAnimationType = AnimationScreen.BattleAnimationTypes.LeftConteredByRight; if (IsActiveSquadOnRight) { BattleAnimationType = AnimationScreen.BattleAnimationTypes.RightConteredByLeft; } ListNextAnimationScreen.AddRange(Map.GenerateNextAnimationScreens(FinalActiveSquad, FinalActiveSquadSupport, FinalTargetSquad, FinalTargetSquadSupport, UnitStats, BattleAnimationType, DefendingResult, out _, TargetSquadBackground, out _, TargetSquadForeground)); } } } if (Map.IsClient) { if (ShowAnimation) { Map.PushScreen(ListNextAnimationScreen[0]); ListNextAnimationScreen.RemoveAt(0); ListNextAnimationScreen.Add(new EndBattleAnimationScreen(Map, FinalActiveSquad, FinalActiveSquadSupport, FinalActivePlayerIndex, FinalTargetSquad, FinalTargetSquadSupport, FinalTargetPlayerIndex, AttackingResult, DefendingResult)); } else { Map.NonDemoScreen.InitNonDemo(FinalActiveSquad, FinalActiveSquadSupport, FinalActivePlayerIndex, AttackingResult, Map.BattleMenuOffenseFormationChoice, FinalTargetSquad, FinalTargetSquadSupport, FinalTargetPlayerIndex, DefendingResult, Map.BattleMenuDefenseFormationChoice, IsActiveSquadOnRight); Map.NonDemoScreen.Alive = true; Map.ListGameScreen.Insert(0, Map.NonDemoScreen); } } //AttackingSquad Activations. for (int U = 0; U < FinalActiveSquad.UnitsAliveInSquad; U++) { FinalActiveSquad[U].UpdateSkillsLifetime(SkillEffect.LifetimeTypeBattle); } //DefendingSquad Activations. for (int U = 0; U < FinalTargetSquad.UnitsAliveInSquad; U++) { FinalTargetSquad[U].UpdateSkillsLifetime(SkillEffect.LifetimeTypeBattle); } Map.FinalizeMovement(FinalActiveSquad, (int)Map.GetTerrain(FinalActiveSquad).MovementCost); FinalActiveSquad.EndTurn(); if (Map.IsClient) { bool HasAfterAttack = false; ActionPanelDeathmatch AfterAttack = new ActionPanelMainMenu(Map, FinalActivePlayerIndex, FinalActiveSquadIndex); if (FinalActiveSquad.CurrentLeader.Boosts.PostAttackModifier.Attack) { HasAfterAttack = true; AfterAttack.AddChoiceToCurrentPanel(new ActionPanelAttackPart1(Map, FinalActivePlayerIndex, FinalActiveSquadIndex, FinalActiveSquad.CanMove)); } if (FinalActiveSquad.CurrentLeader.Boosts.PostAttackModifier.Move) { HasAfterAttack = true; Map.CursorPosition = FinalActiveSquad.Position; AfterAttack.AddChoiceToCurrentPanel(new ActionPanelMovePart1(Map, FinalActivePlayerIndex, FinalActiveSquadIndex, FinalActiveSquad.Position, Map.CameraPosition, true)); } if (HasAfterAttack) { AfterAttack.AddChoiceToCurrentPanel(new ActionPanelWait(Map, FinalActiveSquad)); ListActionMenuChoice.Add(AfterAttack); } } }