{ name: "Psi assault.",
effect: "You cannot use ultimate powers.",
+ lock: ["ultimates"],
unique: true },
-/* TODO: Figure out how to implement this well.
{ name: "Entering an anti-magic zone.",
effect: "You cannot use ultimate powers.",
- unique: true,
+ lock: ["ultimates"],
duration: 3,
later: { name: "Leaving the anti-magic zone.",
- effect: "You may use ultimate powers again." }
+ effect: "You may use ultimate powers again.",
+ clear: ["ultimates"] }
},
-*/
+
// Events from Sean Allen's random scenario generator.
// http://boardgamegeek.com/filepage/57107/random-scenario-generator
{ name: "Fire from above.",
var chosen = [];
var i;
+ var pending = [];
+ var locks = [];
+ var event;
+
+ function pend (event, i) {
+ while (pending[i]) ++i
+ pending[i] = event;
+ }
+
function canStillHappen (event) {
return issubset(event.requires || [], flags)
- && !(event.unique && contains.call(chosen, event));
+ && !(event.unique && contains.call(chosen, event))
+ && !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 || []);
}
- for (i = 0; i < events; ++i)
- chosen.push(choice(EVENTS.filter(canStillHappen)));
+ for (i = 0; i < pending.length; ++i)
+ if (pending[i])
+ chosen.push(pending[i]);
for (i = 0; i < nop / 2; ++i) {