Optimizated calculation of the next step

for (int y=0; y<320; y++) { for (int x=0; x<240; x++) { int n = x+y*240; byte nOriginal = m_pData[n]; if ( (x>0) && (x<239) && (y>0) && (y<319) ) { //top left if ( ( 1 + m_pData[n-241] )%MAX_INDEX == nOriginal) { m_pData2[n] = m_pData[n-241]; } //top if ( ( 1 + m_pData[n-240] )%MAX_INDEX == nOriginal) { m_pData2[n] = m_pData[n-240]; } //top right if ( ( 1 + m_pData[n-239] )%MAX_INDEX == nOriginal) { m_pData2[n] = m_pData[n-239]; } //left if ( ( 1 + m_pData[n-1] )%MAX_INDEX == nOriginal) { m_pData2[n] = m_pData[n-1]; } //right if ( ( 1 + m_pData[n+1] )%MAX_INDEX == nOriginal) { m_pData2[n] = m_pData[n+1]; } //bottom left if ( ( 1 + m_pData[n+239] )%MAX_INDEX == nOriginal) { m_pData2[n] = m_pData[n+239]; } //bottom if ( ( 1 + m_pData[n+240] )%MAX_INDEX == nOriginal) { m_pData2[n] = m_pData[n+240]; } //bottom right if ( ( 1 + m_pData[n+241] )%MAX_INDEX == nOriginal) { m_pData2[n] = m_pData[n+241]; } } else { for (int dx=-1; dx<=1; dx++) { for (int dy=-1; dy<=1; dy++) { int newX = (x+dx+240)%240; int newY = (y+dy+320)%320; byte nNeigh = m_pData[newX+240*newY]; if ((1+nNeigh)%MAX_INDEX == nOriginal) { m_pData2[n] = nNeigh; } } } } } }