As I said this was the biggest piece of the project so far. Move generation has to be very effective and even a small bug may crash the program.
Now that this is done Mediocre has a solid foundation to stand on when it is time to start writing the actual engine.
We can now make and unmake moves on the board and generate all possible moves available to each side.
The next step will be writing the search algorithm.