RaphaelRoyerRivard / MicroMachine

Starcraft 2 Bot
MIT License
14 stars 0 forks source link

Handle enemy abilities and upgrades #336

Open Unusual229 opened 5 years ago

Unusual229 commented 5 years ago

We should try to handle all the effects (that are possible to handle). This list doesn't contain all the abilities/effects/upgrades, but the most important ones in my opinion.

ALL: Healing: Any form of healing is kind of hard to deal with. The best course of action seems to be to increase the healed unit priority, except for the queen healing, because it has a total healed amount over a period of time (see below). We could detect the healing by creating unit states for the enemy units. Healing includes : Medivacs, repair, Queen's transfusion, burrowed Roach and Recharge battery. It excludes : Zerg health regen, Mutalisk fast health regen and Protoss shield regen.

PROTOSS: (Sentry) Force Fields: They are not bound to tiles, so we can't simply update the blocked tiles influence map or use any influence map for that matter.

(Sentry) Guardian Shield: Should increase the threat of all units within its range, might be automatic if the unit defense is increased when we get it, not sure.

(Void Ray) Prismatic Alignment: Should reduce the influence range, but increase the threat. I believe we can't know how long the ability will still last for, so perhaps not changing the range would be better, otherwise our units could get hit when the ability ends.

(Immortal) Barrier: Should increase the threat by the remaining "absorbed damage", not sure we can get that information though. If we can't, increase the threat by 100 shield (or 100 health). We also probably want to raise the threat more than it really is, so we don't try to fight the immortal while his barrier is up.

(Sentry) Hallucination: Probably impossible to handle for now, however it might be possible when we can detect invisible units, they might have a tag for hallucination. Though now that I think of it, it would render hallucination to the only role of scouts, so we might never be able to handle this.

(Oracle) Revelation: I assume we handle observers, overseer, raven, etc.., but not the oracle detection, which is an effect applied to the invisible unit causing it to no longer be invisible.

(Orable) Statis Ward: This doesn't do damage, so I don't think its in another influence map. Its also invisible, so we probably want to wait for invisible detection update.

(Pheonix) Graviton Beam: Not exactly sure how to detect this, but if we can, we should raise the priority of the pheonix holding one of our untis based on the unit its holding.

ZERG: (Queen) Transfusion: This one is complex, on one hand we want to kill the unit before it fully heals, otherwise so we want to increase the priority. On the other hand, if the unit is going to full heal, we should reduce the priority, so the healing is somewhat wasted while its full health. However, if we reduce the priority, we might never kill anything if we are facing a mass queen, we might just end up hurting each queen, but never trying to finish of any of them. Not sure how to handle this.

Burrow: Some units that are burrowed should have a very low threat, others not. Baneling shouldn't be a threat, but still in the influence, because it can still explode. Lurker should only be scary once burrowed. Infestors should have a lower threat, but still present (can still cast some spells). Roach should have an higher priority, so we kill the healing roaches before the fighting roaches. Not sure how to handle other units, for example a burrowed Hydra is an easy target, that can't attack. Our banshee gets in range to kill it, and it unburrows and kills our banshee. But if the unit has its full threat, we might not push on a pack of burrowed units.

(Overseer) Oversigth: Increase the vision of the Overseer, if it also increases the detection range, we need to handle this, otherwise it doesn't matter.

(Overseer) Changeling: Not sure how we can detect these, but if we can, we should kill them. They are clearly not in our list of units, they might be in the list of enemy units, not sure.

(Overlord) Mutate Ventral Sacs: Transforms the Overlord into a "Dropperlord" (made up name). If we can detect it, we should increase the priority drastically because it costs more, but mainly because it might be holding a lot of units or trying to do a fancy strat. If we can get the number of units inside it (we can for our medivacs, why not for the enemy Overloards?), we should increase the priority proportionally. We might be able to know if its a "Dropperlord" by checking the number of units it can contain, which is a stat available on our medivacs, so perhaps on the enemy Overlords as well.

(Infestor) Neural Parasite: If we can detect that it is being used and its target, we should increase the priority drastically, based on the unit it is controlling.

TERRAN: (Bunker) Neosteel Armor: Might be detectable by checking the number of units it can contain. If we can consider the number of units it currently contains, we should increase threat based on it. Could also detect this by looking at the armor of the Terran buildings. If we detect this upgrade, we need to increase the threat of all Terran defensive building. If we can handle the number of units inside a bunker, we could stop being scared of empty bunkers.

(Raven) Autoturret: We probably always want to avoid them, since they don't last for long. But we still want to push if we consider our power to be much greater than it is, this way the opponent can't use a single Autoturret to block all of our ground units outside his base. This could be done by giving the Autoturret a much higher threat than it actually has.

Unusual229 commented 5 years ago

TERRAN: (Marauder) Concossive Shell: If we can detect our unit is hit by a marauder (or has the debuff), we should change the micro logic to consider his current speed, which is reduced by 50%. Should do the same idea for spells like the Viper's blinding cloud.

(Raven) Anti-Armor Missile: Should reduce our unit power.

(Raven) Interference Matrix: If we can detect it, it should trigger our unit to retreat, since it can't do anything anymore.

Unusual229 commented 5 years ago

I confirm we currently cannot know the amount of units inside a bunker (assumed the same for transporters) and we cannot know the maximum of units a bunker can contains (assumes the same for Overlords with and without the transport ability).