From be187d0c9d5adc289479df5f80533fe37709d24b Mon Sep 17 00:00:00 2001 From: realtradam Date: Tue, 31 Jan 2023 21:58:09 -0500 Subject: gear rules, refined classes idea, worked on abilities --- cards/Gemfile | 11 + cards/Gemfile.lock | 17 + cards/alchemical_recipes.rb | 21 - cards/armour.rb | 58 -- cards/assets/cardback.png | Bin 0 -> 80602 bytes cards/assets/cardback.svg | 223 +++++ cards/assets/inspiration_cardback.jpg | Bin 0 -> 53923 bytes cards/assets/weapon_example.svg | 864 +++++++++++++++++++ cards/card.rb | 479 ----------- cards/card_weapons.rb | 89 -- cards/cardback.png | Bin 80602 -> 0 bytes cards/cardback.svg | 223 ----- cards/cards/alchemical_recipes.rb | 21 + cards/cards/armour.rb | 60 ++ cards/cards/card.rb | 494 +++++++++++ cards/cards/card_weapons.rb | 91 ++ cards/cards/class_abilities.rb | 181 ++++ cards/cards/common_items.rb | 153 ++++ cards/cards/common_weapons.rb | 356 ++++++++ cards/cards/paladin_abilities.rb | 196 +++++ cards/cards/rare_weapons.rb | 117 +++ cards/cards/spells.rb | 266 ++++++ cards/class_abilities.rb | 181 ---- cards/common_weapons.rb | 350 -------- cards/inspiration_cardback.jpg | Bin 53923 -> 0 bytes cards/output/alchemical_recipes.html | 300 +++++++ cards/output/armour.html | 380 ++++++++ cards/output/beginner_spells.html | 568 ++++++++++++ cards/output/class_abilities.html | 595 +++++++++++++ cards/output/common_items.html | 556 ++++++++++++ cards/output/common_weapons.html | 1047 +++++++++++++++++++++++ cards/output/paladin_abilities.html | 639 ++++++++++++++ cards/output/rare_weapons.html | 512 +++++++++++ cards/spells.rb | 267 ------ cards/weapon_example.svg | 864 ------------------- src/.obsidian/core-plugins.json | 1 + src/classes.md | 30 +- src/gear.md | 4 + src/running-the-game/Assets/blood_symbol.png | Bin 0 -> 1288 bytes src/running-the-game/Assets/even_symbol.png | Bin 0 -> 860 bytes src/running-the-game/Assets/face_symbol.png | Bin 0 -> 1998 bytes src/running-the-game/Assets/greater_symbol.png | Bin 0 -> 1009 bytes src/running-the-game/Assets/lesser_symbol.png | Bin 0 -> 874 bytes src/running-the-game/Assets/odd_symbol.png | Bin 0 -> 1092 bytes src/running-the-game/Assets/reactive_symbol.png | Bin 0 -> 1433 bytes src/running-the-game/abilities.md | 61 +- src/running-the-game/weapons.md | 32 +- tap_symbol.xcf | Bin 7642 -> 13828 bytes 48 files changed, 7759 insertions(+), 2548 deletions(-) create mode 100644 cards/Gemfile create mode 100644 cards/Gemfile.lock delete mode 100644 cards/alchemical_recipes.rb delete mode 100644 cards/armour.rb create mode 100644 cards/assets/cardback.png create mode 100644 cards/assets/cardback.svg create mode 100644 cards/assets/inspiration_cardback.jpg create mode 100644 cards/assets/weapon_example.svg delete mode 100644 cards/card.rb delete mode 100644 cards/card_weapons.rb delete mode 100644 cards/cardback.png delete mode 100644 cards/cardback.svg create mode 100644 cards/cards/alchemical_recipes.rb create mode 100644 cards/cards/armour.rb create mode 100644 cards/cards/card.rb create mode 100644 cards/cards/card_weapons.rb create mode 100644 cards/cards/class_abilities.rb create mode 100644 cards/cards/common_items.rb create mode 100644 cards/cards/common_weapons.rb create mode 100644 cards/cards/paladin_abilities.rb create mode 100644 cards/cards/rare_weapons.rb create mode 100644 cards/cards/spells.rb delete mode 100644 cards/class_abilities.rb delete mode 100644 cards/common_weapons.rb delete mode 100644 cards/inspiration_cardback.jpg create mode 100644 cards/output/alchemical_recipes.html create mode 100644 cards/output/armour.html create mode 100644 cards/output/beginner_spells.html create mode 100644 cards/output/class_abilities.html create mode 100644 cards/output/common_items.html create mode 100644 cards/output/common_weapons.html create mode 100644 cards/output/paladin_abilities.html create mode 100644 cards/output/rare_weapons.html delete mode 100644 cards/spells.rb delete mode 100644 cards/weapon_example.svg create mode 100644 src/gear.md create mode 100644 src/running-the-game/Assets/blood_symbol.png create mode 100644 src/running-the-game/Assets/even_symbol.png create mode 100644 src/running-the-game/Assets/face_symbol.png create mode 100644 src/running-the-game/Assets/greater_symbol.png create mode 100644 src/running-the-game/Assets/lesser_symbol.png create mode 100644 src/running-the-game/Assets/odd_symbol.png create mode 100644 src/running-the-game/Assets/reactive_symbol.png diff --git a/cards/Gemfile b/cards/Gemfile new file mode 100644 index 0000000..4af2b1e --- /dev/null +++ b/cards/Gemfile @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +source "https://rubygems.org" + +git_source(:github) {|repo_name| "https://github.com/#{repo_name}" } + +# gem "rails" + +gem "paggio", "~> 0.3.0" + +gem "kramdown", "~> 2.4" diff --git a/cards/Gemfile.lock b/cards/Gemfile.lock new file mode 100644 index 0000000..47747ed --- /dev/null +++ b/cards/Gemfile.lock @@ -0,0 +1,17 @@ +GEM + remote: https://rubygems.org/ + specs: + kramdown (2.4.0) + rexml + paggio (0.3.0) + rexml (3.2.5) + +PLATFORMS + ruby + +DEPENDENCIES + kramdown (~> 2.4) + paggio (~> 0.3.0) + +BUNDLED WITH + 2.1.4 diff --git a/cards/alchemical_recipes.rb b/cards/alchemical_recipes.rb deleted file mode 100644 index 4e96dfb..0000000 --- a/cards/alchemical_recipes.rb +++ /dev/null @@ -1,21 +0,0 @@ -load 'card.rb' - -alchemical_recipes = {} - -beginner_spells[:crystal_encasement] = Card.new( - title: "Crystal Encasement Recipe", - #damage: 3, - #blood: 2, - #reposte: 'Prc', - actions: [ - Card::Action.new( - content: 'A potion which when applied to a surface quickly grows strong blue crystals. Can also be thrown.', - symbol: [:diamonds, :blood] - ), - ], - color: 'firebrick', - flavour: '"You arent making a bomb, are you?"', - type: 'Blood Magic (Eldritch)' -) - -File.write('beginner_spells.html', Card.build(beginner_spells.values)) diff --git a/cards/armour.rb b/cards/armour.rb deleted file mode 100644 index da6cf68..0000000 --- a/cards/armour.rb +++ /dev/null @@ -1,58 +0,0 @@ -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/assets/cardback.png b/cards/assets/cardback.png new file mode 100644 index 0000000..73dd350 Binary files /dev/null and b/cards/assets/cardback.png differ diff --git a/cards/assets/cardback.svg b/cards/assets/cardback.svg new file mode 100644 index 0000000..1099321 --- /dev/null +++ b/cards/assets/cardback.svg @@ -0,0 +1,223 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cards/assets/inspiration_cardback.jpg b/cards/assets/inspiration_cardback.jpg new file mode 100644 index 0000000..2b82919 Binary files /dev/null and b/cards/assets/inspiration_cardback.jpg differ diff --git a/cards/assets/weapon_example.svg b/cards/assets/weapon_example.svg new file mode 100644 index 0000000..ef9e910 --- /dev/null +++ b/cards/assets/weapon_example.svg @@ -0,0 +1,864 @@ + + + +123568734 diff --git a/cards/card.rb b/cards/card.rb deleted file mode 100644 index 3d76d22..0000000 --- a/cards/card.rb +++ /dev/null @@ -1,479 +0,0 @@ -require 'paggio' -require 'paggio/markdown' -class Card - attr_accessor( - :attrib_top_left, :attrib_top_left_icon, - :attrib_top_right, :attrib_top_right_icon, - :attrib_bottom_left, :attrib_bottom_left_icon, - :attrib_bottom_right, :attrib_bottom_right_icon, - :color, - :title, - :flavour, - :type - ) - - def actions - @actions ||= [] - end - - def initialize( - title:, - color:, - attrib_top_right: nil, - attrib_top_right_icon: '🩸', - blood: nil, - attrib_top_left: nil, - 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, - actions: [], - flavour: nil, - 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 - self.attrib_top_left_icon = attrib_top_left_icon - self.attrib_top_right = attrib_top_right - self.attrib_top_right_icon = attrib_top_right_icon - self.attrib_bottom_right = attrib_bottom_right - self.attrib_bottom_right_icon = attrib_bottom_right_icon - self.attrib_bottom_left = attrib_bottom_left - self.attrib_bottom_left_icon = attrib_bottom_left_icon - self.actions.push *actions - self.flavour = flavour - self.type = type - end - - class Action - attr_accessor :content, :symbol, :seperator - - def initialize(content:, symbol: nil, seperator: false) - self.content = content - self.symbol = Array(symbol) - self.seperator = seperator - end - - def symbol - @symbol ||= [] - end - - end - - class << self - def build(cards) - Paggio.html do |_| - _.head do - _.style do - rule 'body' do - background color: '#1e1e1e' - end - rule 'p' do - margin 0 - end - rule 'button' do - font size: 50.px - padding 30.px - margin 30.px - end - rule '.card_wrapper' do - min height: (1425 * 2).px - width (825 * 7).px - display :flex - flex wrap: :wrap - height 100.% - end - rule '.card' do - height 1425.px - width 825.px - background color: :black - display :flex - end - rule '.group' do - margin '50px 50px 0px 50px' - border radius: 25.px - display :flex - flex direction: :column - #background color: :black - align content: 'space-between' - height :auto - flex 2 - gap 35.px - end - rule '.title' do - background color: :black - color :antiquewhite - flex 3 - border radius: 25.px - overflow :hidden - - position :relative - font size: 85.px - display :flex - align items: :center - justify content: :center - text align: :center - flex direction: :column - padding 25.px - border width: '2px 2px 2px 2px' - border color: :black - border style: :solid - end - rule '.attrib_icon' do - background color: 'rgba(255,255,255,0.10)' - end - rule '.attrib_tl' do - position :absolute - top 0 - left 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' - end - rule '.attrib_tr' do - position :absolute - top 0 - right 0 - 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' - end - rule '.attrib_br' do - position :absolute - bottom 0 - right 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' - end - rule '.attrib_bl' do - position :absolute - bottom 0 - left 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' - end - rule '.attrib_top_icons' do - top 0 - end - rule '.attrib_bottom_icons' do - bottom 0 - end - rule '.content' do - background color: :antiquewhite - color :black - flex 5 - border radius: 25.px - overflow :hidden - position :relative - - font size: 50.px - display :flex - justify content: 'flex-start' - gap 5.px - text align: :left - padding '35px 30px 30px 30px' - flex direction: :column - border width: '2px 2px 2px 2px' - border color: :black - border style: :solid - end - rule '.tap_icon' do - background color: :black - end - rule '.joker_icon' do - background color: :black - padding '6px 3px 2px 5px' - end - rule '.blood_icon' do - background color: :black - padding '6px 3px 2px 5px' - end - rule '.suit_icon' do - background color: :black - text align: :center - font size: 60.px - line height: 40.px - end - rule '.spades_icon' do - color :antiquewhite - end - rule '.clubs_icon' do - color :antiquewhite - end - rule '.diamonds_icon' do - color :orangered - end - rule '.hearts_icon' do - color :orangered - end - rule '.odd_icon' do - background color: :black - padding '12px 0px 0px 12px' - font size: 30.px - height 48.px - width 48.px - end - rule '.even_icon' do - background color: :black - padding '12px 0px 0px 12px' - font size: 30.px - height 48.px - width 48.px - end - rule '.greater_icon' do - background color: :black - padding '12px 0px 0px 12px' - font size: 30.px - height 48.px - width 48.px - end - rule '.lesser_icon' do - background color: :black - padding '12px 0px 0px 12px' - font size: 30.px - height 48.px - width 48.px - end - rule '.face_icon' do - background color: :black - #padding '12px 0px 0px 12px' - #font size: 30.px - #height 48.px - #width 48.px - padding '6px 3px 2px 5px' - end - rule '.icon' do - display 'inline-block' - padding '8px 4px 0px 4px' - border radius: 15.px - aspect ratio: '1/1' - font size: 40.px - height 52.px - width 52.px - end - rule '.card_type' do - background color: :antiquewhite - text align: :center - font size: 40.px - padding 10.px - border radius: '15px 15px 0 0' - font weight: :bold - border width: '2px 2px 0 2px' - border color: :black - border style: :solid - end - rule '.symbol_wrapper_outer' do - display 'flex' - gap 20.px - end - rule '.symbol_wrapper_inner' do - display 'flex' - flex direction: 'column' - gap 5.px - end - rule '.action_detail' do - padding top: 0.px - text align: :left - end - rule '.flavour_wrapper' do - position :absolute - bottom 0 - left 0 - width 100.% - text align: :center - end - rule '.flavour' do - color 'rgba(0,0,0,0.5)' - padding 35.px - font size: 35.px - end - end - end - _.button onclick: "downloadAsImage()" do - "Download" - end - _.div.card_wrapper.card_wrapper! do - cards.each do |card| - _.div.card(style: "background:linear-gradient(225deg, rgba(0,0,0,1) -50%, #{card.color} 100%)") do - _.div.group do - _.div.title do - if card.attrib_top_left && card.attrib_top_left_icon - _.div.attrib_icon.attrib_tl do - card.attrib_top_left_icon + ' ' + card.attrib_top_left - end - end - if card.attrib_top_right && card.attrib_top_right_icon - _.div.attrib_icon.attrib_tr do - card.attrib_top_right + ' ' + card.attrib_top_right_icon - end - end - _.p card.title if card.title - if card.attrib_bottom_left && card.attrib_bottom_left_icon - _.div.attrib_icon.attrib_bl do - card.attrib_bottom_left_icon + ' ' + card.attrib_bottom_left - end - end - if card.attrib_bottom_right && card.attrib_bottom_right_icon - _.div.attrib_icon.attrib_br do - card.attrib_bottom_right + ' ' + card.attrib_bottom_right_icon - end - end - end - _.div.content do - card.actions.each do |action| - _.div.action do - _.hr if action.seperator - if !action.symbol.empty? - _.div.symbol_wrapper_outer do - _.div.symbol_wrapper_inner do - #build_symbol - if action.symbol.include? :tap - _.span.icon.tap_icon do - "↪️" - end - end - if action.symbol.include? :spades - _.span.icon.suit_icon.spades_icon do - "♠️" - end - end - if action.symbol.include? :clubs - _.span.icon.suit_icon.clubs_icon do - "♣️" - end - end - if action.symbol.include? :diamonds - _.span.icon.suit_icon.diamonds_icon do - "♦️" - end - end - if action.symbol.include? :hearts - _.span.icon.suit_icon.hearts_icon do - "♥️" - end - end - if action.symbol.include? :joker - _.span.icon.joker_icon do - "🃏" - end - end - if action.symbol.include? :blood - _.span.icon.blood_icon do - "🩸" - end - end - if action.symbol.include? :odd - _.span.icon.odd_icon do - "🔻" - end - end - if action.symbol.include? :even - _.span.icon.even_icon do - "⬜" - end - end - if action.symbol.include? :face - _.span.icon.face_icon do - "🎭" - end - end - if action.symbol.include? :greater - _.span.icon.greater_icon do - "➕" - end - end - if action.symbol.include? :lesser - _.span.icon.lesser_icon do - "➖" - end - end - end - _.div.action_detail do - _.markdown <<-MD - #{action.content} - MD - end - end - else - _.markdown <<-MD - #{action.content} - MD - end - end - end - if card.flavour - _.div.flavour_wrapper do - _.div.flavour do - _.hr - _.markdown <<-MD - #{card.flavour} - MD - end - end - end - #_.p do - # _.span.tap_icon do - # "↪️" - # end - # _.markdown <<-MD - # Attack with a 🎲 **d6** roll. - # On success deal ⚔️ **2 damage**. - # MD - #end - ##p "↪️ My content will go here at some point." - #_.p do - # _.span.face_icon do - # "♠️" - # end - # _.text "My content will go here at some point." - #end - #_.div do - # _.hr - # _.p "this is just some flavour text" - #end - end - _.div.card_type do - card.type - end - end - end - end - end - _.script src: "./web/bundle.js" - _.script do - <<-SCRIPT -function downloadAsImage() { - htmlToImage.toPng(document.getElementById('card_wrapper')) - .then(function (dataUrl) { - download(dataUrl, 'card_wrapper.png'); - }); -} - SCRIPT - end - end - end - end -end - - diff --git a/cards/card_weapons.rb b/cards/card_weapons.rb deleted file mode 100644 index ed46343..0000000 --- a/cards/card_weapons.rb +++ /dev/null @@ -1,89 +0,0 @@ -load 'card.rb' - -cards = [] - -card = Card.new -card.title = "Unarmed Strike" -card.color = 'goldenrod' - -#card.attrib_top_left = '14' -#card.attrib_top_left_icon = '🩸' - -#card.attrib_top_right = '2' -#card.attrib_top_right_icon = '🛡️' - -card.attrib_bottom_right = '1' -card.attrib_bottom_right_icon = '🎲' - -card.attrib_bottom_left = '1' -card.attrib_bottom_left_icon = '⚔️' - -card.actions.push Card::Action.new( - content: 'Attack with a 🎲 **d4** roll. On success deal ⚔️ **1 damage**.', - symbol: :tap, -) -card.flavour = '"Savage"' -card.type = 'Innate Weapon' - -cards.push card - -card = Card.new -card.title = "Well Worn Knife" -card.color = 'rebeccapurple' - -#card.attrib_top_left = '14' -#card.attrib_top_left_icon = '🩸' - -#card.attrib_top_right = '2' -#card.attrib_top_right_icon = '🛡️' - -card.attrib_bottom_right = '2' -card.attrib_bottom_right_icon = '🎲' - -card.attrib_bottom_left = '1' -card.attrib_bottom_left_icon = '⚔️' - -card.actions.push Card::Action.new( - content: 'Attack with a 🎲 **d6** roll. On success deal ⚔️ **Prescision+1 or Strength+1 damage**.', - symbol: :tap, -) -#card.actions.push Card::Action.new( -# content: 'Play an **even** ♠️ to un-tap', -# seperator: true, -#) -card.flavour = '"Only *slightly* better then a butter knife."' -card.type = 'Weapon' - -cards.push card - -card = Card.new -card.title = "Slingshot" -card.color = 'rebeccapurple' - -#card.attrib_top_left = '14' -#card.attrib_top_left_icon = '🩸' - -#card.attrib_top_right = '2' -#card.attrib_top_right_icon = '🛡️' - -#card.attrib_bottom_right = '2' -#card.attrib_bottom_right_icon = '🎲' - -#card.attrib_bottom_left = '1' -#card.attrib_bottom_left_icon = '⚔️' - -card.actions.push Card::Action.new( - content: 'Attack with a 🎲 **d6** roll. On success deal ⚔️ **Prescision damage**.', - symbol: :tap, -) -card.actions.push Card::Action.new( - content: 'Ranged: This weapon avoids melee reposte attacks.', - seperator: true, -) -card.flavour = '"Only a troublemaker would use this."' -card.type = 'Weapon' - -cards.push card - - -File.write('card.html', Card.build(cards)) diff --git a/cards/cardback.png b/cards/cardback.png deleted file mode 100644 index 73dd350..0000000 Binary files a/cards/cardback.png and /dev/null differ diff --git a/cards/cardback.svg b/cards/cardback.svg deleted file mode 100644 index 1099321..0000000 --- a/cards/cardback.svg +++ /dev/null @@ -1,223 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/cards/cards/alchemical_recipes.rb b/cards/cards/alchemical_recipes.rb new file mode 100644 index 0000000..1332873 --- /dev/null +++ b/cards/cards/alchemical_recipes.rb @@ -0,0 +1,21 @@ +require_relative 'card.rb' + +alchemical_recipes = {} + +alchemical_recipes[:crystal_encasement] = Card.new( + title: "Crystal Encasement Recipe", + #damage: 3, + #blood: 2, + #reposte: 'Prc', + actions: [ + Card::Action.new( + content: 'A potion which when applied to a surface quickly grows strong blue crystals. Can also be thrown.', + symbol: [:diamonds, :blood] + ), + ], + color: 'firebrick', + flavour: '"You arent making a bomb, are you?"', + type: 'Blood Magic (Eldritch)' +) + +Card.output('alchemical_recipes', alchemical_recipes) diff --git a/cards/cards/armour.rb b/cards/cards/armour.rb new file mode 100644 index 0000000..d8ea418 --- /dev/null +++ b/cards/cards/armour.rb @@ -0,0 +1,60 @@ +require_relative '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)) + +Card.output('armour', armour) diff --git a/cards/cards/card.rb b/cards/cards/card.rb new file mode 100644 index 0000000..3aa4fcd --- /dev/null +++ b/cards/cards/card.rb @@ -0,0 +1,494 @@ +require 'paggio' +require 'paggio/markdown' + +class Card + attr_accessor( + :attrib_top_left, :attrib_top_left_icon, + :attrib_top_right, :attrib_top_right_icon, + :attrib_bottom_left, :attrib_bottom_left_icon, + :attrib_bottom_right, :attrib_bottom_right_icon, + :color, + :title, + :flavour, + :type + ) + + def actions + @actions ||= [] + end + + def initialize( + title:, + color:, + attrib_top_right: nil, + attrib_top_right_icon: '🩸', + blood: nil, + attrib_top_left: nil, + 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, + actions: [], + flavour: nil, + 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 + self.attrib_top_left_icon = attrib_top_left_icon + self.attrib_top_right = attrib_top_right + self.attrib_top_right_icon = attrib_top_right_icon + self.attrib_bottom_right = attrib_bottom_right + self.attrib_bottom_right_icon = attrib_bottom_right_icon + self.attrib_bottom_left = attrib_bottom_left + self.attrib_bottom_left_icon = attrib_bottom_left_icon + self.actions.push *actions + self.flavour = flavour + self.type = type + end + + class Action + attr_accessor :content, :symbol, :seperator + + def initialize(content:, symbol: nil, seperator: false) + self.content = content + self.symbol = Array(symbol) + self.seperator = seperator + end + + def symbol + @symbol ||= [] + end + + end + + class << self + def build(cards) + Paggio.html do |_| + _.head do + _.style do + rule 'body' do + background color: '#1e1e1e' + end + rule 'p' do + margin 0 + end + rule 'button' do + font size: 50.px + padding 30.px + margin 30.px + end + rule '.card_wrapper' do + min height: (1425 * 2).px + width (825 * 7).px + display :flex + flex wrap: :wrap + height 100.% + end + rule '.card' do + height 1425.px + width 825.px + background color: :black + display :flex + end + rule '.group' do + margin '50px 50px 0px 50px' + border radius: 25.px + display :flex + flex direction: :column + #background color: :black + align content: 'space-between' + height :auto + flex 2 + gap 35.px + end + rule '.title' do + background color: :black + color :antiquewhite + flex 3 + border radius: 25.px + overflow :hidden + + position :relative + font size: 85.px + display :flex + align items: :center + justify content: :center + text align: :center + flex direction: :column + padding 25.px + border width: '2px 2px 2px 2px' + border color: :black + border style: :solid + end + rule '.attrib_icon' do + background color: 'rgba(255,255,255,0.10)' + end + rule '.attrib_tl' do + position :absolute + top 0 + left 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' + end + rule '.attrib_tr' do + position :absolute + top 0 + right 0 + 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' + end + rule '.attrib_br' do + position :absolute + bottom 0 + right 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' + end + rule '.attrib_bl' do + position :absolute + bottom 0 + left 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' + end + rule '.attrib_top_icons' do + top 0 + end + rule '.attrib_bottom_icons' do + bottom 0 + end + rule '.content' do + background color: :antiquewhite + color :black + flex 5 + border radius: 25.px + overflow :hidden + position :relative + + font size: 50.px + display :flex + justify content: 'flex-start' + gap 5.px + text align: :left + padding '35px 30px 30px 30px' + flex direction: :column + border width: '2px 2px 2px 2px' + border color: :black + border style: :solid + end + rule '.tap_icon' do + background color: :black + end + rule '.joker_icon' do + background color: :black + padding '6px 3px 2px 5px' + end + rule '.blood_icon' do + background color: :black + padding '6px 3px 2px 5px' + end + rule '.suit_icon' do + background color: :black + text align: :center + font size: 60.px + line height: 40.px + end + rule '.spades_icon' do + color :antiquewhite + end + rule '.clubs_icon' do + color :antiquewhite + end + rule '.diamonds_icon' do + color :orangered + end + rule '.hearts_icon' do + color :orangered + end + rule '.odd_icon' do + background color: :black + padding '12px 0px 0px 12px' + font size: 30.px + height 48.px + width 48.px + end + rule '.even_icon' do + background color: :black + padding '12px 0px 0px 12px' + font size: 30.px + height 48.px + width 48.px + end + rule '.greater_icon' do + background color: :black + padding '12px 0px 0px 12px' + font size: 30.px + height 48.px + width 48.px + end + rule '.lesser_icon' do + background color: :black + padding '12px 0px 0px 12px' + font size: 30.px + height 48.px + width 48.px + end + rule '.face_icon' do + background color: :black + #padding '12px 0px 0px 12px' + #font size: 30.px + #height 48.px + #width 48.px + padding '6px 3px 2px 5px' + end + rule '.icon' do + display 'inline-block' + padding '8px 4px 0px 4px' + border radius: 15.px + aspect ratio: '1/1' + font size: 40.px + height 52.px + width 52.px + end + rule '.card_type' do + background color: :antiquewhite + text align: :center + font size: 40.px + padding 10.px + border radius: '15px 15px 0 0' + font weight: :bold + border width: '2px 2px 0 2px' + border color: :black + border style: :solid + end + rule '.symbol_wrapper_outer' do + display 'flex' + gap 20.px + end + rule '.symbol_wrapper_inner' do + display 'flex' + flex direction: 'column' + gap 5.px + end + rule '.action_detail' do + padding top: 0.px + text align: :left + end + rule '.flavour_wrapper' do + position :absolute + bottom 0 + left 0 + width 100.% + text align: :center + end + rule '.flavour' do + color 'rgba(0,0,0,0.5)' + padding 35.px + font size: 35.px + end + end + end + _.button onclick: "downloadAsImage()" do + "Download" + end + _.div.card_wrapper.card_wrapper! do + cards.each do |card| + _.div.card(style: "background:linear-gradient(225deg, rgba(0,0,0,1) -50%, #{card.color} 100%)") do + _.div.group do + _.div.title do + if card.attrib_top_left && card.attrib_top_left_icon + _.div.attrib_icon.attrib_tl do + card.attrib_top_left_icon + ' ' + card.attrib_top_left + end + end + if card.attrib_top_right && card.attrib_top_right_icon + _.div.attrib_icon.attrib_tr do + card.attrib_top_right + ' ' + card.attrib_top_right_icon + end + end + _.p card.title if card.title + if card.attrib_bottom_left && card.attrib_bottom_left_icon + _.div.attrib_icon.attrib_bl do + card.attrib_bottom_left_icon + ' ' + card.attrib_bottom_left + end + end + if card.attrib_bottom_right && card.attrib_bottom_right_icon + _.div.attrib_icon.attrib_br do + card.attrib_bottom_right + ' ' + card.attrib_bottom_right_icon + end + end + end + _.div.content do + card.actions.each do |action| + _.div.action do + _.hr if action.seperator + if !action.symbol.empty? + _.div.symbol_wrapper_outer do + _.div.symbol_wrapper_inner do + #build_symbol + if action.symbol.include? :tap + _.span.icon.tap_icon do + "↪️" + end + end + if action.symbol.include? :blood + _.span.icon.blood_icon do + "🩸" + end + end + if action.symbol.include? :reactive + _.span.icon.lesser_icon do + "📣" + end + end + if action.symbol.include? :joker + _.span.icon.joker_icon do + "🃏" + end + end + if action.symbol.include? :spades + _.span.icon.suit_icon.spades_icon do + "♠️" + end + end + if action.symbol.include? :clubs + _.span.icon.suit_icon.clubs_icon do + "♣️" + end + end + if action.symbol.include? :diamonds + _.span.icon.suit_icon.diamonds_icon do + "♦️" + end + end + if action.symbol.include? :hearts + _.span.icon.suit_icon.hearts_icon do + "♥️" + end + end + if action.symbol.include? :odd + _.span.icon.odd_icon do + "🔻" + end + end + if action.symbol.include? :even + _.span.icon.even_icon do + "⬜" + end + end + if action.symbol.include? :face + _.span.icon.face_icon do + "🎭" + end + end + if action.symbol.include? :greater + _.span.icon.greater_icon do + "➕" + end + end + if action.symbol.include? :lesser + _.span.icon.lesser_icon do + "➖" + end + end + if action.symbol.include? :invisible + _.span.icon.lesser_icon(style: 'visibility: hidden;') do + "🈷️" + end + end + end + _.div.action_detail do + _.markdown <<-MD + #{action.content} + MD + end + end + else + _.markdown <<-MD + #{action.content} + MD + end + end + end + if card.flavour + _.div.flavour_wrapper do + _.div.flavour do + _.hr + _.markdown <<-MD + #{card.flavour} + MD + end + end + end + #_.p do + # _.span.tap_icon do + # "↪️" + # end + # _.markdown <<-MD + # Attack with a 🎲 **d6** roll. + # On success deal ⚔️ **2 damage**. + # MD + #end + ##p "↪️ My content will go here at some point." + #_.p do + # _.span.face_icon do + # "♠️" + # end + # _.text "My content will go here at some point." + #end + #_.div do + # _.hr + # _.p "this is just some flavour text" + #end + end + _.div.card_type do + card.type + end + end + end + end + end + _.script src: "./web/bundle.js" + _.script do + <<-SCRIPT +function downloadAsImage() { + htmlToImage.toPng(document.getElementById('card_wrapper')) + .then(function (dataUrl) { + download(dataUrl, 'card_wrapper.png'); + }); +} + SCRIPT + end + end + end + + def output(name, cards, prefix: "output/") + File.write("#{prefix}#{name}.html", Card.build(cards.values)) + end + end +end + + diff --git a/cards/cards/card_weapons.rb b/cards/cards/card_weapons.rb new file mode 100644 index 0000000..dccb8d7 --- /dev/null +++ b/cards/cards/card_weapons.rb @@ -0,0 +1,91 @@ +require_relative 'card.rb' + +cards = [] + +card = Card.new +card.title = "Unarmed Strike" +card.color = 'goldenrod' + +#card.attrib_top_left = '14' +#card.attrib_top_left_icon = '🩸' + +#card.attrib_top_right = '2' +#card.attrib_top_right_icon = '🛡️' + +card.attrib_bottom_right = '1' +card.attrib_bottom_right_icon = '🎲' + +card.attrib_bottom_left = '1' +card.attrib_bottom_left_icon = '⚔️' + +card.actions.push Card::Action.new( + content: 'Attack with a 🎲 **d4** roll. On success deal ⚔️ **1 damage**.', + symbol: :tap, +) +card.flavour = '"Savage"' +card.type = 'Innate Weapon' + +cards.push card + +card = Card.new +card.title = "Well Worn Knife" +card.color = 'rebeccapurple' + +#card.attrib_top_left = '14' +#card.attrib_top_left_icon = '🩸' + +#card.attrib_top_right = '2' +#card.attrib_top_right_icon = '🛡️' + +card.attrib_bottom_right = '2' +card.attrib_bottom_right_icon = '🎲' + +card.attrib_bottom_left = '1' +card.attrib_bottom_left_icon = '⚔️' + +card.actions.push Card::Action.new( + content: 'Attack with a 🎲 **d6** roll. On success deal ⚔️ **Prescision+1 or Strength+1 damage**.', + symbol: :tap, +) +#card.actions.push Card::Action.new( +# content: 'Play an **even** ♠️ to un-tap', +# seperator: true, +#) +card.flavour = '"Only *slightly* better then a butter knife."' +card.type = 'Weapon' + +cards.push card + +card = Card.new +card.title = "Slingshot" +card.color = 'rebeccapurple' + +#card.attrib_top_left = '14' +#card.attrib_top_left_icon = '🩸' + +#card.attrib_top_right = '2' +#card.attrib_top_right_icon = '🛡️' + +#card.attrib_bottom_right = '2' +#card.attrib_bottom_right_icon = '🎲' + +#card.attrib_bottom_left = '1' +#card.attrib_bottom_left_icon = '⚔️' + +card.actions.push Card::Action.new( + content: 'Attack with a 🎲 **d6** roll. On success deal ⚔️ **Prescision damage**.', + symbol: :tap, +) +card.actions.push Card::Action.new( + content: 'Ranged: This weapon avoids melee reposte attacks.', + seperator: true, +) +card.flavour = '"Only a troublemaker would use this."' +card.type = 'Weapon' + +cards.push card + + +File.write('card.html', Card.build(cards)) + +Card.output('alchemical_recipes', alchemical_recipes) diff --git a/cards/cards/class_abilities.rb b/cards/cards/class_abilities.rb new file mode 100644 index 0000000..300d213 --- /dev/null +++ b/cards/cards/class_abilities.rb @@ -0,0 +1,181 @@ +require_relative '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', +) + +Card.output('class_abilities', class_abilities); + diff --git a/cards/cards/common_items.rb b/cards/cards/common_items.rb new file mode 100644 index 0000000..06c5347 --- /dev/null +++ b/cards/cards/common_items.rb @@ -0,0 +1,153 @@ +require_relative 'card.rb' + +common_items = {} + +common_items[:test] = Card.new( + title: "Test", + color: 'rebeccapurple', + reposte: 'Prc', + damage: '3', + actions: [ + Card::Action.new( + content: '🎲 **d8 · Prc** to Bludgeon.', + symbol: [ + :tap, + :odd, + :even, + :greater, + :lesser, + :blood, + :reactive, + :face, + ], + ), + Card::Action.new( + content: '🎲 **d6 + Prc** to hit.', + symbol: :spades, + ), + Card::Action.new( + seperator: true, + content: '🎲 **d6 + Prc** to hit.', + symbol: :clubs, + ), + Card::Action.new( + seperator: true, + content: '🎲 **d6 + Prc** to hit.', + symbol: :diamonds, + ), + Card::Action.new( + seperator: true, + content: '🎲 **d6 + Prc** to hit.', + symbol: :joker, + ), + Card::Action.new( + seperator: true, + content: '🎲 **d6 + Prc** to hit.', + symbol: [:tap, :hearts] + ), + ], + flavour: '"World Famous Iron Toothpick"', + type: 'Thrusting Sword Weapon' +) + +common_items[:sack] = Card.new( + title: "Sack", + color: 'saddlebrown', + actions: [ + Card::Action.new( + content: '**Item slot**: 12 spaces.', + ), + Card::Action.new( + seperator: true, + content: 'Draw up to 2 cards from this inventory and place up to 2 items to the front or back of this inventory.', + symbol: :tap, + ), + Card::Action.new( + seperator: true, + content: 'Equips on your back.', + ), + ], + #flavour: '"World Famous Iron Toothpick"', + type: 'Leather Item Container' +) + +common_items[:satchel] = Card.new( + title: "Satchel", + color: 'saddlebrown', + actions: [ + Card::Action.new( + content: '**Item slot**: 6 spaces.', + ), + Card::Action.new( + seperator: true, + content: 'Draw up to 3 cards from this inventory and place up to 3 items to the front or back of this inventory.', + symbol: :tap, + ), + Card::Action.new( + seperator: true, + content: 'Equips on your back.', + ), + ], + #flavour: '"World Famous Iron Toothpick"', + type: 'Leather Item Container' +) + +common_items[:rucksack] = Card.new( + title: "Rucksack", + color: 'saddlebrown', + actions: [ + Card::Action.new( + content: '**Item slot**: 12 spaces.', + ), + Card::Action.new( + content: '**Item slot**: 6 spaces.', + ), + Card::Action.new( + seperator: true, + content: 'Draw up to 2 cards from this inventory and place up to 2 items to the front or back of this inventory.', + symbol: :tap, + ), + Card::Action.new( + seperator: true, + content: 'Equips on your back.', + ), + ], + #flavour: '"World Famous Iron Toothpick"', + type: 'Leather Item Container' +) + +common_items[:sheath] = Card.new( + title: "Sheath", + color: 'saddlebrown', + actions: [ + Card::Action.new( + content: '**Item slot**: 1 weapon.', + ), + Card::Action.new( + seperator: true, + content: 'Draw up to 1 cards from this inventory and place up to 1 weapon to this inventory.', + symbol: :tap, + ), + Card::Action.new( + seperator: true, + content: 'Equips on your back or hip.', + ), + ], + #flavour: '"World Famous Iron Toothpick"', + type: 'Leather Item Container' +) + +common_items[:hand_bomb] = Card.new( + title: "Hand Bomb", + color: 'grey', + actions: [ + Card::Action.new( + content: 'Deal **3 damage**. Consumes this item.', + symbol: :tap, + ), + ], + #flavour: '"World Famous Iron Toothpick"', + type: 'Consumable Weapon' +) + +Card.output('common_items', common_items); diff --git a/cards/cards/common_weapons.rb b/cards/cards/common_weapons.rb new file mode 100644 index 0000000..e1be852 --- /dev/null +++ b/cards/cards/common_weapons.rb @@ -0,0 +1,356 @@ +require_relative 'card.rb' + +common_weapons = {} + +common_weapons[:test] = Card.new( + title: "Test", + color: 'rebeccapurple', + reposte: 'Prc', + damage: '3', + actions: [ + Card::Action.new( + content: '🎲 **d8 · Prc** to Bludgeon.', + symbol: [ + :tap, + :odd, + :even, + :greater, + :lesser, + :blood, + :reactive, + :face, + ], + ), + Card::Action.new( + content: '🎲 **d6 + Prc** to hit.', + symbol: :spades, + ), + Card::Action.new( + seperator: true, + content: '🎲 **d6 + Prc** to hit.', + symbol: :clubs, + ), + Card::Action.new( + seperator: true, + content: '🎲 **d6 + Prc** to hit.', + symbol: :diamonds, + ), + Card::Action.new( + seperator: true, + content: '🎲 **d6 + Prc** to hit.', + symbol: :joker, + ), + Card::Action.new( + seperator: true, + content: '🎲 **d6 + Prc** to hit.', + symbol: [:tap, :hearts] + ), + ], + flavour: '"World Famous Iron Toothpick"', + type: 'Thrusting Sword Weapon' +) + +=begin +common_weapons[:rapier] = Card.new( + title: "Rapier", + color: 'rebeccapurple', + reposte: 'Prc', + damage: '3', + actions: [ + Card::Action.new( + content: '🎲 **d8 · Prc** to Pierce.', + 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.', + #) + ], + flavour: '"World Famous Iron Toothpick"', + type: 'Thrusting Sword Weapon' +) +=end + +common_weapons[:spear] = Card.new( + title: "Spear", + color: 'rebeccapurple', + reposte: 'Prc', + damage: '3', + actions: [ + Card::Action.new( + content: '🎲 **d6 · Prc** to Pierce.', + symbol: :tap, + ), + Card::Action.new( + content: '**Reach**, **Throwable**', + symbol: :invisible, + ), + ], + flavour: '"5x more throwable then previous editions"', + type: 'Polearm Weapon' +) + +common_weapons[:dagger] = Card.new( + title: "Dagger", + color: 'rebeccapurple', + reposte: 'Prc', + damage: '2', + actions: [ + Card::Action.new( + content: '🎲 **d4 · Prc** to Pierce.', + symbol: :tap, + ), + Card::Action.new( + content: '**Light**, **Throwable**', + symbol: :invisible, + #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[:longbow] = Card.new( + title: "Longbow", + color: 'rebeccapurple', + damage: '3', + #reposte: 1, + actions: [ + Card::Action.new( + content: '🎲 **d6 · Prc** to Pierce.', + symbol: :tap, + ), + Card::Action.new( + content: '**Ranged**', + symbol: :invisible, + ) + #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' +) + +common_weapons[:crossbow] = Card.new( + title: "Crossbow", + color: 'rebeccapurple', + damage: '3', + #reposte: 1, + actions: [ + Card::Action.new( + content: 'Remove a counter.', + symbol: :tap, + ), + Card::Action.new( + content: '🎲 **d8 · Prc** to Pierce.', + symbol: :invisible, + ), + Card::Action.new( + content: '**Ranged**', + symbol: :invisible, + ), + Card::Action.new( + seperator: true, + content: '**Reload**: Load this weapon. Add a counter to this card.', + symbol: :tap, + ), + ], + flavour: '"No one will cross you with this weapon"', + type: 'Crossbow Weapon' +) + +common_weapons[:warhammer] = Card.new( + title: "Warhammer", + reposte: 'Str', + damage: 3, + actions: [ + Card::Action.new( + content: '🎲 **d8 · (Str)** to Bludgeon.', + symbol: :tap, + ), + ], + flavour: '"Made of over 39,000 minature hammers"', + color: 'rebeccapurple', + type: 'Hammer Weapon' +) + +common_weapons[:sickle] = Card.new( + title: "Sickle", + reposte: 'Prc', + damage: 1, + actions: [ + Card::Action.new( + content: '🎲 **d4 · (Prc)** to Bludgeon.', + symbol: :tap, + ), + Card::Action.new( + content: '**Light**, **Cleave**', + symbol: :invisible, + ), + ], + flavour: '"Made of over 39,000 minature hammers"', + color: 'rebeccapurple', + type: 'Farming Weapon' +) + +common_weapons[:scythe] = Card.new( + title: "Scythe", + reposte: 'Prc', + damage: 2, + actions: [ + Card::Action.new( + content: '🎲 **d6 · (Prc)** to Bludgeon.', + symbol: :tap, + ), + Card::Action.new( + content: '**Heavy**, **Cleave**', + symbol: :invisible, + ), + ], + flavour: '"Made of over 39,000 minature hammers"', + color: 'rebeccapurple', + type: 'Farming Weapon' +) + +common_weapons[:short_sword] = Card.new( + title: "Short Sword", + damage: 3, + reposte: 'Str', + actions: [ + Card::Action.new( + content: '🎲 **d6 · Str** to hit.', + symbol: :tap, + ), + Card::Action.new( + content: '**Light**', + symbol: :invisible, + ), + ], + flavour: '"El Classico"', + color: 'rebeccapurple', + type: 'Straight Sword Weapon' +) + +common_weapons[:straight_sword] = Card.new( + title: "Long Sword", + damage: 3, + reposte: 'Str', + actions: [ + Card::Action.new( + content: '🎲 **d8 · Str** to hit.', + symbol: :tap, + ), + #Card::Action.new( + # seperator: true, + # content: '(Two Handed) 🎲 **d6 + Str** to hit. Deal **Str** damage.', + # symbol: :tap, + #) + ], + flavour: '"El Classico"', + color: 'rebeccapurple', + type: 'Straight Sword Weapon' +) + +common_weapons[:axe] = Card.new( + title: "Axe", + damage: 4, + reposte: 'Str', + actions: [ + Card::Action.new( + content: '🎲 **d6 · Str** to Slash.', + symbol: :tap, + ), + ], + flavour: '"Looks great with a flannel shirt."', + color: 'rebeccapurple', + type: 'Axe Weapon', +) + +common_weapons[:staff] = Card.new( + title: "Staff", + damage: 2, + reposte: 'Str', + actions: [ + Card::Action.new( + content: '🎲 **d6 + Str** to Bludgeon.', + symbol: :tap, + ), + Card::Action.new( + seperator: true, + content: '🎲 **d8 + Str** to Bludgeon.', + symbol: :tap, + ), + Card::Action.new( + content: '**Heavy**', + ) + ], + color: 'rebeccapurple', + flavour: '"Says \'Made by the Ninja Custodial Group\' on the handle"', + type: 'Staff Weapon', +) + +common_weapons[:kite_shield] = Card.new( + title: "Kite Shield", + #damage: 4, + #reposte: 'Str', + actions: [ + Card::Action.new( + content: 'When **targeted with a weapon:** your attacker recieves **2 disadvantage** on their action.', + symbol: [:tap, :reactive], + ), + ], + flavour: '"Looks great with a flannel shirt."', + color: 'rebeccapurple', + type: 'Shield Weapon', +) + +common_weapons[:buckler_shield] = Card.new( + title: "Buckler Shield", + #damage: 4, + #reposte: 'Str', + actions: [ + Card::Action.new( + content: 'When **targeted with a weapon:** your attacker recieves **1 disadvantage** on their action. If your reposte triggers then deal double damage with it.', + symbol: [:tap, :reactive], + ), + ], + flavour: '"Looks great with a flannel shirt."', + color: 'rebeccapurple', + type: 'Shield Weapon', +) + +common_weapons[:caestus] = Card.new( + title: "Caestus", + color: 'DarkBlue', + actions: [ + Card::Action.new( + content: 'While equipped: Unarmed Strikes deal **Str** additional damage.', + ) + ], + flavour: '"Weapon of choice for a fit bronze statue"', + 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', +) + +File.write('common_weapons.html', Card.build(common_weapons.values)) + +Card.output('common_weapons', common_weapons); diff --git a/cards/cards/paladin_abilities.rb b/cards/cards/paladin_abilities.rb new file mode 100644 index 0000000..6dcdbfd --- /dev/null +++ b/cards/cards/paladin_abilities.rb @@ -0,0 +1,196 @@ +require_relative 'card.rb' + +paladin_abilities = {} + +class_colors = { + rogue: 'Maroon', + ranger: 'ForestGreen', + astrologist: 'DodgerBlue', + monk: 'OrangeRed', + paladin: 'GoldenRod' +} + +paladin_abilities[:duel] = Card.new( + title: "Duel", + actions: [ + Card::Action.new( + symbol: [:tap, :even], + content: 'Pick a target. You and that target enter a duel where you and the target may not attack anyone other then each other. You cannot use this while in a duel.', + ), + ], + color: class_colors[:paladin], + flavour: '"A famous commander\'s signature thing."', + type: 'Paladin Ability', +) + +paladin_abilities[:leading_charge] = Card.new( + title: "Leading Charge", + actions: [ + Card::Action.new( + symbol: [:tap, :reactive, :face], + content: 'When making an attack, **mark the target** and **choose an ally**. During **the ally\'s** next turn: they **gain an advatage** for all attacks they do **agaisnt the marked target**.', + ), + ], + color: class_colors[:paladin], + #flavour: '"A famous commander\'s signature thing."', + type: 'Paladin Ability', +) + +paladin_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', +) + +paladin_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', +) + +paladin_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', +) + +paladin_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', +) +paladin_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', +) + +paladin_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', +) + +paladin_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', +) + +paladin_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', +) +paladin_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', +) + +paladin_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', +) + +paladin_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', +) + +paladin_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', +) + +Card.output('paladin_abilities', paladin_abilities); + diff --git a/cards/cards/rare_weapons.rb b/cards/cards/rare_weapons.rb new file mode 100644 index 0000000..e0ec2aa --- /dev/null +++ b/cards/cards/rare_weapons.rb @@ -0,0 +1,117 @@ +require_relative 'card.rb' + +rare_weapons = {} + +rare_weapons[:glaive] = Card.new( + title: "Glaive", + color: 'rebeccapurple', + reposte: 'Prc', + damage: '4', + actions: [ + Card::Action.new( + content: '🎲 **d6 · Str** to Slash.', + symbol: :tap, + ), + Card::Action.new( + content: '**Reach**, **Heavy**', + symbol: :invisible, + ), + ], + flavour: '"Getting up close and personal while staying far away"', + type: 'Polearm Weapon' +) + +rare_weapons[:twinblade] = Card.new( + title: "Twinblade", + damage: 3, + reposte: 'Prc', + actions: [ + Card::Action.new( + content: '🎲 **d4 + Prc** to Slash.', + symbol: :tap, + ), + Card::Action.new( + seperator: true, + content: '🎲 **d6 + Prc** to Slash.', + symbol: :tap, + ), + Card::Action.new( + content: '**Heavy**', + ) + #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"', + type: 'Staff Weapon', +) + +rare_weapons[:forked_sword] = Card.new( + title: "Forked Sword", + damage: 3, + reposte: 'Str', + #roll: '1d6', + actions: [ + Card::Action.new( + content: '🎲 **d6 + Str** to Pierce.', + symbol: :tap, + ), + Card::Action.new( + content: 'You can use the \'Cast a spell\' ability as a part of this action.', + symbol: :invisible, + ), + Card::Action.new( + seperator: true, + content: 'Cast a **Blood Magic Spell**', + symbol: :tap + ), + ], + color: 'rebeccapurple', + flavour: '"Weapon used in the war against the gods. Vintage!"', + type: 'Forked Sword Weapon', +) + +rare_weapons[:tower_shield] = Card.new( + title: "Tower Shield", + #damage: 4, + #reposte: 'Str', + actions: [ + Card::Action.new( + content: 'When **targeted with a weapon:** your attacker recieves **2 disadvantage** on their action.', + symbol: [:tap, :reactive], + ), + Card::Action.new( + content: '**Heavy**.', + symbol: :invisible, + ), + Card::Action.new( + seperator: true, + content: 'You can act as cover for another character.', + #symbol: :invisible + ), + Card::Action.new( + content: '**Heavy**.', + ), + ], + flavour: '"Looks great with a flannel shirt."', + color: 'rebeccapurple', + type: 'Shield Weapon', +) + +rare_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', +) + +Card.output('rare_weapons', rare_weapons); diff --git a/cards/cards/spells.rb b/cards/cards/spells.rb new file mode 100644 index 0000000..65cbb42 --- /dev/null +++ b/cards/cards/spells.rb @@ -0,0 +1,266 @@ +require_relative 'card.rb' + +beginner_spells = {} + +spell_color = 'firebrick' +modifier_color = "#b24747" + +=begin + +beginner_spells[:wispy_flame] = Card.new( + title: "Wispy Flame", + damage: 'd4', + blood: 1, + #reposte: 'Prc', + actions: [ + Card::Action.new( + content: 'Engulf your hand in flames for one turn. You need to maintain concentration each turn.', + symbol: [:joker, :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: spell_color, + flavour: '"Portable Candle"', + type: 'Blood Magic(Igneous)' +) + +beginner_spells[:concentrated_cast] = Card.new( + title: "Concentrated Cast", + actions: [ + Card::Action.new( + content: 'Change the number of turns you need to check for concentration equal to the **card played** times your **Resolve**.', + symbol: [:even] + ), + ], + color: modifier_color, + #flavour: '"Portable Candle"', + type: 'Blood Magic(Modifier)' +) + +beginner_spells[:powerful_cast] = Card.new( + title: "Powerful Cast", + actions: [ + Card::Action.new( + content: 'Double the amount of dice rolled for this spell.', + symbol: [:face] + ), + ], + color: modifier_color, + #flavour: '"Portable Candle"', + type: 'Blood Magic(Modifier)' +) + + +beginner_spells[:summon_flesh] = Card.new( + title: "Summon Flesh", + #damage: 3, + blood: 1, + #reposte: 'Prc', + actions: [ + Card::Action.new( + content: '(**5 or less**) Heal a target within arms reach equal to the card played.', + symbol: [:hearts, :blood] + ), + Card::Action.new( + content: 'If this spell heals for more then half of the target\'s max health then they get flesh mass disease.', + seperator: true, + ), + ], + color: spell_color, + flavour: '"Writhing flesh mass that assimilates"', + type: 'Blood Magic (Eldritch)' +) + +beginner_spells[:lighting_fork] = Card.new( + title: "Lightning Fork", + damage: '2d4', + blood: 1, + #reposte: 'Prc', + actions: [ + Card::Action.new( + content: '(**even**) Deal 1d4 damage to one target and 1d4 to another. Both targets need to be within 10 meters if you', + symbol: [:clubs, :blood] + ), + ], + color: 'firebrick', + flavour: '"Double the static, double the fun!"', + type: 'Blood Magic (Storm)' +) + +beginner_spells[:summon_alchemicals] = Card.new( + title: "Summon Alchemicals", + #damage: 3, + blood: 2, + #reposte: 'Prc', + actions: [ + Card::Action.new( + content: 'Summon a random amount of a random alchemical depending on various hidden factors.', + symbol: [:joker, :blood] + ), + ], + color: 'firebrick', + flavour: '"You arent making a bomb, are you?"', + type: 'Blood Magic (Eldritch)' +) + +beginner_spells[:northern_wind] = Card.new( #TODO + title: "Northern Wind", + damage: '2d4', + blood: 1, + #reposte: 'Prc', + actions: [ + Card::Action.new( + content: '(**odd**) Shoot a cold wind from your hands, freezing things in its path.', + symbol: [:clubs, :blood] + ), + ], + color: 'firebrick', + flavour: '"Won\'t fail blowing out birthday candles"', + type: 'Blood Magic (Storm)' +) +=end +beginner_spells[:planes_of_igneous] = Card.new( #TODO + title: "Planes of Igneous", + blood: 1, + #reposte: 'Prc', + actions: [ + Card::Action.new( + content: 'Attune to the planes of igneous.', + symbol: [:blood] + ), + ], + color: 'firebrick', + flavour: '"Sea of flames and ashes."', + type: 'Blood Spell Base' +) +# Ruby + +beginner_spells[:planes_of_storm] = Card.new( #TODO + title: "Planes of Storm", + blood: 1, + #reposte: 'Prc', + actions: [ + Card::Action.new( + content: 'Attune to the planes of storm.', + symbol: [:blood] + ), + ], + color: 'firebrick', + flavour: '"Ice cold winds and storms."', + type: 'Blood Spell Base' +) +# Sapphire + +beginner_spells[:planes_of_eldritch] = Card.new( #TODO + title: "Planes of Eldritch", + blood: 1, + #reposte: 'Prc', + actions: [ + Card::Action.new( + content: 'Attune to the planes of eldritch.', + symbol: [:blood] + ), + ], + color: 'firebrick', + flavour: '"Alchemicals and fleshy masses."', + type: 'Blood Spell Base' +) +# Ammolite + +beginner_spells[:planes_of_void] = Card.new( #TODO + title: "Planes of Void", + blood: 1, + #reposte: 'Prc', + actions: [ + Card::Action.new( + content: 'Attune to the planes of void.', + symbol: [:blood] + ), + ], + color: 'firebrick', + flavour: '"Control Gravity"', + type: 'Blood Spell Base' +) +# Quartz + +beginner_spells[:planes_of_soul] = Card.new( #TODO + title: "Planes of Soul", + blood: 1, + #reposte: 'Prc', + actions: [ + Card::Action.new( + content: 'Attune to the planes of soul.', + symbol: [:blood] + ), + ], + color: 'firebrick', + flavour: '"Dreams and Memories?"', + type: 'Blood Spell Base' +) +# Ilvaite + +beginner_spells[:touch] = Card.new( #TODO + title: "Touch of Magic", + blood: 1, + #reposte: 'Prc', + actions: [ + Card::Action.new( + content: 'Summon magic around your hand.', + symbol: [:blood, :odd] + ), + ], + color: 'firebrick', + #flavour: '"Alchemicals and fleshy masses."', + type: 'Blood Spell Modified' +) + +beginner_spells[:engulf] = Card.new( #TODO + title: "Elemental Engulf", + blood: 2, + #reposte: 'Prc', + actions: [ + Card::Action.new( + content: 'Summon magic around your self.', + symbol: [:blood, :greater] + ), + ], + color: 'firebrick', + #flavour: '"Alchemicals and fleshy masses."', + type: 'Blood Spell Modified' +) + +beginner_spells[:distance] = Card.new( #TODO + title: "Distance Casting", + blood: 2, + #reposte: 'Prc', + actions: [ + Card::Action.new( + content: 'Summon magic at a distance.', + symbol: [:blood, :face] + ), + ], + color: 'firebrick', + #flavour: '"Alchemicals and fleshy masses."', + type: 'Blood Spell Modified' +) + +beginner_spells[:endure] = Card.new( #TODO + title: "Enduring Arcana", + blood: 0, + #reposte: 'Prc', + actions: [ + Card::Action.new( + content: 'Keep casting for a duration. Whenever distractions occurs to you while casting, such as an attack or a suprise, do a blood check with difficulty equal to the sum of the blood value of spell components used.', + symbol: [:blood, :even] + ), + ], + color: 'firebrick', + #flavour: '"Alchemicals and fleshy masses."', + type: 'Blood Spell Modified' +) + +Card.output('beginner_spells', beginner_spells); diff --git a/cards/class_abilities.rb b/cards/class_abilities.rb deleted file mode 100644 index 117005b..0000000 --- a/cards/class_abilities.rb +++ /dev/null @@ -1,181 +0,0 @@ -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.rb b/cards/common_weapons.rb deleted file mode 100644 index 55931af..0000000 --- a/cards/common_weapons.rb +++ /dev/null @@ -1,350 +0,0 @@ -load 'card.rb' - -common_weapons = {} - -common_weapons[:thrusting_sword] = Card.new( - title: "Thrusting Sword", - color: 'rebeccapurple', - reposte: 'Prc', - damage: '3', - actions: [ - Card::Action.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.', - #) - ], - flavour: '"World Famous Iron Toothpick"', - type: 'Thrusting Sword Weapon' -) - - -common_weapons[:polearm] = Card.new( - title: "Polearm", - color: 'rebeccapurple', - reposte: 'Prc', - damage: '4', - actions: [ - Card::Action.new( - content: '🎲 **d6 + Str** to hit.', - symbol: :tap, - ), - Card::Action.new( - seperator: true, - 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', - reposte: 'Prc', - damage: '2', - actions: [ - Card::Action.new( - content: '🎲 **d4 + Prc** to hit.', - symbol: :tap, - ), - Card::Action.new( - seperator: true, - 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[:longbow] = Card.new( - title: "Longbow", - color: 'rebeccapurple', - damage: '3', - #reposte: 1, - actions: [ - Card::Action.new( - content: '🎲 **d4 + (2·Prc)** to hit.', - symbol: :tap, - ), - Card::Action.new( - seperator: true, - 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' -) - -common_weapons[:crossbow] = Card.new( - title: "Crossbow", - color: 'rebeccapurple', - damage: '3', - #reposte: 1, - actions: [ - Card::Action.new( - content: '(must be loaded) 🎲 **d6 + Prc** to hit.', - symbol: :tap, - ), - Card::Action.new( - seperator: true, - content: '**Reload**: Load this weapon.', - symbol: :tap, - ), - Card::Action.new( - seperator: true, - content: '**Ranged**', - ) - ], - flavour: '"No one will cross you with this weapon"', - type: 'Crossbow Weapon' -) - -common_weapons[:hammer] = Card.new( - title: "Hammer", - reposte: 'Str', - damage: 3, - actions: [ - Card::Action.new( - 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 - #), - ], - flavour: '"If you can pick it up, then you are worthy enough to use it."', - color: 'rebeccapurple', - type: 'Hammer Weapon' -) - -common_weapons[:straight_sword] = Card.new( - title: "Straight Sword", - damage: 3, - reposte: 'Str', - actions: [ - Card::Action.new( - content: '🎲 **d8 + Str** to hit.', - symbol: :tap, - ), - #Card::Action.new( - # seperator: true, - # content: '(Two Handed) 🎲 **d6 + Str** to hit. Deal **Str** damage.', - # symbol: :tap, - #) - ], - flavour: '"El Classico"', - color: 'rebeccapurple', - type: 'Straight Sword Weapon' -) - -common_weapons[:axe] = Card.new( - title: "Axe", - damage: 4, - reposte: 'Str', - actions: [ - Card::Action.new( - 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 - #), - ], - flavour: '"Looks great with a flannel shirt."', - color: 'rebeccapurple', - type: 'Axe Weapon', -) - -common_weapons[:staff] = Card.new( - title: "Staff", - damage: 2, - reposte: 'Str', - actions: [ - Card::Action.new( - content: '🎲 **d6 + Str** to hit.', - symbol: :tap, - ), - Card::Action.new( - seperator: true, - content: '(Two Handed) 🎲 **d8 + Str** to hit.', - symbol: :tap, - ), - Card::Action.new( - seperator: true, - 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"', - type: 'Staff Weapon', -) - -common_weapons[:curved_sword] = Card.new( - title: "Curved Sword", - damage: 3, - reposte: 'Prc', - actions: [ - Card::Action.new( - 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: '**Casting Focus**', - ), - ], - color: 'rebeccapurple', - flavour: '"Weapon used in the war against the gods. Vintage!"', - type: 'Forked Sword Weapon', -) - -common_weapons[:caestus] = Card.new( - title: "Caestus", - color: 'DarkBlue', - actions: [ - Card::Action.new( - content: 'While equipped: Unarmed Strikes deal **Str** additional damage.', - ) - ], - flavour: '"Weapon of choice for a fit bronze statue"', - 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, - reposte: 'Prc', - actions: [ - Card::Action.new( - content: '🎲 **d6 + Prc** to hit.', - symbol: :spades, - ), - Card::Action.new( - seperator: true, - content: '🎲 **d6 + Prc** to hit.', - symbol: :clubs, - ), - Card::Action.new( - seperator: true, - content: '🎲 **d6 + Prc** to hit.', - symbol: :diamonds, - ), - Card::Action.new( - seperator: true, - content: '🎲 **d6 + Prc** to hit.', - symbol: :joker, - ), - Card::Action.new( - seperator: true, - content: '🎲 **d6 + Prc** to hit.', - symbol: [:tap, :hearts] - ), - ], - color: 'rebeccapurple', - flavour: '"Arrr"', - type: 'Curved Sword Weapon', -) - -File.write('common_weapons.html', Card.build(common_weapons.values)) diff --git a/cards/inspiration_cardback.jpg b/cards/inspiration_cardback.jpg deleted file mode 100644 index 2b82919..0000000 Binary files a/cards/inspiration_cardback.jpg and /dev/null differ diff --git a/cards/output/alchemical_recipes.html b/cards/output/alchemical_recipes.html new file mode 100644 index 0000000..7218bd8 --- /dev/null +++ b/cards/output/alchemical_recipes.html @@ -0,0 +1,300 @@ + + + + + + +
+
+
+
+

+ Crystal Encasement Recipe +

+
+
+
+
+
+ + 🩸 + + + ♦️ + +
+
+

A potion which when applied to a surface quickly grows strong blue crystals. Can also be thrown.

+
+
+
+
+
+
+

“You arent making a bomb, are you?”

+
+
+
+
+ Blood Magic (Eldritch) +
+
+
+
+ + + diff --git a/cards/output/armour.html b/cards/output/armour.html new file mode 100644 index 0000000..feb99a8 --- /dev/null +++ b/cards/output/armour.html @@ -0,0 +1,380 @@ + + + + + + +
+
+
+
+

+ Iron Plate +

+
+ 5 🛡️ +
+
+
+
+
+
+

“Strong but heavy”

+
+
+
+
+ Body Armour +
+
+
+
+
+
+

+ Chain Mail +

+
+ 4 🛡️ +
+
+
+
+
+
+

“The fairly lightweight option”

+
+
+
+
+ Body Armour +
+
+
+
+
+
+

+ Leather +

+
+ 3 🛡️ +
+
+
+
+
+
+

“Popular with goths and punks”

+
+
+
+
+ Body Armour +
+
+
+
+
+
+

+ Padded +

+
+ 2 🛡️ +
+
+
+
+
+
+

“A LOT of regular clothing stacked together”

+
+
+
+
+ Body Armour +
+
+
+
+
+
+

+ None +

+
+ 1 🛡️ +
+
+
+
+
+
+

“Just the skin on your back”

+
+
+
+
+ Body Armour +
+
+
+
+ + + diff --git a/cards/output/beginner_spells.html b/cards/output/beginner_spells.html new file mode 100644 index 0000000..7d35cb8 --- /dev/null +++ b/cards/output/beginner_spells.html @@ -0,0 +1,568 @@ + + + + + + +
+
+
+
+
+ 1 🩸 +
+

+ Planes of Igneous +

+
+
+
+
+
+ + 🩸 + +
+
+

Attune to the planes of igneous.

+
+
+
+
+
+
+

“Sea of flames and ashes.”

+
+
+
+
+ Blood Spell Base +
+
+
+
+
+
+
+ 1 🩸 +
+

+ Planes of Storm +

+
+
+
+
+
+ + 🩸 + +
+
+

Attune to the planes of storm.

+
+
+
+
+
+
+

“Ice cold winds and storms.”

+
+
+
+
+ Blood Spell Base +
+
+
+
+
+
+
+ 1 🩸 +
+

+ Planes of Eldritch +

+
+
+
+
+
+ + 🩸 + +
+
+

Attune to the planes of eldritch.

+
+
+
+
+
+
+

“Alchemicals and fleshy masses.”

+
+
+
+
+ Blood Spell Base +
+
+
+
+
+
+
+ 1 🩸 +
+

+ Planes of Void +

+
+
+
+
+
+ + 🩸 + +
+
+

Attune to the planes of void.

+
+
+
+
+
+
+

“Control Gravity”

+
+
+
+
+ Blood Spell Base +
+
+
+
+
+
+
+ 1 🩸 +
+

+ Planes of Soul +

+
+
+
+
+
+ + 🩸 + +
+
+

Attune to the planes of soul.

+
+
+
+
+
+
+

“Dreams and Memories?”

+
+
+
+
+ Blood Spell Base +
+
+
+
+
+
+
+ 1 🩸 +
+

+ Touch of Magic +

+
+
+
+
+
+ + 🩸 + + + 🔻 + +
+
+

Summon magic around your hand.

+
+
+
+
+
+ Blood Spell Modified +
+
+
+
+
+
+
+ 2 🩸 +
+

+ Elemental Engulf +

+
+
+
+
+
+ + 🩸 + + + ➕ + +
+
+

Summon magic around your self.

+
+
+
+
+
+ Blood Spell Modified +
+
+
+
+
+
+
+ 2 🩸 +
+

+ Distance Casting +

+
+
+
+
+
+ + 🩸 + + + 🎭 + +
+
+

Summon magic at a distance.

+
+
+
+
+
+ Blood Spell Modified +
+
+
+
+
+
+
+ 0 🩸 +
+

+ Enduring Arcana +

+
+
+
+
+
+ + 🩸 + + + ⬜ + +
+
+

Keep casting for a duration. Whenever distractions occurs to you while casting, such as an attack or a suprise, do a blood check with difficulty equal to the sum of the blood value of spell components used.

+
+
+
+
+
+ Blood Spell Modified +
+
+
+
+ + + diff --git a/cards/output/class_abilities.html b/cards/output/class_abilities.html new file mode 100644 index 0000000..77f111a --- /dev/null +++ b/cards/output/class_abilities.html @@ -0,0 +1,595 @@ + + + + + + +
+
+
+
+

+ Duel +

+
+
+
+

Pick a target. You and that target a duel where you and the target may not attack anyone other then eachother. You cannot use this while in a duel.

+
+
+
+
+

“Stabby stabby stab”

+
+
+
+
+ Rogue Ability +
+
+
+
+
+
+

+ Duck and Weave +

+
+
+
+
+
+ + ↪️ + + + ♦️ + +
+
+

Ignore up to the card played worth of damage from a reposte.

+
+
+
+
+
+
+

“Missed me”

+
+
+
+
+ Rogue Ability +
+
+
+
+
+
+

+ Surgical Strike +

+
+
+
+
+
+ + ↪️ + + + ♠️ + +
+
+

(less then 5) Replace a weapon’s damage with the value of the card played. Only affects the current attack.

+
+
+
+
+
+ Rogue Ability +
+
+
+
+
+
+

+ Down the Alleys +

+
+
+
+
+
+ + ♦️ + +
+
+

(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.

+
+
+
+
+
+ Rogue Ability +
+
+
+
+
+
+

+ Spot +

+
+
+
+
+
+ + ♥️ + +
+
+

(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.

+
+
+
+
+
+ Ranger Ability +
+
+
+
+
+
+

+ Flexible Shooter +

+
+
+
+

You can deal reposte damage with any ranged weapon.

+
+
+
+ Ranger Ability +
+
+
+
+
+
+

+ Scouting Ahead +

+
+
+
+
+
+ + ♦️ + +
+
+

(even) When travelling outside of a settlement, before the next encounter: reveal 2 encounters and pick 1. Discard the other.

+
+
+
+
+
+ Ranger Ability +
+
+
+
+
+
+

+ Healing Salve Recipe +

+
+
+
+
+
+ + ♦️ + + + ♥️ + +
+
+

(each suit) Healberry Herb, Cloth.

+
+
+
+
+
+
+

Don’t eat the berries”

+
+
+
+
+ Ranger Recipe +
+
+
+
+
+
+

+ Recast +

+
+
+
+
+
+ + ↪️ + + + ♥️ + +
+
+

(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.

+
+
+
+
+
+ Astrologist Ability +
+
+
+
+
+
+

+ Focused Cast +

+
+
+
+
+
+ + ↪️ + +
+
+

Upgrade the blood dice for one spell you cast.

+
+
+
+
+
+ Astrologist Ability +
+
+
+
+
+
+
+ 1 🩸 +
+

+ Change of Fate +

+
+
+
+
+
+ + 🩸 + +
+
+

Swap 1 card with a willing player.

+
+
+
+
+
+ Astrologist Ability +
+
+
+
+
+
+
+ 1 🩸 +
+

+ Palm Reading +

+
+
+
+
+
+ + 🩸 + +
+
+

Discard a willing players hand and replace it with new cards drawn.

+
+
+
+
+
+ Astrologist Ability +
+
+
+
+ + + diff --git a/cards/output/common_items.html b/cards/output/common_items.html new file mode 100644 index 0000000..fc8b188 --- /dev/null +++ b/cards/output/common_items.html @@ -0,0 +1,556 @@ + + + + + + +
+
+
+
+

+ Test +

+
+ ⚔️ 3 +
+
+ Prc 🛡️ +
+
+
+
+
+
+ + ↪️ + + + 🩸 + + + 📣 + + + 🔻 + + + ⬜ + + + 🎭 + + + ➕ + + + ➖ + +
+
+

🎲 d8 · Prc to Bludgeon.

+
+
+
+
+
+
+ + ♠️ + +
+
+

🎲 d6 + Prc to hit.

+
+
+
+
+
+
+
+ + ♣️ + +
+
+

🎲 d6 + Prc to hit.

+
+
+
+
+
+
+
+ + ♦️ + +
+
+

🎲 d6 + Prc to hit.

+
+
+
+
+
+
+
+ + 🃏 + +
+
+

🎲 d6 + Prc to hit.

+
+
+
+
+
+
+
+ + ↪️ + + + ♥️ + +
+
+

🎲 d6 + Prc to hit.

+
+
+
+
+
+
+

“World Famous Iron Toothpick”

+
+
+
+
+ Thrusting Sword Weapon +
+
+
+
+
+
+

+ Sack +

+
+
+
+

Item slot: 12 spaces.

+
+
+
+
+
+ + ↪️ + +
+
+

Draw up to 2 cards from this inventory and place up to 2 items to the front or back of this inventory.

+
+
+
+
+
+

Equips on your back.

+
+
+
+ Leather Item Container +
+
+
+
+
+
+

+ Satchel +

+
+
+
+

Item slot: 6 spaces.

+
+
+
+
+
+ + ↪️ + +
+
+

Draw up to 3 cards from this inventory and place up to 3 items to the front or back of this inventory.

+
+
+
+
+
+

Equips on your back.

+
+
+
+ Leather Item Container +
+
+
+
+
+
+

+ Rucksack +

+
+
+
+

Item slot: 12 spaces.

+
+
+

Item slot: 6 spaces.

+
+
+
+
+
+ + ↪️ + +
+
+

Draw up to 2 cards from this inventory and place up to 2 items to the front or back of this inventory.

+
+
+
+
+
+

Equips on your back.

+
+
+
+ Leather Item Container +
+
+
+
+
+
+

+ Sheath +

+
+
+
+

Item slot: 1 weapon.

+
+
+
+
+
+ + ↪️ + +
+
+

Draw up to 1 cards from this inventory and place up to 1 weapon to this inventory.

+
+
+
+
+
+

Equips on your back or hip.

+
+
+
+ Leather Item Container +
+
+
+
+
+
+

+ Hand Bomb +

+
+
+
+
+
+ + ↪️ + +
+
+

Deal 3 damage. Consumes this item.

+
+
+
+
+
+ Consumable Weapon +
+
+
+
+ + + diff --git a/cards/output/common_weapons.html b/cards/output/common_weapons.html new file mode 100644 index 0000000..fe55b0c --- /dev/null +++ b/cards/output/common_weapons.html @@ -0,0 +1,1047 @@ + + + + + + +
+
+
+
+

+ Test +

+
+ ⚔️ 3 +
+
+ Prc 🛡️ +
+
+
+
+
+
+ + ↪️ + + + 🩸 + + + 📣 + + + 🔻 + + + ⬜ + + + 🎭 + + + ➕ + + + ➖ + +
+
+

🎲 d8 · Prc to Bludgeon.

+
+
+
+
+
+
+ + ♠️ + +
+
+

🎲 d6 + Prc to hit.

+
+
+
+
+
+
+
+ + ♣️ + +
+
+

🎲 d6 + Prc to hit.

+
+
+
+
+
+
+
+ + ♦️ + +
+
+

🎲 d6 + Prc to hit.

+
+
+
+
+
+
+
+ + 🃏 + +
+
+

🎲 d6 + Prc to hit.

+
+
+
+
+
+
+
+ + ↪️ + + + ♥️ + +
+
+

🎲 d6 + Prc to hit.

+
+
+
+
+
+
+

“World Famous Iron Toothpick”

+
+
+
+
+ Thrusting Sword Weapon +
+
+
+
+
+
+

+ Spear +

+
+ ⚔️ 3 +
+
+ Prc 🛡️ +
+
+
+
+
+
+ + ↪️ + +
+
+

🎲 d6 · Prc to Pierce.

+
+
+
+
+
+
+ +
+
+

Reach, Throwable

+
+
+
+
+
+
+

“5x more throwable then previous editions”

+
+
+
+
+ Polearm Weapon +
+
+
+
+
+
+

+ Dagger +

+
+ ⚔️ 2 +
+
+ Prc 🛡️ +
+
+
+
+
+
+ + ↪️ + +
+
+

🎲 d4 · Prc to Pierce.

+
+
+
+
+
+
+ +
+
+

Light, Throwable

+
+
+
+
+
+
+

“A quick and convinient way to turn a spleen into a sheath”

+
+
+
+
+ Dagger Weapon +
+
+
+
+
+
+

+ Longbow +

+
+ ⚔️ 3 +
+
+
+
+
+
+ + ↪️ + +
+
+

🎲 d6 · Prc to Pierce.

+
+
+
+
+
+
+ +
+
+

Ranged

+
+
+
+
+
+
+

“One stringed instrument that got repurposed as a weapon.”

+
+
+
+
+ Bow Weapon +
+
+
+
+
+
+

+ Crossbow +

+
+ ⚔️ 3 +
+
+
+
+
+
+ + ↪️ + +
+
+

Remove a counter.

+
+
+
+
+
+
+ +
+
+

🎲 d8 · Prc to Pierce.

+
+
+
+
+
+
+ +
+
+

Ranged

+
+
+
+
+
+
+
+ + ↪️ + +
+
+

Reload: Load this weapon. Add a counter to this card.

+
+
+
+
+
+
+

“No one will cross you with this weapon”

+
+
+
+
+ Crossbow Weapon +
+
+
+
+
+
+

+ Warhammer +

+
+ ⚔️ 3 +
+
+ Str 🛡️ +
+
+
+
+
+
+ + ↪️ + +
+
+

🎲 d8 · (Str) to Bludgeon.

+
+
+
+
+
+
+

“Made of over 39,000 minature hammers”

+
+
+
+
+ Hammer Weapon +
+
+
+
+
+
+

+ Sickle +

+
+ ⚔️ 1 +
+
+ Prc 🛡️ +
+
+
+
+
+
+ + ↪️ + +
+
+

🎲 d4 · (Prc) to Bludgeon.

+
+
+
+
+
+
+ +
+
+

Light, Cleave

+
+
+
+
+
+
+

“Made of over 39,000 minature hammers”

+
+
+
+
+ Farming Weapon +
+
+
+
+
+
+

+ Scythe +

+
+ ⚔️ 2 +
+
+ Prc 🛡️ +
+
+
+
+
+
+ + ↪️ + +
+
+

🎲 d6 · (Prc) to Bludgeon.

+
+
+
+
+
+
+ +
+
+

Heavy, Cleave

+
+
+
+
+
+
+

“Made of over 39,000 minature hammers”

+
+
+
+
+ Farming Weapon +
+
+
+
+
+
+

+ Short Sword +

+
+ ⚔️ 3 +
+
+ Str 🛡️ +
+
+
+
+
+
+ + ↪️ + +
+
+

🎲 d6 · Str to hit.

+
+
+
+
+
+
+ +
+
+

Light

+
+
+
+
+
+
+

“El Classico”

+
+
+
+
+ Straight Sword Weapon +
+
+
+
+
+
+

+ Long Sword +

+
+ ⚔️ 3 +
+
+ Str 🛡️ +
+
+
+
+
+
+ + ↪️ + +
+
+

🎲 d8 · Str to hit.

+
+
+
+
+
+
+

“El Classico”

+
+
+
+
+ Straight Sword Weapon +
+
+
+
+
+
+

+ Axe +

+
+ ⚔️ 4 +
+
+ Str 🛡️ +
+
+
+
+
+
+ + ↪️ + +
+
+

🎲 d6 · Str to Slash.

+
+
+
+
+
+
+

“Looks great with a flannel shirt.”

+
+
+
+
+ Axe Weapon +
+
+
+
+
+
+

+ Staff +

+
+ ⚔️ 2 +
+
+ Str 🛡️ +
+
+
+
+
+
+ + ↪️ + +
+
+

🎲 d6 + Str to Bludgeon.

+
+
+
+
+
+
+
+ + ↪️ + +
+
+

🎲 d8 + Str to Bludgeon.

+
+
+
+
+

Heavy

+
+
+
+
+

“Says ‘Made by the Ninja Custodial Group’ on the handle”

+
+
+
+
+ Staff Weapon +
+
+
+
+
+
+

+ Kite Shield +

+
+
+
+
+
+ + ↪️ + + + 📣 + +
+
+

When targeted with a weapon: your attacker recieves 2 disadvantage on their action.

+
+
+
+
+
+
+

“Looks great with a flannel shirt.”

+
+
+
+
+ Shield Weapon +
+
+
+
+
+
+

+ Buckler Shield +

+
+
+
+
+
+ + ↪️ + + + 📣 + +
+
+

When targeted with a weapon: your attacker recieves 1 disadvantage on their action. If your reposte triggers then deal double damage with it.

+
+
+
+
+
+
+

“Looks great with a flannel shirt.”

+
+
+
+
+ Shield Weapon +
+
+
+
+
+
+

+ Caestus +

+
+
+
+

While equipped: Unarmed Strikes deal Str additional damage.

+
+
+
+
+

“Weapon of choice for a fit bronze statue”

+
+
+
+
+ Weapon Equipment +
+
+
+
+
+
+
+ 🎲 1d4 +
+

+ Tuning Fork +

+
+
+
+

Casting Focus

+
+
+
+
+

“Resonates with various magical frequencies to help with casting blood magic”

+
+
+
+
+ Magic Casting Tool +
+
+
+
+ + + diff --git a/cards/output/paladin_abilities.html b/cards/output/paladin_abilities.html new file mode 100644 index 0000000..2506e5c --- /dev/null +++ b/cards/output/paladin_abilities.html @@ -0,0 +1,639 @@ + + + + + + +
+
+
+
+

+ Duel +

+
+
+
+
+
+ + ↪️ + + + ⬜ + +
+
+

Pick a target. You and that target enter a duel where you and the target may not attack anyone other then each other. You cannot use this while in a duel.

+
+
+
+
+
+
+

“A famous commander’s signature thing.”

+
+
+
+
+ Paladin Ability +
+
+
+
+
+
+

+ Leading Charge +

+
+
+
+
+
+ + ↪️ + + + 📣 + + + 🎭 + +
+
+

When making an attack, mark the target and choose an ally. During the ally’s next turn: they gain an advatage for all attacks they do agaisnt the marked target.

+
+
+
+
+
+ Paladin Ability +
+
+
+
+
+
+

+ Duck and Weave +

+
+
+
+
+
+ + ↪️ + + + ♦️ + +
+
+

Ignore up to the card played worth of damage from a reposte.

+
+
+
+
+
+
+

“Missed me”

+
+
+
+
+ Rogue Ability +
+
+
+
+
+
+

+ Surgical Strike +

+
+
+
+
+
+ + ↪️ + + + ♠️ + +
+
+

(less then 5) Replace a weapon’s damage with the value of the card played. Only affects the current attack.

+
+
+
+
+
+ Rogue Ability +
+
+
+
+
+
+

+ Down the Alleys +

+
+
+
+
+
+ + ♦️ + +
+
+

(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.

+
+
+
+
+
+ Rogue Ability +
+
+
+
+
+
+

+ Spot +

+
+
+
+
+
+ + ♥️ + +
+
+

(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.

+
+
+
+
+
+ Ranger Ability +
+
+
+
+
+
+

+ Flexible Shooter +

+
+
+
+

You can deal reposte damage with any ranged weapon.

+
+
+
+ Ranger Ability +
+
+
+
+
+
+

+ Scouting Ahead +

+
+
+
+
+
+ + ♦️ + +
+
+

(even) When travelling outside of a settlement, before the next encounter: reveal 2 encounters and pick 1. Discard the other.

+
+
+
+
+
+ Ranger Ability +
+
+
+
+
+
+

+ Healing Salve Recipe +

+
+
+
+
+
+ + ♦️ + + + ♥️ + +
+
+

(each suit) Healberry Herb, Cloth.

+
+
+
+
+
+
+

Don’t eat the berries”

+
+
+
+
+ Ranger Recipe +
+
+
+
+
+
+

+ Recast +

+
+
+
+
+
+ + ↪️ + + + ♥️ + +
+
+

(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.

+
+
+
+
+
+ Astrologist Ability +
+
+
+
+
+
+

+ Focused Cast +

+
+
+
+
+
+ + ↪️ + +
+
+

Upgrade the blood dice for one spell you cast.

+
+
+
+
+
+ Astrologist Ability +
+
+
+
+
+
+
+ 1 🩸 +
+

+ Change of Fate +

+
+
+
+
+
+ + 🩸 + +
+
+

Swap 1 card with a willing player.

+
+
+
+
+
+ Astrologist Ability +
+
+
+
+
+
+
+ 1 🩸 +
+

+ Palm Reading +

+
+
+
+
+
+ + 🩸 + +
+
+

Discard a willing players hand and replace it with new cards drawn.

+
+
+
+
+
+ Astrologist Ability +
+
+
+
+ + + diff --git a/cards/output/rare_weapons.html b/cards/output/rare_weapons.html new file mode 100644 index 0000000..76db3a3 --- /dev/null +++ b/cards/output/rare_weapons.html @@ -0,0 +1,512 @@ + + + + + + +
+
+
+
+

+ Glaive +

+
+ ⚔️ 4 +
+
+ Prc 🛡️ +
+
+
+
+
+
+ + ↪️ + +
+
+

🎲 d6 · Str to Slash.

+
+
+
+
+
+
+ +
+
+

Reach, Heavy

+
+
+
+
+
+
+

“Getting up close and personal while staying far away”

+
+
+
+
+ Polearm Weapon +
+
+
+
+
+
+

+ Twinblade +

+
+ ⚔️ 3 +
+
+ Prc 🛡️ +
+
+
+
+
+
+ + ↪️ + +
+
+

🎲 d4 + Prc to Slash.

+
+
+
+
+
+
+
+ + ↪️ + +
+
+

🎲 d6 + Prc to Slash.

+
+
+
+
+

Heavy

+
+
+
+
+

“Says ‘Made by the Ninja Custodial Group’ on the handle”

+
+
+
+
+ Staff Weapon +
+
+
+
+
+
+

+ Forked Sword +

+
+ ⚔️ 3 +
+
+ Str 🛡️ +
+
+
+
+
+
+ + ↪️ + +
+
+

🎲 d6 + Str to Pierce.

+
+
+
+
+
+
+ +
+
+

You can use the ‘Cast a spell’ ability as a part of this action.

+
+
+
+
+
+
+
+ + ↪️ + +
+
+

Cast a Blood Magic Spell

+
+
+
+
+
+
+

“Weapon used in the war against the gods. Vintage!”

+
+
+
+
+ Forked Sword Weapon +
+
+
+
+
+
+

+ Tower Shield +

+
+
+
+
+
+ + ↪️ + + + 📣 + +
+
+

When targeted with a weapon: your attacker recieves 2 disadvantage on their action.

+
+
+
+
+
+
+ +
+
+

Heavy.

+
+
+
+
+
+

You can act as cover for another character.

+
+
+

Heavy.

+
+
+
+
+

“Looks great with a flannel shirt.”

+
+
+
+
+ Shield Weapon +
+
+
+
+
+
+
+ 🎲 1d8 +
+

+ Caster's Glove +

+
+
+
+

Casting Focus

+
+
+
+
+

“Modern casting tool that works by directly drawing your blood”

+
+
+
+
+ Magic Casting Tool +
+
+
+
+ + + diff --git a/cards/spells.rb b/cards/spells.rb deleted file mode 100644 index 39da46b..0000000 --- a/cards/spells.rb +++ /dev/null @@ -1,267 +0,0 @@ -load 'card.rb' - -beginner_spells = {} - -spell_color = 'firebrick' -modifier_color = "#b24747" - -=begin - -beginner_spells[:wispy_flame] = Card.new( - title: "Wispy Flame", - damage: 'd4', - blood: 1, - #reposte: 'Prc', - actions: [ - Card::Action.new( - content: 'Engulf your hand in flames for one turn. You need to maintain concentration each turn.', - symbol: [:joker, :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: spell_color, - flavour: '"Portable Candle"', - type: 'Blood Magic(Igneous)' -) - -beginner_spells[:concentrated_cast] = Card.new( - title: "Concentrated Cast", - actions: [ - Card::Action.new( - content: 'Change the number of turns you need to check for concentration equal to the **card played** times your **Resolve**.', - symbol: [:even] - ), - ], - color: modifier_color, - #flavour: '"Portable Candle"', - type: 'Blood Magic(Modifier)' -) - -beginner_spells[:powerful_cast] = Card.new( - title: "Powerful Cast", - actions: [ - Card::Action.new( - content: 'Double the amount of dice rolled for this spell.', - symbol: [:face] - ), - ], - color: modifier_color, - #flavour: '"Portable Candle"', - type: 'Blood Magic(Modifier)' -) - - -beginner_spells[:summon_flesh] = Card.new( - title: "Summon Flesh", - #damage: 3, - blood: 1, - #reposte: 'Prc', - actions: [ - Card::Action.new( - content: '(**5 or less**) Heal a target within arms reach equal to the card played.', - symbol: [:hearts, :blood] - ), - Card::Action.new( - content: 'If this spell heals for more then half of the target\'s max health then they get flesh mass disease.', - seperator: true, - ), - ], - color: spell_color, - flavour: '"Writhing flesh mass that assimilates"', - type: 'Blood Magic (Eldritch)' -) - -beginner_spells[:lighting_fork] = Card.new( - title: "Lightning Fork", - damage: '2d4', - blood: 1, - #reposte: 'Prc', - actions: [ - Card::Action.new( - content: '(**even**) Deal 1d4 damage to one target and 1d4 to another. Both targets need to be within 10 meters if you', - symbol: [:clubs, :blood] - ), - ], - color: 'firebrick', - flavour: '"Double the static, double the fun!"', - type: 'Blood Magic (Storm)' -) - -beginner_spells[:summon_alchemicals] = Card.new( - title: "Summon Alchemicals", - #damage: 3, - blood: 2, - #reposte: 'Prc', - actions: [ - Card::Action.new( - content: 'Summon a random amount of a random alchemical depending on various hidden factors.', - symbol: [:joker, :blood] - ), - ], - color: 'firebrick', - flavour: '"You arent making a bomb, are you?"', - type: 'Blood Magic (Eldritch)' -) - -beginner_spells[:northern_wind] = Card.new( #TODO - title: "Northern Wind", - damage: '2d4', - blood: 1, - #reposte: 'Prc', - actions: [ - Card::Action.new( - content: '(**odd**) Shoot a cold wind from your hands, freezing things in its path.', - symbol: [:clubs, :blood] - ), - ], - color: 'firebrick', - flavour: '"Won\'t fail blowing out birthday candles"', - type: 'Blood Magic (Storm)' -) -=end -beginner_spells[:planes_of_igneous] = Card.new( #TODO - title: "Planes of Igneous", - blood: 1, - #reposte: 'Prc', - actions: [ - Card::Action.new( - content: 'Attune to the planes of igneous.', - symbol: [:blood] - ), - ], - color: 'firebrick', - flavour: '"Sea of flames and ashes."', - type: 'Blood Spell Base' -) -# Ruby - -beginner_spells[:planes_of_storm] = Card.new( #TODO - title: "Planes of Storm", - blood: 1, - #reposte: 'Prc', - actions: [ - Card::Action.new( - content: 'Attune to the planes of storm.', - symbol: [:blood] - ), - ], - color: 'firebrick', - flavour: '"Ice cold winds and storms."', - type: 'Blood Spell Base' -) -# Sapphire - -beginner_spells[:planes_of_eldritch] = Card.new( #TODO - title: "Planes of Eldritch", - blood: 1, - #reposte: 'Prc', - actions: [ - Card::Action.new( - content: 'Attune to the planes of eldritch.', - symbol: [:blood] - ), - ], - color: 'firebrick', - flavour: '"Alchemicals and fleshy masses."', - type: 'Blood Spell Base' -) -# Ammolite - -beginner_spells[:planes_of_void] = Card.new( #TODO - title: "Planes of Void", - blood: 1, - #reposte: 'Prc', - actions: [ - Card::Action.new( - content: 'Attune to the planes of void.', - symbol: [:blood] - ), - ], - color: 'firebrick', - flavour: '"Control Gravity"', - type: 'Blood Spell Base' -) -# Quartz - -beginner_spells[:planes_of_soul] = Card.new( #TODO - title: "Planes of Soul", - blood: 1, - #reposte: 'Prc', - actions: [ - Card::Action.new( - content: 'Attune to the planes of soul.', - symbol: [:blood] - ), - ], - color: 'firebrick', - flavour: '"Dreams and Memories?"', - type: 'Blood Spell Base' -) -# Ilvaite - -beginner_spells[:touch] = Card.new( #TODO - title: "Touch of Magic", - blood: 1, - #reposte: 'Prc', - actions: [ - Card::Action.new( - content: 'Summon magic around your hand.', - symbol: [:blood, :odd] - ), - ], - color: 'firebrick', - #flavour: '"Alchemicals and fleshy masses."', - type: 'Blood Spell Modified' -) - -beginner_spells[:engulf] = Card.new( #TODO - title: "Elemental Engulf", - blood: 2, - #reposte: 'Prc', - actions: [ - Card::Action.new( - content: 'Summon magic around your self.', - symbol: [:blood, :greater] - ), - ], - color: 'firebrick', - #flavour: '"Alchemicals and fleshy masses."', - type: 'Blood Spell Modified' -) - -beginner_spells[:distance] = Card.new( #TODO - title: "Distance Casting", - blood: 2, - #reposte: 'Prc', - actions: [ - Card::Action.new( - content: 'Summon magic at a distance.', - symbol: [:blood, :face] - ), - ], - color: 'firebrick', - #flavour: '"Alchemicals and fleshy masses."', - type: 'Blood Spell Modified' -) - -beginner_spells[:endure] = Card.new( #TODO - title: "Enduring Arcana", - blood: 0, - #reposte: 'Prc', - actions: [ - Card::Action.new( - content: 'Keep casting for a duration. Whenever distractions occurs to you while casting, such as an attack or a suprise, do a blood check with difficulty equal to the sum of the blood value of spell components used.', - symbol: [:blood, :even] - ), - ], - color: 'firebrick', - #flavour: '"Alchemicals and fleshy masses."', - type: 'Blood Spell Modified' -) - - -File.write('beginner_spells.html', Card.build(beginner_spells.values)) diff --git a/cards/weapon_example.svg b/cards/weapon_example.svg deleted file mode 100644 index ef9e910..0000000 --- a/cards/weapon_example.svg +++ /dev/null @@ -1,864 +0,0 @@ - - - -123568734 diff --git a/src/.obsidian/core-plugins.json b/src/.obsidian/core-plugins.json index 96869df..086a8e4 100644 --- a/src/.obsidian/core-plugins.json +++ b/src/.obsidian/core-plugins.json @@ -4,6 +4,7 @@ "switcher", "graph", "backlink", + "canvas", "outgoing-link", "tag-pane", "page-preview", diff --git a/src/classes.md b/src/classes.md index e080820..bcd56fd 100644 --- a/src/classes.md +++ b/src/classes.md @@ -1,19 +1,39 @@ # Classes -## Rogue +## Disicplines + +### Rogue Class representing felicity's gang. Can attack many times at once -specialized in the "city"? +yoinks abilities +inflitcts status effects -## Ranger +### Ranger Class representing the memory drow clan Good at focusing a target(mark) specialized in "nature"? has a pet -## Paladin +### Paladin Class representing the Indignant +leader type of class +gives buffs +draws aggro + +### Monk +can cleanse status effects + +## Archanologies -## Warlock +### Warlock trades blood for demon powers from other planes. can summon buddies + +### Alchemist +Creates magical substances to be consumed or thrown. + +### Sorcerer +Crafts and casts spells in the moment + +### Scribe +Prepares spells to be casted on command at a later time. Can create passive effects on people without requiring concentration. \ No newline at end of file diff --git a/src/gear.md b/src/gear.md new file mode 100644 index 0000000..530c852 --- /dev/null +++ b/src/gear.md @@ -0,0 +1,4 @@ +# Gear +Bags are an item, they dictate the size of your inventory deck. When in combat you dont just select random items and use them, instead you have to draw them from your inventory deck before equiping them. Some items such as a quick draw belt or a sheath will let you reliably draw the item instantly. + +Bags have a number of pockets, each pocket being represented by a seperate deck. This means that you can store things in parallel so they are easy to get. \ No newline at end of file diff --git a/src/running-the-game/Assets/blood_symbol.png b/src/running-the-game/Assets/blood_symbol.png new file mode 100644 index 0000000..473f3ed Binary files /dev/null and b/src/running-the-game/Assets/blood_symbol.png differ diff --git a/src/running-the-game/Assets/even_symbol.png b/src/running-the-game/Assets/even_symbol.png new file mode 100644 index 0000000..c3187d7 Binary files /dev/null and b/src/running-the-game/Assets/even_symbol.png differ diff --git a/src/running-the-game/Assets/face_symbol.png b/src/running-the-game/Assets/face_symbol.png new file mode 100644 index 0000000..0829076 Binary files /dev/null and b/src/running-the-game/Assets/face_symbol.png differ diff --git a/src/running-the-game/Assets/greater_symbol.png b/src/running-the-game/Assets/greater_symbol.png new file mode 100644 index 0000000..a9917ae Binary files /dev/null and b/src/running-the-game/Assets/greater_symbol.png differ diff --git a/src/running-the-game/Assets/lesser_symbol.png b/src/running-the-game/Assets/lesser_symbol.png new file mode 100644 index 0000000..932a349 Binary files /dev/null and b/src/running-the-game/Assets/lesser_symbol.png differ diff --git a/src/running-the-game/Assets/odd_symbol.png b/src/running-the-game/Assets/odd_symbol.png new file mode 100644 index 0000000..865b613 Binary files /dev/null and b/src/running-the-game/Assets/odd_symbol.png differ diff --git a/src/running-the-game/Assets/reactive_symbol.png b/src/running-the-game/Assets/reactive_symbol.png new file mode 100644 index 0000000..efc2491 Binary files /dev/null and b/src/running-the-game/Assets/reactive_symbol.png differ diff --git a/src/running-the-game/abilities.md b/src/running-the-game/abilities.md index 8a1754f..2ab930c 100644 --- a/src/running-the-game/abilities.md +++ b/src/running-the-game/abilities.md @@ -1,3 +1,31 @@ + + # Abilities Abilities are represented as cards which your character can learn, equip, and/or use. Spells, weapons, and racial feats are just some of the things which are represented as ability cards. Many of these cards follow shorthand for mechanics which are common throught the game. Here they are: @@ -8,27 +36,34 @@ Abilities are represented as cards which your character can learn, equip, and/or ![tap_symbol](tap_symbol.png) This symbol represents an ability which can be used once before requiring to be recharged. When a card is "tapped" place it sideways to signify this state. Once the card becomes [refreshed](/running-the-game/abilities.md#refresh) place it regularly. Unless otherwise stated, these cards [refresh](/running-the-game/abilities.md#refresh) at the start of your turn, or within a couple of in game seconds. If there is a set of brackets immediatly after the symbol they denotes the restrictions that must be met to use the ability. -These abilities can be used in reactions on other's turns. - ### Reactive -📣 +![reactive_symbol](Assets/reactive_symbol.png) This symbol means this ability can be used in reaction to another action or ability when appropriate. +### Blood Cost +![blood_symbol](Assets/blood_symbol.png) +This symbol represents an ability where you must use a blood spellcasting tool(unless otherwise specified) and pay for the cost to cast the spell. + ### Suit Card Cost ![heart_symbol](heart_symbol.png) ![spade_symbol](spade_symbol.png) ![diamond_symbol](diamond_symbol.png) ![club_symbol](club_symbol.png) Each of these 4 symbols represent an ability where you must play a matching card to use it. ### Odd/Even Card Cost -🔻/⬜️ +![odd_symbol](Assets/odd_symbol.png) ![even_symbol](Assets/even_symbol.png) The triangle(3 points represents odd) means you need to play a card with an odd value while the square(4 points represents even) means you need to play a card with an even value. +### Greater/Lesser Card Cost +![greater_symbol](Assets/greater_symbol.png) ![lesser_symbol](Assets/lesser_symbol.png) +The plus signifies that the card you play must be 5-10 while a minus signifies that the card you play must be 1-5. + +### Face Card Cost +![face_symbol](Assets/face_symbol.png) +The masks symbol signifies that the card played must be a face card(King, Queen, Knight, Jack) + ### Any Card Cost ![joker_symbol](joker_symbol.png) This symbol represents an ability where you can play a card of any suit. -### Blood Cost -🩸 -This symbol represents an ability where you must use a blood spellcasting tool(unless otherwise specified) and pay for the cost to cast the spell. ## Key Words @@ -42,12 +77,24 @@ Spells follow the same rules as abilities, but with some additional rules. ## Blood Magic Blood spells are the most common and accessable type of magic. These are spells that require blood to power them. +#### Modifieds +You compile a spell by mixing base elements with modifieds. The following are possible modifieds: +- Duration +- Range +- Scale +- Area + ### Sorcery To cast a blood spell a "spell casting" medium may be needed. A given spellcasting medium will have a dice associated with it. When casting a spell this dice is rolled. If the result is greater then the blood cost of a spell then you dont pay anything. However if the number rolled is equal to or less then the value then you pay 1 blood. If the spell cost is higher then the dice of your casting medium then the medium is too weak to cast the spell. Using no casting medium is possible, instead of rolling a dice the result is always 1 and you cannot cast spells higher then this cost. ### Alchemy Alchemy is a form of magic which involves the preparation of various ingredients which form compounds that perform spell effects. +### Scribe + +### Necromancy + + ## Divine Magic Divine spells use magic that originates from a god. The rules of these spells vary wildly and can depend on various different factors. These are forbidden in most places so if you somehow get access to one, be careful with how you use it. diff --git a/src/running-the-game/weapons.md b/src/running-the-game/weapons.md index d008695..f9b9054 100644 --- a/src/running-the-game/weapons.md +++ b/src/running-the-game/weapons.md @@ -10,11 +10,35 @@ 3. This is how much this weapon raises your defensive roll target for repostes. If it is unlisted then the weapon does not have a reposte. 4. This is the ability box, which lists out all the active and passive abilities this weapon has seperated by a bold line. This example weapon has 2 abilities. 5. The [symbol means you need to tap](running-the-game/abilities.md#Tap) to use this ability. The ["to hit" wording signifies it is an attack](running-the-game/weapons.md#To%20Hit) -7. The [symbol](running-the-game/abilities.md#Suit%20Card%20Cost) in front of this ability signifies that you must play a specific card to play it. [Refresh](running-the-game/abilities.md#Refresh) is a specific keyword. -9. This text states what type of card this is. Note that the colour of the card corresponds with the type of card. In this example the card is a Weapon, or a Dagger Weapon to be specific and the card is a purple colour. -10. This faded text is flavour. +6. The [symbol](running-the-game/abilities.md#Suit%20Card%20Cost) in front of this ability signifies that you must play a specific card to play it. [Refresh](running-the-game/abilities.md#Refresh) is a specific keyword. +7. This text states what type of card this is. Note that the colour of the card corresponds with the type of card. In this example the card is a Weapon, or a Dagger Weapon to be specific and the card is a purple colour. +8. This faded text is flavour. ## Key Words ### To Hit -These words are used in conjunction with a dice roll. It signifies that this ability is an attack and that this is how the attack roll is determined for it. If damage is unlisted then it is equal to the damage stat listed in the top box of the card. \ No newline at end of file +These words are used in conjunction with a dice roll. It signifies that this ability is an attack and that this is how the attack roll is determined for it. If damage is unlisted then it is equal to the damage stat listed in the top box of the card. + +## Properties + +### Light +Can be equipped alongside a light or medium weapon. + +### Heavy + +### Cleave +Target multiple adjcent enemies in the same single attack. + +### Throw +Throw this weapon at something. Ignore reposts when using this feature. + +### Range +Ignore reposte when attacking. + +### Reach +Always repost even if an enemy hits an attack when possible. + +## Damage Types +- Bludgeon +- Slash +- Pierce \ No newline at end of file diff --git a/tap_symbol.xcf b/tap_symbol.xcf index 5232fb1..d8cca38 100644 Binary files a/tap_symbol.xcf and b/tap_symbol.xcf differ -- cgit v1.2.3