diff options
| -rw-r--r-- | cards/armour.rb | 58 | ||||
| -rw-r--r-- | cards/beginner_spells.html | 420 | ||||
| -rw-r--r-- | cards/card.html | 857 | ||||
| -rw-r--r-- | cards/card.rb | 6 | ||||
| -rw-r--r-- | cards/class_abilities.rb | 181 | ||||
| -rw-r--r-- | cards/common_weapons.html | 861 | ||||
| -rw-r--r-- | cards/common_weapons.rb | 181 | ||||
| -rw-r--r-- | cards/spells.rb | 16 | ||||
| -rw-r--r-- | src/SUMMARY.md | 2 | ||||
| -rw-r--r-- | src/classes.md | 17 |
10 files changed, 406 insertions, 2193 deletions
diff --git a/cards/armour.rb b/cards/armour.rb new file mode 100644 index 0000000..da6cf68 --- /dev/null +++ b/cards/armour.rb @@ -0,0 +1,58 @@ +load 'card.rb' + +armour = {} + +armour[:iron_plate] = Card.new( + title: "Iron Plate", + defence: '5', + #blood: 1, + #reposte: 'Prc', + #actions: [ + #Card::Action.new( + # content: '(**even**) Engulf your hand in flames for short while. You need to maintain concentration.', + # symbol: [:clubs, :blood] + #), + #Card::Action.new( + # seperator: true, + # content: '(**while concentrating**) Deal melee damage to a target with your flame engulfed hand. If the target is a small object set it on fire.', + # symbol: [:tap] + #), + #], + color: 'cadetblue', + flavour: '"Strong but heavy"', + type: 'Body Armour' +) + +armour[:chain_mail] = Card.new( + title: "Chain Mail", + defence: '4', + color: 'cadetblue', + flavour: '"The fairly lightweight option"', + type: 'Body Armour' +) + +armour[:leather] = Card.new( + title: "Leather", + defence: '3', + color: 'cadetblue', + flavour: '"Popular with goths and punks"', + type: 'Body Armour' +) + +armour[:padded] = Card.new( + title: "Padded", + defence: '2', + color: 'cadetblue', + flavour: '"A *LOT* of regular clothing stacked together"', + type: 'Body Armour' +) + +armour[:none] = Card.new( + title: "None", + defence: '1', + color: 'cadetblue', + flavour: '"Just the skin on your back"', + type: 'Body Armour' +) + +File.write('armour.html', Card.build(armour.values)) diff --git a/cards/beginner_spells.html b/cards/beginner_spells.html deleted file mode 100644 index 7de8bd0..0000000 --- a/cards/beginner_spells.html +++ /dev/null @@ -1,420 +0,0 @@ -<!DOCTYPE html> -<html> - <head> - <style> - .flavour { - color: rgba(0,0,0,0.5); - padding: 35px; - font-size: 35px; - } - .flavour_wrapper { - position: absolute; - bottom: 0; - left: 0; - width: 100%; - text-align: center; - } - .action_detail { - padding-top: 0px; - text-align: left; - } - .symbol_wrapper_inner { - display: flex; - flex-direction: column; - gap: 5px; - } - .symbol_wrapper_outer { - display: flex; - gap: 20px; - } - .card_type { - background-color: antiquewhite; - text-align: center; - font-size: 40px; - padding: 10px; - -moz-border-radius: 15px 15px 0 0; - -webkit-border-radius: 15px 15px 0 0; - border-radius: 15px 15px 0 0; - font-weight: bold; - border-width: 2px 2px 0 2px; - border-color: black; - border-style: solid; - } - .face_icon { - color: white; - display: inline-block; - padding: 4px; - height: 62px; - min-width: 62px; - font-size: 55px; - -moz-border-radius: 15px; - -webkit-border-radius: 15px; - border-radius: 15px; - background-color: black; - } - .icon { - display: inline-block; - padding: 8px 4px 0px 4px; - -moz-border-radius: 15px; - -webkit-border-radius: 15px; - border-radius: 15px; - aspect-ratio: 1/1; - font-size: 40px; - height: 52px; - width: 52px; - } - .hearts_icon { - color: orangered; - } - .diamonds_icon { - color: orangered; - } - .clubs_icon { - color: antiquewhite; - } - .spades_icon { - color: antiquewhite; - } - .suit_icon { - background-color: black; - text-align: center; - font-size: 60px; - line-height: 40px; - } - .blood_icon { - background-color: black; - padding: 6px 3px 2px 5px; - } - .joker_icon { - background-color: black; - padding: 6px 3px 2px 5px; - } - .tap_icon { - background-color: black; - } - .content { - background-color: antiquewhite; - color: black; - flex: 5; - -moz-border-radius: 25px; - -webkit-border-radius: 25px; - border-radius: 25px; - overflow: hidden; - position: relative; - font-size: 50px; - display: flex; - justify-content: flex-start; - gap: 5px; - text-align: left; - padding: 35px 30px 30px 30px; - flex-direction: column; - border-width: 2px 2px 2px 2px; - border-color: black; - border-style: solid; - } - .attrib_bottom_icons { - bottom: 0; - } - .attrib_top_icons { - top: 0; - } - .attrib_bl { - position: absolute; - bottom: 0; - left: 0; - -moz-border-radius: 0 50px 0 0; - -webkit-border-radius: 0 50px 0 0; - border-radius: 0 50px 0 0; - border-color: rgba(255,255,255,0.50); - border-style: solid; - border-width: 5px 5px 0 0; - padding: 15px 25px 15px 15px; - } - .attrib_br { - position: absolute; - bottom: 0; - right: 0; - -moz-border-radius: 50px 0 0 0; - -webkit-border-radius: 50px 0 0 0; - border-radius: 50px 0 0 0; - border-color: rgba(255,255,255,0.50); - border-style: solid; - border-width: 5px 0 0 5px; - padding: 15px 15px 15px 25px; - } - .attrib_tr { - position: absolute; - top: 0; - right: 0; - -moz-border-radius: 0 0 0 50px; - -webkit-border-radius: 0 0 0 50px; - border-radius: 0 0 0 50px; - border-color: rgba(255,255,255,0.50); - border-style: solid; - border-width: 0 0 5px 5px; - padding: 15px 15px 15px 25px; - } - .attrib_tl { - position: absolute; - top: 0; - left: 0; - -moz-border-radius: 0 0 50px 0; - -webkit-border-radius: 0 0 50px 0; - border-radius: 0 0 50px 0; - border-color: rgba(255,255,255,0.50); - border-style: solid; - border-width: 0 5px 5px 0; - padding: 15px 25px 15px 15px; - } - .attrib_icon { - background-color: rgba(255,255,255,0.10); - } - .title { - background-color: black; - color: antiquewhite; - flex: 3; - -moz-border-radius: 25px; - -webkit-border-radius: 25px; - border-radius: 25px; - overflow: hidden; - position: relative; - font-size: 85px; - display: flex; - align-items: center; - justify-content: center; - text-align: center; - flex-direction: column; - padding: 25px; - border-width: 2px 2px 2px 2px; - border-color: black; - border-style: solid; - } - .group { - margin: 50px 50px 0px 50px; - -moz-border-radius: 25px; - -webkit-border-radius: 25px; - border-radius: 25px; - display: flex; - flex-direction: column; - align-content: space-between; - height: auto; - flex: 2; - gap: 35px; - } - .card { - height: 1425px; - width: 825px; - background-color: black; - display: flex; - } - .card_wrapper { - min-height: 2850px; - width: 5775px; - display: flex; - flex-wrap: wrap; - height: 100%; - } - button { - font-size: 50px; - padding: 30px; - margin: 30px; - } - p { - margin: 0; - } - body { - background-color: #1e1e1e; - } - </style> - </head> - <button onclick="downloadAsImage()"> - Download - </button> - <div id="card_wrapper" class="card_wrapper"> - <div style="background:linear-gradient(225deg, rgba(0,0,0,1) -50%, firebrick 100%)" class="card"> - <div class="group"> - <div class="title"> - <div class="attrib_icon attrib_tr"> - 1 🩸 - </div> - <p> - Wispy Flame - </p> - <div class="attrib_icon attrib_bl"> - ⚔️ d4 - </div> - </div> - <div class="content"> - <div class="action"> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon suit_icon clubs_icon"> - ♣️ - </span> - <span class="icon blood_icon"> - 🩸 - </span> - </div> - <div class="action_detail"> - <p>(<strong>even</strong>) Engulf your hand in flames for short while. You need to maintain concentration.</p> - </div> - </div> - </div> - <div class="action"> - <hr> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon tap_icon"> - ↪️ - </span> - </div> - <div class="action_detail"> - <p>(<strong>while concentrating</strong>) Deal melee damage. If it is a small object set it on fire.</p> - </div> - </div> - </div> - <div class="flavour_wrapper"> - <div class="flavour"> - <hr> - <p>“Portable Candle”</p> - </div> - </div> - </div> - <div class="card_type"> - Blood Magic (Igneous) - </div> - </div> - </div> - <div style="background:linear-gradient(225deg, rgba(0,0,0,1) -50%, firebrick 100%)" class="card"> - <div class="group"> - <div class="title"> - <div class="attrib_icon attrib_tr"> - 1 🩸 - </div> - <p> - Summon Flesh - </p> - </div> - <div class="content"> - <div class="action"> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon suit_icon hearts_icon"> - ♥️ - </span> - <span class="icon blood_icon"> - 🩸 - </span> - </div> - <div class="action_detail"> - <p>(<strong>5 or less</strong>) Heal a target within arms reach equal to the card played.</p> - </div> - </div> - </div> - <div class="action"> - <hr> - <p>If this spell heals for more then half of the target’s max health then they get flesh mass disease.</p> - </div> - <div class="flavour_wrapper"> - <div class="flavour"> - <hr> - <p>“Writhing flesh mass that assimilates”</p> - </div> - </div> - </div> - <div class="card_type"> - Blood Magic (Eldritch) - </div> - </div> - </div> - <div style="background:linear-gradient(225deg, rgba(0,0,0,1) -50%, firebrick 100%)" class="card"> - <div class="group"> - <div class="title"> - <div class="attrib_icon attrib_tr"> - 1 🩸 - </div> - <p> - Lightning Fork - </p> - <div class="attrib_icon attrib_bl"> - ⚔️ 2d4 - </div> - </div> - <div class="content"> - <div class="action"> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon suit_icon clubs_icon"> - ♣️ - </span> - <span class="icon blood_icon"> - 🩸 - </span> - </div> - <div class="action_detail"> - <p>(<strong>even</strong>) Deal 1d4 damage to one target and 1d4 to another.</p> - </div> - </div> - </div> - <div class="flavour_wrapper"> - <div class="flavour"> - <hr> - <p>“Double the static, double the fun!”</p> - </div> - </div> - </div> - <div class="card_type"> - Blood Magic (Storm) - </div> - </div> - </div> - <div style="background:linear-gradient(225deg, rgba(0,0,0,1) -50%, firebrick 100%)" class="card"> - <div class="group"> - <div class="title"> - <div class="attrib_icon attrib_tr"> - 2 🩸 - </div> - <p> - Summon Alchemicals - </p> - </div> - <div class="content"> - <div class="action"> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon suit_icon diamonds_icon"> - ♦️ - </span> - <span class="icon blood_icon"> - 🩸 - </span> - </div> - <div class="action_detail"> - <p>(<strong>odd</strong>) Summon a random amount of a random alchemical depending on the card played and the number rolled for blood.</p> - </div> - </div> - </div> - <div class="flavour_wrapper"> - <div class="flavour"> - <hr> - <p>“You arent making a bomb, are you?”</p> - </div> - </div> - </div> - <div class="card_type"> - Blood Magic (Eldritch) - </div> - </div> - </div> - </div> - <script src="./web/bundle.js"> - </script> - <script> - function downloadAsImage() { - htmlToImage.toPng(document.getElementById('card_wrapper')) - .then(function (dataUrl) { - download(dataUrl, 'card_wrapper.png'); - }); - } - </script> -</html> diff --git a/cards/card.html b/cards/card.html deleted file mode 100644 index 764fe1d..0000000 --- a/cards/card.html +++ /dev/null @@ -1,857 +0,0 @@ -<!DOCTYPE html> -<html> - <head> - <style> - .flavour { - color: rgba(0,0,0,0.5); - padding: 35px; - font-size: 35px; - } - .flavour_wrapper { - position: absolute; - bottom: 0; - left: 0; - width: 100%; - text-align: center; - } - .action_detail { - padding-top: 0px; - text-align: left; - } - .symbol_wrapper_inner { - display: flex; - flex-direction: column; - gap: 5px; - } - .symbol_wrapper_outer { - display: flex; - gap: 20px; - } - .card_type { - background-color: antiquewhite; - text-align: center; - font-size: 40px; - padding: 10px; - -moz-border-radius: 15px 15px 0 0; - -webkit-border-radius: 15px 15px 0 0; - border-radius: 15px 15px 0 0; - font-weight: bold; - border-width: 2px 2px 0 2px; - border-color: black; - border-style: solid; - } - .face_icon { - color: white; - display: inline-block; - padding: 4px; - height: 62px; - min-width: 62px; - font-size: 55px; - -moz-border-radius: 15px; - -webkit-border-radius: 15px; - border-radius: 15px; - background-color: black; - } - .icon { - display: inline-block; - padding: 8px 4px 0px 4px; - -moz-border-radius: 15px; - -webkit-border-radius: 15px; - border-radius: 15px; - aspect-ratio: 1/1; - font-size: 40px; - height: 52px; - width: 52px; - } - .hearts_icon { - color: orangered; - } - .diamonds_icon { - color: orangered; - } - .clubs_icon { - color: antiquewhite; - } - .spades_icon { - color: antiquewhite; - } - .suit_icon { - background-color: black; - text-align: center; - font-size: 60px; - line-height: 40px; - } - .joker_icon { - background-color: black; - padding: 6px 3px 2px 5px; - } - .tap_icon { - background-color: black; - } - .content { - background-color: antiquewhite; - color: black; - flex: 5; - -moz-border-radius: 25px; - -webkit-border-radius: 25px; - border-radius: 25px; - overflow: hidden; - position: relative; - font-size: 50px; - display: flex; - justify-content: flex-start; - gap: 5px; - text-align: left; - padding: 35px 30px 30px 30px; - flex-direction: column; - border-width: 2px 2px 2px 2px; - border-color: black; - border-style: solid; - } - .attrib_bottom_icons { - bottom: 0; - } - .attrib_top_icons { - top: 0; - } - .attrib_bl { - position: absolute; - bottom: 0; - left: 0; - -moz-border-radius: 0 50px 0 0; - -webkit-border-radius: 0 50px 0 0; - border-radius: 0 50px 0 0; - border-color: rgba(255,255,255,0.50); - border-style: solid; - border-width: 5px 5px 0 0; - padding: 15px 25px 15px 15px; - } - .attrib_br { - position: absolute; - bottom: 0; - right: 0; - -moz-border-radius: 50px 0 0 0; - -webkit-border-radius: 50px 0 0 0; - border-radius: 50px 0 0 0; - border-color: rgba(255,255,255,0.50); - border-style: solid; - border-width: 5px 0 0 5px; - padding: 15px 15px 15px 25px; - } - .attrib_tr { - position: absolute; - top: 0; - right: 0; - -moz-border-radius: 0 0 0 50px; - -webkit-border-radius: 0 0 0 50px; - border-radius: 0 0 0 50px; - border-color: rgba(255,255,255,0.50); - border-style: solid; - border-width: 0 0 5px 5px; - padding: 15px 15px 15px 25px; - } - .attrib_tl { - position: absolute; - top: 0; - left: 0; - -moz-border-radius: 0 0 50px 0; - -webkit-border-radius: 0 0 50px 0; - border-radius: 0 0 50px 0; - border-color: rgba(255,255,255,0.50); - border-style: solid; - border-width: 0 5px 5px 0; - padding: 15px 25px 15px 15px; - } - .attrib_icon { - background-color: rgba(255,255,255,0.10); - } - .title { - background-color: black; - color: antiquewhite; - flex: 3; - -moz-border-radius: 25px; - -webkit-border-radius: 25px; - border-radius: 25px; - overflow: hidden; - position: relative; - font-size: 85px; - display: flex; - align-items: center; - justify-content: center; - text-align: center; - flex-direction: column; - padding: 25px; - border-width: 2px 2px 2px 2px; - border-color: black; - border-style: solid; - } - .group { - margin: 50px 50px 0px 50px; - -moz-border-radius: 25px; - -webkit-border-radius: 25px; - border-radius: 25px; - display: flex; - flex-direction: column; - align-content: space-between; - height: auto; - flex: 2; - gap: 35px; - } - .card { - height: 1425px; - width: 825px; - background-color: black; - display: flex; - } - .card_wrapper { - min-height: 2850px; - width: 5775px; - display: flex; - flex-wrap: wrap; - height: 100%; - } - button { - font-size: 50px; - padding: 30px; - margin: 30px; - } - p { - margin: 0; - } - body { - background-color: #1e1e1e; - } - </style> - </head> - <button onclick="downloadAsImage()"> - Download - </button> - <div id="card_wrapper" class="card_wrapper"> - <div style="background:linear-gradient(225deg, rgba(0,0,0,1) -50%, rebeccapurple 100%)" class="card"> - <div class="group"> - <div class="title"> - <p> - Thrusting Sword - </p> - <div class="attrib_icon attrib_bl"> - ⚔️ 3 - </div> - <div class="attrib_icon attrib_br"> - Prc 🎲 - </div> - </div> - <div class="content"> - <div class="action"> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon tap_icon"> - ↪️ - </span> - </div> - <div class="action_detail"> - <p>🎲 <strong>d8 + Prc</strong> to hit.</p> - </div> - </div> - </div> - <div class="action"> - <hr> - <p><strong>Opportune Strike</strong>: When targeting an enemy with this weapon, mark them until the end of their turn. While marked if they attack somone other then you then you can perform a reposte on them.</p> - </div> - <div class="flavour_wrapper"> - <div class="flavour"> - <hr> - <p>“World Famous Iron Toothpick”</p> - </div> - </div> - </div> - <div class="card_type"> - Thrusting Sword Weapon - </div> - </div> - </div> - <div style="background:linear-gradient(225deg, rgba(0,0,0,1) -50%, rebeccapurple 100%)" class="card"> - <div class="group"> - <div class="title"> - <p> - Polearm - </p> - <div class="attrib_icon attrib_bl"> - ⚔️ 3 - </div> - <div class="attrib_icon attrib_br"> - Str 🎲 - </div> - </div> - <div class="content"> - <div class="action"> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon tap_icon"> - ↪️ - </span> - </div> - <div class="action_detail"> - <p>🎲 <strong>d6 + Str</strong> to hit.</p> - </div> - </div> - </div> - <div class="action"> - <hr> - <p><strong>Reach</strong>: When making an attack, you ignore repostes from your target unless they also have Reach.</p> - </div> - <div class="flavour_wrapper"> - <div class="flavour"> - <hr> - <p>“Getting up close and personal while staying far away”</p> - </div> - </div> - </div> - <div class="card_type"> - Polearm Weapon - </div> - </div> - </div> - <div style="background:linear-gradient(225deg, rgba(0,0,0,1) -50%, rebeccapurple 100%)" class="card"> - <div class="group"> - <div class="title"> - <p> - Dagger - </p> - <div class="attrib_icon attrib_bl"> - ⚔️ 2 - </div> - <div class="attrib_icon attrib_br"> - Prc 🎲 - </div> - </div> - <div class="content"> - <div class="action"> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon tap_icon"> - ↪️ - </span> - </div> - <div class="action_detail"> - <p>🎲 <strong>d6 + Prc</strong> to hit.</p> - </div> - </div> - </div> - <div class="action"> - <hr> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon suit_icon spades_icon"> - ♠️ - </span> - </div> - <div class="action_detail"> - <p>(even) <strong>Swift Attack</strong>: Refresh this card.</p> - </div> - </div> - </div> - <div class="flavour_wrapper"> - <div class="flavour"> - <hr> - <p>“A quick and convinient way to turn a spleen into a sheath”</p> - </div> - </div> - </div> - <div class="card_type"> - Dagger Weapon - </div> - </div> - </div> - <div style="background:linear-gradient(225deg, rgba(0,0,0,1) -50%, rebeccapurple 100%)" class="card"> - <div class="group"> - <div class="title"> - <p> - Bow - </p> - <div class="attrib_icon attrib_bl"> - ⚔️ 3 - </div> - <div class="attrib_icon attrib_br"> - 1 🎲 - </div> - </div> - <div class="content"> - <div class="action"> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon tap_icon"> - ↪️ - </span> - </div> - <div class="action_detail"> - <p>🎲 <strong>d4 + (2·Prc)</strong> to hit.</p> - </div> - </div> - </div> - <div class="action"> - <hr> - <p><strong>Ranged</strong>: When making an attack, you ignore repostes from your target. You can’t deal a reposte either.</p> - </div> - <div class="flavour_wrapper"> - <div class="flavour"> - <hr> - <p>“One stringed instrument that got repurposed as a weapon.”</p> - </div> - </div> - </div> - <div class="card_type"> - Bow Weapon - </div> - </div> - </div> - <div style="background:linear-gradient(225deg, rgba(0,0,0,1) -50%, rebeccapurple 100%)" class="card"> - <div class="group"> - <div class="title"> - <p> - Crossbow - </p> - <div class="attrib_icon attrib_bl"> - ⚔️ 4 - </div> - <div class="attrib_icon attrib_br"> - 1 🎲 - </div> - </div> - <div class="content"> - <div class="action"> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon tap_icon"> - ↪️ - </span> - </div> - <div class="action_detail"> - <p>(must be loaded) 🎲 <strong>d6 + Prc</strong> to hit.</p> - </div> - </div> - </div> - <div class="action"> - <hr> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon tap_icon"> - ↪️ - </span> - </div> - <div class="action_detail"> - <p><strong>Reload</strong>: Load this weapon.</p> - </div> - </div> - </div> - <div class="action"> - <hr> - <p><strong>Ranged</strong>: When making an attack, you ignore repostes from your target. You can’t deal a reposte either.</p> - </div> - <div class="flavour_wrapper"> - <div class="flavour"> - <hr> - <p>“No one will cross you with this weapon”</p> - </div> - </div> - </div> - <div class="card_type"> - Crossbow Weapon - </div> - </div> - </div> - <div style="background:linear-gradient(225deg, rgba(0,0,0,1) -50%, rebeccapurple 100%)" class="card"> - <div class="group"> - <div class="title"> - <p> - Hammer - </p> - <div class="attrib_icon attrib_bl"> - ⚔️ 3 - </div> - <div class="attrib_icon attrib_br"> - Str 🎲 - </div> - </div> - <div class="content"> - <div class="action"> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon tap_icon"> - ↪️ - </span> - </div> - <div class="action_detail"> - <p>🎲 <strong>d6 + Str</strong> to hit.</p> - </div> - </div> - </div> - <div class="action"> - <hr> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon tap_icon"> - ↪️ - </span> - </div> - <div class="action_detail"> - <p><strong>Power Swing</strong>: 🎲 <strong>d4 + Str</strong> to hit. Deal <strong>Str + 2</strong> damage.</p> - </div> - </div> - </div> - <div class="flavour_wrapper"> - <div class="flavour"> - <hr> - <p>“If you can pick it up, then you are worthy enough to use it.”</p> - </div> - </div> - </div> - <div class="card_type"> - Hammer Weapon - </div> - </div> - </div> - <div style="background:linear-gradient(225deg, rgba(0,0,0,1) -50%, rebeccapurple 100%)" class="card"> - <div class="group"> - <div class="title"> - <p> - Straight Sword - </p> - <div class="attrib_icon attrib_bl"> - ⚔️ 3 - </div> - <div class="attrib_icon attrib_br"> - Str 🎲 - </div> - </div> - <div class="content"> - <div class="action"> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon tap_icon"> - ↪️ - </span> - </div> - <div class="action_detail"> - <p>🎲 <strong>d6 + Str</strong> to hit.</p> - </div> - </div> - </div> - <div class="action"> - <hr> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon tap_icon"> - ↪️ - </span> - </div> - <div class="action_detail"> - <p>(Two Handed) 🎲 <strong>d6 + Str</strong> to hit. Deal <strong>Str</strong> damage.</p> - </div> - </div> - </div> - <div class="flavour_wrapper"> - <div class="flavour"> - <hr> - <p>“El Classico”</p> - </div> - </div> - </div> - <div class="card_type"> - Straight Sword Weapon - </div> - </div> - </div> - <div style="background:linear-gradient(225deg, rgba(0,0,0,1) -50%, rebeccapurple 100%)" class="card"> - <div class="group"> - <div class="title"> - <p> - Axe - </p> - <div class="attrib_icon attrib_bl"> - ⚔️ 3 - </div> - <div class="attrib_icon attrib_br"> - Str 🎲 - </div> - </div> - <div class="content"> - <div class="action"> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon tap_icon"> - ↪️ - </span> - </div> - <div class="action_detail"> - <p>🎲 <strong>d8 + Str</strong> to hit.</p> - </div> - </div> - </div> - <div class="action"> - <hr> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon tap_icon"> - ↪️ - </span> - </div> - <div class="action_detail"> - <p><strong>Throw</strong>: 🎲 <strong>d6 + Str</strong> to hit. This attack is <strong>Ranged</strong> and thus you ignore repostes from your target. You lose this weapon by using this attack.</p> - </div> - </div> - </div> - <div class="flavour_wrapper"> - <div class="flavour"> - <hr> - <p>“Looks great with a flannel shirt.”</p> - </div> - </div> - </div> - <div class="card_type"> - Axe Weapon - </div> - </div> - </div> - <div style="background:linear-gradient(225deg, rgba(0,0,0,1) -50%, rebeccapurple 100%)" class="card"> - <div class="group"> - <div class="title"> - <p> - Staff - </p> - <div class="attrib_icon attrib_bl"> - ⚔️ 2 - </div> - <div class="attrib_icon attrib_br"> - Str 🎲 - </div> - </div> - <div class="content"> - <div class="action"> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon tap_icon"> - ↪️ - </span> - </div> - <div class="action_detail"> - <p>🎲 <strong>d6 + Str</strong> to hit.</p> - </div> - </div> - </div> - <div class="action"> - <hr> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon tap_icon"> - ↪️ - </span> - </div> - <div class="action_detail"> - <p>(Two Handed) 🎲 <strong>d8 + Str</strong> to hit.</p> - </div> - </div> - </div> - <div class="action"> - <hr> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon suit_icon spades_icon"> - ♠️ - </span> - </div> - <div class="action_detail"> - <p>(odd) <strong>Swift Attack</strong>: Refresh this card.</p> - </div> - </div> - </div> - <div class="flavour_wrapper"> - <div class="flavour"> - <hr> - <p>“Says ‘Made by the Ninja Custodial Group’ on the handle”</p> - </div> - </div> - </div> - <div class="card_type"> - Staff Weapon - </div> - </div> - </div> - <div style="background:linear-gradient(225deg, rgba(0,0,0,1) -50%, rebeccapurple 100%)" class="card"> - <div class="group"> - <div class="title"> - <p> - Curved Sword - </p> - <div class="attrib_icon attrib_bl"> - ⚔️ 3 - </div> - <div class="attrib_icon attrib_br"> - Prc 🎲 - </div> - </div> - <div class="content"> - <div class="action"> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon tap_icon"> - ↪️ - </span> - </div> - <div class="action_detail"> - <p>🎲 <strong>d6 + Prc</strong> to hit.</p> - </div> - </div> - </div> - <div class="action"> - <hr> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon suit_icon spades_icon"> - ♠️ - </span> - </div> - <div class="action_detail"> - <p>(odd, recieving a reposte) <strong>Close Quarters</strong>: Deal damage equal to your reposte.</p> - </div> - </div> - </div> - <div class="flavour_wrapper"> - <div class="flavour"> - <hr> - <p>“Arrrgh”</p> - </div> - </div> - </div> - <div class="card_type"> - Curved Sword Weapon - </div> - </div> - </div> - <div style="background:linear-gradient(225deg, rgba(0,0,0,1) -50%, DarkBlue 100%)" class="card"> - <div class="group"> - <div class="title"> - <p> - Caestus - </p> - </div> - <div class="content"> - <div class="action"> - <p>While equipped: Unarmed Strikes deal <strong>Str</strong> additional damage.</p> - </div> - <div class="flavour_wrapper"> - <div class="flavour"> - <hr> - <p>“Weapon of choice for a fit bronze statue”</p> - </div> - </div> - </div> - <div class="card_type"> - Weapon Equipment - </div> - </div> - </div> - <div style="background:linear-gradient(225deg, rgba(0,0,0,1) -50%, rebeccapurple 100%)" class="card"> - <div class="group"> - <div class="title"> - <p> - Test Weapon - </p> - <div class="attrib_icon attrib_bl"> - ⚔️ 3 - </div> - <div class="attrib_icon attrib_br"> - Prc 🎲 - </div> - </div> - <div class="content"> - <div class="action"> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon suit_icon spades_icon"> - ♠️ - </span> - </div> - <div class="action_detail"> - <p>🎲 <strong>d6 + Prc</strong> to hit.</p> - </div> - </div> - </div> - <div class="action"> - <hr> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon suit_icon clubs_icon"> - ♣️ - </span> - </div> - <div class="action_detail"> - <p>🎲 <strong>d6 + Prc</strong> to hit.</p> - </div> - </div> - </div> - <div class="action"> - <hr> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon suit_icon diamonds_icon"> - ♦️ - </span> - </div> - <div class="action_detail"> - <p>🎲 <strong>d6 + Prc</strong> to hit.</p> - </div> - </div> - </div> - <div class="action"> - <hr> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon joker_icon"> - 🃏 - </span> - </div> - <div class="action_detail"> - <p>🎲 <strong>d6 + Prc</strong> to hit.</p> - </div> - </div> - </div> - <div class="action"> - <hr> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon tap_icon"> - ↪️ - </span> - <span class="icon suit_icon hearts_icon"> - ♥️ - </span> - </div> - <div class="action_detail"> - <p>🎲 <strong>d6 + Prc</strong> to hit.</p> - </div> - </div> - </div> - <div class="flavour_wrapper"> - <div class="flavour"> - <hr> - <p>“Arrrgh”</p> - </div> - </div> - </div> - <div class="card_type"> - Curved Sword Weapon - </div> - </div> - </div> - </div> - <script src="./web/bundle.js"> - </script> - <script> - function downloadAsImage() { - htmlToImage.toPng(document.getElementById('card_wrapper')) - .then(function (dataUrl) { - download(dataUrl, 'card_wrapper.png'); - }); - } - </script> -</html> diff --git a/cards/card.rb b/cards/card.rb index 2a9af5b..1521e77 100644 --- a/cards/card.rb +++ b/cards/card.rb @@ -23,10 +23,12 @@ class Card attrib_top_right_icon: '🩸', blood: nil, attrib_top_left: nil, - attrib_top_left_icon: '🛡️', + attrib_top_left_icon: '🎲', + roll: nil, attrib_bottom_right: nil, attrib_bottom_right_icon: '🛡️', reposte: nil, + defence: nil, attrib_bottom_left: nil, attrib_bottom_left_icon: '⚔️', damage: nil, @@ -35,8 +37,10 @@ class Card type: nil ) attrib_top_right ||= blood.to_s unless blood.nil? + attrib_bottom_right ||= defence.to_s unless defence.nil? attrib_bottom_right ||= reposte.to_s unless reposte.nil? attrib_bottom_left ||= damage.to_s unless damage.nil? + attrib_top_left ||= roll.to_s unless roll.nil? self.title = title self.color = color self.attrib_top_left = attrib_top_left diff --git a/cards/class_abilities.rb b/cards/class_abilities.rb new file mode 100644 index 0000000..117005b --- /dev/null +++ b/cards/class_abilities.rb @@ -0,0 +1,181 @@ +load 'card.rb' + +class_abilities = {} + +class_colors = { + rogue: 'Maroon', + ranger: 'ForestGreen', + astrologist: 'DodgerBlue', + monk: 'OrangeRed' +} + +class_abilities[:quick_attack] = Card.new( + title: "Quick Attack", + actions: [ + Card::Action.new( + symbol: :spades, + content: '(odd) **Refresh** a **light** weapon.', + ), + ], + color: class_colors[:rogue], + flavour: '"Stabby stabby stab"', + type: 'Rogue Ability', +) +class_abilities[:duck_and_weave] = Card.new( + title: "Duck and Weave", + actions: [ + Card::Action.new( + symbol: [:tap, :diamonds], + content: ' Ignore up to the card played worth of damage from a **reposte**.', + ), + ], + color: class_colors[:rogue], + flavour: '"Missed me"', + type: 'Rogue Ability', +) + +class_abilities[:surgical_strike] = Card.new( + title: "Surgical Strike", + actions: [ + Card::Action.new( + symbol: [:tap, :spades], + content: '(less then 5) Replace a weapon\'s damage with the value of the card played. Only affects the current attack.', + ), + ], + color: class_colors[:rogue], + #flavour: '"Missed me"', + type: 'Rogue Ability', +) + +class_abilities[:down_they_alleys] = Card.new( + title: "Down the Alleys", + actions: [ + Card::Action.new( + symbol: [:diamonds], + content: '(odd) When travelling inside a settlement, after an encounter has been revealed: you may choose to either discard the encounter and draw another one or skip the encounter.', + ), + ], + color: class_colors[:rogue], + #flavour: '"Missed me"', + type: 'Rogue Ability', +) + +class_abilities[:spot] = Card.new( + title: "Spot", + actions: [ + Card::Action.new( + symbol: [:hearts], + content: '(face) Mark a target. Choose up to one dice to reroll on each attack agaisnt this target. You can only have one target marked at a time. Lasts until 3 rerolls or the end of combat.', + ), + ], + color: class_colors[:ranger], + #flavour: '"Missed me"', + type: 'Ranger Ability', +) +class_abilities[:flexible_shooter] = Card.new( + title: "Flexible Shooter", + actions: [ + Card::Action.new( + #symbol: [:hearts], + content: 'You can deal reposte damage with any ranged weapon.', + ), + ], + color: class_colors[:ranger], + #flavour: '"Missed me"', + type: 'Ranger Ability', +) + +class_abilities[:scouting_ahead] = Card.new( + title: "Scouting Ahead", + actions: [ + Card::Action.new( + symbol: [:diamonds], + content: '(even) When travelling outside of a settlement, before the next encounter: reveal 2 encounters and pick 1. Discard the other.', + ), + ], + color: class_colors[:ranger], + #flavour: '"Missed me"', + type: 'Ranger Ability', +) + +class_abilities[:healing_salve_recipe] = Card.new( + title: "Healing Salve Recipe", + actions: [ + Card::Action.new( + symbol: [:diamonds, :hearts], + content: '(each suit) Healberry Herb, Cloth.', + ), + ], + color: class_colors[:ranger], + flavour: '"*Don\'t* eat the berries"', + type: 'Ranger Recipe', +) + +class_abilities[:recast] = Card.new( + title: "Recast", + actions: [ + Card::Action.new( + symbol: [:tap, :hearts], + content: '(less then or equal to your max blood roll) Replace the blood roll with the value of the card played and reroll any other associated dice with a spell you cast.', + ), + ], + color: class_colors[:astrologist], + #flavour: '"Missed me"', + type: 'Astrologist Ability', +) +class_abilities[:focused_cast] = Card.new( + title: "Focused Cast", + actions: [ + Card::Action.new( + symbol: [:tap], + content: 'Upgrade the blood dice for one spell you cast.', + ), + ], + color: class_colors[:astrologist], + #flavour: '"Missed me"', + type: 'Astrologist Ability', +) + +class_abilities[:focused_cast] = Card.new( + title: "Focused Cast", + actions: [ + Card::Action.new( + symbol: [:tap], + content: 'Upgrade the blood dice for one spell you cast.', + ), + ], + color: class_colors[:astrologist], + #flavour: '"Missed me"', + type: 'Astrologist Ability', +) + +class_abilities[:change_of_fate] = Card.new( + title: "Change of Fate", + blood: 1, + actions: [ + Card::Action.new( + symbol: [:blood], + content: 'Swap 1 card with a willing player.', + ), + ], + color: class_colors[:astrologist], + #flavour: '"Missed me"', + type: 'Astrologist Ability', +) + +class_abilities[:palm_reading] = Card.new( + title: "Palm Reading", + blood: 1, + actions: [ + Card::Action.new( + symbol: [:blood], + content: 'Discard a willing players hand and replace it with new cards drawn.', + ), + ], + color: class_colors[:astrologist], + #flavour: '"Missed me"', + type: 'Astrologist Ability', +) + +File.write('class_abilities.html', Card.build(class_abilities.values)) + diff --git a/cards/common_weapons.html b/cards/common_weapons.html deleted file mode 100644 index 5cc46d1..0000000 --- a/cards/common_weapons.html +++ /dev/null @@ -1,861 +0,0 @@ -<!DOCTYPE html> -<html> - <head> - <style> - .flavour { - color: rgba(0,0,0,0.5); - padding: 35px; - font-size: 35px; - } - .flavour_wrapper { - position: absolute; - bottom: 0; - left: 0; - width: 100%; - text-align: center; - } - .action_detail { - padding-top: 0px; - text-align: left; - } - .symbol_wrapper_inner { - display: flex; - flex-direction: column; - gap: 5px; - } - .symbol_wrapper_outer { - display: flex; - gap: 20px; - } - .card_type { - background-color: antiquewhite; - text-align: center; - font-size: 40px; - padding: 10px; - -moz-border-radius: 15px 15px 0 0; - -webkit-border-radius: 15px 15px 0 0; - border-radius: 15px 15px 0 0; - font-weight: bold; - border-width: 2px 2px 0 2px; - border-color: black; - border-style: solid; - } - .face_icon { - color: white; - display: inline-block; - padding: 4px; - height: 62px; - min-width: 62px; - font-size: 55px; - -moz-border-radius: 15px; - -webkit-border-radius: 15px; - border-radius: 15px; - background-color: black; - } - .icon { - display: inline-block; - padding: 8px 4px 0px 4px; - -moz-border-radius: 15px; - -webkit-border-radius: 15px; - border-radius: 15px; - aspect-ratio: 1/1; - font-size: 40px; - height: 52px; - width: 52px; - } - .hearts_icon { - color: orangered; - } - .diamonds_icon { - color: orangered; - } - .clubs_icon { - color: antiquewhite; - } - .spades_icon { - color: antiquewhite; - } - .suit_icon { - background-color: black; - text-align: center; - font-size: 60px; - line-height: 40px; - } - .blood_icon { - background-color: black; - padding: 6px 3px 2px 5px; - } - .joker_icon { - background-color: black; - padding: 6px 3px 2px 5px; - } - .tap_icon { - background-color: black; - } - .content { - background-color: antiquewhite; - color: black; - flex: 5; - -moz-border-radius: 25px; - -webkit-border-radius: 25px; - border-radius: 25px; - overflow: hidden; - position: relative; - font-size: 50px; - display: flex; - justify-content: flex-start; - gap: 5px; - text-align: left; - padding: 35px 30px 30px 30px; - flex-direction: column; - border-width: 2px 2px 2px 2px; - border-color: black; - border-style: solid; - } - .attrib_bottom_icons { - bottom: 0; - } - .attrib_top_icons { - top: 0; - } - .attrib_bl { - position: absolute; - bottom: 0; - left: 0; - -moz-border-radius: 0 50px 0 0; - -webkit-border-radius: 0 50px 0 0; - border-radius: 0 50px 0 0; - border-color: rgba(255,255,255,0.50); - border-style: solid; - border-width: 5px 5px 0 0; - padding: 15px 25px 15px 15px; - } - .attrib_br { - position: absolute; - bottom: 0; - right: 0; - -moz-border-radius: 50px 0 0 0; - -webkit-border-radius: 50px 0 0 0; - border-radius: 50px 0 0 0; - border-color: rgba(255,255,255,0.50); - border-style: solid; - border-width: 5px 0 0 5px; - padding: 15px 15px 15px 25px; - } - .attrib_tr { - position: absolute; - top: 0; - right: 0; - -moz-border-radius: 0 0 0 50px; - -webkit-border-radius: 0 0 0 50px; - border-radius: 0 0 0 50px; - border-color: rgba(255,255,255,0.50); - border-style: solid; - border-width: 0 0 5px 5px; - padding: 15px 15px 15px 25px; - } - .attrib_tl { - position: absolute; - top: 0; - left: 0; - -moz-border-radius: 0 0 50px 0; - -webkit-border-radius: 0 0 50px 0; - border-radius: 0 0 50px 0; - border-color: rgba(255,255,255,0.50); - border-style: solid; - border-width: 0 5px 5px 0; - padding: 15px 25px 15px 15px; - } - .attrib_icon { - background-color: rgba(255,255,255,0.10); - } - .title { - background-color: black; - color: antiquewhite; - flex: 3; - -moz-border-radius: 25px; - -webkit-border-radius: 25px; - border-radius: 25px; - overflow: hidden; - position: relative; - font-size: 85px; - display: flex; - align-items: center; - justify-content: center; - text-align: center; - flex-direction: column; - padding: 25px; - border-width: 2px 2px 2px 2px; - border-color: black; - border-style: solid; - } - .group { - margin: 50px 50px 0px 50px; - -moz-border-radius: 25px; - -webkit-border-radius: 25px; - border-radius: 25px; - display: flex; - flex-direction: column; - align-content: space-between; - height: auto; - flex: 2; - gap: 35px; - } - .card { - height: 1425px; - width: 825px; - background-color: black; - display: flex; - } - .card_wrapper { - min-height: 2850px; - width: 5775px; - display: flex; - flex-wrap: wrap; - height: 100%; - } - button { - font-size: 50px; - padding: 30px; - margin: 30px; - } - p { - margin: 0; - } - body { - background-color: #1e1e1e; - } - </style> - </head> - <button onclick="downloadAsImage()"> - Download - </button> - <div id="card_wrapper" class="card_wrapper"> - <div style="background:linear-gradient(225deg, rgba(0,0,0,1) -50%, rebeccapurple 100%)" class="card"> - <div class="group"> - <div class="title"> - <p> - Thrusting Sword - </p> - <div class="attrib_icon attrib_bl"> - ⚔️ 3 - </div> - <div class="attrib_icon attrib_br"> - Prc 🛡️ - </div> - </div> - <div class="content"> - <div class="action"> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon tap_icon"> - ↪️ - </span> - </div> - <div class="action_detail"> - <p>🎲 <strong>d8 + Prc</strong> to hit.</p> - </div> - </div> - </div> - <div class="action"> - <hr> - <p><strong>Opportune Strike</strong>: When targeting an enemy with this weapon, mark them until the end of their turn. While marked if they attack somone other then you then you can perform a reposte on them.</p> - </div> - <div class="flavour_wrapper"> - <div class="flavour"> - <hr> - <p>“World Famous Iron Toothpick”</p> - </div> - </div> - </div> - <div class="card_type"> - Thrusting Sword Weapon - </div> - </div> - </div> - <div style="background:linear-gradient(225deg, rgba(0,0,0,1) -50%, rebeccapurple 100%)" class="card"> - <div class="group"> - <div class="title"> - <p> - Polearm - </p> - <div class="attrib_icon attrib_bl"> - ⚔️ 3 - </div> - <div class="attrib_icon attrib_br"> - Str 🛡️ - </div> - </div> - <div class="content"> - <div class="action"> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon tap_icon"> - ↪️ - </span> - </div> - <div class="action_detail"> - <p>🎲 <strong>d6 + Str</strong> to hit.</p> - </div> - </div> - </div> - <div class="action"> - <hr> - <p><strong>Reach</strong>: When making an attack, you ignore repostes from your target unless they also have Reach.</p> - </div> - <div class="flavour_wrapper"> - <div class="flavour"> - <hr> - <p>“Getting up close and personal while staying far away”</p> - </div> - </div> - </div> - <div class="card_type"> - Polearm Weapon - </div> - </div> - </div> - <div style="background:linear-gradient(225deg, rgba(0,0,0,1) -50%, rebeccapurple 100%)" class="card"> - <div class="group"> - <div class="title"> - <p> - Dagger - </p> - <div class="attrib_icon attrib_bl"> - ⚔️ 2 - </div> - <div class="attrib_icon attrib_br"> - Prc 🛡️ - </div> - </div> - <div class="content"> - <div class="action"> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon tap_icon"> - ↪️ - </span> - </div> - <div class="action_detail"> - <p>🎲 <strong>d6 + Prc</strong> to hit.</p> - </div> - </div> - </div> - <div class="action"> - <hr> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon suit_icon spades_icon"> - ♠️ - </span> - </div> - <div class="action_detail"> - <p>(even) <strong>Swift Attack</strong>: Refresh this card.</p> - </div> - </div> - </div> - <div class="flavour_wrapper"> - <div class="flavour"> - <hr> - <p>“A quick and convinient way to turn a spleen into a sheath”</p> - </div> - </div> - </div> - <div class="card_type"> - Dagger Weapon - </div> - </div> - </div> - <div style="background:linear-gradient(225deg, rgba(0,0,0,1) -50%, rebeccapurple 100%)" class="card"> - <div class="group"> - <div class="title"> - <p> - Bow - </p> - <div class="attrib_icon attrib_bl"> - ⚔️ 3 - </div> - <div class="attrib_icon attrib_br"> - 1 🛡️ - </div> - </div> - <div class="content"> - <div class="action"> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon tap_icon"> - ↪️ - </span> - </div> - <div class="action_detail"> - <p>🎲 <strong>d4 + (2·Prc)</strong> to hit.</p> - </div> - </div> - </div> - <div class="action"> - <hr> - <p><strong>Ranged</strong>: When making an attack, you ignore repostes from your target. You can’t deal a reposte either.</p> - </div> - <div class="flavour_wrapper"> - <div class="flavour"> - <hr> - <p>“One stringed instrument that got repurposed as a weapon.”</p> - </div> - </div> - </div> - <div class="card_type"> - Bow Weapon - </div> - </div> - </div> - <div style="background:linear-gradient(225deg, rgba(0,0,0,1) -50%, rebeccapurple 100%)" class="card"> - <div class="group"> - <div class="title"> - <p> - Crossbow - </p> - <div class="attrib_icon attrib_bl"> - ⚔️ 4 - </div> - <div class="attrib_icon attrib_br"> - 1 🛡️ - </div> - </div> - <div class="content"> - <div class="action"> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon tap_icon"> - ↪️ - </span> - </div> - <div class="action_detail"> - <p>(must be loaded) 🎲 <strong>d6 + Prc</strong> to hit.</p> - </div> - </div> - </div> - <div class="action"> - <hr> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon tap_icon"> - ↪️ - </span> - </div> - <div class="action_detail"> - <p><strong>Reload</strong>: Load this weapon.</p> - </div> - </div> - </div> - <div class="action"> - <hr> - <p><strong>Ranged</strong>: When making an attack, you ignore repostes from your target. You can’t deal a reposte either.</p> - </div> - <div class="flavour_wrapper"> - <div class="flavour"> - <hr> - <p>“No one will cross you with this weapon”</p> - </div> - </div> - </div> - <div class="card_type"> - Crossbow Weapon - </div> - </div> - </div> - <div style="background:linear-gradient(225deg, rgba(0,0,0,1) -50%, rebeccapurple 100%)" class="card"> - <div class="group"> - <div class="title"> - <p> - Hammer - </p> - <div class="attrib_icon attrib_bl"> - ⚔️ 3 - </div> - <div class="attrib_icon attrib_br"> - Str 🛡️ - </div> - </div> - <div class="content"> - <div class="action"> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon tap_icon"> - ↪️ - </span> - </div> - <div class="action_detail"> - <p>🎲 <strong>d6 + Str</strong> to hit.</p> - </div> - </div> - </div> - <div class="action"> - <hr> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon tap_icon"> - ↪️ - </span> - </div> - <div class="action_detail"> - <p><strong>Power Swing</strong>: 🎲 <strong>d4 + Str</strong> to hit. Deal <strong>Str + 2</strong> damage.</p> - </div> - </div> - </div> - <div class="flavour_wrapper"> - <div class="flavour"> - <hr> - <p>“If you can pick it up, then you are worthy enough to use it.”</p> - </div> - </div> - </div> - <div class="card_type"> - Hammer Weapon - </div> - </div> - </div> - <div style="background:linear-gradient(225deg, rgba(0,0,0,1) -50%, rebeccapurple 100%)" class="card"> - <div class="group"> - <div class="title"> - <p> - Straight Sword - </p> - <div class="attrib_icon attrib_bl"> - ⚔️ 3 - </div> - <div class="attrib_icon attrib_br"> - Str 🛡️ - </div> - </div> - <div class="content"> - <div class="action"> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon tap_icon"> - ↪️ - </span> - </div> - <div class="action_detail"> - <p>🎲 <strong>d6 + Str</strong> to hit.</p> - </div> - </div> - </div> - <div class="action"> - <hr> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon tap_icon"> - ↪️ - </span> - </div> - <div class="action_detail"> - <p>(Two Handed) 🎲 <strong>d6 + Str</strong> to hit. Deal <strong>Str</strong> damage.</p> - </div> - </div> - </div> - <div class="flavour_wrapper"> - <div class="flavour"> - <hr> - <p>“El Classico”</p> - </div> - </div> - </div> - <div class="card_type"> - Straight Sword Weapon - </div> - </div> - </div> - <div style="background:linear-gradient(225deg, rgba(0,0,0,1) -50%, rebeccapurple 100%)" class="card"> - <div class="group"> - <div class="title"> - <p> - Axe - </p> - <div class="attrib_icon attrib_bl"> - ⚔️ 3 - </div> - <div class="attrib_icon attrib_br"> - Str 🛡️ - </div> - </div> - <div class="content"> - <div class="action"> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon tap_icon"> - ↪️ - </span> - </div> - <div class="action_detail"> - <p>🎲 <strong>d8 + Str</strong> to hit.</p> - </div> - </div> - </div> - <div class="action"> - <hr> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon tap_icon"> - ↪️ - </span> - </div> - <div class="action_detail"> - <p><strong>Throw</strong>: 🎲 <strong>d6 + Str</strong> to hit. This attack is <strong>Ranged</strong> and thus you ignore repostes from your target. You lose this weapon by using this attack.</p> - </div> - </div> - </div> - <div class="flavour_wrapper"> - <div class="flavour"> - <hr> - <p>“Looks great with a flannel shirt.”</p> - </div> - </div> - </div> - <div class="card_type"> - Axe Weapon - </div> - </div> - </div> - <div style="background:linear-gradient(225deg, rgba(0,0,0,1) -50%, rebeccapurple 100%)" class="card"> - <div class="group"> - <div class="title"> - <p> - Staff - </p> - <div class="attrib_icon attrib_bl"> - ⚔️ 2 - </div> - <div class="attrib_icon attrib_br"> - Str 🛡️ - </div> - </div> - <div class="content"> - <div class="action"> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon tap_icon"> - ↪️ - </span> - </div> - <div class="action_detail"> - <p>🎲 <strong>d6 + Str</strong> to hit.</p> - </div> - </div> - </div> - <div class="action"> - <hr> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon tap_icon"> - ↪️ - </span> - </div> - <div class="action_detail"> - <p>(Two Handed) 🎲 <strong>d8 + Str</strong> to hit.</p> - </div> - </div> - </div> - <div class="action"> - <hr> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon suit_icon spades_icon"> - ♠️ - </span> - </div> - <div class="action_detail"> - <p>(odd) <strong>Swift Attack</strong>: Refresh this card.</p> - </div> - </div> - </div> - <div class="flavour_wrapper"> - <div class="flavour"> - <hr> - <p>“Says ‘Made by the Ninja Custodial Group’ on the handle”</p> - </div> - </div> - </div> - <div class="card_type"> - Staff Weapon - </div> - </div> - </div> - <div style="background:linear-gradient(225deg, rgba(0,0,0,1) -50%, rebeccapurple 100%)" class="card"> - <div class="group"> - <div class="title"> - <p> - Curved Sword - </p> - <div class="attrib_icon attrib_bl"> - ⚔️ 3 - </div> - <div class="attrib_icon attrib_br"> - Prc 🛡️ - </div> - </div> - <div class="content"> - <div class="action"> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon tap_icon"> - ↪️ - </span> - </div> - <div class="action_detail"> - <p>🎲 <strong>d6 + Prc</strong> to hit.</p> - </div> - </div> - </div> - <div class="action"> - <hr> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon suit_icon spades_icon"> - ♠️ - </span> - </div> - <div class="action_detail"> - <p>(odd, recieving a reposte) <strong>Close Quarters</strong>: Deal damage equal to your reposte.</p> - </div> - </div> - </div> - <div class="flavour_wrapper"> - <div class="flavour"> - <hr> - <p>“Arrrgh”</p> - </div> - </div> - </div> - <div class="card_type"> - Curved Sword Weapon - </div> - </div> - </div> - <div style="background:linear-gradient(225deg, rgba(0,0,0,1) -50%, DarkBlue 100%)" class="card"> - <div class="group"> - <div class="title"> - <p> - Caestus - </p> - </div> - <div class="content"> - <div class="action"> - <p>While equipped: Unarmed Strikes deal <strong>Str</strong> additional damage.</p> - </div> - <div class="flavour_wrapper"> - <div class="flavour"> - <hr> - <p>“Weapon of choice for a fit bronze statue”</p> - </div> - </div> - </div> - <div class="card_type"> - Weapon Equipment - </div> - </div> - </div> - <div style="background:linear-gradient(225deg, rgba(0,0,0,1) -50%, rebeccapurple 100%)" class="card"> - <div class="group"> - <div class="title"> - <p> - Test Weapon - </p> - <div class="attrib_icon attrib_bl"> - ⚔️ 3 - </div> - <div class="attrib_icon attrib_br"> - Prc 🛡️ - </div> - </div> - <div class="content"> - <div class="action"> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon suit_icon spades_icon"> - ♠️ - </span> - </div> - <div class="action_detail"> - <p>🎲 <strong>d6 + Prc</strong> to hit.</p> - </div> - </div> - </div> - <div class="action"> - <hr> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon suit_icon clubs_icon"> - ♣️ - </span> - </div> - <div class="action_detail"> - <p>🎲 <strong>d6 + Prc</strong> to hit.</p> - </div> - </div> - </div> - <div class="action"> - <hr> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon suit_icon diamonds_icon"> - ♦️ - </span> - </div> - <div class="action_detail"> - <p>🎲 <strong>d6 + Prc</strong> to hit.</p> - </div> - </div> - </div> - <div class="action"> - <hr> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon joker_icon"> - 🃏 - </span> - </div> - <div class="action_detail"> - <p>🎲 <strong>d6 + Prc</strong> to hit.</p> - </div> - </div> - </div> - <div class="action"> - <hr> - <div class="symbol_wrapper_outer"> - <div class="symbol_wrapper_inner"> - <span class="icon tap_icon"> - ↪️ - </span> - <span class="icon suit_icon hearts_icon"> - ♥️ - </span> - </div> - <div class="action_detail"> - <p>🎲 <strong>d6 + Prc</strong> to hit.</p> - </div> - </div> - </div> - <div class="flavour_wrapper"> - <div class="flavour"> - <hr> - <p>“Arrr”</p> - </div> - </div> - </div> - <div class="card_type"> - Curved Sword Weapon - </div> - </div> - </div> - </div> - <script src="./web/bundle.js"> - </script> - <script> - function downloadAsImage() { - htmlToImage.toPng(document.getElementById('card_wrapper')) - .then(function (dataUrl) { - download(dataUrl, 'card_wrapper.png'); - }); - } - </script> -</html> diff --git a/cards/common_weapons.rb b/cards/common_weapons.rb index 3526c05..55931af 100644 --- a/cards/common_weapons.rb +++ b/cards/common_weapons.rb @@ -12,10 +12,10 @@ common_weapons[:thrusting_sword] = Card.new( content: '🎲 **d8 + Prc** to hit.', symbol: :tap, ), - Card::Action.new( - seperator: true, - content: '**Opportune Strike**: When targeting an enemy with this weapon, mark them until the end of their turn. While marked if they attack somone other then you then you can perform a reposte on them.', - ) + #Card::Action.new( + # seperator: true, + # content: '**Opportune Strike**: When targeting an enemy with this weapon, mark them until the end of their turn. While marked if they attack somone other then you then you can perform a reposte on them.', + #) ], flavour: '"World Famous Iron Toothpick"', type: 'Thrusting Sword Weapon' @@ -25,8 +25,8 @@ common_weapons[:thrusting_sword] = Card.new( common_weapons[:polearm] = Card.new( title: "Polearm", color: 'rebeccapurple', - reposte: 'Str', - damage: '3', + reposte: 'Prc', + damage: '4', actions: [ Card::Action.new( content: '🎲 **d6 + Str** to hit.', @@ -34,15 +34,44 @@ common_weapons[:polearm] = Card.new( ), Card::Action.new( seperator: true, - content: '**Reach**: When making an attack, you ignore repostes from your target unless they also have Reach.', - # TODO: this is the same as the bow making it superiour - #symbol: :spades, + content: '**Reach**', ), + #Card::Action.new( + # seperator: true, + # content: '**Reach**: When making an attack, you ignore repostes from your target unless they also have Reach.', + # # TODO: this is the same as the bow making it superiour + # #symbol: :spades, + #), ], flavour: '"Getting up close and personal while staying far away"', type: 'Polearm Weapon' ) +common_weapons[:spear] = Card.new( + title: "Spear", + color: 'rebeccapurple', + reposte: 'Prc', + damage: '3', + actions: [ + Card::Action.new( + content: '🎲 **d6 + Prc** to hit.', + symbol: :tap, + ), + Card::Action.new( + seperator: true, + content: '**Reach**, **Throwable**', + ), + #Card::Action.new( + # seperator: true, + # content: '**Reach**: When making an attack, you ignore repostes from your target unless they also have Reach.', + # # TODO: this is the same as the bow making it superiour + # #symbol: :spades, + #), + ], + flavour: '"5x more throwable then previous editions"', + type: 'Polearm Weapon' +) + common_weapons[:dagger] = Card.new( title: "Dagger", color: 'rebeccapurple', @@ -50,24 +79,29 @@ common_weapons[:dagger] = Card.new( damage: '2', actions: [ Card::Action.new( - content: '🎲 **d6 + Prc** to hit.', + content: '🎲 **d4 + Prc** to hit.', symbol: :tap, ), Card::Action.new( seperator: true, - content: '(even) **Swift Attack**: Refresh this card.', - symbol: :spades + content: '**Light**, **Throwable**', + #symbol: :spades ), + #Card::Action.new( + # seperator: true, + # content: '(even) **Swift Attack**: Refresh this card.', + # symbol: :spades + #), ], flavour: '"A quick and convinient way to turn a spleen into a sheath"', type: 'Dagger Weapon' ) -common_weapons[:bow] = Card.new( - title: "Bow", +common_weapons[:longbow] = Card.new( + title: "Longbow", color: 'rebeccapurple', damage: '3', - reposte: 1, + #reposte: 1, actions: [ Card::Action.new( content: '🎲 **d4 + (2·Prc)** to hit.', @@ -75,8 +109,12 @@ common_weapons[:bow] = Card.new( ), Card::Action.new( seperator: true, - content: '**Ranged**: When making an attack, you ignore repostes from your target. You can\'t deal a reposte either.', + content: '**Ranged**', ) + #Card::Action.new( + # seperator: true, + # content: '**Ranged**: When making an attack, you ignore repostes from your target. You can\'t deal a reposte either.', + #) ], flavour: '"One stringed instrument that got repurposed as a weapon."', type: 'Bow Weapon' @@ -85,8 +123,8 @@ common_weapons[:bow] = Card.new( common_weapons[:crossbow] = Card.new( title: "Crossbow", color: 'rebeccapurple', - damage: '4', - reposte: 1, + damage: '3', + #reposte: 1, actions: [ Card::Action.new( content: '(must be loaded) 🎲 **d6 + Prc** to hit.', @@ -99,7 +137,7 @@ common_weapons[:crossbow] = Card.new( ), Card::Action.new( seperator: true, - content: '**Ranged**: When making an attack, you ignore repostes from your target. You can\'t deal a reposte either.', + content: '**Ranged**', ) ], flavour: '"No one will cross you with this weapon"', @@ -112,14 +150,14 @@ common_weapons[:hammer] = Card.new( damage: 3, actions: [ Card::Action.new( - content: '🎲 **d6 + Str** to hit.', + content: '🎲 **d4 + (2·Str)** to hit.', symbol: :tap, ), - Card::Action.new( - seperator: true, - content: '**Power Swing**: 🎲 **d4 + Str** to hit. Deal **Str + 2** damage.', - symbol: :tap - ), + #Card::Action.new( + # seperator: true, + # content: '**Power Swing**: 🎲 **d4 + Str** to hit. Deal **Str + 2** damage.', + # symbol: :tap + #), ], flavour: '"If you can pick it up, then you are worthy enough to use it."', color: 'rebeccapurple', @@ -132,14 +170,14 @@ common_weapons[:straight_sword] = Card.new( reposte: 'Str', actions: [ Card::Action.new( - content: '🎲 **d6 + Str** to hit.', + content: '🎲 **d8 + Str** to hit.', symbol: :tap, ), - Card::Action.new( - seperator: true, - content: '(Two Handed) 🎲 **d6 + Str** to hit. Deal **Str** damage.', - symbol: :tap, - ) + #Card::Action.new( + # seperator: true, + # content: '(Two Handed) 🎲 **d6 + Str** to hit. Deal **Str** damage.', + # symbol: :tap, + #) ], flavour: '"El Classico"', color: 'rebeccapurple', @@ -148,18 +186,18 @@ common_weapons[:straight_sword] = Card.new( common_weapons[:axe] = Card.new( title: "Axe", - damage: 3, + damage: 4, reposte: 'Str', actions: [ Card::Action.new( - content: '🎲 **d8 + Str** to hit.', + content: '🎲 **d6 + Str** to hit.', symbol: :tap, ), - Card::Action.new( - seperator: true, - content: '**Throw**: 🎲 **d6 + Str** to hit. This attack is **Ranged** and thus you ignore repostes from your target. You lose this weapon by using this attack.', - symbol: :tap - ), + #Card::Action.new( + # seperator: true, + # content: '**Throw**: 🎲 **d6 + Str** to hit. This attack is **Ranged** and thus you ignore repostes from your target. You lose this weapon by using this attack.', + # symbol: :tap + #), ], flavour: '"Looks great with a flannel shirt."', color: 'rebeccapurple', @@ -182,9 +220,13 @@ common_weapons[:staff] = Card.new( ), Card::Action.new( seperator: true, - content: '(odd) **Swift Attack**: Refresh this card.', - symbol: :spades - ), + content: '**Light**', + ) + #Card::Action.new( + # seperator: true, + # content: '(odd) **Swift Attack**: Refresh this card.', + # symbol: :spades + #), ], color: 'rebeccapurple', flavour: '"Says \'Made by the Ninja Custodial Group\' on the handle"', @@ -197,18 +239,38 @@ common_weapons[:curved_sword] = Card.new( reposte: 'Prc', actions: [ Card::Action.new( - content: '🎲 **d6 + Prc** to hit.', + content: '🎲 **d8 + Str** to hit.', + symbol: :tap, + ), + #Card::Action.new( + # seperator: true, + # content: '(odd, recieving a reposte) **Close Quarters**: Deal damage equal to your reposte.', + # symbol: :spades + #), + ], + color: 'rebeccapurple', + flavour: '"Arrrgh"', + type: 'Curved Sword Weapon', +) + +common_weapons[:forked_sword] = Card.new( + title: "Forked Sword", + damage: 3, + reposte: 'Str', + roll: '1d6', + actions: [ + Card::Action.new( + content: '🎲 **d6 + Str** to hit.', symbol: :tap, ), Card::Action.new( seperator: true, - content: '(odd, recieving a reposte) **Close Quarters**: Deal damage equal to your reposte.', - symbol: :spades + content: '**Casting Focus**', ), ], color: 'rebeccapurple', - flavour: '"Arrrgh"', - type: 'Curved Sword Weapon', + flavour: '"Weapon used in the war against the gods. Vintage!"', + type: 'Forked Sword Weapon', ) common_weapons[:caestus] = Card.new( @@ -223,6 +285,33 @@ common_weapons[:caestus] = Card.new( type: 'Weapon Equipment' ) +common_weapons[:tuning_fork] = Card.new( + title: "Tuning Fork", + roll: '1d4', + actions: [ + Card::Action.new( + content: '**Casting Focus**', + ), + ], + color: 'DarkBlue', + flavour: '"Resonates with various magical frequencies to help with casting blood magic"', + type: 'Magic Casting Tool', +) + +common_weapons[:casters_glove] = Card.new( + title: "Caster's Glove", + roll: '1d8', + actions: [ + Card::Action.new( + content: '**Casting Focus**', + ), + ], + color: 'DarkBlue', + flavour: '"Modern casting tool that works by directly drawing your blood"', + type: 'Magic Casting Tool', +) + + common_weapons[:test_weapon] = Card.new( title: "Test Weapon", damage: 3, diff --git a/cards/spells.rb b/cards/spells.rb index 64986b2..693f6c6 100644 --- a/cards/spells.rb +++ b/cards/spells.rb @@ -76,20 +76,20 @@ beginner_spells[:summon_alchemicals] = Card.new( type: 'Blood Magic (Eldritch)' ) -beginner_spells[:summon_alchemicals] = Card.new( - title: "Summon Alchemicals", - #damage: 3, - blood: 2, +beginner_spells[:northern_wind] = Card.new( #TODO + title: "Northern Wind", + damage: '2d4', + blood: 1, #reposte: 'Prc', actions: [ Card::Action.new( - content: '(**odd**) Summon a random amount of a random alchemical depending on various hidden factors.', - symbol: [:diamonds, :blood] + content: '(**odd**) Shoot a cold wind from your hands, freezing things in its path.', + symbol: [:clubs, :blood] ), ], color: 'firebrick', - flavour: '"You arent making a bomb, are you?"', - type: 'Blood Magic (Eldritch)' + flavour: '"Won\'t fail blowing out birthday candles"', + type: 'Blood Magic (Storm)' ) diff --git a/src/SUMMARY.md b/src/SUMMARY.md index e2373a6..196530d 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -10,6 +10,8 @@ - [Vices](build/vices.md) - [Races](./races.md) - [Attributes](./attributes.md) + - [Classes](classes.md) + - - [What You Have]() - [Gear]() - [Armour](armour.md) diff --git a/src/classes.md b/src/classes.md new file mode 100644 index 0000000..86c896f --- /dev/null +++ b/src/classes.md @@ -0,0 +1,17 @@ +# Classes + +## Rogue +Can attack many times at once +specialized in the "city" + +## Ranger +Good at focusing a target(mark) +specialized in "nature" + +## Sorcerer +Specialized at casting +specialized in "magic" + +## Monk +Specialized at inner peace? +can move cards around the field
\ No newline at end of file |
