1 |
Hi
|
1 |
Hi
|
2 |
\n
|
2 |
\n
|
3 |
behaviour.json config:
|
3 |
behaviour.json config:
|
4 |
1) [b]economy.build_delay[/b] - when constructor (mobile or factory) finished building it will wait doing nothing for [b]economy.build_delay[/b] seconds before another construction order issued (on per-unit basis, not per-faction).
|
4 |
1) [b]economy.build_delay[/b] - when constructor (mobile or factory) finished building it will wait doing nothing for [b]economy.build_delay[/b] seconds before another construction order issued (on per-unit basis, not per-faction).
|
5 |
I don't know in what order difficulties should align, can't say if there's an error about [b]economy.build_delay[/b] for novice or easy.
|
5 |
I don't know in what order difficulties should align, can't say if there's an error about [b]economy.build_delay[/b] for novice or easy.
|
6 |
\n
|
6 |
\n
|
7 |
2) Regular attackers has 2 phases:
|
7 |
2) Regular attackers has 2 phases:
|
8 |
a) Defence: AI accumulates units at own base until sum_group_power >= [b]quota.thr_mod.defence[/b] * nearest_enemy_cluster_threat. Lowering [b]quota.thr_mod.defence[/b] should result in more frequent attacks with smaller groups. Also [b]quota.thr_mod.defence: [<min>, <max>][/b] is internally a single value equal to random(<min>, <max>) just to randomize behaviour a bit.
|
8 |
a) Defence: AI accumulates units at own base until sum_group_power >= [b]quota.thr_mod.defence[/b] * nearest_enemy_cluster_threat. Lowering [b]quota.thr_mod.defence[/b] should result in more frequent attacks with smaller groups. Also [b]quota.thr_mod.defence: [<min>, <max>][/b] is internally a single value equal to random(<min>, <max>) just to randomize behaviour a bit.
|
9 |
b) Attack: [b]quota.thr_mod.attack: [<min>, <max>][/b] - again random(<min>, <max>) - this value multiplies enemy threat (it actually divides AttackGroup power) during target selection, so the lower this value the more AttackGroup will be eager to suicide.
|
9 |
b) Attack: [b]quota.thr_mod.attack: [<min>, <max>][/b] - again random(<min>, <max>) - this value multiplies enemy threat (it actually divides AttackGroup power) during target selection, so the lower this value the more AttackGroup will be eager to suicide.
|
10 |
\n
|
10 |
\n
|
11 |
3) [b]quota.raid: [<min>, <avg>][/b].
|
11 |
3) [b]quota.raid: [<min>, <avg>][/b].
|
12 |
Threat (enemy) and power (own) is currently magic values calculated by AI code like
|
12 |
Threat (enemy) and power (own) is currently magic values calculated by AI code like
|
13 |
{{{threat = DPS^0.5 * alpha_damage^0.25 * (current_health + current_shield*2)^0.5 * const1}}}
|
13 |
{{{threat = DPS^0.5 * alpha_damage^0.25 * (current_health + current_shield*2)^0.5 * const1}}}
|
14 |
{
{
{
DPS
-
damage
per
seconds
(
with
custom
modifiers
for
status
effects
like
stun
or
slow)
;
|
14 |
{
{
{
DPS
-
damage
per
second
(
with
custom
modifiers
for
status
effects
like
stun
or
slow)
;
|
15 |
alphaDamage - single shot damage (with custom modifiers for status effects like stun or slow);
|
15 |
alphaDamage - single shot damage (with custom modifiers for status effects like stun or slow);
|
16 |
const1 - some precalculated constant to keep values small near 1.0 (instead of 100000.0)}}}
|
16 |
const1 - some precalculated constant to keep values small near 1.0 (instead of 100000.0)}}}
|
17 |
\n
|
17 |
\n
|
18 |
Currently the only way to read threat values for each unit is to recompile AI and manually print it. Few threat examples:
|
18 |
Currently the only way to read threat values for each unit is to recompile AI and manually print it. Few threat examples:
|
19 |
{{{Glaive (cloakraid) = 1.108003;
|
19 |
{{{Glaive (cloakraid) = 1.108003;
|
20 |
Duck (amphraid) = 2.12699;
|
20 |
Duck (amphraid) = 2.12699;
|
21 |
Detriment (striderdetriment) = 257.516357}}}
|
21 |
Detriment (striderdetriment) = 257.516357}}}
|
22 |
\n
|
22 |
\n
|
23 |
For [b]quota.raid=[6.0, 20.0][/b] - first value 6.0 controls minimum power of raid group; 6*cloakraid or 3*amphraid is enough to form a group and start raiding:
|
23 |
For [b]quota.raid=[6.0, 20.0][/b] - first value 6.0 controls minimum power of raid group; 6*cloakraid or 3*amphraid is enough to form a group and start raiding:
|
24 |
6*1.108003 >= 6.0 or 3*2.12699 >= 6.0 or any combination of raiders where total power sum >= 6.0. Second value 20.0 controls maximum number of raiders in a single group: if power of a group exceeds 20.0 another raider won't be assigned to this group.
|
24 |
6*1.108003 >= 6.0 or 3*2.12699 >= 6.0 or any combination of raiders where total power sum >= 6.0. Second value 20.0 controls maximum number of raiders in a single group: if power of a group exceeds 20.0 another raider won't be assigned to this group.
|
25 |
\n
|
25 |
\n
|
26 |
4) [b]retreat.builder[/b], [b]retreat.fighter[/b] - default percent of health at which unit will retreat to base (separate for builders and attackers). But per-unit config value overrides it, see [url=https://github.com/ZeroK-RTS/Chobby/blob/7aeee0295045e8f65421db15b13848a69ac7213e/LuaMenu/configs/gameConfig/zk/defaultSettings/AI/Skirmish/DevCircuitEconomist/stable/config/behaviour.json#L65]behaviour.cloakcon.retreat[/url] for example (also see [url=https://github.com/ZeroK-RTS/Zero-K/tree/master/units]Zero-K units[/url] for internal-name to human-readable translation, cloakcon==Conjurer).
|
26 |
4) [b]retreat.builder[/b], [b]retreat.fighter[/b] - default percent of health at which unit will retreat to base (separate for builders and attackers). But per-unit config value overrides it, see [url=https://github.com/ZeroK-RTS/Chobby/blob/7aeee0295045e8f65421db15b13848a69ac7213e/LuaMenu/configs/gameConfig/zk/defaultSettings/AI/Skirmish/DevCircuitEconomist/stable/config/behaviour.json#L65]behaviour.cloakcon.retreat[/url] for example (also see [url=https://github.com/ZeroK-RTS/Zero-K/tree/master/units]Zero-K units[/url] for internal-name to human-readable translation, cloakcon==Conjurer).
|
27 |
[b]retreat.shield: [<empty>, <full>][/b] - at <empty> percent of shield unit will retreat to base, when shield regenerates to <full> percent unit will return to battle (0.85 == 85%)
|
27 |
[b]retreat.shield: [<empty>, <full>][/b] - at <empty> percent of shield unit will retreat to base, when shield regenerates to <full> percent unit will return to battle (0.85 == 85%)
|