private void InitWalkGrid(byte screen, byte width) { byte stretch = 0; var screenGrid = _grid.GiveGrid(screen); var screenGridPos = Logic.GRID_SIZE; var wGridPos = new UShortAccess(_routeGrid, ((RouteGridSize >> 1) - RouteGridWidth - 2) * 2); Array.Clear(_routeGrid, 0, _routeGrid.Length); byte bitsLeft = 0; uint gridData = 0; for (byte gridCntY = 0; gridCntY < RouteGridHeight - 2; gridCntY++) { for (byte gridCntX = 0; gridCntX < RouteGridWidth - 2; gridCntX++) { if (bitsLeft == 0) { screenGridPos -= 4; gridData = screenGrid.ToUInt32(screenGridPos); bitsLeft = 32; } if ((gridData & 1) != 0) { wGridPos[0] = 0xFFFF; // block is not accessible stretch = width; } else if (stretch != 0) { wGridPos[0] = 0xFFFF; stretch--; } wGridPos.Offset -= 2; bitsLeft--; gridData >>= 1; } wGridPos.Offset -= 4; stretch = 0; } }