public override void SpecialParse(FightData fightData, AgentData agentData, List <CombatItem> combatData) { // The walls spawn at the start of the encounter, we fix it by overriding their first aware to the first velocity change event List <AgentItem> riverOfSouls = agentData.GetAgentsByID((ushort)RiverOfSouls); bool sortCombatList = false; foreach (AgentItem riverOfSoul in riverOfSouls) { CombatItem firstMovement = combatData.FirstOrDefault(x => x.IsStateChange == ParseEnum.StateChange.Velocity && x.SrcInstid == riverOfSoul.InstID && x.LogTime <= riverOfSoul.LastAwareLogTime); if (firstMovement != null) { // update start riverOfSoul.FirstAwareLogTime = firstMovement.LogTime - 10; foreach (CombatItem c in combatData) { if (c.SrcInstid == riverOfSoul.InstID && c.LogTime < riverOfSoul.FirstAwareLogTime && (c.IsStateChange == ParseEnum.StateChange.Position || c.IsStateChange == ParseEnum.StateChange.Rotation)) { sortCombatList = true; c.OverrideTime(riverOfSoul.FirstAwareLogTime); } } } else { // otherwise remove the agent from the pool agentData.RemoveAgent(riverOfSoul); } } // make sure the list is still sorted by time after overrides if (sortCombatList) { combatData.Sort((x, y) => x.LogTime.CompareTo(y.LogTime)); } ComputeFightTargets(agentData, combatData); }