pretty sure IOptions<T> can come up null if you have no configuration for that class. I mean, the actual variable won't be null, but .Value will be null
You also really shouldn't be using nested lists for this. This is a perfect candidate for a matrix (something like var walls = new bool[maxX, maxY] and the same for cells)
yeah this is definitely a candidate for a debugger. Set a breakpoint at your first for loop and see what rbottom is. It's based on a parameter and then you do some math on it so you should confirm that it's actually going to loop the requisite amount