Du setzt den Partikel auf BEAM, du weißt es nur nicht!

Mittels
set(p,PASSABLE|OVERLAY);
p.blue = 100;
...
aktivierst du BEAM, da PASSABLE für Partikel nicht definiert ist. Partikel habe keine Kollisionserkennung und sind daher immer passierbar. Setzt du nun dennoch PASSABLE, so aktivierst du (intern) Flag 10, welches aber bei Partikeln für BEAM reserviert ist (also das 10. Flag/ bit).