Starter Condition code, Vicarious Story Condition, and Nuzusul Monitor example spell.

This commit is contained in:
The Stranjer 2019-06-11 21:36:45 -04:00
parent 025a11f397
commit cfe57af3b3
4 changed files with 74 additions and 2 deletions

13
condition.rb Normal file
View File

@ -0,0 +1,13 @@
class Condition
attr_accessor :name, :rules_text, :beat, :resolution, :persistent, :authors, :possible_sources
def initialize(name:, rules_text:, beat: "n/a", resolution:, persistent: false, authors:, possible_sources: nil)
@name = name
@rules_text = rules_text
@beat = beat
@resolution = resolution
@persistent = persistent
@authors = authors
@possible_sources = possible_sources
end
end

16
conditions.rb Normal file
View File

@ -0,0 +1,16 @@
class Condition
def self.conditions
conditions = []
conditions << Condition.new(
:name => "Vicarious Story",
:rules_text => "Your character shares experiences with another character on an ongoing basis. This Condition is usually inflicted on someone for whom another person wants to watch a life event unfold, such as a marriage/divorce, a First Change, a pregnancy, or an Awakening. Both the person who is being monitored and the person doing the vicarious viewing have this Condition, and if it is resolved on one party, it resolves on both.\n\nExperiences that are directly pertinent to the life event deliver sensory visions to the viewer. These visions might be shared dreams with the person being monitored, but might also be feeling a baby's first kick against the womb's walls or looking in a mirror and seeing a Wolf-Blood's teeth growing sharper. The exact nature of these details is up to Storyteller discretion, but pertinent details should not be withheld. Experiences that are not pertinent are completely omitted. Vicariously watching a person's Awakening skips scenes where the target spills coffee on their TPS reports.\n\nThese visions impose the Stunned Tilt on the one vicariously watching for a turn, but since these visions are so transient, it is not enough to interrupt a supernatural ritual or an extended action, but can be extremely inconvenient in time-sensitive circumstances such as combat.",
:resolution => "The life experience ends. The Awakening or First Change terminates. The child is born. The marital vows are complete or the divorce finalized.",
:beat => "The one vicariously viewing loses an action during combat or some similarly fast-paced situation.",
:authors => ["NEETzsche"]
)
conditions
end
end

View File

@ -3,6 +3,10 @@ require "pry"
require_relative "spell" require_relative "spell"
require_relative "spells" require_relative "spells"
require_relative "condition"
require_relative "conditions"
require_relative "primitive_adds" require_relative "primitive_adds"
puts "Shards of Power PDF generator" puts "Shards of Power PDF generator"
@ -12,7 +16,7 @@ class ShardsOfPower
FONT_SIZE_SUBSECTION = 18 FONT_SIZE_SUBSECTION = 18
FONT_SIZE_BODY = 10 FONT_SIZE_BODY = 10
attr_accessor :pdf, :number_name, :chapter_name, :chapter_title, :section_name, :spells attr_accessor :pdf, :number_name, :chapter_name, :chapter_title, :section_name, :spells, :conditions
def start_chapter(num, name) def start_chapter(num, name)
@number_name = num @number_name = num
@ -88,6 +92,9 @@ class ShardsOfPower
def generate def generate
puts "Parsing spells..." puts "Parsing spells..."
@spells = Spell.spells @spells = Spell.spells
@conditions = Condition.conditions
@conditions.sort_by(&:name)
puts "Creating PDF object..." puts "Creating PDF object..."
@pdf = Prawn::Document.new(:margin => 0) @pdf = Prawn::Document.new(:margin => 0)
@ -143,7 +150,7 @@ class ShardsOfPower
start_section "Chapters" start_section "Chapters"
pdf.text "There are multiple chapters in this book. Each of them covers a specific set of topics.\n\n<b>Chapter One</b> is ithe Introduction. It is what you are reading now. It gives the mission statement, the credits, and a few other key details before you get into the spells and the Conditions.\n\n<b>Chapter Two</b> is the megagrimoire. It is a grimoire of grimoires, much like the book that White Wolf released when they still called themselves that, and is a combined set of spells that the players of this community have mutually agreed are at least somewhat reasonable. Many of us helped each other write these spells. All of their names will be listed in them, alphabetically.", :inline_format => true pdf.text "There are multiple chapters in this book. Each of them covers a specific set of topics.\n\n<b>Chapter One</b> is ithe Introduction. It is what you are reading now. It gives the mission statement, the credits, and a few other key details before you get into the spells and the Conditions.\n\n<b>Chapter Two</b> is the megagrimoire. It is a grimoire of grimoires, much like the book that White Wolf released when they still called themselves that, and is a combined set of spells that the players of this community have mutually agreed are at least somewhat reasonable. Many of us helped each other write these spells. All of their names will be listed in them, alphabetically.\n\n<b>Chapter Three: Conditions & Tilts</b> discusses new Conditions and Tilts that can be imposed by spells, or by other means, such as dramatic failures.", :inline_format => true
start_section "Credits" start_section "Credits"
@ -241,6 +248,31 @@ class ShardsOfPower
pdf.start_new_page pdf.start_new_page
end end
start_chapter "Three", "Conditions & Tilts"
start_section "Conditions"
puts "Compiling Conditions..."
pdf.column_box([0, pdf.cursor], :columns => 2, :width => pdf.bounds.width) do
conditions.each do |condition|
puts "\tCompiling #{condition.name}..."
pdf.outline.add_subsection_to("Conditions") do
@pdf.outline.section condition.name, :destination => @pdf.page_number
end
condition_ary = [{:text => condition.name, :font => "Lilith", :color => "004E6D", :size => FONT_SIZE_SUBSECTION}]
pdf.formatted_text condition_ary
pdf.text condition.rules_text
pdf.text "<b>Possible Sources:</b> #{condition.possible_sources}", :inline_format => true if condition.possible_sources
pdf.text "<b>Resolution:</b> #{condition.resolution}", :inline_format => true
pdf.text "<b>Beat:</b> #{condition.beat}", :inline_format => true
pdf.text "<b>#{condition.authors.size > 1 ? "Authors" : "Author"}:</b> #{condition.authors.to_list}", :inline_format => true
end
end
pdf.render_file("shards_of_power.pdf") pdf.render_file("shards_of_power.pdf")
end end
end end

View File

@ -1057,6 +1057,17 @@ class Spell
:rules_text => "Sometimes a willworker needs just to make sure that a certain object meets no obstacles on its way to its destination. Even an Apprentice of Fate may bless the chosen object in this way, with a little knowledge of Space added. This spell requires a sympathetic connection and \"links\" the target of spell with it. If the target is sent to a person, it will automatically bypass all mundane options for the Duration of the spell. Supernatural attempts to prevent the meeting provoke a Clash of Wills. If Unerring Delivery is cast on a person, then that person gains Potency to all attempts to find the \"linked\" object/person." :rules_text => "Sometimes a willworker needs just to make sure that a certain object meets no obstacles on its way to its destination. Even an Apprentice of Fate may bless the chosen object in this way, with a little knowledge of Space added. This spell requires a sympathetic connection and \"links\" the target of spell with it. If the target is sent to a person, it will automatically bypass all mundane options for the Duration of the spell. Supernatural attempts to prevent the meeting provoke a Clash of Wills. If Unerring Delivery is cast on a person, then that person gains Potency to all attempts to find the \"linked\" object/person."
) )
spells << Spell.new(
:name => "Nuzusul Monitor",
:life => 1,
:spirit => 1,
:practice => "Unveiling",
:primary_factor => "Duration",
:withstand => "Composure",
:suggested_rote_skills => ["Occult", "Empathy", "Survival"],
:authors => ["NEETzsche"],
:rules_text => "The willworker applies the Vicarious Story Condition on a nuzusul. He watches their First Change."
)
# TESTS # TESTS