From 6d1e12b63ef1af504c2252c0a97995a8a385d936 Mon Sep 17 00:00:00 2001 From: Stefan Topfstedt Date: Sun, 21 Jun 2020 21:47:51 -0700 Subject: [PATCH 01/19] show pods info. --- assets/css/style.css | 4 ++ assets/js/app.deck.js | 118 ++++++++++++++++++++++++++++++----- assets/js/app.ui.js | 21 ++++--- translations/messages.de.yml | 2 + translations/messages.en.yml | 2 + translations/messages.es.yml | 2 + 6 files changed, 125 insertions(+), 24 deletions(-) diff --git a/assets/css/style.css b/assets/css/style.css index 86786325..3c657d97 100755 --- a/assets/css/style.css +++ b/assets/css/style.css @@ -506,6 +506,10 @@ abbr.legality.rl-melee { color: #639; } +abbr.legality.rl-pod { + color: #995932; +} + abbr.legality.banned { color: #f00; } diff --git a/assets/js/app.deck.js b/assets/js/app.deck.js index e6e0a120..510c5218 100755 --- a/assets/js/app.deck.js +++ b/assets/js/app.deck.js @@ -24,7 +24,7 @@ ), header_tpl = _.template('
<%= name %> (<%= quantity %>)
'), card_line_tpl = _.template(' <%= card.label %><%= labels %>'), - card_line_label_tpl = _.template('<%= label %>'), + card_line_label_tpl = _.template('<%= label %>'), layouts = {}, layout_data = {}, // Restricted/Banned Lists issued by The Conclave (v1.0) @@ -83,6 +83,32 @@ "15033", // Clydas (DotE)" "15045", // Bribery (DotE)" ], + // fake pods + joust_pods = [ + { + name: "P1", + restricted: "10045", // The Wars To Come (SoD) + cards: [ + "01119", // Doran's Game + ], + }, + { + name: "P2", + restricted: "11051", // Drowned God Fanatic (SoKL) + cards: [ + "12029", // Desert Raider (KotI) + "08091", // Tarle The Thrice-Drowned (TFM) + ], + }, + { + "name": "P3", + restricted: "06098", // Flea Bottom (OR) + cards: [ + "12029", // Desert Raider (KotI) + "10016", // Shadow City Bastard (SoD) + ] + } + ], melee_restricted_list = [ "01001", // A Clash of Kings (Core) "01013", // Heads on Spikes (Core) @@ -163,6 +189,26 @@ '01205': 'tyrell' }; + var get_pods_map = function( pods_list) { + var map = {}; + + _.each(pods_list, function (pod) { + if (! map.hasOwnProperty(pod.restricted)) { + map[pod.restricted] = []; + } + map[pod.restricted].push(pod); + _.each(pod.cards, function (card) { + if (! map.hasOwnProperty(card)) { + map[card] = []; + } + map[card].push(pod); + }); + }) + return map; + } + + var joust_pods_map = get_pods_map(joust_pods); + /* * Checks a given card's text has the "Shadow" keyword. * @param {Object} card @@ -203,6 +249,7 @@ var cards = app.deck.get_cards(); var i, n; var counter = 0; + var pods_map = get_pods_map(); restricted_list = restricted_list || []; @@ -1196,31 +1243,70 @@ deck.get_card_labels = function get_card_labels(card) { var labels = []; - var out = ''; - var i, n; + var pods; + var restricted; + var cards; + var formatCardTitle = function (card) { + var rhett = ''; + rhett += '"' + card.name.replace(/"/g, '') + '"'; + if (card.is_multiple) { + rhett += ' (' + card.pack_code +')'; + } + return rhett; + } if (-1 !== joust_restricted_list.indexOf(card.code)) { - labels.push({ name: '[J]', keyword: 'rl-joust', title: Translator.trans('keyword.rl-joust.title') }); + labels.push({ name: '[J]', class: "rl-joust", title: Translator.trans('keyword.rl-joust.title') }); } if (-1 !== melee_restricted_list.indexOf(card.code)) { - labels.push({ name: '[M]', keyword: 'rl-melee', title: Translator.trans('keyword.rl-melee.title') }); + labels.push({ name: '[M]', class: "rl-melee", title: Translator.trans('keyword.rl-melee.title') }); } if (-1 !== banned_list.indexOf(card.code)) { - labels.push({ name: '[B]', keyword: 'banned', title: Translator.trans('keyword.banned.title') }); + labels.push({ name: '[B]', class: "banned", title: Translator.trans('keyword.banned.title') }); } - if (! labels.length) { - return out; + if (joust_pods_map.hasOwnProperty(card.code)) { + pods = joust_pods_map[card.code]; + _.each(pods, function (pod) { + restricted = app.data.cards.findById(pod.restricted); + cards = app.data.cards.find({ code: { $in: pod.cards }}); + + if (1 === pod.cards.length) { + labels.push({ + name: '[' + pod.name + ']', + class: 'rl-pod', + title: Translator.trans('card.podinfo_single', { + restricted: formatCardTitle(restricted), + card: formatCardTitle(cards[0]), + format: Translator.trans('tournamentLegality.joust').toUpperCase() + }) + }); + } else { + labels.push({ + name: '[' + pod.name + ']', + class: 'rl-pod', + title: Translator.trans('card.podinfo_multiple', { + restricted: formatCardTitle(restricted), + cards: _.map(cards, function (card) { + return formatCardTitle(card); + }).join(', '), + format: Translator.trans('tournamentLegality.joust').toUpperCase() + }), + }); + } + }); } - out = out + ' '; - for (i = 0, n = labels.length; i < n; i++) { - out = out + ' ' + card_line_label_tpl({ - label: labels[i].name, - keyword: labels[i].keyword, - title: labels[i].title - }); + if (! labels.length) { + return ''; } - return out; + return _.map(labels, function (label) { + return card_line_label_tpl({ + label: label.name, + keyword: label.keyword || '', + title: label.title, + cls: label.class || '' + }); + }).join(' '); } /** diff --git a/assets/js/app.ui.js b/assets/js/app.ui.js index 5e12f4e8..4e8ede54 100755 --- a/assets/js/app.ui.js +++ b/assets/js/app.ui.js @@ -202,16 +202,21 @@ ui.on_data_loaded(); data_loaded.resolve(); }); - $(document).on('start.app', function () - { - if(typeof ui.on_all_loaded === 'function') + $(document).on('start.app', function () { + var title, keyword; + if (typeof ui.on_all_loaded === 'function') { ui.on_all_loaded(); - $('abbr').each(function (index, element) - { - var keyword = $(this).data('keyword'); - var title = Translator.trans('keyword.' + keyword + '.title'); - if(title) + } + $('abbr').each(function (index, element) { + if ($(this).data('title')) { + title = $(this).data('title'); + } else if ($(this).data('keyword')) { + keyword = $(this).data('keyword'); + title = Translator.trans('keyword.' + keyword + '.title'); + } + if (title) { $(element).attr('title', title).tooltip(); + } }); }); $.when(dom_loaded, data_loaded).done(function () diff --git a/translations/messages.de.yml b/translations/messages.de.yml index bd967880..bacbc8ef 100644 --- a/translations/messages.de.yml +++ b/translations/messages.de.yml @@ -378,6 +378,8 @@ pag: cardscount: "{0} Keine Karten | {1} Eine Karte | ]1,Inf] %count% Karten" card: + podinfo_single: "%format% - Falls %restricted% Deine Eingeschränkte Karte ist, dann kannst Du %card% nicht in Dein Deck aufnehmen." + podinfo_multiple: '%format% - Falls %restricted% Deine Eingeschränkte Karte ist, dann kannst Du die folgenden Karten nicht in Dein Deck aufnehmen: %cards%.' keywords: shadow: Schatten traits: diff --git a/translations/messages.en.yml b/translations/messages.en.yml index 2a1225a7..822307b4 100644 --- a/translations/messages.en.yml +++ b/translations/messages.en.yml @@ -378,6 +378,8 @@ pag: cardscount: "{0} There is no cards | {1} One card | ]1,Inf] %count% cards" card: + podinfo_single: '%format% - If %restricted% is your chosen restricted card, you cannot include %card% in your deck.' + podinfo_multiple: '%format% - If %restricted% is your chosen restricted card, you cannot include the following cards in your deck: %cards%.' keywords: shadow: Shadow traits: diff --git a/translations/messages.es.yml b/translations/messages.es.yml index cf47f294..15cb2fbe 100644 --- a/translations/messages.es.yml +++ b/translations/messages.es.yml @@ -377,6 +377,8 @@ pag: cardscount: "{0} No hay cartas | {1} Una carta | ]1,Inf] %count% cartas" card: + podinfo_single: '%format% - Si %restricted% es tu carta restringida elegida, no puedes incluir %card% en tu mazo.' + podinfo_multiple: '%format% - Si %restricted% es tu carta restringida elegida, no puedes incluir las siguientes cartas en tu mazo: %cards%.' keywords: shadow: Sombra traits: From f81705434749305ba491f8310bcf2318441388eb Mon Sep 17 00:00:00 2001 From: Stefan Topfstedt Date: Mon, 22 Jun 2020 19:05:16 -0700 Subject: [PATCH 02/19] reduces the number of queries to the db. --- assets/js/app.deck.js | 76 ++++++++++++++++++++----------------------- 1 file changed, 36 insertions(+), 40 deletions(-) diff --git a/assets/js/app.deck.js b/assets/js/app.deck.js index 510c5218..2bed6f5b 100755 --- a/assets/js/app.deck.js +++ b/assets/js/app.deck.js @@ -226,10 +226,10 @@ /* * Validates the current deck against a list of banned cards. + * @param {Array} cards * @return {boolean} */ - var validate_against_banned_list = function() { - var cards = app.deck.get_cards(); + var validate_against_banned_list = function(cards) { var i, n; for (i = 0, n = cards.length; i < n; i++) { if (-1 !== banned_list.indexOf(cards[i].code)) { @@ -241,15 +241,14 @@ /* * Validates the current deck against a given list of restricted cards. + * @param {Array} cards * @param {Array} restricted_list * @return {boolean} */ - var validate_deck_against_restricted_list = function(restricted_list) { + var validate_deck_against_restricted_list = function(cards, restricted_list) { var is_valid = true; - var cards = app.deck.get_cards(); var i, n; var counter = 0; - var pods_map = get_pods_map(); restricted_list = restricted_list || []; @@ -266,6 +265,33 @@ return is_valid; }; + /* + * Checks if the current deck complies with the restricted list for joust. + * @param {Array} cards + * @return {boolean} + */ + var is_joust_restricted_list_compliant = function(cards) { + return validate_deck_against_restricted_list(cards, joust_restricted_list); + }; + + /* + * Checks if the current deck complies with the restricted list for melee. + * @param {Array} cards + * @return {boolean} + */ + var is_melee_restricted_list_compliant = function(cards) { + return validate_deck_against_restricted_list(cards, melee_restricted_list); + }; + + /* + * Checks if the current deck complies with the "banned" list. + * @param {Array} cards + * @return {boolean} + */ + var is_banned_list_compliant = function(cards) { + return validate_against_banned_list(cards); + } + /** * Creates a new line-item for a given card to a given DOM element. * @param {Object} card The card object @@ -290,8 +316,6 @@ layouts[4] = _.template('
<%= meta %>
<%= plots %>
<%= cards %>
'); layouts[5] = _.template('
<%= meta %>
<%= cards %>
'); - - /** * @memberOf deck * @param {object} data @@ -611,7 +635,7 @@ } }; - /** + /** * @memberOf deck * @param {object} container * @param {object} options @@ -631,7 +655,6 @@ deck.get_layout_data = function get_layout_data(options) { - var data = { images: '', meta: '', @@ -646,6 +669,7 @@ var problem = deck.get_problem(); var agendas = deck.get_agendas(); var warnings = deck.get_warnings(); + var cards = deck.get_cards(); deck.update_layout_section(data, 'images', $('
')); agendas.forEach(function (agenda) { @@ -672,15 +696,15 @@ deck.update_layout_section(data, 'meta', $('
' + Translator.trans('decks.edit.meta.packs', {"packs": packs}) + '
')); var legalityContents = '' + Translator.trans('tournamentLegality.title') +': '; - var isBannedListCompliant = deck.is_banned_list_compliant(); - if (isBannedListCompliant && deck.is_joust_restricted_list_compliant()) { + var isBannedListCompliant = is_banned_list_compliant(cards); + if (isBannedListCompliant && is_joust_restricted_list_compliant(cards)) { legalityContents += ' '; } else { legalityContents += ' '; } legalityContents += Translator.trans('tournamentLegality.joust') + ' | '; - if (isBannedListCompliant && deck.is_melee_restricted_list_compliant()) { + if (isBannedListCompliant && is_melee_restricted_list_compliant(cards)) { legalityContents += ' '; } else { legalityContents += ' '; @@ -1362,32 +1386,4 @@ return card.type_code === 'character' && card.traits.indexOf(Translator.trans('card.traits.kingsguard')) !== -1; } }; - - /** - * Checks if the current deck complies with the restricted list for joust. - * @return {boolean} - */ - deck.is_joust_restricted_list_compliant = function is_joust_restricted_list_compliant() - { - return validate_deck_against_restricted_list(joust_restricted_list); - }; - - /** - * Checks if the current deck complies with the restricted list for melee. - * @return {boolean} - */ - deck.is_melee_restricted_list_compliant = function is_melee_restricted_list_compliant() - { - return validate_deck_against_restricted_list(melee_restricted_list); - }; - - /** - * Checks if the current deck complies with the "banned" list. - * @return {boolean} - */ - deck.is_banned_list_compliant = function is_banned_list_compliant() - { - return validate_against_banned_list(); - } - })(app.deck = {}, jQuery); From 7f04afb585f8d9ee4322fb0777ad346993a8172b Mon Sep 17 00:00:00 2001 From: Stefan Topfstedt Date: Mon, 22 Jun 2020 19:30:03 -0700 Subject: [PATCH 03/19] adds client-side pod validation. --- assets/js/app.deck.js | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/assets/js/app.deck.js b/assets/js/app.deck.js index 2bed6f5b..0210d0a5 100755 --- a/assets/js/app.deck.js +++ b/assets/js/app.deck.js @@ -96,15 +96,15 @@ name: "P2", restricted: "11051", // Drowned God Fanatic (SoKL) cards: [ - "12029", // Desert Raider (KotI) + "01111", // Dornish Paramour (Core) "08091", // Tarle The Thrice-Drowned (TFM) ], }, { - "name": "P3", + name: "P3", restricted: "06098", // Flea Bottom (OR) cards: [ - "12029", // Desert Raider (KotI) + "01111", // Dornish Paramour (Core) "10016", // Shadow City Bastard (SoD) ] } @@ -265,13 +265,37 @@ return is_valid; }; + /* + * Validates a given deck of cards against a given list of validation pods. + * + * @param {Array} cards + * @param {Array} pods + * @return {boolean} + */ + var validate_deck_against_pods = function(cards, pods) { + var is_valid = true; + var i, n; + var codes = _.pluck(cards, 'code'); + + + for (i = 0, n = pods.length; i < n; i++) { + if (-1 !== codes.indexOf(pods[i].restricted) + && _.intersection(pods[i].cards, codes).length) { + is_valid = false; + break; + } + } + return is_valid; + } + /* * Checks if the current deck complies with the restricted list for joust. * @param {Array} cards * @return {boolean} */ var is_joust_restricted_list_compliant = function(cards) { - return validate_deck_against_restricted_list(cards, joust_restricted_list); + return validate_deck_against_restricted_list(cards, joust_restricted_list) + && validate_deck_against_pods(cards, joust_pods); }; /* From 50cf137bdc7454c0710b79e39180ac931ae943a1 Mon Sep 17 00:00:00 2001 From: Stefan Topfstedt Date: Mon, 22 Jun 2020 19:52:28 -0700 Subject: [PATCH 04/19] adds server-side pod validation. --- src/Classes/RestrictedListChecker.php | 53 ++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/src/Classes/RestrictedListChecker.php b/src/Classes/RestrictedListChecker.php index af203132..c3654446 100644 --- a/src/Classes/RestrictedListChecker.php +++ b/src/Classes/RestrictedListChecker.php @@ -105,6 +105,35 @@ class RestrictedListChecker "13107", // Robert Baratheon (LMHR) ]; + /** + * @var array + */ + const JOUST_PODS = [ + [ + "name" => "P1", + "restricted" => "10045", // The Wars To Come (SoD) + "cards" => [ + "01119", // Doran's Game + ], + ], + [ + "name" => "P2", + "restricted" => "11051", // Drowned God Fanatic (SoKL) + "cards" => [ + "01111", // Dornish Paramour (Core) + "08091", // Tarle The Thrice-Drowned (TFM) + ], + ], + [ + "name" => "P3", + "restricted" => "06098", // Flea Bottom (OR) + "cards" => [ + "01111", // Dornish Paramour (Core) + "10016", // Shadow City Bastard (SoD) + ], + ], + ]; + /** * @param array $cardCodes * @return bool @@ -120,7 +149,8 @@ public function isLegalForMelee(array $cardCodes) */ public function isLegalForJoust(array $cardCodes) { - return $this->isLegal($cardCodes, self::JOUST_RESTRICTED_CARDS); + return $this->isLegal($cardCodes, self::JOUST_RESTRICTED_CARDS) + && $this->isPodsLegal($cardCodes, self::JOUST_PODS); } /** @@ -133,4 +163,25 @@ protected function isLegal(array $cardCodes, array $restrictedList) $intersection = array_intersect($cardCodes, $restrictedList); return 2 > count($intersection); } + + /** + * @param array $cards + * @param array $pods + * @return bool + */ + protected function isPodsLegal(array $cards, array $pods) + { + $isLegal = true; + foreach ($pods as $pod) { + $restricted = $pod['restricted']; + if (! in_array($restricted, $cards)) { + continue; + } + if (array_intersect($pod['cards'], $cards)) { + $isLegal = false; + break; + } + } + return $isLegal; + } } From a1dcaeb599910520472dacdd788c6e0e1d2b66e9 Mon Sep 17 00:00:00 2001 From: Stefan Topfstedt Date: Mon, 22 Jun 2020 20:00:21 -0700 Subject: [PATCH 05/19] rm new indicators from current RL. --- templates/Default/faq.en.html.twig | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/templates/Default/faq.en.html.twig b/templates/Default/faq.en.html.twig index 82803f82..e51ea4d7 100644 --- a/templates/Default/faq.en.html.twig +++ b/templates/Default/faq.en.html.twig @@ -566,14 +566,14 @@ Sea of Blood (Kings of the Isles, 45)
Great Hall (Guarding the Realm, 38)
Forced March (Sands of Dorne, 48)
- The King in the North (Favor of the Old Gods, 80)
- Return to the Fields (Kings of the Isles, 47)
- Kingdom of Shadows (Beneath the Red Keep, 79)
- Bribery (Dragons of the East, 45)
+ The King in the North (Favor of the Old Gods, 80)
+ Return to the Fields (Kings of the Isles, 47)
+ Kingdom of Shadows (Beneath the Red Keep, 79)
+ Bribery (Dragons of the East, 45)

-

+

Baratheon:
- Selyse Baratheon (Fury of the Storm, 8) + Selyse Baratheon (Fury of the Storm, 8)

Greyjoy:
@@ -583,13 +583,13 @@ Drowned Disciple (All Men Are Fools, 11)
Euron Crow’s Eye (Kings of the Isles, 2)
We Take Westeros! (Kings of the Isles, 46)
- Nighttime Marauders (The Shadow City, 12)
+ Nighttime Marauders (The Shadow City, 12)

Lannister:
Taena Merryweather (Lions of Casterly Rock, 10)
- The Red Keep (Dragons of the East, 30)
+ The Red Keep (Dragons of the East, 30)

@@ -604,8 +604,8 @@ Night's Watch
Yoren (The Blackwater, 85)
Bound for the Wall (The Blackwater, 86)
- Three-Finger Hobb (In Daznak's Pit, 85)
- Clydas (Dragons of the East, 33) + Three-Finger Hobb (In Daznak's Pit, 85)
+ Clydas (Dragons of the East, 33)

Stark:
@@ -635,9 +635,9 @@ Targaryen:
Hizdahr zo Loraq (The March on Winterfell, 33)
Meereen (The March on Winterfell, 34)
- Qotho (House of Thorns, 37)
- Gifts for the Widow (Dragons of the East, 14)
- Overwhelming Numbers (Dragons of the East, 22) + Qotho (House of Thorns, 37)
+ Gifts for the Widow (Dragons of the East, 14)
+ Overwhelming Numbers (Dragons of the East, 22)

Melee Restricted List

From c5e04e60fd0762c0bcf0ea5732f7ea5d626bc2f5 Mon Sep 17 00:00:00 2001 From: Stefan Topfstedt Date: Mon, 22 Jun 2020 20:22:00 -0700 Subject: [PATCH 06/19] adds section with additional rules to FAQ. --- assets/css/style.css | 9 ++ templates/Default/faq.en.html.twig | 135 +++++++++++++++++++---------- 2 files changed, 98 insertions(+), 46 deletions(-) diff --git a/assets/css/style.css b/assets/css/style.css index 3c657d97..dd396717 100755 --- a/assets/css/style.css +++ b/assets/css/style.css @@ -520,3 +520,12 @@ abbr.legality.banned { padding-left: 9px; padding-right: 9px; } + +/*** FAQ, Rules Reference, Tournament Regulations pages ******/ +#rules ul.rl-pod-list { + margin-bottom: 0; +} + +#rules div.example { + padding-left: 3em; +} diff --git a/templates/Default/faq.en.html.twig b/templates/Default/faq.en.html.twig index e51ea4d7..61fd08d8 100644 --- a/templates/Default/faq.en.html.twig +++ b/templates/Default/faq.en.html.twig @@ -201,7 +201,6 @@
  • Clearly display the infinite loop to the opponent (and tournament judge, if the opponent requires it). Thus, the player must display, using all cards involved, one full cycle of the infinite loop.
  • -
  • State how many times he or she wishes to execute the loop. For example, the player could say, "I will now execute this loop seventeen times." Then, resolve the loop that many times instantly. If the execution of this loop causes the player to win the game, the game is over and the executing player wins. @@ -251,24 +250,19 @@
  • A player cannot marshal, put into play, or take/gain control of a unique card if another copy of that card is in his or her dead pile.
  • -
  • A player cannot marshal or put into play a copy of an opponent's unique card if another copy of that unique card (owned either by the player attempting to bring the card into play, or by the opponent who owns the unique card that is attempting to enter play) is already in play or is in its owner's dead pile.
  • -
  • An ability that puts a unique card into play from a player's dead pile functions only if there would be no other copies of that card in that dead pile upon resolution of the ability.
  • -
  • If a player controls a unique card that he or she does not own, that player and that card's owner cannot marshal or put into play additional copies of that card, regardless of ownership.
  • -
  • If a player controls a unique card (regardless of ownership) that player cannot take/gain control of other copies of that card.
  • -
  • If a player owns and controls a unique card, each other copy of that card that he or she owns and controls that would enter play does so as a duplicate.
  • @@ -289,7 +283,6 @@
    +
    Baratheon:
    Selyse Baratheon (Fury of the Storm, 8)
    +
    Greyjoy:
    Raider from Pyke (Calm Over Westeros, 91)
    @@ -631,13 +633,13 @@ We Take Westeros! (Kings of the Isles, 46)
    Nighttime Marauders (The Shadow City, 12)
    - +
    Lannister:
    Taena Merryweather (Lions of Casterly Rock, 10)
    The Red Keep (Dragons of the East, 30)
    - +
    Martell:
    The Red Viper (Core, 109)
    @@ -645,7 +647,7 @@ A Mission in Essos (Music of Dragons, 76)
    Desert Raider (Kings of the Isles, 29)
    - +
    Night's Watch
    Yoren (The Blackwater, 85)
    @@ -653,6 +655,7 @@ Three-Finger Hobb (In Daznak's Pit, 85)
    Clydas (Dragons of the East, 33)
    +
    Stark:
    Wyman Manderly (The March on Winterfell, 21)
    @@ -660,6 +663,7 @@ Skagos (In Daznak’s Pit, 82)
    Meera Reed (Music of Dragons, 61)
    +
    Tyrell:
    Highgarden Minstrel (The Brotherhood Without @@ -676,7 +680,7 @@ Unexpected Guile (Pit of Snakes, 44)
    Oldtown Informer (The Red Wedding, 63)
    - +
    Targaryen:
    Hizdahr zo Loraq (The March on Winterfell, 33)
    @@ -711,12 +715,11 @@
    You Win or You Die (Someone Always Tells, 120)
    - +
    Baratheon:
    Robert Baratheon (Long May He Reign, 107) -
    - +
    Greyjoy:
    Great Kraken (Core, 78)
    Rise of the Kraken (Taking the Black, @@ -724,28 +727,27 @@ Corpse Lake (House of Thorns, 28)
    Drowned Disciple (All Men Are Fools, 11) -
    - +
    Lannister:
    Cersei Lannister (Lions of Casterly Rock, 1)
    Taena Merryweather (Lions of Casterly Rock, 10)
    - +
    Martell:
    Doran's Game (Core, 119)
    A Mission in Essos (Music of Dragons, 76)
    - +
    Stark:
    Eddard Stark (Wolves of the North, 3)
    Riverrun (Across the Seven Kingdoms, 3)
    - +
    Targaryen:
    Plaza of Pride (Watchers on the Wall, 36)
    @@ -753,7 +755,7 @@
    Queensguard (Streets of King’s Landing, 54)
    - +
    Tyrell:
    Lady Sansa's Rose (The Road to Winterfell, 24)
    From 072edc845cb2b28db07c703b9b246a183b1ec5e2 Mon Sep 17 00:00:00 2001 From: Stefan Topfstedt Date: Wed, 24 Jun 2020 08:10:14 -0700 Subject: [PATCH 08/19] tightens up language. --- templates/Default/faq.en.html.twig | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/templates/Default/faq.en.html.twig b/templates/Default/faq.en.html.twig index e91a28f0..fe96ccff 100644 --- a/templates/Default/faq.en.html.twig +++ b/templates/Default/faq.en.html.twig @@ -540,10 +540,10 @@ restricted cards in the same deck. A player may run as many copies of his or her chosen restricted card in a deck as the regular game rules (or card text) allow.

    -

    Some restricted cards are so powerful, their inclusion in a deck comes with additional deck building restrictions - for other cards.
    - If applicable, these additional restrictions are listed below the restricted card (indicated with an - icon).

    +

    Some restricted cards are so powerful that their inclusion in a deck comes with additional + deckbuilding restrictions.
    + If a player selects one of these cards as their restricted card, they may not include any of the cards + listed with immediately below them.

    For example:
    Doran's Game From 5060e74211ad444b185d121c543146114f7a7249 Mon Sep 17 00:00:00 2001 From: Stefan Topfstedt Date: Fri, 26 Jun 2020 18:55:01 -0700 Subject: [PATCH 09/19] take bin-pack agendas off the banned list. --- assets/js/app.deck.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/assets/js/app.deck.js b/assets/js/app.deck.js index 0210d0a5..f2fb30ae 100755 --- a/assets/js/app.deck.js +++ b/assets/js/app.deck.js @@ -27,7 +27,7 @@ card_line_label_tpl = _.template('<%= label %>'), layouts = {}, layout_data = {}, - // Restricted/Banned Lists issued by The Conclave (v1.0) + // Restricted/Banned Lists issued by The Conclave (v2.0) joust_restricted_list = [ "01109", // The Red Viper (Core) "02091", // Raider from Pyke (CoW) @@ -166,10 +166,6 @@ "16024", // Narrow Escape (TTWDFL) "16025", // Seductive Promise (TTWDFL) "16026", // Westeros Bleeds (TTWDFL) - "16027", // Aloof and Apart (TTWDFL) - "16028", // Dark Wings, Dark Words (TTWDFL) - "16029", // Knights of the Realm (TTWDFL) - "16030", // The Long Voyage (TTWDFL) "16031", // Benjen's Cache (TTWDFL) "16032", // Rioting (TTWDFL) "16033", // Rule By Decree (TTWDFL) From 04136177a6bcd8c53d789195d23b73c64ea43be0 Mon Sep 17 00:00:00 2001 From: Stefan Topfstedt Date: Fri, 26 Jun 2020 19:07:12 -0700 Subject: [PATCH 10/19] adds new cards to banned list. --- assets/js/app.deck.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/assets/js/app.deck.js b/assets/js/app.deck.js index f2fb30ae..54d0ba44 100755 --- a/assets/js/app.deck.js +++ b/assets/js/app.deck.js @@ -140,6 +140,13 @@ "13107", // Robert Baratheon (LMHR) ], banned_list = [ + "03038", // To the Rose Banner! (WotN) + "04001", // The Dragon's Tail (AtSK) + "05010", // Taena Merryweather (LoCR) + "05049", // Littlefinger's Meddling (LoCR) + "11076", // A Mission in Essos (MoD) + "12045", // Sea of Blood (KotI) + "13079", // Kingdom of Shadows (BtRK) "16001", // Ser Davos Seaworth (TTWDFL) "16002", // Melisandre's Favor (TTWDFL) "16003", // Wintertime Marauders (TTWDFL) From 2eb45e482e2e2f0eaa05343380fdd3c718f77b5d Mon Sep 17 00:00:00 2001 From: Stefan Topfstedt Date: Fri, 26 Jun 2020 19:24:11 -0700 Subject: [PATCH 11/19] updates joust RL. --- assets/js/app.deck.js | 41 +++++++++++++---------------------------- 1 file changed, 13 insertions(+), 28 deletions(-) diff --git a/assets/js/app.deck.js b/assets/js/app.deck.js index 54d0ba44..2e09d1e9 100755 --- a/assets/js/app.deck.js +++ b/assets/js/app.deck.js @@ -29,59 +29,44 @@ layout_data = {}, // Restricted/Banned Lists issued by The Conclave (v2.0) joust_restricted_list = [ - "01109", // The Red Viper (Core) + "02034", // Crown of Gold (TRtW) + "02065", // Halder (NMG) "02091", // Raider from Pyke (CoW) "02092", // Iron Mines (CoW) "02102", // Ward (TS) - "03038", // To the Rose Banner! (WotN) - "04001", // The Dragon's Tail (AtSK) - "04017", // Tower of the Sun (AtSK) - "05010", // Taena Merryweather (LoCR) - "05049", // Littlefinger's Meddling (LoCR) "06004", // All Men Are Fools (AMAF) - "06011", // Drowned Disciple (AMAF) "06038", // Great Hall (GtR) "06039", // "The Dornishman's Wife" (GtR) "06040", // The Annals of Castle Black (GtR) - "06063", // Oldtown Informer (TRW) "06098", // Flea Bottom (OR) - "06100", // Wheels Within Wheels (OR) - "06103", // Highgarden Minstrel (TBWB) - "08080", // The King in the North (FotOG)" + "08080", // The King in the North (FotOG) + "08082", // I Am No One (TFM) "09001", // Mace Tyrell (HoT) - "09017", // The Hightower (HoT) - "09023", // "Six Maids in a Pool" (HoT) - "09037", // Qotho (HoT)" + "09037", // Qotho (HoT) "09051", // Trade Routes (HoT) "10045", // The Wars To Come (SoD) "10048", // Forced March (SoD) "10050", // Breaking Ties (SoD) - "11012", // Nighttime Marauders (TSC)" + "11012", // Nighttime Marauders (TSC) "11021", // Wyman Manderly (TMoW) "11033", // Hizdahr zo Loraq (TMoW) "11034", // Meereen (TMoW) - "11044", // Growing Ambition (SoKL) "11051", // Drowned God Fanatic (SoKL) "11061", // Meera Reed (MoD) - "11076", // A Mission in Essos (MoD) - "11082", // Skagos (IDP) - "11085", // Three-Finger Hobb (IDP)" - "11114", // Gifts for the Widow (DitD)" + "11114", // Gifts for the Widow (DitD) "12002", // Euron Crow's Eye (KotI) "12029", // Desert Raider (KotI) - "12045", // Sea of Blood (KotI) "12046", // We Take Westeros! (KotI) - "12047", // Return to the Fields (KotI)" + "12047", // Return to the Fields (KotI) "13044", // Unexpected Guile (PoS) - "13079", // Kingdom of Shadows (BtRK)" "13085", // Yoren (TB) "13086", // Bound for the Wall (TB) "13103", // The Queen's Retinue (LMHR) - "14008", // Selyse Baratheon (FotS)" - "15022", // Overwhelming Numbers (DotE)" - "15030", // The Red Keep (DotE)" - "15033", // Clydas (DotE)" - "15045", // Bribery (DotE)" + "14008", // Selyse Baratheon (FotS) + "15030", // The Red Keep (DotE) + "15033", // Clydas (DotE) + "15045", // Bribery (DotE) + "16027", // Aloof and Apart (TTWDFL) ], // fake pods joust_pods = [ From 340d436e9d5e2fcc6b8e2fcbc598d9d288762cad Mon Sep 17 00:00:00 2001 From: Stefan Topfstedt Date: Fri, 26 Jun 2020 19:49:00 -0700 Subject: [PATCH 12/19] implements joust pods. --- assets/js/app.deck.js | 54 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 45 insertions(+), 9 deletions(-) diff --git a/assets/js/app.deck.js b/assets/js/app.deck.js index 2e09d1e9..4d54734e 100755 --- a/assets/js/app.deck.js +++ b/assets/js/app.deck.js @@ -68,31 +68,67 @@ "15045", // Bribery (DotE) "16027", // Aloof and Apart (TTWDFL) ], - // fake pods joust_pods = [ { name: "P1", - restricted: "10045", // The Wars To Come (SoD) + restricted: "13085", // Yoren (TB) cards: [ - "01119", // Doran's Game + "04026", // Craven (CtA) + "11085", // Three-Finger Hobb (IDP) ], }, { name: "P2", restricted: "11051", // Drowned God Fanatic (SoKL) cards: [ - "01111", // Dornish Paramour (Core) - "08091", // Tarle The Thrice-Drowned (TFM) + "06011", // Drowned Disciple (AMAF) ], }, { name: "P3", - restricted: "06098", // Flea Bottom (OR) + restricted: "11114", // Gifts for the Widow (DitD) cards: [ - "01111", // Dornish Paramour (Core) - "10016", // Shadow City Bastard (SoD) + "15001", // Daenerys Targaryen (DotE) ] - } + }, + { + name: "P4", + restricted: "09037", // Qotho (HoT) + cards: [ + "15017", // Womb of the World (DotE) + ] + }, + { + name: "P5", + restricted: "09001", // Mace Tyrell (HoT) + cards: [ + "09017", // The Hightower (HoT) + ] + }, + { + name: "P6", + restricted: "12029", // Desert Raider (KotI) + cards: [ + "06011", // Drowned Disciple (AMAF) + ] + }, + { + name: "P7", + restricted: "11021", // Wyman Manderly (TMoW) + cards: [ + "11081", // Bear Island Scout (IDP) + "11082", // Skagos (IDP) + ] + }, + { + name: "P8", + restricted: "06040", // The Annals of Castle Black (GtR) + cards: [ + "06063", // Oldtown Informer (TRW) + "06100", // Wheels Within Wheels (OR) + + ] + }, ], melee_restricted_list = [ "01001", // A Clash of Kings (Core) From c34c450bba5392090622d846ff1d0633b9ac6214 Mon Sep 17 00:00:00 2001 From: Stefan Topfstedt Date: Fri, 26 Jun 2020 19:56:35 -0700 Subject: [PATCH 13/19] implements new RL/BL server-side. --- src/Classes/BannedListChecker.php | 13 ++-- src/Classes/RestrictedListChecker.php | 96 ++++++++++++++++----------- 2 files changed, 67 insertions(+), 42 deletions(-) diff --git a/src/Classes/BannedListChecker.php b/src/Classes/BannedListChecker.php index dc30eff9..0524224e 100644 --- a/src/Classes/BannedListChecker.php +++ b/src/Classes/BannedListChecker.php @@ -6,7 +6,7 @@ /** * Banned List Checker. - * The currently implemented BL were issued by The Conclave (v1.0), effective April 13th, 2020. + * The currently implemented BL were issued by The Conclave (v2.0), effective July 3rd, 2020. * * Class BannedList * @package App\Classes @@ -14,6 +14,13 @@ class BannedListChecker { const BANNED_CARDS = [ + "03038", // To the Rose Banner! (WotN) + "04001", // The Dragon's Tail (AtSK) + "05010", // Taena Merryweather (LoCR) + "05049", // Littlefinger's Meddling (LoCR) + "11076", // A Mission in Essos (MoD) + "12045", // Sea of Blood (KotI) + "13079", // Kingdom of Shadows (BtRK) "16001", // Ser Davos Seaworth (TTWDFL) "16002", // Melisandre's Favor (TTWDFL) "16003", // Wintertime Marauders (TTWDFL) @@ -40,10 +47,6 @@ class BannedListChecker "16024", // Narrow Escape (TTWDFL) "16025", // Seductive Promise (TTWDFL) "16026", // Westeros Bleeds (TTWDFL) - "16027", // Aloof and Apart (TTWDFL) - "16028", // Dark Wings, Dark Words (TTWDFL) - "16029", // Knights of the Realm (TTWDFL) - "16030", // The Long Voyage (TTWDFL) "16031", // Benjen's Cache (TTWDFL) "16032", // Rioting (TTWDFL) "16033", // Rule By Decree (TTWDFL) diff --git a/src/Classes/RestrictedListChecker.php b/src/Classes/RestrictedListChecker.php index c3654446..a02ed2ee 100644 --- a/src/Classes/RestrictedListChecker.php +++ b/src/Classes/RestrictedListChecker.php @@ -7,7 +7,7 @@ /** * Checks if a given list of cards is legal for tournament play in the Joust and Melee formats. - * The currently implemented RLs were issued by The Conclave (v1.0), effective April 13th, 2020. + * The currently implemented RLs were issued by The Conclave (v2.0), effective July 3rd, 2020. * @package App\Classes */ class RestrictedListChecker @@ -16,59 +16,44 @@ class RestrictedListChecker * @var array */ const JOUST_RESTRICTED_CARDS = [ - "01109", // The Red Viper (Core) + "02034", // Crown of Gold (TRtW) + "02065", // Halder (NMG) "02091", // Raider from Pyke (CoW) "02092", // Iron Mines (CoW) "02102", // Ward (TS) - "03038", // To the Rose Banner! (WotN) - "04001", // The Dragon's Tail (AtSK) - "04017", // Tower of the Sun (AtSK) - "05010", // Taena Merryweather (LoCR) - "05049", // Littlefinger's Meddling (LoCR) "06004", // All Men Are Fools (AMAF) - "06011", // Drowned Disciple (AMAF) "06038", // Great Hall (GtR) "06039", // "The Dornishman's Wife" (GtR) "06040", // The Annals of Castle Black (GtR) - "06063", // Oldtown Informer (TRW) "06098", // Flea Bottom (OR) - "06100", // Wheels Within Wheels (OR) - "06103", // Highgarden Minstrel (TBWB) - "08080", // The King in the North (FotOG)" + "08080", // The King in the North (FotOG) + "08082", // I Am No One (TFM) "09001", // Mace Tyrell (HoT) - "09017", // The Hightower (HoT) - "09023", // "Six Maids in a Pool" (HoT) - "09037", // Qotho (HoT)" + "09037", // Qotho (HoT) "09051", // Trade Routes (HoT) "10045", // The Wars To Come (SoD) "10048", // Forced March (SoD) "10050", // Breaking Ties (SoD) - "11012", // Nighttime Marauders (TSC)" + "11012", // Nighttime Marauders (TSC) "11021", // Wyman Manderly (TMoW) "11033", // Hizdahr zo Loraq (TMoW) "11034", // Meereen (TMoW) - "11044", // Growing Ambition (SoKL) "11051", // Drowned God Fanatic (SoKL) "11061", // Meera Reed (MoD) - "11076", // A Mission in Essos (MoD) - "11082", // Skagos (IDP) - "11085", // Three-Finger Hobb (IDP)" - "11114", // Gifts for the Widow (DitD)" + "11114", // Gifts for the Widow (DitD) "12002", // Euron Crow's Eye (KotI) "12029", // Desert Raider (KotI) - "12045", // Sea of Blood (KotI) "12046", // We Take Westeros! (KotI) - "12047", // Return to the Fields (KotI)" + "12047", // Return to the Fields (KotI) "13044", // Unexpected Guile (PoS) - "13079", // Kingdom of Shadows (BtRK)" "13085", // Yoren (TB) "13086", // Bound for the Wall (TB) "13103", // The Queen's Retinue (LMHR) - "14008", // Selyse Baratheon (FotS)" - "15022", // Overwhelming Numbers (DotE)" - "15030", // The Red Keep (DotE)" - "15033", // Clydas (DotE)" - "15045", // Bribery (DotE)" + "14008", // Selyse Baratheon (FotS) + "15030", // The Red Keep (DotE) + "15033", // Clydas (DotE) + "15045", // Bribery (DotE) + "16027", // Aloof and Apart (TTWDFL) ]; /** @@ -111,26 +96,63 @@ class RestrictedListChecker const JOUST_PODS = [ [ "name" => "P1", - "restricted" => "10045", // The Wars To Come (SoD) + "restricted" => "13085", // Yoren (TB) "cards" => [ - "01119", // Doran's Game + "04026", // Craven (CtA) + "11085", // Three-Finger Hobb (IDP) ], ], [ "name" => "P2", "restricted" => "11051", // Drowned God Fanatic (SoKL) "cards" => [ - "01111", // Dornish Paramour (Core) - "08091", // Tarle The Thrice-Drowned (TFM) + "06011", // Drowned Disciple (AMAF) ], ], [ "name" => "P3", - "restricted" => "06098", // Flea Bottom (OR) + "restricted" => "11114", // Gifts for the Widow (DitD) "cards" => [ - "01111", // Dornish Paramour (Core) - "10016", // Shadow City Bastard (SoD) - ], + "15001", // Daenerys Targaryen (DotE) + ] + ], + [ + "name" => "P4", + "restricted" => "09037", // Qotho (HoT) + "cards" => [ + "15017", // Womb of the World (DotE) + ] + ], + [ + "name" => "P5", + "restricted" => "09001", // Mace Tyrell (HoT) + "cards" => [ + "09017", // The Hightower (HoT) + ] + ], + [ + "name" => "P6", + "restricted" => "12029", // Desert Raider (KotI) + "cards" => [ + "06011", // Drowned Disciple (AMAF) + ] + ], + [ + "name" => "P7", + "restricted" => "11021", // Wyman Manderly (TMoW) + "cards" => [ + "11081", // Bear Island Scout (IDP) + "11082", // Skagos (IDP) + ] + ], + [ + "name" => "P8", + "restricted" => "06040", // The Annals of Castle Black (GtR) + "cards" => [ + "06063", // Oldtown Informer (TRW) + "06100", // Wheels Within Wheels (OR) + + ] ], ]; From e504fffe8ffed2a4d492d8bb317f70cfd110d9f0 Mon Sep 17 00:00:00 2001 From: Stefan Topfstedt Date: Fri, 26 Jun 2020 20:07:51 -0700 Subject: [PATCH 14/19] adds space between card title and first RL/BL indicator. --- assets/js/app.deck.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/js/app.deck.js b/assets/js/app.deck.js index 4d54734e..40b35350 100755 --- a/assets/js/app.deck.js +++ b/assets/js/app.deck.js @@ -1371,7 +1371,7 @@ if (! labels.length) { return ''; } - return _.map(labels, function (label) { + return ' ' + _.map(labels, function (label) { return card_line_label_tpl({ label: label.name, keyword: label.keyword || '', From 58b03306f81346da7640e8f36d4233b74e1121a1 Mon Sep 17 00:00:00 2001 From: Stefan Topfstedt Date: Sat, 27 Jun 2020 13:23:57 -0700 Subject: [PATCH 15/19] updates FAQ sections on joust RL and BL. --- templates/Default/faq.en.html.twig | 237 +++++++++++++++++++---------- 1 file changed, 160 insertions(+), 77 deletions(-) diff --git a/templates/Default/faq.en.html.twig b/templates/Default/faq.en.html.twig index fe96ccff..cf70d72f 100644 --- a/templates/Default/faq.en.html.twig +++ b/templates/Default/faq.en.html.twig @@ -15,7 +15,7 @@

    Notes, Errata, and Frequently Asked Questions

    -

    The Conclave (Version 1.0), effective 04/13/2020 (link).

    +

    The Conclave (Version 2.0), effective 07/03/2020 (link).

    This document contains card clarification, errata, rule clarifications, frequently asked questions, and quick reference material for A Game of Thrones: The Card Game. The most recent version of this document is @@ -30,7 +30,7 @@

    - New Content (Conclave v1.0): + New Content (Conclave v2.0): Joust Restricted List, Banned List

    @@ -546,64 +546,47 @@ listed with immediately below them.

    For example:
    - Doran's Game - (Core, 119) is not restricted normally, but if - The Wars To Come - (Sand of Dorne, 45) is your chosen restricted card, you cannot include - Doran's Game - (Core, 119) in your deck.

    + The Hightower + (House of Thorns, 17) is not restricted normally, but if + Mace Tyrell + (House of Thorns, 1) is your chosen restricted card, you cannot include + The Hightower + (House of Thorns, 17) in your deck.

    This restriction would be displayed as following:

    - The Wars To Come - (Sand of Dorne, 45) -
    +
    Neutral:
    The Annals of Castle Black (Guarding the Realm, 40)
    - Wheels Within Wheels (Oberyn's Revenge, - 100)
    - "The Dornishman's Wife" (Guarding the Realm, - 39)
    - Littlefinger's Meddling (Lions of Casterly - Rock, 49)
    - The Dragon's Tail (Across the Seven Kingdoms, - 1)
    - Flea Bottom (Oberyn's Revenge, 98)
    - The Wars To Come - (Sand of Dorne, 45) - + "The Dornishman's Wife" (Guarding the Realm, 39)
    + Flea Bottom (Oberyn's Revenge, 98)
    + The Wars To Come (Sand of Dorne, 45)
    Breaking Ties (Sands of Dorne, 50)
    Trade Routes (House of Thorns, 51)
    - Sea of Blood (Kings of the Isles, 45)
    Great Hall (Guarding the Realm, 38)
    Forced March (Sands of Dorne, 48)
    - The King in the North (Favor of the Old Gods, 80)
    + Bribery (Dragons of the East, 45)
    Return to the Fields (Kings of the Isles, 47)
    - Kingdom of Shadows (Beneath the Red Keep, 79)
    - Bribery (Dragons of the East, 45)
    + The King in the North (Favor of the Old Gods, 80)
    + Aloof and Apart (The Things We Do For Love, 27)

    @@ -617,77 +600,101 @@ Iron Mines (Calm Over Westeros, 92)
    Drowned God Fanatic (Streets of King's Landing, 51)
    - Drowned Disciple (All Men Are Fools, 11)
    Euron Crow’s Eye (Kings of the Isles, 2)
    We Take Westeros! (Kings of the Isles, 46)
    - Nighttime Marauders (The Shadow City, 12)
    + Nighttime Marauders (The Shadow City, 12)

    Lannister:
    - Taena Merryweather (Lions of Casterly Rock, 10)
    - The Red Keep (Dragons of the East, 30)
    + The Red Keep (Dragons of the East, 30)

    Martell:
    - The Red Viper (Core, 109)
    - Tower of the Sun (Across the Seven Kingdoms, 17)
    - A Mission in Essos (Music of Dragons, 76)
    Desert Raider (Kings of the Isles, 29) +

    Night's Watch
    Yoren (The Blackwater, 85)
    + Bound for the Wall (The Blackwater, 86)
    - Three-Finger Hobb (In Daznak's Pit, 85)
    - Clydas (Dragons of the East, 33) + Clydas (Dragons of the East, 33)
    + Halder (No Middle Ground, 65)

    Stark:
    Wyman Manderly (The March on Winterfell, 21)
    + Ward (True Steel, 102)
    - Skagos (In Daznak’s Pit, 82)
    - Meera Reed (Music of Dragons, 61) + Meera Reed (Music of Dragons, 61)
    + I Am No One (The Faith Militant, 82)

    Tyrell:
    - Highgarden Minstrel (The Brotherhood Without - Banners, 103)
    All Men Are Fools (All Men Are Fools, 4)
    - "Six Maids in a Pool" (House of Thorns, - 23)
    - To the Rose Banner! (Wolves of the North, - 38)
    Mace Tyrell (House of Thorns, 1)
    - The Hightower (House of Thorns, 17)
    - Growing Ambition (Streets of King’s Landing, 44)
    + The Queen's Retinue (Long May He Reign, 103)
    - Unexpected Guile (Pit of Snakes, 44)
    - Oldtown Informer (The Red Wedding, 63) + Unexpected Guile (Pit of Snakes, 44)

    Targaryen:
    Hizdahr zo Loraq (The March on Winterfell, 33)
    Meereen (The March on Winterfell, 34)
    - Qotho (House of Thorns, 37)
    Gifts for the Widow (Dragons of the East, 14)
    - Overwhelming Numbers (Dragons of the East, 22) + + Qotho (House of Thorns, 37)
    + + Crown of Gold (The Road to Winterfell, 34)

    Melee Restricted List

    @@ -765,7 +772,83 @@

    Banned Cards

    -

    The complete set of The Things We Do For Love is not legal for competitive play.

    + +

    Banned cards are not legal for competitive play.

    + +
    + Neutral:
    + The Dragon's Tail (Across the Seven Kingdoms, 1)
    + Littlefinger's Meddling (Lions of Casterly Rock, 49)
    + Sea of Blood (Kings of the Isles, 45)
    + Kingdom of Shadows (Beneath the Red Keep, 79)
    + Littlefinger (The Things We Do For Love, 17)
    + Vale Refugee (The Things We Do For Love, 18)
    + High Ground (The Things We Do For Love, 19)
    + King's Landing (The Things We Do For Love, 20)
    + Harrenhal (The Things We Do For Love, 21)
    + Sky Cell (The Things We Do For Love, 22)
    + Heads on Pikes (The Things We Do For Love, 23)
    + Narrow Escape (The Things We Do For Love, 24)
    + Seductive Promise (The Things We Do For Love, 25)
    + Westeros Bleeds (The Things We Do For Love, 26)
    + Benjen's Cache (The Things We Do For Love, 31)
    + Rioting (The Things We Do For Love, 32)
    + Rule By Decree (The Things We Do For Love, 33)
    + Search and Detain (The Things We Do For Love, 34)
    + The Art of Seduction (The Things We Do For Love, 35)
    + The Gathering Storm (The Things We Do For Love, 36)
    +
    +
    +
    + Baratheon:
    + Ser Davos Seaworth (The Things We Do For Love, 1)
    + Melisandre's Favor (The Things We Do For Love, 2)
    +
    +
    +
    + Greyjoy:
    + Wintertime Marauders (The Things We Do For Love, 3)
    + Conquer (The Things We Do For Love, 4)
    +
    +
    +
    + Lannister:
    + Taena Merryweather (Lions of Casterly Rock, 10)
    + Spider's Whisperer (The Things We Do For Love, 5)
    + Wheels Within Wheels (The Things We Do For Love, 6)
    +
    +
    +
    + Martell:
    + A Mission in Essos (Music of Dragons, 76)
    + Prince's Loyalist (The Things We Do For Love, 7)
    + You Murdered Her Children (The Things We Do For Love, 8)
    +
    +
    +
    + Night's Watch
    + Samwell Tarly (The Things We Do For Love, 9)
    + Old Bear Mormont (The Things We Do For Love, 10)
    +
    +
    +
    + Stark:
    + Catelyn Stark (The Things We Do For Love, 11)
    + Snow Castle (The Things We Do For Love, 12)
    +
    +
    +
    + Tyrell:
    + To the Rose Banner! (Wolves of the North, 38)
    + The Queen of Thorns (The Things We Do For Love, 15)
    + Olenna's Study (The Things We Do For Love, 16)
    +
    +
    +
    + Targaryen:
    + Mad King Aerys (The Things We Do For Love, 13)
    + The Hatchlings' Feast (The Things We Do For Love, 14)
    +

    Frequently Asked Questions

    From 6c21c56f63bfecb780a128e91e8aec056a18d4ac Mon Sep 17 00:00:00 2001 From: Stefan Topfstedt Date: Sun, 28 Jun 2020 09:06:49 -0700 Subject: [PATCH 16/19] validates decks against format-specific BLs. --- src/Classes/BannedListChecker.php | 53 +++++++++++++++++++++++++-- src/Model/SlotCollectionDecorator.php | 4 +- 2 files changed, 52 insertions(+), 5 deletions(-) diff --git a/src/Classes/BannedListChecker.php b/src/Classes/BannedListChecker.php index 0524224e..9123ed81 100644 --- a/src/Classes/BannedListChecker.php +++ b/src/Classes/BannedListChecker.php @@ -13,7 +13,7 @@ */ class BannedListChecker { - const BANNED_CARDS = [ + const JOUST_BANNED_CARDS = [ "03038", // To the Rose Banner! (WotN) "04001", // The Dragon's Tail (AtSK) "05010", // Taena Merryweather (LoCR) @@ -55,12 +55,59 @@ class BannedListChecker "16036", // The Gathering Storm (TTWDFL) ]; + const MELEE_BANNED_LIST = [ + "16001", // Ser Davos Seaworth (TTWDFL) + "16002", // Melisandre's Favor (TTWDFL) + "16003", // Wintertime Marauders (TTWDFL) + "16004", // Conquer (TTWDFL) + "16005", // Spider's Whisperer (TTWDFL) + "16006", // Wheels Within Wheels (TTWDFL) + "16007", // Prince's Loyalist (TTWDFL) + "16008", // You Murdered Her Children (TTWDFL) + "16009", // Samwell Tarly (TTWDFL) + "16010", // Old Bear Mormont (TTWDFL) + "16011", // Catelyn Stark (TTWDFL) + "16012", // Snow Castle (TTWDFL) + "16013", // Mad King Aerys (TTWDFL) + "16014", // The Hatchlings' Feast (TTWDFL) + "16015", // The Queen of Thorns (TTWDFL) + "16016", // Olenna's Study (TTWDFL) + "16017", // Littlefinger (TTWDFL) + "16018", // Vale Refugee (TTWDFL) + "16019", // High Ground (TTWDFL) + "16020", // King's Landing (TTWDFL) + "16021", // Harrenhal (TTWDFL) + "16022", // Sky Cell (TTWDFL) + "16023", // Heads on Pikes (TTWDFL) + "16024", // Narrow Escape (TTWDFL) + "16025", // Seductive Promise (TTWDFL) + "16026", // Westeros Bleeds (TTWDFL) + "16027", // Aloof and Apart (TTWDFL) + "16028", // Dark Wings, Dark Words (TTWDFL) + "16029", // Knights of the Realm (TTWDFL) + "16030", // The Long Voyage (TTWDFL) + "16031", // Benjen's Cache (TTWDFL) + "16032", // Rioting (TTWDFL) + "16033", // Rule By Decree (TTWDFL) + "16034", // Search and Detain (TTWDFL) + "16035", // The Art of Seduction (TTWDFL) + "16036", // The Gathering Storm (TTWDFL) + ]; + /** + * @param array $cardCodes + * @return bool + */ + public function isLegalForJoust(array $cardCodes) + { + return empty(array_intersect($cardCodes, self::JOUST_BANNED_CARDS)); + } + /** * @param array $cardCodes * @return bool */ - public function isLegal(array $cardCodes) + public function isLegalForMelee(array $cardCodes) { - return empty(array_intersect($cardCodes, self::BANNED_CARDS)); + return empty(array_intersect($cardCodes, self::MELEE_BANNED_LIST)); } } diff --git a/src/Model/SlotCollectionDecorator.php b/src/Model/SlotCollectionDecorator.php index 55c794d1..7ea4a8d9 100644 --- a/src/Model/SlotCollectionDecorator.php +++ b/src/Model/SlotCollectionDecorator.php @@ -384,7 +384,7 @@ public function isLegalForMelee() foreach ($slots as $slot) { $cardCodes[] = $slot->getCard()->getCode(); } - return $this->bannedListChecker->isLegal($cardCodes) + return $this->bannedListChecker->isLegalForMelee($cardCodes) && $this->restrictedListChecker->isLegalForMelee($cardCodes); } @@ -401,7 +401,7 @@ public function isLegalForJoust() foreach ($slots as $slot) { $cardCodes[] = $slot->getCard()->getCode(); } - return $this->bannedListChecker->isLegal($cardCodes) + return $this->bannedListChecker->isLegalForJoust($cardCodes) && $this->restrictedListChecker->isLegalForJoust($cardCodes); } From 293af713814657c7ae0f1811c731787b39a1eda5 Mon Sep 17 00:00:00 2001 From: Stefan Topfstedt Date: Sun, 28 Jun 2020 09:28:54 -0700 Subject: [PATCH 17/19] indicate melee vs joust BL membership and compliance. --- assets/js/app.deck.js | 93 ++++++++++++++++++++++++++++-------- translations/messages.de.yml | 16 ++++--- translations/messages.en.yml | 16 ++++--- translations/messages.es.yml | 16 ++++--- 4 files changed, 103 insertions(+), 38 deletions(-) diff --git a/assets/js/app.deck.js b/assets/js/app.deck.js index 40b35350..19ca7617 100755 --- a/assets/js/app.deck.js +++ b/assets/js/app.deck.js @@ -130,6 +130,47 @@ ] }, ], + joust_banned_list = [ + "03038", // To the Rose Banner! (WotN) + "04001", // The Dragon's Tail (AtSK) + "05010", // Taena Merryweather (LoCR) + "05049", // Littlefinger's Meddling (LoCR) + "11076", // A Mission in Essos (MoD) + "12045", // Sea of Blood (KotI) + "13079", // Kingdom of Shadows (BtRK) + "16001", // Ser Davos Seaworth (TTWDFL) + "16002", // Melisandre's Favor (TTWDFL) + "16003", // Wintertime Marauders (TTWDFL) + "16004", // Conquer (TTWDFL) + "16005", // Spider's Whisperer (TTWDFL) + "16006", // Wheels Within Wheels (TTWDFL) + "16007", // Prince's Loyalist (TTWDFL) + "16008", // You Murdered Her Children (TTWDFL) + "16009", // Samwell Tarly (TTWDFL) + "16010", // Old Bear Mormont (TTWDFL) + "16011", // Catelyn Stark (TTWDFL) + "16012", // Snow Castle (TTWDFL) + "16013", // Mad King Aerys (TTWDFL) + "16014", // The Hatchlings' Feast (TTWDFL) + "16015", // The Queen of Thorns (TTWDFL) + "16016", // Olenna's Study (TTWDFL) + "16017", // Littlefinger (TTWDFL) + "16018", // Vale Refugee (TTWDFL) + "16019", // High Ground (TTWDFL) + "16020", // King's Landing (TTWDFL) + "16021", // Harrenhal (TTWDFL) + "16022", // Sky Cell (TTWDFL) + "16023", // Heads on Pikes (TTWDFL) + "16024", // Narrow Escape (TTWDFL) + "16025", // Seductive Promise (TTWDFL) + "16026", // Westeros Bleeds (TTWDFL) + "16031", // Benjen's Cache (TTWDFL) + "16032", // Rioting (TTWDFL) + "16033", // Rule By Decree (TTWDFL) + "16034", // Search and Detain (TTWDFL) + "16035", // The Art of Seduction (TTWDFL) + "16036", // The Gathering Storm (TTWDFL) + ], melee_restricted_list = [ "01001", // A Clash of Kings (Core) "01013", // Heads on Spikes (Core) @@ -160,14 +201,7 @@ "11076", // A Mission in Essos (MoD) "13107", // Robert Baratheon (LMHR) ], - banned_list = [ - "03038", // To the Rose Banner! (WotN) - "04001", // The Dragon's Tail (AtSK) - "05010", // Taena Merryweather (LoCR) - "05049", // Littlefinger's Meddling (LoCR) - "11076", // A Mission in Essos (MoD) - "12045", // Sea of Blood (KotI) - "13079", // Kingdom of Shadows (BtRK) + melee_banned_list = [ "16001", // Ser Davos Seaworth (TTWDFL) "16002", // Melisandre's Favor (TTWDFL) "16003", // Wintertime Marauders (TTWDFL) @@ -194,6 +228,10 @@ "16024", // Narrow Escape (TTWDFL) "16025", // Seductive Promise (TTWDFL) "16026", // Westeros Bleeds (TTWDFL) + "16027", // Aloof and Apart (TTWDFL) + "16028", // Dark Wings, Dark Words (TTWDFL) + "16029", // Knights of the Realm (TTWDFL) + "16030", // The Long Voyage (TTWDFL) "16031", // Benjen's Cache (TTWDFL) "16032", // Rioting (TTWDFL) "16033", // Rule By Decree (TTWDFL) @@ -251,12 +289,13 @@ /* * Validates the current deck against a list of banned cards. * @param {Array} cards + * @param {Array} bannedList * @return {boolean} */ - var validate_against_banned_list = function(cards) { + var validate_against_banned_list = function(cards, bannedList) { var i, n; for (i = 0, n = cards.length; i < n; i++) { - if (-1 !== banned_list.indexOf(cards[i].code)) { + if (-1 !== bannedList.indexOf(cards[i].code)) { return false; } } @@ -332,12 +371,21 @@ }; /* - * Checks if the current deck complies with the "banned" list. + * Checks if the current deck complies with a given joust banned list. + * @param {Array} cards + * @return {boolean} + */ + var is_joust_banned_list_compliant = function(cards) { + return validate_against_banned_list(cards, joust_banned_list); + } + + /* + * Checks if the current deck complies with a given melee banned list. * @param {Array} cards * @return {boolean} */ - var is_banned_list_compliant = function(cards) { - return validate_against_banned_list(cards); + var is_melee_banned_list_compliant = function(cards) { + return validate_against_banned_list(cards, melee_banned_list); } /** @@ -744,15 +792,14 @@ deck.update_layout_section(data, 'meta', $('
    ' + Translator.trans('decks.edit.meta.packs', {"packs": packs}) + '
    ')); var legalityContents = '' + Translator.trans('tournamentLegality.title') +': '; - var isBannedListCompliant = is_banned_list_compliant(cards); - if (isBannedListCompliant && is_joust_restricted_list_compliant(cards)) { + if (is_joust_banned_list_compliant(cards) && is_joust_restricted_list_compliant(cards)) { legalityContents += ' '; } else { legalityContents += ' '; } legalityContents += Translator.trans('tournamentLegality.joust') + ' | '; - if (isBannedListCompliant && is_melee_restricted_list_compliant(cards)) { + if (is_melee_banned_list_compliant(cards) && is_melee_restricted_list_compliant(cards)) { legalityContents += ' '; } else { legalityContents += ' '; @@ -1326,14 +1373,20 @@ } return rhett; } + var isBannedInJoust = (-1 !== joust_banned_list.indexOf(card.code)); + var isBannedInMelee = (-1 !== melee_banned_list.indexOf(card.code)); if (-1 !== joust_restricted_list.indexOf(card.code)) { - labels.push({ name: '[J]', class: "rl-joust", title: Translator.trans('keyword.rl-joust.title') }); + labels.push({ name: '[J]', class: "rl-joust", title: Translator.trans('card.rl-joust.title') }); } if (-1 !== melee_restricted_list.indexOf(card.code)) { - labels.push({ name: '[M]', class: "rl-melee", title: Translator.trans('keyword.rl-melee.title') }); + labels.push({ name: '[M]', class: "rl-melee", title: Translator.trans('card.rl-melee.title') }); } - if (-1 !== banned_list.indexOf(card.code)) { - labels.push({ name: '[B]', class: "banned", title: Translator.trans('keyword.banned.title') }); + if (isBannedInJoust && isBannedInMelee) { + labels.push({ name: '[B]', class: "banned", title: Translator.trans('card.bl.title') }); + } else if (isBannedInJoust) { + labels.push({ name: '[B-J]', class: "banned", title: Translator.trans('card.bl-joust.title') }); + } else if (isBannedInMelee) { + labels.push({ name: '[B-M]', class: "banned", title: Translator.trans('card.bl-melee.title') }); } if (joust_pods_map.hasOwnProperty(card.code)) { diff --git a/translations/messages.de.yml b/translations/messages.de.yml index bacbc8ef..e94c5ac8 100644 --- a/translations/messages.de.yml +++ b/translations/messages.de.yml @@ -380,6 +380,16 @@ pag: card: podinfo_single: "%format% - Falls %restricted% Deine Eingeschränkte Karte ist, dann kannst Du %card% nicht in Dein Deck aufnehmen." podinfo_multiple: '%format% - Falls %restricted% Deine Eingeschränkte Karte ist, dann kannst Du die folgenden Karten nicht in Dein Deck aufnehmen: %cards%.' + rl-joust: + title: "Diese Karte ist auf der Liste Eingeschränkter Karten für Tjost." + rl-melee: + title: "Diese Karte is auf der Liste Eingeschränkter Karten für Buhurt." + bl: + title: "Diese Karte ist nicht für Turniere zugelassen." + bl-joust: + title: "Diese Karte ist nicht für Tjost Turniere zugelassen." + bl-melee: + title: "Diese Karte ist nicht für Buhurt Turniere zugelassen." keywords: shadow: Schatten traits: @@ -492,12 +502,6 @@ keyword: shadow: name: Schatten title: "Eine Karte mit Schatten (X) kann man für 2 Gold verdeckt im Schattenbereich ihres kontrollierenden Spielers aufmarschieren lassen. Jene Karte kann später gespielt werden (falls es sich um ein Ereignis handelt) oder offen ins Spiel geholt werden (falls es sich um einen Charakter, Ort oder eine Verstärkung handelt), indem der Spieler X Gold bezahlt." - rl-joust: - title: "Diese Karte ist auf der Liste Eingeschränkter Karten für Tjost." - rl-melee: - title: "Diese Karte is auf der Liste Eingeschränkter Karten für Buhurt." - banned: - title: "Diese Karte ist nicht für Turniere zugelassen." tournamentLegality: title: Turnierzulässigkeit joust: Tjost diff --git a/translations/messages.en.yml b/translations/messages.en.yml index 822307b4..ba3c8c84 100644 --- a/translations/messages.en.yml +++ b/translations/messages.en.yml @@ -380,6 +380,16 @@ pag: card: podinfo_single: '%format% - If %restricted% is your chosen restricted card, you cannot include %card% in your deck.' podinfo_multiple: '%format% - If %restricted% is your chosen restricted card, you cannot include the following cards in your deck: %cards%.' + rl-joust: + title: "This card is on the Joust Restricted List." + rl-melee: + title: "This card is on the Melee Restricted List." + bl: + title: "This card is not legal for tournament play." + bl-joust: + title: "This card is not legal for Joust tournament play." + bl-melee: + title: "This card is not legal for Melee tournament play." keywords: shadow: Shadow traits: @@ -492,12 +502,6 @@ keyword: shadow: name: Shadow title: "A card with shadow (X) can be marshaled facedown into its controller’s shadows area for 2 gold. That card can later be played (if it is an event) or brought into play faceup (if it is a character, location, or attachment) by paying X gold." - rl-joust: - title: "This card is on the Joust Restricted List." - rl-melee: - title: "This card is on the Melee Restricted List." - banned: - title: "This card is not legal for tournament play." tournamentLegality: title: Tournament Legality joust: Joust diff --git a/translations/messages.es.yml b/translations/messages.es.yml index 15cb2fbe..faedf3ec 100644 --- a/translations/messages.es.yml +++ b/translations/messages.es.yml @@ -379,6 +379,16 @@ pag: card: podinfo_single: '%format% - Si %restricted% es tu carta restringida elegida, no puedes incluir %card% en tu mazo.' podinfo_multiple: '%format% - Si %restricted% es tu carta restringida elegida, no puedes incluir las siguientes cartas en tu mazo: %cards%.' + rl-joust: + title: "Su carta está en la la Lista Restringida Justa." + rl-melee: + title: "Su carta está en la Lista Restringida Contienda." + bl: + title: "Esta carta no es legal para torneos." + bl-joust: + title: "Esta carta no es legal para torneos de Justa." + bl-melee: + title: "Esta carta no es legal para torneos de Contienda." keywords: shadow: Sombra traits: @@ -491,12 +501,6 @@ keyword: shadow: name: Sombra title: "A card with shadow (X) can be marshaled facedown into its controller’s shadows area for 2 gold. That card can later be played (if it is an event) or brought into play faceup (if it is a character, location, or attachment) by paying X gold." - rl-joust: - title: "This card is on the Joust Restricted List." - rl-melee: - title: "This card is on the Melee Restricted List." - banned: - title: "This card is not tournament legal." tournamentLegality: title: Tournament Legality joust: Justa From db343b4ede135f323cb5f7a3469e4ef7d41153db Mon Sep 17 00:00:00 2001 From: Stefan Topfstedt Date: Sun, 28 Jun 2020 09:34:13 -0700 Subject: [PATCH 18/19] separates section on banned list for joust from melee. --- templates/Default/faq.en.html.twig | 157 +++++++++++++++-------------- 1 file changed, 80 insertions(+), 77 deletions(-) diff --git a/templates/Default/faq.en.html.twig b/templates/Default/faq.en.html.twig index cf70d72f..976b8cb9 100644 --- a/templates/Default/faq.en.html.twig +++ b/templates/Default/faq.en.html.twig @@ -32,7 +32,7 @@

    New Content (Conclave v2.0): Joust Restricted List, - Banned List + Joust Banned List

    Notes and Related cards added by mplain.

    @@ -697,83 +697,9 @@ Crown of Gold (The Road to Winterfell, 34)
    -

    Melee Restricted List

    +

    Joust Banned Cards

    -

    A player may select one card from the restricted list for any given deck, and cannot then include any other - restricted cards in the same deck. A player may run as many copies of his or her chosen restricted card in a - deck as the regular game rules (or card text) allow.

    - -
    Neutral:
    - A Clash of Kings (Core, 1)
    - Heads on Spikes (Core, 13)
    - Superior Claim (Core, 43)
    - The Lord of the Crossing (The King's Peace, - 60)
    - Relentless Assault (Tyrion's Chain, 118)
    - "The Dornishman's Wife" (Guarding the Realm, - 39)
    - Flea Bottom (Oberyn's Revenge, 98)
    - "The Song of the Seven" (The Faith Militant, - 98) -
    - Littlefinger’s Meddling (Lions of Casterly Rock, 49) -
    - The Annals of Castle Black (Guarding the Realm, 40) -
    - You Win or You Die (Someone Always Tells, 120) -
    -
    -
    Baratheon:
    - Robert Baratheon (Long May He Reign, 107) -
    -
    -
    Greyjoy:
    - Great Kraken (Core, 78)
    - Rise of the Kraken (Taking the Black, - 12)
    - Corpse Lake (House of Thorns, 28) -
    - Drowned Disciple (All Men Are Fools, 11) -
    -
    -
    Lannister:
    - Cersei Lannister (Lions of Casterly Rock, - 1)
    - Taena Merryweather (Lions of Casterly Rock, - 10) -
    -
    -
    Martell:
    - Doran's Game (Core, 119) -
    - A Mission in Essos (Music of Dragons, 76) -
    -
    -
    Stark:
    - Eddard Stark (Wolves of the North, - 3)
    - Riverrun (Across the Seven Kingdoms, 3) -
    -
    -
    Targaryen:
    - Plaza of Pride (Watchers on the Wall, - 36)
    - Khal Drogo (Core, 162) -
    - Queensguard (Streets of King’s Landing, 54) -
    -
    -
    Tyrell:
    - Lady Sansa's Rose (The Road to Winterfell, - 24)
    - All Men Are Fools (All Men Are Fools, 4) -
    - To the Rose Banner! (Wolves of the North, 38) -
    - -

    Banned Cards

    - -

    Banned cards are not legal for competitive play.

    +

    The following cards are not legal for competitive play in Joust.

    Neutral:
    @@ -850,6 +776,83 @@ The Hatchlings' Feast (The Things We Do For Love, 14)
    +

    Melee Restricted List

    + +

    A player may select one card from the restricted list for any given deck, and cannot then include any other + restricted cards in the same deck. A player may run as many copies of his or her chosen restricted card in a + deck as the regular game rules (or card text) allow.

    + +
    Neutral:
    + A Clash of Kings (Core, 1)
    + Heads on Spikes (Core, 13)
    + Superior Claim (Core, 43)
    + The Lord of the Crossing (The King's Peace, + 60)
    + Relentless Assault (Tyrion's Chain, 118)
    + "The Dornishman's Wife" (Guarding the Realm, + 39)
    + Flea Bottom (Oberyn's Revenge, 98)
    + "The Song of the Seven" (The Faith Militant, + 98) +
    + Littlefinger’s Meddling (Lions of Casterly Rock, 49) +
    + The Annals of Castle Black (Guarding the Realm, 40) +
    + You Win or You Die (Someone Always Tells, 120) +
    +
    +
    Baratheon:
    + Robert Baratheon (Long May He Reign, 107) +
    +
    +
    Greyjoy:
    + Great Kraken (Core, 78)
    + Rise of the Kraken (Taking the Black, + 12)
    + Corpse Lake (House of Thorns, 28) +
    + Drowned Disciple (All Men Are Fools, 11) +
    +
    +
    Lannister:
    + Cersei Lannister (Lions of Casterly Rock, + 1)
    + Taena Merryweather (Lions of Casterly Rock, + 10) +
    +
    +
    Martell:
    + Doran's Game (Core, 119) +
    + A Mission in Essos (Music of Dragons, 76) +
    +
    +
    Stark:
    + Eddard Stark (Wolves of the North, + 3)
    + Riverrun (Across the Seven Kingdoms, 3) +
    +
    +
    Targaryen:
    + Plaza of Pride (Watchers on the Wall, + 36)
    + Khal Drogo (Core, 162) +
    + Queensguard (Streets of King’s Landing, 54) +
    +
    +
    Tyrell:
    + Lady Sansa's Rose (The Road to Winterfell, + 24)
    + All Men Are Fools (All Men Are Fools, 4) +
    + To the Rose Banner! (Wolves of the North, 38) +
    + +

    Melee Banned Cards

    +

    The complete set of The Things We Do For Love is not legal for competitive play in Melee.

    +

    Frequently Asked Questions

    This section provides answers to a number of common questions that are asked about the game. The entries are From 667e5439cfe7e8cd79909b068e2f6fc7c77a1ce0 Mon Sep 17 00:00:00 2001 From: Stefan Topfstedt Date: Sun, 28 Jun 2020 12:26:29 -0700 Subject: [PATCH 19/19] markup and wording tweaks. --- templates/Default/faq.en.html.twig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/Default/faq.en.html.twig b/templates/Default/faq.en.html.twig index 976b8cb9..f96735fe 100644 --- a/templates/Default/faq.en.html.twig +++ b/templates/Default/faq.en.html.twig @@ -697,7 +697,7 @@ Crown of Gold (The Road to Winterfell, 34) -

    Joust Banned Cards

    +

    Joust Banned List

    The following cards are not legal for competitive play in Joust.

    @@ -850,7 +850,7 @@ To the Rose Banner! (Wolves of the North, 38) -

    Melee Banned Cards

    +

    Melee Banned List

    The complete set of The Things We Do For Love is not legal for competitive play in Melee.

    Frequently Asked Questions