I wrote a little microphone array simulator in JavaScript.
I wanted to create an array with a cardioid response. One text I found said I should get that if I combine omni and figure-eight microphones, but that didn't work.
Another text said you needed to make a figure-eight microphone with a delayed rear port.
This is the 20 - 20000 Hz polar pattern of a two-microphone array, with the elements spaced 2 cm apart, with one element inverted and delayed by 58.3 us.