I do apologize that I’m only sending this now but the engine changes was quite short notice so I have limited time to tinker.
I ran 4 differently seeded maps where I only played my own bot against itself in a 4V4 setting.
Worldseed: 52323, 31726, 91825, 19288
My results for the above always had my player A bot win.
At first I reasoned seed plays a big part, But that does not explain how my bot with the exact same population growth for the vast majority of the match would end with Player A bot having 100 000 stone Player 2 had 50 000 while Player 3 and 4 both at 25 000
Because of storage limitations positional advantages are almost completely limited (depending on the strategy and level of a bot)
Then I traced the way the engine works and realized that:
This AddAction Function in Botobject.cs line 50 triggers individually for each bot,
So I did something weird, I added a 200 MS delay to my player 1,2 and 3 bot, and suddenly my player 4 bot (who sent commands first) won, Went from last place to firstplace by adding a delay,
This means that the current engine advantages moves made quicker unfairly.
Especially a issue if different languages have different processing factors.
So the conclusion is the bot that submitted moves first gets all the spoils.
The most probable solution is to wait the full 200MS, only process moves at the very end. (So that you can assume all moves are in),
Then you can calculate the total amount of “legal units” inbound to a node from every player.
Then you can assign a percentage to every player and example say if players sent the following units to nodes:
30,40,20,10 then its 30%, 40%, 20%, 10%.
And either the resource distribution is split or the base current Nodes are.
As this is an issue of fairness I do feel it supersedes any code freeze.
My own bot isnt very hard on time. But you definately do not want people who use AI libraries and time based processing to walk into a deathtrap either.
I still believe in fair.
This is very important. The solution should not be too complex, Mainly because you can assign weight to every player.
In the end I had to test my earlier question of:
What happens when two players sends units to the same node.