+ && !(event.unique && contains.call(chosen, event))
+ && !(event.lock && intersects(event.lock || [], locks));
+ }
+
+ for (i = 0; i < events; ++i) {
+ event = pending.shift()
+ || choice(EVENTS.filter(canStillHappen));
+ chosen.push(event);
+ if (event.later)
+ pend(event.later, (Math.random() * chosen[i].duration) | 0);
+ locks = locks.concat(event.lock || [])
+ .filter(not(contains), event.clear || []);