
The basic engine of AA is topologically correct: the grid consists of eFaces ( triangles ) that are connected; every cycle is in exactly one of those eFaces at a time and when it passes to another eFace, it has to go over the edge. If that edge has a wall on it, BOOM.
However, there is a flaw in the design: It only works while the grid is not changing. If the grid changes, some eFaces get destroyed and others are created. If your cycle is on a eFace that is destroyed, you will be assigned a new one. If you are lucky, that eFace lies on the other side of a wall and you cheated. I hope to get to fix this root of some problems soon.
As some of you have seen, the cycle's walls don't get inserted into the grid right away, but with a delay. That is to avoid the above eFace-deletion problem. Maybe this workaround can be removed when that problem is solved.
But in the meantime, I coded in some sort of police that checks if something unusual is going on: whenever two walls run exactly parallel, the functions eWall::RunsParallel*() get called ( one active, one passive, since there are two walls involved ). Likewise, if two walls turn out to cross, the functions eWall::SplitBy*() get called. The simple reaction of a player wall to the active versions of these funktions is to kill its cycle. Since the walls are put into the grid with a delay, this execution by the topology police appears after the cause and feels like a lag death. Not perfect, but at least you die. This should prevent players from enjoying to get through their own walls or the rim wall. They still get through, but ( provided they don't find new tricks ) die shortly afterwards.
Then I found a real bug in eGrid::DrawLine() when exactly parallel and overlapping lines are drawn: the old wall got destroyed... I guess this was the rip bug since when it happened to the rim wall, a hole would be cut through it and the floor as well. It should be fixed now.
Sorry for
a) not fixing it earlier, but back in the days I used to debug on a P266 MMX without 3d card and the bugs are found better at higher FPS
b) for writing such unreadable code as in eGrid.cpp ( Hey, I ran out of letters for variables...

c) for taking away the pleasure of fixing it on your own.