AF wrote:zwzsg, B_NA is ignored from XE9.5 onwards. It is an error return value now. But that does not explain why on earth you would want to use it.
For testing purpose, I wanted to make my kernel build one asm and stop. It was annoying to have dozen of asm pilling up. I can definitively see use for units that do one action and stop forever though. Or at least remove a task from their task list.
I have built kernel panic configs before. I have ran them, I tested and built the first working kernel panic config. NTai is not too stupid to realize that a socket needs to be built on a geothermal because I have seen it with my very own eyes doing just that.
Yes, I tested your config, an even in your config, assembler builds sockets extremely rarely, like, one socket after 15 min. After some more testing I found that's because they don't look for geo spot, so only build socket when they happen to be bumped near one. It is critical for the success of any KP ai they they actively go and build socket on every free geo as quickly as possible.
I also said b_random_move shouldnt be used for the same reason I removed scouting. Its broken. But why would you want to use b_random_move in a mod like kernel panic anyway?
Both would be very valuable. I guess I have to read the 56 pages of that topic to know why on earth you removed them? I wanted to use b_random so assembler actually wander randomly around the map then try to build a socket, instead of staying idle next to kernel.
Why would you want a keyword like b_rule in a mod that has no resources?
I had, no, have, no idea what b_rule was about, and simply wanted to see what it was in case it would help me.
NTai doesnt handle geothermals at all, because spring handles it for ais perfectly well. Spring will return a geo spot without mentioning anything about geothermals when asked.
Perfectly well? I'm sorry I have to disagree here.
I suggest you look at my config for kernel panic
I looked at it, couldn't understand why the assembler only task is made of fivetime the same command. Wouln't one be enough? I mean, it's not like it risk switching to another task, since there's only one task. And anyway your config fails at building sockets, or at least more sockets than one per half hour.
You'd know that assemblers work best with sockets and only sockets in their build order ... but 2 tasks specifically building sockets by name.
I tried that, building socket by name. Works only when a geo spot happens to be near.
Mines type units also dont work well with AIs as no AI has yet to attempt to manage minefields and very few players use them either.
I don't care if the AI doesn't build minefield, they aren't that essential.
If NTai doesnt do what it says, do you go to the logs for an explanation or do you complain to me?
I complain to you.
it may lack resources
Haven't I mentionned how you never run out of ressources in KP?
unusual mods
I hoped that the comprehensive config thing would make NTai able to handle a small simple mod that's not 100% TA-like. But it looks like it fails on something as simple as recognising geo's that aren't TA ones verbatim.
Here is the config I used:
[AI]
{
author=;
version=0.1;
message=;
abstract=0;
use_mod_default_if_absent=0;
defence_spacing=7;
power_spacing=6;
factory_spacing=4;
default_spacing=5;
dynamic_selection=1;
spacemod=0;
hard_target=0;
antistall=3;
interpolate_tag=b_na;
MaxStallTimeMobile=0;
MaxStallTimeImmobile=0;
normal_handicap=0;
antistallwindow=43;
initial_threat_value=5;
hold_pos=;
maneouvre=;
roam= ;
hold_fire=;
return_fire=;
fire_at_will= ;
NoAntiStall=;
AlwaysAntiStall=;
singlebuild=;
solobuild=;
scouters=;
attackers=;
}
[TASKLISTS]
{
[NORMAL]
{
builder=;
commander=;
hub=;
factory=;
}
[CHEAT]
{
builder=list1;
commander=list1;
hub=list1;
factory=list1;
}
[LISTS]
{
kernel=assembler,dos;
assembler=b_randmove,b_geo;
}
}
[ECONOMY]
{
[RULES]
{
power=0.7;
mex=0.7;
factorymetal=0.95;
factoryenergy=0.95;
factorymetalgap=10;
energystorage=0.7;
metalstorage=0.7;
makermetal=0.5;
makerenergy=0.7;
[EXTREME]
{
power=0.3;
mex=0.3;
factorymetal=0.99;
factoryenergy=0.99;
factorymetalgap=0.7;
energystorage=0.7;
metalstorage=0.7;
makermetal=0.3;
makerenergy=0.8;
}
}
}
[Resource]
{
[ConstructionRepairRanges]
{
}
[ConstructionExclusionRange]
{
}
[MaxEnergy]
{
}
[MinEnergy]
{
}
}
Here is the log file, couldn't find anything useful in it. Beside that your AI doesn't handle dot in map SMD filename, but that's irrelevant.
:: NTAI XE9.7 Log File
:: Programmed and maintained by AF/T.Nowell
:: Copyright (C) 2004-7 Tom Nowell/AF
:: Game started: 20.4.2007 0:3:19
:: Kernel Panic Evilless
:: The one side mutator
:: First instance of NTAI
:: greenmeanie
:: zwzsg
:: spring_engine
:: spring_engine
:: spring_engine
:: spring_engine
:: spring_engine
:: spring_engine
:: spring_engine
:: spring_engine
:: spring_engine
:: spring_engine
:: spring_engine
:: spring_engine
:: spring_engine
:: spring_engine
:: spring_engine
:: AI DLL's in game
[-] < Frame: 0 >logging started
KAI Metal Class by Krogothe
Metal Spots loaded from file
Metal Spots Found 24
:: Found 24 Metal Spots
[-] < Frame: 0 >Order Router constructed
[-] < Frame: 0 >DTHandler constructed
[-] < Frame: 0 >RadarHandler constructed
[-] < Frame: 0 >Planning constructed
[-] < Frame: 0 >Assigner constructed
[-] < Frame: 0 >Scouter constructed
[-] < Frame: 0 >Economy constructed
[-] < Frame: 0 >Manufacturer constructed
[-] < Frame: 0 >BuildingPlacer constructed
[-] < Frame: 0 >Chaser constructed
[-] < Frame: 0 >Initialisising
[-] < Frame: 0 >Mod TDF loaded
[-] < Frame: 0 >Mod TDF loaded
[-] < Frame: 0 >values filled
[-] < Frame: 0 >Arrays filled
[-] < Frame: 0 >Loading unit data
[-] < Frame: 0 >Unit data loaded
:: Direct Memory Access 0.5e (beta).smf
:: Kernel_Panic_No_Evil.sd7
:: map size 16 x 12
[-] < Frame: 0 >Assigner Init'd
[-] < Frame: 0 >Planner Init'd
No MetaTags where defined
[-] < Frame: 0 >Manufacturer Init'd
[-] < Frame: 0 >BuildingPlacement Init'd
[-] < Frame: 0 >Value ai\kamikaze missing in file buffer
[-] < Frame: 0 >Chaser Init'd
[-] < Frame: 0 >file maps\Direct Memory Access 0.smd not found
[-] < Frame: 0 >Scouter Init'd
[-] < Frame: 0 >Value tasklists\normal\kernel missing in file buffer
[-] < Frame: 0 >loading contents of tasklist :: kernel :: filling tasklist with #2 items
[-] < Frame: 0 >CUnitConstructionTask::CUnitConstructionTask building :: assembler
[-] < Frame: 0 >CUnitConstructionTask::CUnitConstructionTask building :: dos
[-] < Frame: 0 >loaded contents of tasklist :: kernel :: loaded tasklist at 2 items
[-] < Frame: 0 >CUnitConstructionTask::Init :: assembler
[-] < Frame: 0 >CUnitConstructionTask::RecieveMessage G->OrderRouter->GiveOrder(tc)== true :: kernel
[-] < Frame: 0 >CUnitConstructionTask::RecieveMessage wiping and creaiing the plan :: kernel
[-] < Frame: 3 >issuing command in update()
[-] < Frame: 3 >Command: ID: -1 Timeout: 320 params: 1216, 1002.58, 704, 0, source of command: CBuild
[-] < Frame: 3 >issuing command in update() succeeded
[greenmeanie] [00:06] < Frame: 209 > :: .cheat
[00:08] < Frame: 263 >issuing command in update()
[00:08] < Frame: 263 >Command: ID: 10 Timeout: 2147483647 params: 1216.01, 1002.58, 814.01, source of command: move CActions
[00:08] < Frame: 263 >issuing command in update() succeeded
[greenmeanie] [00:08] < Frame: 263 > :: .team 1
[00:24] < Frame: 721 >next task?
[00:24] < Frame: 721 >CUnitConstructionTask::Init :: dos
[00:24] < Frame: 721 >CUnitConstructionTask::RecieveMessage G->OrderRouter->GiveOrder(tc)== true :: kernel
[00:24] < Frame: 721 >CUnitConstructionTask::RecieveMessage wiping and creaiing the plan :: kernel
[00:24] < Frame: 722 >issuing command in update()
[00:24] < Frame: 722 >Command: ID: -7 Timeout: 977 params: 1216, 1002.58, 704, 0, source of command: CBuild
[00:24] < Frame: 722 >issuing command in update() succeeded
[00:26] < Frame: 791 >next task?
[00:26] < Frame: 791 >Value tasklists\normal\assembler missing in file buffer
[00:26] < Frame: 791 >loading contents of tasklist :: assembler :: filling tasklist with #2 items
[00:26] < Frame: 791 >loaded contents of tasklist :: assembler :: loaded tasklist at 2 items
[00:26] < Frame: 791 >CKeywordConstructionTask::Init b_randmove
[00:26] < Frame: 791 >issuing random move
[00:26] < Frame: 794 >issuing command in update()
[00:26] < Frame: 794 >Command: ID: 10 Timeout: 2147483647 params: 1218.87, 984.34, 902.995, source of command: move CActions
[00:26] < Frame: 794 >issuing command in update() succeeded
[00:27] < Frame: 831 >next task?
[00:27] < Frame: 831 >CKeywordConstructionTask::Init b_geo
if(targ == string("")) for b_geo
[00:27] < Frame: 836 >next task?
[00:27] < Frame: 836 >CKeywordConstructionTask::Init b_geo
if(targ == string("")) for b_geo
[00:27] < Frame: 836 >Value tasklists\normal\assembler missing in file buffer
[00:27] < Frame: 836 >loading contents of tasklist :: assembler :: filling tasklist with #2 items
[00:27] < Frame: 836 >loaded contents of tasklist :: assembler :: loaded tasklist at 2 items
[00:27] < Frame: 836 >CKeywordConstructionTask::Init b_randmove
[00:27] < Frame: 836 >issuing random move
[00:27] < Frame: 839 >issuing command in update()
[00:27] < Frame: 839 >Command: ID: 10 Timeout: 2147483647 params: 1207.51, 979.569, 908.286, source of command: move CActions
[00:27] < Frame: 839 >issuing command in update() succeeded
[00:29] < Frame: 898 >next task?
[00:29] < Frame: 898 >CKeywordConstructionTask::Init b_geo
if(targ == string("")) for b_geo
[00:29] < Frame: 899 >next task?
[00:29] < Frame: 899 >CKeywordConstructionTask::Init b_geo
if(targ == string("")) for b_geo
[00:29] < Frame: 899 >Value tasklists\normal\assembler missing in file buffer
[00:29] < Frame: 899 >loading contents of tasklist :: assembler :: filling tasklist with #2 items
[00:29] < Frame: 899 >loaded contents of tasklist :: assembler :: loaded tasklist at 2 items
[00:29] < Frame: 899 >CKeywordConstructionTask::Init b_randmove
[00:29] < Frame: 899 >issuing random move
[00:30] < Frame: 902 >issuing command in update()
[00:30] < Frame: 902 >Command: ID: 10 Timeout: 2147483647 params: 1227.98, 975.352, 899.255, source of command: move CActions
[00:30] < Frame: 902 >issuing command in update() succeeded
[00:30] < Frame: 923 >next task?
[00:30] < Frame: 923 >CKeywordConstructionTask::Init b_geo
if(targ == string("")) for b_geo
[00:31] < Frame: 934 >next task?
[00:31] < Frame: 934 >CKeywordConstructionTask::Init b_geo
if(targ == string("")) for b_geo
[00:31] < Frame: 934 >Value tasklists\normal\assembler missing in file buffer
[00:31] < Frame: 934 >loading contents of tasklist :: assembler :: filling tasklist with #2 items
[00:31] < Frame: 934 >loaded contents of tasklist :: assembler :: loaded tasklist at 2 items
[00:31] < Frame: 934 >CKeywordConstructionTask::Init b_randmove
[00:31] < Frame: 934 >issuing random move
[00:31] < Frame: 935 >issuing command in update()
[00:31] < Frame: 935 >Command: ID: 10 Timeout: 2147483647 params: 1224.37, 975.352, 927.184, source of command: move CActions
[00:31] < Frame: 935 >issuing command in update() succeeded
[00:31] < Frame: 944 >next task?
[00:31] < Frame: 944 >CKeywordConstructionTask::Init b_geo
if(targ == string("")) for b_geo
[00:32] < Frame: 968 >next task?
[00:32] < Frame: 968 >CKeywordConstructionTask::Init b_geo
if(targ == string("")) for b_geo
[00:32] < Frame: 968 >Value tasklists\normal\assembler missing in file buffer
[00:32] < Frame: 968 >loading contents of tasklist :: assembler :: filling tasklist with #2 items
[00:32] < Frame: 968 >loaded contents of tasklist :: assembler :: loaded tasklist at 2 items
[00:32] < Frame: 968 >CKeywordConstructionTask::Init b_randmove
[00:32] < Frame: 968 >issuing random move
[00:32] < Frame: 971 >issuing command in update()
[00:32] < Frame: 971 >Command: ID: 10 Timeout: 2147483647 params: 1215.37, 975.328, 929.85, source of command: move CActions
[00:32] < Frame: 971 >issuing command in update() succeeded
[00:32] < Frame: 974 >next task?
[00:32] < Frame: 974 >CKeywordConstructionTask::Init b_geo
if(targ == string("")) for b_geo
[00:32] < Frame: 986 >next task?
[00:32] < Frame: 986 >CKeywordConstructionTask::Init b_geo
if(targ == string("")) for b_geo
[00:32] < Frame: 986 >Value tasklists\normal\assembler missing in file buffer
[00:32] < Frame: 986 >loading contents of tasklist :: assembler :: filling tasklist with #2 items
[00:32] < Frame: 986 >loaded contents of tasklist :: assembler :: loaded tasklist at 2 items
[00:32] < Frame: 986 >CKeywordConstructionTask::Init b_randmove
[00:32] < Frame: 986 >issuing random move
[00:32] < Frame: 989 >issuing command in update()
[00:32] < Frame: 989 >Command: ID: 10 Timeout: 2147483647 params: 1211.24, 972.226, 938.923, source of command: move CActions
[00:32] < Frame: 989 >issuing command in update() succeeded
[00:34] < Frame: 1039 >next task?
[00:34] < Frame: 1039 >CKeywordConstructionTask::Init b_geo
if(targ == string("")) for b_geo
[00:35] < Frame: 1079 >next task?
[00:35] < Frame: 1079 >CKeywordConstructionTask::Init b_geo
if(targ == string("")) for b_geo
[00:35] < Frame: 1079 >Value tasklists\normal\assembler missing in file buffer
[00:35] < Frame: 1079 >loading contents of tasklist :: assembler :: filling tasklist with #2 items
[00:35] < Frame: 1079 >loaded contents of tasklist :: assembler :: loaded tasklist at 2 items
[00:35] < Frame: 1079 >CKeywordConstructionTask::Init b_randmove
[00:35] < Frame: 1079 >issuing random move
[00:36] < Frame: 1082 >issuing command in update()
[00:36] < Frame: 1082 >Command: ID: 10 Timeout: 2147483647 params: 1211.06, 966.097, 956.834, source of command: move CActions
[00:36] < Frame: 1082 >issuing command in update() succeeded
[00:36] < Frame: 1099 >next task?
[00:36] < Frame: 1099 >CKeywordConstructionTask::Init b_geo
if(targ == string("")) for b_geo
[00:37] < Frame: 1139 >next task?
[00:37] < Frame: 1139 >CKeywordConstructionTask::Init b_geo
if(targ == string("")) for b_geo
[00:37] < Frame: 1139 >Value tasklists\normal\assembler missing in file buffer
[00:37] < Frame: 1139 >loading contents of tasklist :: assembler :: filling tasklist with #2 items
[00:37] < Frame: 1139 >loaded contents of tasklist :: assembler :: loaded tasklist at 2 items
[00:37] < Frame: 1139 >CKeywordConstructionTask::Init b_randmove
[00:37] < Frame: 1139 >issuing random move
[00:38] < Frame: 1142 >issuing command in update()
[00:38] < Frame: 1142 >Command: ID: 10 Timeout: 2147483647 params: 1193.13, 959.982, 956.191, source of command: move CActions
[00:38] < Frame: 1142 >issuing command in update() succeeded
[00:40] < Frame: 1206 >next task?
[00:40] < Frame: 1206 >CKeywordConstructionTask::Init b_geo
if(targ == string("")) for b_geo
[00:40] < Frame: 1223 >next task?
[00:40] < Frame: 1223 >CKeywordConstructionTask::Init b_geo
if(targ == string("")) for b_geo
[00:40] < Frame: 1223 >Value tasklists\normal\assembler missing in file buffer
[00:40] < Frame: 1223 >loading contents of tasklist :: assembler :: filling tasklist with #2 items
[00:40] < Frame: 1223 >loaded contents of tasklist :: assembler :: loaded tasklist at 2 items
[00:40] < Frame: 1223 >CKeywordConstructionTask::Init b_randmove
[00:40] < Frame: 1223 >issuing random move
[00:40] < Frame: 1226 >issuing command in update()
[00:40] < Frame: 1226 >Command: ID: 10 Timeout: 2147483647 params: 1196.49, 957.037, 983.461, source of command: move CActions
[00:40] < Frame: 1226 >issuing command in update() succeeded
[00:41] < Frame: 1247 >next task?
[00:41] < Frame: 1247 >CKeywordConstructionTask::Init b_geo
if(targ == string("")) for b_geo
[00:42] < Frame: 1272 >next task?
[00:42] < Frame: 1272 >CKeywordConstructionTask::Init b_geo
if(targ == string("")) for b_geo
[00:42] < Frame: 1272 >Value tasklists\normal\assembler missing in file buffer
[00:42] < Frame: 1272 >loading contents of tasklist :: assembler :: filling tasklist with #2 items
[00:42] < Frame: 1272 >loaded contents of tasklist :: assembler :: loaded tasklist at 2 items
[00:42] < Frame: 1272 >CKeywordConstructionTask::Init b_randmove
[00:42] < Frame: 1272 >issuing random move
[00:42] < Frame: 1274 >issuing command in update()
[00:42] < Frame: 1274 >Command: ID: 10 Timeout: 2147483647 params: 1168.98, 954.469, 969.674, source of command: move CActions
[00:42] < Frame: 1274 >issuing command in update() succeeded
[00:42] < Frame: 1275 >next task?
[00:42] < Frame: 1275 >CKeywordConstructionTask::Init b_geo
if(targ == string("")) for b_geo
[00:44] < Frame: 1322 >next task?
[00:44] < Frame: 1322 >CKeywordConstructionTask::Init b_geo
[00:44] < Frame: 1322 >Given the go ahead :: socket
[00:44] < Frame: 1322 >Given the go ahead :: badblock
[00:44] < Frame: 1322 >Given the go ahead :: logic_bomb
[00:44] < Frame: 1322 >Given the go ahead :: mineblaster
if(targ == string("")) for b_geo
[00:44] < Frame: 1322 >Value tasklists\normal\assembler missing in file buffer
[00:44] < Frame: 1322 >loading contents of tasklist :: assembler :: filling tasklist with #2 items
[00:44] < Frame: 1322 >loaded contents of tasklist :: assembler :: loaded tasklist at 2 items
[00:44] < Frame: 1322 >CKeywordConstructionTask::Init b_randmove
[00:44] < Frame: 1322 >issuing random move
[00:44] < Frame: 1325 >issuing command in update()
[00:44] < Frame: 1325 >Command: ID: 10 Timeout: 2147483647 params: 1184.48, 952.597, 968.025, source of command: move CActions
[00:44] < Frame: 1325 >issuing command in update() succeeded
[00:44] < Frame: 1332 >next task?
[00:44] < Frame: 1332 >CKeywordConstructionTask::Init b_geo
[00:44] < Frame: 1332 >Given the go ahead :: socket
[00:44] < Frame: 1332 >Given the go ahead :: badblock
[00:44] < Frame: 1332 >Given the go ahead :: logic_bomb
[00:44] < Frame: 1332 >Given the go ahead :: mineblaster
if(targ == string("")) for b_geo
[00:45] < Frame: 1356 >next task?
[00:45] < Frame: 1356 >CKeywordConstructionTask::Init b_geo
[00:45] < Frame: 1356 >Given the go ahead :: socket
[00:45] < Frame: 1356 >Given the go ahead :: badblock
[00:45] < Frame: 1356 >Given the go ahead :: logic_bomb
[00:45] < Frame: 1356 >Given the go ahead :: mineblaster
if(targ == string("")) for b_geo
[00:45] < Frame: 1356 >Value tasklists\normal\assembler missing in file buffer
[00:45] < Frame: 1356 >loading contents of tasklist :: assembler :: filling tasklist with #2 items
[00:45] < Frame: 1356 >loaded contents of tasklist :: assembler :: loaded tasklist at 2 items
[00:45] < Frame: 1356 >CKeywordConstructionTask::Init b_randmove
[00:45] < Frame: 1356 >issuing random move
[00:45] < Frame: 1358 >issuing command in update()
[00:45] < Frame: 1358 >Command: ID: 10 Timeout: 2147483647 params: 1153.93, 956.468, 973.528, source of command: move CActions
[00:45] < Frame: 1358 >issuing command in update() succeeded
[00:45] < Frame: 1362 >next task?
[00:45] < Frame: 1362 >CKeywordConstructionTask::Init b_geo
[00:45] < Frame: 1362 >Given the go ahead :: socket
[00:45] < Frame: 1362 >Given the go ahead :: badblock
[00:45] < Frame: 1362 >Given the go ahead :: logic_bomb
[00:45] < Frame: 1362 >Given the go ahead :: mineblaster
if(targ == string("")) for b_geo
[00:45] < Frame: 1367 >next task?
[00:45] < Frame: 1367 >CKeywordConstructionTask::Init b_geo
[00:45] < Frame: 1367 >Given the go ahead :: socket
[00:45] < Frame: 1367 >Given the go ahead :: badblock
[00:45] < Frame: 1367 >Given the go ahead :: logic_bomb
[00:45] < Frame: 1367 >Given the go ahead :: mineblaster
if(targ == string("")) for b_geo
[00:45] < Frame: 1367 >Value tasklists\normal\assembler missing in file buffer
[00:45] < Frame: 1367 >loading contents of tasklist :: assembler :: filling tasklist with #2 items
[00:45] < Frame: 1367 >loaded contents of tasklist :: assembler :: loaded tasklist at 2 items
[00:45] < Frame: 1367 >CKeywordConstructionTask::Init b_randmove
[00:45] < Frame: 1367 >issuing random move
[00:45] < Frame: 1370 >issuing command in update()
[00:45] < Frame: 1370 >Command: ID: 10 Timeout: 2147483647 params: 1161.71, 958.623, 971.891, source of command: move CActions
[00:45] < Frame: 1370 >issuing command in update() succeeded
[00:45] < Frame: 1374 >next task?
[00:45] < Frame: 1374 >CKeywordConstructionTask::Init b_geo
[00:45] < Frame: 1374 >Given the go ahead :: socket
[00:45] < Frame: 1374 >Given the go ahead :: badblock
[00:45] < Frame: 1374 >Given the go ahead :: logic_bomb
[00:45] < Frame: 1374 >Given the go ahead :: mineblaster
if(targ == string("")) for b_geo
[00:45] < Frame: 1376 >next task?
[00:45] < Frame: 1376 >CKeywordConstructionTask::Init b_geo
[00:45] < Frame: 1376 >Given the go ahead :: socket
[00:45] < Frame: 1376 >Given the go ahead :: badblock
[00:45] < Frame: 1376 >Given the go ahead :: logic_bomb
[00:45] < Frame: 1376 >Given the go ahead :: mineblaster
if(targ == string("")) for b_geo
[00:45] < Frame: 1376 >Value tasklists\normal\assembler missing in file buffer
[00:45] < Frame: 1376 >loading contents of tasklist :: assembler :: filling tasklist with #2 items
[00:45] < Frame: 1376 >loaded contents of tasklist :: assembler :: loaded tasklist at 2 items
[00:45] < Frame: 1376 >CKeywordConstructionTask::Init b_randmove
[00:45] < Frame: 1376 >issuing random move
[00:45] < Frame: 1379 >issuing command in update()
[00:45] < Frame: 1379 >Command: ID: 10 Timeout: 2147483647 params: 1181.14, 958.623, 943.588, source of command: move CActions
[00:45] < Frame: 1379 >issuing command in update() succeeded
Nevermind, I found out. Indeed reading the previous page was useful. It couldn't build because my "spacing" was too high and cliff too close to my geospot. By putting all spacing to 0, and telling asm to build socket and not geo, they know spam socket fast, as they should. Good, maybe I'll get some KP ai after all.
By the way, is there any way to assign "weight" to tasks?
Edit: Now, the AI plays fine. However, only on certain start positions. The AI
fails to notice geos that are north or far. It only "sees" the geos that are south. Exemple:

Pink and red found the geo on the nearest corner, and went to build there.
White and blue assembler stays idle right out of kernel. It doesn't see the geo that are north, or far south. And so white and blue don't develop, and offer no match. This is 100% replicable.
Relevant section of log:
[01:38] < Frame: 2950 >BuildPlacement returned UpVector or some other nasty position, a build location wasn't found!
[01:39] < Frame: 2973 >next task?
[01:39] < Frame: 2973 >CUnitConstructionTask::Init :: socket
[01:39] < Frame: 2973 >loading contents of tasklist :: assembler9 :: filling tasklist with #1 items
[01:39] < Frame: 2973 >CUnitConstructionTask::CUnitConstructionTask building :: socket using builder::assembler
[01:39] < Frame: 2973 >loaded contents of tasklist :: assembler9 :: loaded tasklist at 1 items
[01:39] < Frame: 2973 >CUnitConstructionTask::Init :: socket
[01:39] < Frame: 2973 >bad pos(1)6
[01:39] < Frame: 2973 >BuildPlacement returned UpVector or some other nasty position, a build location wasn't found!
[01:40] < Frame: 3001 >next task?
[01:40] < Frame: 3001 >CUnitConstructionTask::Init :: socket
[01:40] < Frame: 3001 >loading contents of tasklist :: assembler9 :: filling tasklist with #1 items
[01:40] < Frame: 3001 >CUnitConstructionTask::CUnitConstructionTask building :: socket using builder::assembler
[01:40] < Frame: 3001 >loaded contents of tasklist :: assembler9 :: loaded tasklist at 1 items
[01:40] < Frame: 3001 >CUnitConstructionTask::Init :: socket
[01:40] < Frame: 3001 >bad pos(1)6
[01:40] < Frame: 3001 >BuildPlacement returned UpVector or some other nasty position, a build location wasn't found!
[01:41] < Frame: 3034 >next task?
Yes, your AI refuse any "Up" build location. Plz fix kthx etc.
Note: If I manually move the white assembler north of the white kernel (good thing ntAI now doesn't immediatly cancel any order I give it), then the white AI starts to accept to go build on the geos. (Another case where b_random_mov could be useful to workaround other bugs, if b_random_mov moved more than 2 pixels.)