Mon 03 Apr 2006 08:54:46 PM UTC, original submission:
listedAddr seems to be initialized with fields which have
different gradient values.
(It could also be the calculation which causes the malfunction
but I don't think so)
I have experienced this with different versions of cvs
including the one from 2. april.
Here is a mail I wrote to Simon which explains it.
> I don't know about all the places which initialize a gradient, but if
> gradients are really initiallized with different values, I think this
> is a bug. (listedAddr would no more be guaranteed to be big enough
> because fields could be listed more than once)
Ok. I now I'm sure.
I have changed Map.cpp to print out errors when former and present g
differ two much.
in updateGlobalGradientVersionSimple:
Uint8 oldg=0;
while ( ... )
{
...
Uint8 g = gradient[(y << wDec) | x] - 1;
if ( (oldg != 0) && (oldg != g) && (oldg != g+1))
std::cerr << "oldg: " << (int) oldg << "g: " << (int) g << std::endl;
oldg = g;
...
}
Then I started A Big Pond with one AI in my team and one in the other,
saved the game and started glob2 again with -nox and this saved game.
After a minute or so I got a lot of output like:
...
oldg: 137g: 138
oldg: 138g: 136
oldg: 136g: 137
...
I attach this change as a patch and copy this mail to the bug tracker.
|