public override void OnFrame(Tyr tyr) { if (tyr.EnemyRace == Race.Protoss) { TimingAttackTask.Task.RequiredSize = 45; TimingAttackTask.Task.RetreatSize = 8; } else { TimingAttackTask.Task.RequiredSize = 70; TimingAttackTask.Task.RetreatSize = 20; } tyr.DrawText("Extractors: " + Count(UnitTypes.EXTRACTOR)); DefenseTask.Task.MainDefenseRadius = 20; DefenseTask.Task.ExpandDefenseRadius = 14; DefenseTask.Task.MaxDefenseRadius = 55; IdleTask.Task.FearEnemies = true; GoingBroodlords = tyr.EnemyRace == Race.Protoss && Completed(UnitTypes.HYDRALISK_DEN) > 0 && Completed(UnitTypes.LURKER_DEN) > 0 && Count(UnitTypes.HATCHERY) + Count(UnitTypes.LAIR) + Count(UnitTypes.HIVE) >= 2; if (tyr.EnemyRace != Race.Protoss) { tyr.DrawScreen("Wrong race.", 12, 0.65f, 0.18f); } else if (Completed(UnitTypes.HYDRALISK_DEN) == 0) { tyr.DrawScreen("No hydra den", 12, 0.65f, 0.18f); } else if (Completed(UnitTypes.LURKER_DEN) == 0) { tyr.DrawScreen("No lurker den", 12, 0.65f, 0.18f); } else if (Count(UnitTypes.HATCHERY) + Count(UnitTypes.LAIR) + Count(UnitTypes.HIVE) < 2) { tyr.DrawScreen("Not enough bases. Hatch: " + Count(UnitTypes.HATCHERY) + " Lair: " + Count(UnitTypes.LAIR) + " Hive: " + Count(UnitTypes.HIVE), 12, 0.65f, 0.18f); } else if (GoingBroodlords) { tyr.DrawScreen("Going broodlords", 12, 0.65f, 0.18f); } else { tyr.DrawScreen("Not going broodlords", 12, 0.65f, 0.18f); } if (tyr.EnemyRace == Race.Protoss) { RequiredZerglings = 0; } if (Count(UnitTypes.HYDRALISK) - 10 >= (Count(UnitTypes.LURKER) + Count(UnitTypes.LURKER_BURROWED)) * 2) { MorphingTask.Task.Morph(UnitTypes.LURKER); } if (Completed(UnitTypes.LAIR) > 0 && Count(UnitTypes.OVERSEER) < 2) { MorphingTask.Task.Morph(UnitTypes.OVERSEER); } if (FoodUsed() + Tyr.Bot.UnitManager.Count(UnitTypes.HATCHERY) * 2 + Tyr.Bot.UnitManager.Count(UnitTypes.LAIR) * 2 + Tyr.Bot.UnitManager.Count(UnitTypes.HIVE) * 2 >= ExpectedAvailableFood() - 2) { MorphingTask.Task.Morph(UnitTypes.OVERLORD); } else if (Count(UnitTypes.DRONE) >= 14 && Count(UnitTypes.SPAWNING_POOL) == 0) { } else if (ExpectedAvailableFood() > FoodUsed() + 2 && Count(UnitTypes.DRONE) < 45 - Completed(UnitTypes.EXTRACTOR) && (Count(UnitTypes.DRONE) < 40 - Completed(UnitTypes.EXTRACTOR) || Count(UnitTypes.HATCHERY) >= 3) && (Count(UnitTypes.ZERGLING) >= RequiredZerglings || Count(UnitTypes.DRONE) <= 18) && (Count(UnitTypes.LAIR) > 0 || Count(UnitTypes.DRONE) <= 24)) { MorphingTask.Task.Morph(UnitTypes.DRONE); } else if (Completed(UnitTypes.SPAWNING_POOL) > 0 && Count(UnitTypes.ZERGLING) < RequiredZerglings && ExpectedAvailableFood() > FoodUsed() + 4 && (Count(UnitTypes.SPINE_CRAWLER) >= 2 || Minerals() >= 200)) { MorphingTask.Task.Morph(UnitTypes.ZERGLING); } else if (Completed(UnitTypes.HYDRALISK_DEN) > 0 && (Count(UnitTypes.HYDRALISK) < 15 || Count(UnitTypes.LURKER_DEN) > 0) && (Count(UnitTypes.HYDRALISK) - 20 < Count(UnitTypes.LURKER) * 2 || Gas() >= 150) && ExpectedAvailableFood() > FoodUsed() + 4 && !GoingBroodlords) { MorphingTask.Task.Morph(UnitTypes.HYDRALISK); } }