archive by month
Skip to content

this opening requires that map feature

Before the 1.4.x series is finished, Steamhammer will adapt its opening choices to the maps by experience, even when it faces an unknown opponent. In a tournament, it may also want to adapt immediately to an unfamiliar map, which means it will have to analyze the map for features that influence play, and it will need prior knowledge of which openings work for a map with those features. At first, hand coding will be the way to connect map features to opening choices. That will also make it reasonable to compete in AIST. It’s no fun to play on an island map like Sparkle without specialized island openings.

The topic came up in the comments to the post chokes and regions from February. Antiga proposed 3 map features he wanted to be able to take into account.

Here’s what I’m considering for the design.

  • Code the map feature preferences in the configuration file, where they are easy to change.
  • Attach preferences to the openings directly, not to the strategy mixes. The island openings will be marked good for islands on the opening, along with Race and OpeningGroup. Then they are included in the strategy mixes without further marks.
  • It needs to be kept simple. Something like “Require” : { “feature” : “value” }, where you can put any number of features between the braces. Each gets only one value, though, unless I make it possible for the value to be a list. Maybe “Avoid” instead of or in addition to “Require”.
  • Require would mean that all the given features are required. Avoid would mean that all the given features are to be avoided.
  • There should be at least one default value: Most openings are not suitable to play on an island map, and should be silently marked for no islands. Maybe there should be more defaults.

I may start with only a map feature, or only an island feature. Here are possible feature names and values for some features, including Antiga’s 3 features.

featurevaluesmeaning
map[map name]this string is in the map name
islandyes, nono 2 starting positions are connected by ground
main rampup, down, levelentrance to each main base
main choke width[number]main entrance must be no wider than this, in tiles
natural choke width[number]natural entrance must be no wider than this, in tiles

A lot more feature values might make sense. To cover all island maps, there should be features for the number of bases and the number of gases at each starting positition, and probably more features beyond that. There are a bunch of different kinds of semi-island maps, and maybe each kind should have its own value. Some are specialized: For example, Iron Curtain (designed as a 2v2 map) has 4 bases with a divider that (initially) separates it into 2 islands, each with 2 starting locations—in 1v1, you might start on the same island as your opponent, or you might not. The main ramp feature might have a value “multiple” for maps which have more than one entrance to the main. And of course there are always irregular Blizzard maps where each starting base may have entirely different features. These things are complications that should be minimized on a first pass.

To be concrete, you might declare an island opening like this. (Beware: I edited this up in less than a minute and didn’t test it. It is not a tuned opening.)

    "Island 2HatchMuta" : { "Race" : "Zerg", "Require" : { "island" : "yes" },
        "OpeningBuildOrder" : ["4 x drone", "overlord", "4 x drone", "hatchery", "spawning pool", "extractor", "7 x drone", "Lair", "drone", "metabolic boost", "2 x drone", "spire", "3 x drone", "hatchery", "drone", "extractor", "2 x overlord", "12 x mutalisk"] },

The 80-20 rule applies. Does this plan meet 80% of needs? What do you think?

Trackbacks

No Trackbacks

Comments

Antiga / Iruian on :

Looks really good! One of the interesting parts about these factors that probably is worth thinking about is that they affect both sides. So it affects both attack / defense factors. Main choke width drastically impacts how hard / easy it is to defend but also how it easy it is to attack. So it's double edged. I think Island is probably most important to have, followed by main choke width, then main ramp up / down / level. Natural width is probably the weakest factor.

Paul Goodman on :

Why get Metabolic Boost on an island map when you're not building any lings?

Paul Goodman on :

Fair enough.

Joseph Huang on :

Why call bots stupid when you've never made one yourself?

Jay Scott on :

I read the question as an attempt to be constructive. It is a good attitude.

Joseph Huang on :

More of a reference to some old comments of his, water under the bridge nowadays I guess...

Joseph Huang on :

Nevermind, I got him confused with Paul Paradies.

Anon on :

I think...

[1] The "map feature preferences" is a nice idea. You will "attach preferences to the openings directly, not to the strategy mixes". But that information WILL be useful for other decisions.

[2] Don't work with "magical hidden defaults". If 95% of the openings aren't suitable for islands, you should explicitly rewrite them all with this new little requirement.

[3] Require_Island_Yes is the same as Avoid_Island_No? Or maybe Avoid_Island_No means it shouldn't avoid islands? Sounds confusing... What about just "Suitability"? Suitability_Island_Yes is easy to understand. If there is no Suitability_MainRamp defined, it doesn't influence the decision. If you have Suitability_MainRamp_{up|level}, the opening shouldn't be played if the ramp value is "down". Finally, for the numeric values you should use something like "number" to express the suitability.

Anon on :

Just a few more things: [1] I hate not being able to write multiline comments haha [2] My comment is missing some characters: I said you should use "GreaterThanOrEqualToNUMBER" instead of just "number". I guess the symbols didn't show properly.

Jay Scott on :

1. I’ve reconfigured the blog to pay attention to newlines in comments. We’ll see how it works. 2. It still removes from comments anything that looks even vaguely like an HTML tag. It’s a pretty extreme behavior.

Dan on :

Newlines!!! I feel a great weight has been lifted from me.

jtolmar on :

Looks good. I think you definitely should have both require and avoids, so choke width can be used both for Protoss fast expand and the kind of Zerg rushes that it protects against. Another useful feature would be detecting seige cliffs next to the main and natural.

Jay Scott on :

There are tons of features that would be valuable for some maps. What is the rush distance? What are the total expansions/total minerals/total gas? Are there good proxy spots? Is the natural mineral-only? When it gets that detailed, I think the good and bad should be worked out by algorithm, not by hand.

Jay Scott on :

Minor change of plan on island maps. I am not implementing a check “is this an island map?” as much as a check “am I starting on an island?” In the post I proposed “no 2 starting positions are connected by ground.” I’m doing “my start position is not connected by ground to any other.” It should be the same for competitive maps, and more useful for irregular maps that have some island starting positions and some not.

Add Comment

E-Mail addresses will not be displayed and will only be used for E-Mail notifications.

To prevent automated Bots from commentspamming, please enter the string you see in the image below in the appropriate input box. Your comment will only be submitted if the strings match. Please ensure that your browser supports and accepts cookies, or your comment cannot be verified correctly.
CAPTCHA

Form options

Submitted comments will be subject to moderation before being displayed.