{ name: "Epic combat.",
effect: "The Final Monster gains a bonus of +3 Strength.",
unique: true },
-
+ { name: "Red herring.",
+ action: "Shuffle the remaining corridors together and redistribute the cards as if you were setting up the game." },
+
// Events from Sean Allen's random scenario generator.
// http://boardgamegeek.com/filepage/57107/random-scenario-generator
{ name: "Fire from above.",
- effect: "Dragons gains a bonus of +1 Strength.",
+ effect: "Dragons gain a bonus of +1 Strength.",
requires: ["dragons", "noncanonical"],
unique: true },
{ name: "Bad dreams.",
requires: ["noncanonical"],
unique: true },
{ name: "Backs against the wall.",
- effect: "Any monster with a Tenacity token is also Fierce.",
+ effect: "Any monster with a Tenacity token is also <strong>Fierce</strong>.",
requires: ["noncanonical"],
unique: true },
- { name: "Dead end.",
- action: "Shuffle the remaining corridors together and redistribute the cards as if you were setting up the game.",
- requires: ["noncanonical"] },
{ name: "Surrounded.",
- effect: "All monsters have Supremacy.",
+ effect: "All monsters have <strong>Supremacy</strong>.",
requires: ["noncanonical"],
unique: true },
+ { name: "The torch has gone out.",
+ action: "The next dungeon card is placed face-down.", },
// Events from Stephane Renard's scenario.
// http://docfox.free.fr/spip.php?article129
- { name: "What was that?",
- action: "The next dungeon card is placed face-down.",
- requires: ["noncanonical"] },
{ name: "Malediction.",
action: "Discard all quests.",
requires: ["noncanonical"],
// Events of my own devising.
{ name: "Unwanted attention.",
- effect: "Unique monsters gain a bonus of +2 Strength.",
+ effect: "Unique monsters gain a bonus of +1 Strength.",
requires: ["noncanonical"],
unique: true },
{ name: "Spiked the punch.",
effect: "Greenskins have 1d8 Strength.",
requires: ["noncanonical"],
unique: true },
- { name: "Dropped the torch.",
+ { name: "Lost in the fog.",
effect: "After defeating a card, roll a die. On an odd number its replacement is placed face-down.",
requires: ["noncanonical"],
unique: true },
action: "Randomly discard four of your defeated dungeon cards.",
requires: ["noncanonical"] },
{ name: "Adamantine armor.",
- effect: "All monsters gain Immunity 1.",
+ effect: "All monsters gain <strong>Immunity 1</strong>.",
requires: ["noncanonical"],
unique: true },
{ name: "Normative assumptions.",
effect: "Effects concerning ♂ instead concern ♀, and vice versa.",
requires: ["noncanonical"],
unique: true },
+ { name: "Infighting.",
+ effect: "Greenskins have <strong>Undead +1</strong>, <strong>Demons -1</strong>. Demons have <strong>Greenskins +1</strong>, <strong>Undead -1</strong>. Undead have <strong>Demons +1</strong>, <strong>Greenskins -1</strong>.",
+ requires: ["noncanonical"],
+ unique: true },
+ { name: "New moon.",
+ effect: "Demons have <strong>Veil of Shadow</strong>.",
+ requires: ["noncanonical", "demons"],
+ unique: true },
+ { name: "Camouflage.",
+ effect: "Greenskins have <strong>Veil of Shadow</strong>.",
+ requires: ["noncanonical"],
+ unique: true },
+ { name: "Cryptic shades.",
+ effect: "Undead have <strong>Veil of Shadow</strong>.",
+ requires: ["noncanonical", "undead"],
+ unique: true },
+ { name: "Lingering smoke.",
+ effect: "Dragons have <strong>Veil of Shadow</strong>.",
+ requires: ["noncanonical", "dragons"],
+ unique: true },
+ { name: "Hypnotizing gaze.",
+ effect: "Bubbleyes have <strong>Veil of Shadow</strong>.",
+ requires: ["noncanonical", "bubbleyes"],
+ unique: true },
+
];
var NOTHING = { name: "Nothing happens." };
var events = [];
var style;
-window.addEventListener('DOMContentLoaded', function () {
+
+function generateScenario () {
var parts = location.hash.slice(1).split(',');
events = generate(parts, parts.shift() | 0, parts.shift() | 0);
style = document.createElement("style");
document.head.appendChild(style);
randomizeName();
-});
+}
+
+function getEvents (matcher) {
+ return EVENTS.filter(matcher);
+}
+
+function wrapRow (row) {
+ return "<tr><td>" + row + "</td></tr>";
+}
+
+function iscanonical (event) {
+ return !isnoncanonical(event);
+}
+function isnoncanonical (event) {
+ return ~(event.requires || []).indexOf('noncanonical');
+}
+
+function canonicalToHTML (sender) {
+ sender.innerHTML = EVENTS.filter(iscanonical)
+ .map(toHTML).sort().map(wrapRow).join('');
+}
+
+function noncanonicalToHTML (sender) {
+ sender.innerHTML = EVENTS.filter(isnoncanonical)
+ .map(toHTML).sort().map(wrapRow).join('');
+}
function nextEvent (sender) {
if (!events.length) {