diff --git a/merit.rb b/merit.rb new file mode 100644 index 0000000..d2fa489 --- /dev/null +++ b/merit.rb @@ -0,0 +1,68 @@ +class Merit + attr_accessor :name, + :prerequisites, + :adjectives, + :dot_ratings, + :rules_text, + :ranks, + :pdf + + attr_accessor :authors + + def initialize(name:, prerequisites: nil, adjectives: [], dot_ratings: [], rules_text:, ranks: nil, pdf:) + @name = name + @prerequisites = prerequisites + @adjectives = adjectives + @dot_ratings = dot_ratings + @rules_text = rules_text + @ranks = ranks + @pdf = pdf + + + @dot_ratings = @dot_ratings.arrayify + @prerequisites = @prerequisites.arrayify + @adjectives = @adjectives.arrayify + end + + def render + merit_ary = [{:text => "#{name} (", :font => "Lilith", :color => "000000", :size => Awakened2069::FONT_SIZE_SUBSECTION}] + + previous = false + + dot_ratings.each do |dr| + merit_ary << {:text => ", ", :font => "Lilith", :color => "000000", :size => Awakened2069::FONT_SIZE_SUBSECTION} if previous + previous = true + if dr.class == Range + merit_ary << {:text => dr.min.to_dots, :color => "000000", :size => Awakened2069::FONT_SIZE_SUBSECTION, :character_spacing => -5} + if dr.max < Float::INFINITY + merit_ary << {:text => " to ", :color => "000000", :font => "Lilith", :size => Awakened2069::FONT_SIZE_SUBSECTION} + merit_ary << {:text => dr.max.to_dots, :color => "000000", :size => Awakened2069::FONT_SIZE_SUBSECTION, :character_spacing => -5} + else + merit_ary << {:text => "+", :color => "000000", :font => "Lilith", :size => Awakened2069::FONT_SIZE_SUBSECTION} + end + elsif dr.class == Integer + merit_ary << {:text => dr.to_dots, :color => "000000", :size => Awakened2069::FONT_SIZE_SUBSECTION, :character_spacing => -5} + end + end + + adjectives.each do |adj| + merit_ary << {:text => ", #{adj}", :color => "000000", :font => "Lilith", :size => Awakened2069::FONT_SIZE_SUBSECTION} + end + + merit_ary << {:text => ")", :color => "000000", :font => "Lilith", :size => Awakened2069::FONT_SIZE_SUBSECTION} + + pdf.group do |g| + g.font_size Awakened2069::FONT_SIZE_BODY + g.formatted_text merit_ary, :indent_paragraphs => Awakened2069::INDENT_SIZE + + if prerequisites.size >= 1 + prerequisites_text = prerequisites.join(", ") + g.text "#{prerequisites.size == 1 ? "Prerequisite" : "Prerequisites"}: #{prerequisites_text}", :inline_format => true, :indent_paragraphs => Awakened2069::INDENT_SIZE + end + + g.text "Effect: #{rules_text}", :inline_format => true, :indent_paragraphs => Awakened2069::INDENT_SIZE + end + + self + end +end \ No newline at end of file diff --git a/merits.rb b/merits.rb new file mode 100644 index 0000000..c9186b1 --- /dev/null +++ b/merits.rb @@ -0,0 +1,62 @@ +class Merit + def self.merits(pdf) + merits = [] + merits << Merit.new( + :name => "Cybernetic Permanence", + :dot_ratings => (1..5), + :prerequisites => "Free Council Status #{1.to_dots} to #{5.to_dots}", + :adjectives => "Order", + :rules_text => "While any Mage can create some kind of enhanced cybernetic parts for themselves, they are all beyond the realm of belief for most people. They create Dissonance. They count against a willworker's maximum spell count or must be relinquished to avoid this. They can be dispelled in any case. Whatever the case may be, they aren't really a part of the world. They haven't fully overcome the Lie. They're superimposed upon the Fallen World by the Supernal, but they aren't really part of it.\nBy spending a point of Willpower, the Mage can render a spell that creates a cybernetic or similarly transhuman effect Lasting, as long as he is the one who cast that spell. By spending a Willpower dot, he can render another willworker's spell Lasting instead. The spell is no longer a superimposition, but an actual part of the Fallen World.\nThis Merit can only be used on spells whose highest Arcanum dot rating are at or below this Merit. This Merit's dot rating cannot exceed the person's status in the Free Council.", + :pdf => pdf + ) + + merits << Merit.new( + :name => "Paradox Resistant", + :dot_ratings => [1,3,5], + :prerequisites => "Silver Ladder Status #{1.to_dots}, #{3.to_dots}, or #{5.to_dots}", + :adjectives => "Order", + :rules_text => "The Silver Ladder scoffs at the idea that you canb reach too far. They've made an ideology out of, in some ways. There is clearly more to their thinking than this, but it's definitely something that comes to the fore quite often. Some of them have honed their skills enough for this thinking to materialize in a way that other Mages just can't compare.\nAt one dot, remove one success from every Paradox roll. At three dots, remove two successes from every Paradox roll. At five dots, remove three successes from every Paradox roll.\nThis Merit's rating cannot exceed the dot rating of a person's Silver Ladder status.", + :pdf => pdf + ) + + merits << Merit.new( + :name => "Ex Machina", + :dot_ratings => 2, + :prerequisites => "Techne #{2.to_dots}", + :adjectives => "Order", + :rules_text => "You have poured your heart and soul into your craft, making it a core part of your magical identity and style. As long as you have worked with and on a specific expression of your Art for at least a story, you can use it as an Order Yantra with a value equal to its hlf of its Equipment bonus rounded up. This bonus cannot exceed five. (This Merit was written by Altasaire)", + :pdf => pdf + ) + + merits << Merit.new( + :name => "Ward of the Forbidden", + :dot_ratings => (1..5), + :prerequisites => "Guardians of the Veil Status #{1.to_dots} to #{5.to_dots}", + :adjectives => "Order", + :rules_text => "The Guardians no longer just protect the Veil from Sleepers, but they now also protect Sleepers from the Exarchs and other such malignant supernatural entities. This has become one of their core Exoteric properties, and this in no small part is what makes them worth keeping around to the other Pentacle Orders.\nOnce per Chapter, the willworker who has this Merit may bestow the Occultation Merit at a dot rating equal to this Merit's onto another willworker for an amount of time based on his Gnosis.\nOne Gnosis offers the Merit for one day. Two Gnosis offers the Merit for one week. Three Gnosis offers it for a month. Four Gnosis offers it for a full year. Five Gnosis and above offers the Merit for an entire decade.\nIf they already have the Occultation Merit, add the dot rating of Ward of the Forbidden to it instead. Normally, one can only have an Occultation Merit rating at up to three, but this one allows the beneficiary of this to it to go above that.", + :pdf => pdf + ) + + + merits << Merit.new( + :name => "Adamant Hand", + :dot_ratings => (1..5), + :prerequisites => ["Adamantine Arrow Status #{1.to_dots} to #{5.to_dots}", "Brawl, Firearms or Weaponry at #{3.to_dots}"], + :adjectives => ["Order", "Style", "Replacement / House Rule"], + :rules_text => "Your character has studied extensively in the Adamantine Arrow martial arts. This allows her to use combat techniques as Yantras. When taking this Merit, choose Athletics, Weaponry, or Brawl, which your character must have three or more dots in. You may purchase additional skills as two-dot Merits. The dot rating of this Merit cannot exceed the user's Status in the Adamantine Arrow.\nPractical Training (#{1.to_dots}): Your character may use her chosen Skill in combat as a reflexive Yantra, adding dice to a spell cast on subsequent turns.\nMuscle Memory (#{2.to_dots}): Your character may use her chosen skill as a reflexive Yantra on any spell cast reflexively in the same turn as the combat action.\nSpecialist Training (#{3.to_dots}): If your character possesses an applicable specialty in their chosen skill, the Yantra bonus it provides increases from +1 to +2.\nUnity (#{4.to_dots}): The Mage’s skill and mystic power become truly one. At this level of proficiency, she may, by spending a point of Willpower and two Reach, reflexively cast spells to enhance an action undertaken with her chosen skill, even if that spell would not normally be reflexive. Effectively, she may lash out with body and magic as one, performing an instant action that combines a mundane attack and a spell action. Normally, the spells that qualify for this enhance the Arrow or harm the target of the mundane attack in some way.\nThe Adamant Way (#{5.to_dots}): Internalizing the lessons of the Bladeless Sword, the masters of the Adamantine Hand become deceptively outwardly complacent. By spending a point of both Mana and Willpower before attacking, a master of Adamantine Hand may make any attack (including harmful spells) they want to employ mundanely imperceptible. For the world at large (and more importantly, for the Abyssal shard inside Sleeper onlookers) the harm appears to occur suddenly and without apparent cause, obviating the automatic +2 Paradox dice from Sleeper onlookers. Active Mage Sight and similar powers let one see such an attack normally.", + :pdf => pdf + ) + + merits << Merit.new( + :name => "Supernal Textbook", + :dot_ratings => 3, + :prerequisites => ["Mysterium Status #{3.to_dots}", "High Speech #{1.to_dots}"], + :adjectives => ["Order"], + :rules_text => "Mystagogues spend so much time in libraries for a reason: it's because the books contain information that is actually valuable. Once per chapter, if she gained an Arcane Beat through first-hand experience, she can inscribe one of her grimoires, or a similar magical tome, with that experience. Others may read this document and gain the Arcane Beat that the willworker gained; they can only use a Supernal Textbook once per chapter, as the Supernal mind can be boosted by second-handy study, but only at a certain pace.\nWhen a person does use one such Supernal Textbook, they get the full anecdote from the writing in addition to its Arcane Beat, and the possibility of learning the Arcane Beat a second time through first-hand experience is eliminated. If the Storyteller determines that the person reading the Supernal Textbook has already had a comparable experience, they gain no Arcane Beat from it.", + :pdf => pdf + ) + merits.sort_by! {|m| m.name } + + merits + end +end \ No newline at end of file diff --git a/primitive_adds.rb b/primitive_adds.rb new file mode 100644 index 0000000..0af7620 --- /dev/null +++ b/primitive_adds.rb @@ -0,0 +1,59 @@ +class String + PUNCTUATION_MARKS = [".", "!", "?"] + def titleize + gsub(/\w+/i) do |match| + ret = match.downcase + ret[0] = ret[0].upcase + ret + end + end + + def titleize! + replace titleize + end + + def punctuated? + PUNCTUATION_MARKS.include?(self[-1]) + end + + def unpunctuated? + !punctuated? + end +end + +class Integer + def to_dots + "•" * self + end +end + +class Object + def arrayify + [self] + end +end + +class Array + def arrayify + self + end + + def to_list(separator: nil) + separator = "and" if separator.nil? + if self.length == 0 + nil + elsif self.length == 1 + self.first + elsif self.length == 2 + "#{self.first} #{separator} #{self.last}" + else + ret = clone + ret[ret.length - 1] = "#{separator} #{ret[ret.length - 1]}" + ret.join(", ") + end + end + + def to_arcanum_with_dots + "#{self[0].to_s.titleize} #{self[1].to_dots}" + end +end \ No newline at end of file diff --git a/spell.rb b/spell.rb new file mode 100644 index 0000000..4247183 --- /dev/null +++ b/spell.rb @@ -0,0 +1,83 @@ +class Spell + ARCANA = [:death, :fate, :forces, :life, :matter, :mind, :prime, :space, :spirit, :time] + RANKS = ["Initiate", "Apprentice", "Disciple", "Adept", "Master"] + ARCANA.each do |arcanum| + attr_accessor arcanum + end + + attr_accessor :name, + :practice, + :primary_factor, + :withstand, + :suggested_rote_skills, + :reaches, + :adds, + :rules_text, + :cost + + attr_accessor :authors + + def initialize( + death: 0, + fate: 0, + forces: 0, + life: 0, + matter: 0, + mind: 0, + prime: 0, + space: 0, + spirit: 0, + time: 0, + name:, + practice:, + primary_factor:, + withstand: nil, + suggested_rote_skills:, + reaches: [], + rules_text:, + authors:, + adds: [], + cost: nil) + + @death = death + @fate = fate + @forces = forces + @life = life + @matter = matter + @mind = mind + @prime = prime + @space = space + @spirit = spirit + @time = time + @name = name + @practice = practice + @primary_factor = primary_factor + @withstand = withstand + @suggested_rote_skills = suggested_rote_skills + @reaches = reaches + @rules_text = rules_text + @authors = authors + @adds = adds + @cost = cost + end + + def primary_arcanum + ARCANA.max { |arcanum1, arcanum2| self.send(arcanum1) <=> self.send(arcanum2) } + end + + def full_title + "#{name} (#{arcana_with_dots.join(', ')})" + end + + def arcana + ARCANA.select { |arcanum| self.send(arcanum) > 0} + end + + def arcana_with_dots + arcana.collect { |arcanum| arcanum_with_dots(arcanum) } + end + + def arcanum_with_dots(arcanum) + [arcanum, self.send(arcanum)].to_arcanum_with_dots + end +end \ No newline at end of file diff --git a/spells.rb b/spells.rb new file mode 100644 index 0000000..04599a1 --- /dev/null +++ b/spells.rb @@ -0,0 +1,1231 @@ +class Spell + def self.spells + spells = [] + + spells << Spell.new( + :name => "Marionette", + :life => 2, + :practice => "Ruling", + :primary_factor => "Duration", + :withstand => "Resolve", + :suggested_rote_skills => ["Medicine", "Athletics", "Expression"], + :authors => ["Dark Archon"], + :rules_text => "The Shaman can control the body of a mundane living thing. At the base level for the Duration of the spell the shaman can only command base life processes such as sleep, hunger, sweat, lacrimation, etc. Doing so may be obvious magic or an Act of Hubris depending upon the situation.", + :reaches => [ + [1, "Marionette can hijack living supernatural creatures."], + [2, "The shaman takes over direct control over the muscles and nerves of a life form, forcing it to perform whatever physical tasks the Shaman desires for the Duration. If conscious, the subject is fully aware of the fact that their body is acting outside of their control. This may cause Dissonance if the subject is a Sleeper. The willworker cannot have the target perform Social or Mental tasks."] + ] + ) + + spells << Spell.new( + :name => "It Takes One To Know One", + :death => 1, + :practice => "Unveiling", + :primary_factor => "Duration", + :suggested_rote_skills => ["Medicine", "Survival", "Empathy"], + :authors => ["Dark Archon"], + :rules_text => "Having visited or gazed upon Stygia, Moroi have the most death-like experience outside of actually dying. Being experienced with death and transition, they know how to find the marks that death leaves. For the spell's duration, the caster can measure the amount of contact with the death the target has with a glance. Most people have only a very minor death aura, but a veteran coroner's aura could be startling.", + :reaches => [[1, "The caster can distinguish between those who witnessed death and those who have caused it directly. She can also accurately guess how many people have been killed by the target."]] + ) + + spells << Spell.new( + :name => "Witch Razor", + :forces => 3, + :practice => "Weaving", + :primary_factor => "Potency", + :suggested_rote_skills => ["Weaponry", "Crafts", "Occult"], + :authors => ["Altasaire"], + :rules_text => "The Mage brings forth a melee weapon of pure telekinetic force. The spell creates a simple weapon with no moving parts made of pure expression of crushing or shearing force, shining softly, sketched out in the air by the Mage’s will. Its equipment bonus is equal to Potency (exceeding 5 takes a point of Mana) and it deals bashing damage, because it is too sharp to actually sever – flesh cut just largely recoheres, leaving hair-thin red lines.", + :reaches => [ + [1, "The weapon may contain simple moving parts (e.g. flail or three section staff)."], + [1, "If the weapon deals damage to a living target, it applies an instance of the Bleeding Tilt upon the target."], + [1, "The weapon ignores the Durability of mundane objects."], + [1, "The weapon is transparent and quiet. Mundane means of seeing or hearing it automatically fail, but supernatural ones do not provoke a Clash of Wills."] + ] + + ) + + spells << Spell.new( + :name => "Grim Grinning Ghost", + :death => 3, + :practice => "Perfecting", + :primary_factor => "Potency", + :withstand => "Rank", + :suggested_rote_skills => ["Medicine", "Crafts", "Brawl"], + :authors => ["Altasaire"], + :rules_text => "Older and more traumatic ghosts often warp with time, making the corpus-based implements of their death and weapons they possess more prominent and terrifying. Fingers become claws, teeth become fangs, and threflection of a murdered serial killer’s blade becomes vicious and sharp.\n\nThis spell mimics and bolsters this facet of the ghost-existence, granting it up to Potency extra points of damage rating for its natural attacks for the Duration of the spell.", + :reaches => [ + [1, "The Mage adds an additional tag to the ghost's weapon that is fitting to the character of the ghost; a dead bouncer might gain the Stun tag, while a pedophile shade might gain Grapple."], + [1, "The ghost enjoys 9-again on natural attacks."] + ] + + ) + + spells << Spell.new( + :name => "Longer Leash", + :death => 3, + :practice => "Perfecting", + :primary_factor => "Duration", + :withstand => "Rank", + :suggested_rote_skills => ["Crafts", "Persuasion", "Occult"], + :authors => ["Altasaire", "NEETzsche"], + :rules_text => "This spell multiplies the distance a ghost may stray from its Anchor by Potency + 1." + + ) + + spells << Spell.new( + :name => "Shut Down", + :forces => 2, + :practice => "Ruling", + :primary_factor => "Potency", + :suggested_rote_skills => ["Weaponry", "Expression", "Computer"], + :authors => ["Altasaire", "NEETzsche"], + :rules_text => "This disables a specific targeted electronic device, or all electronic devices within an area of effect. The Scale factor determines how many specific devices may be disabled, or how wide the area of effect is." + ) + + spells << Spell.new( + :name => "Overclock", + :forces => 3, + :practice => "Perfecting", + :primary_factor => "Potency", + :suggested_rote_skills => ["Computer", "Crafts", "Intimidation"], + :authors => ["Altasaire", "NEETzsche"], + :rules_text => "Making the silicon heart dance to the tune of the divine fire within, the Mage invigorates the calculating power of a given device. Mechanically, this is represented as improving the equipment bonus of the device by one per Potency.", + :reaches => [ + [1, "The Mage also expands the RAM or cache memory, giving it the 9-Again property in addition to its equipment bonus."], + [2, "The spell can affect quantum computers and other calculating things of deviant science and hypertech."] + ] + ) + + spells << Spell.new( + :name => "Invoke Doom", + :fate => 1, + :practice => "Compelling", + :primary_factor => "Duration", + :withstand => "Resolve", + :suggested_rote_skills => ["Crafts", "Expression", "Intimidation"], + :authors => ["Altasaire"], + :rules_text => "The fates of some individuals recoil and tear before some things, and this spell forces it to happen in a clear manner.\n\nThis spell forces a person with Destiny to avoid their Doom even more fastidiously than normal. The Destined must spend a point of Willpower to even come within the area of influence of its Doom (described by the Area factor of the spell), and cannot touch it at all. If the fated person is already within the proscribed area and fails the roll, they must flee immediately." + ) + + spells << Spell.new( + :name => "Cliche-Defying Contempt Aegis", + :fate => 2, + :practice => "Shielding", + :primary_factor => "Duration", + :suggested_rote_skills => ["Academics", "Brawl", "Intimidation"], + :authors => ["Altasaire"], + :rules_text => "The Mage exudes disgust at repeated narrative, denying the majesty of recurring themes and utterly ignoring what he finds distasteful.\n\nThe Mage may employ the aegis to shield against repetitive actions. The same emotional structure, weapon, or event unfolding again during the Duration of this spell is violently repelled – mundane events of this sort levelled at the target outright fail, whereas mystic ones force a Clash of Wills." + ) + + spells << Spell.new( + :name => "Empty Sapphire Mirror / Empty Ruby Mirror", + :mind => 2, + :practice => "Shielding", + :primary_factor => "Duration", + :withstand => "Composure", + :suggested_rote_skills => ["Academics", "Athletics", "Animal Ken"], + :authors => ["Altasaire"], + :rules_text => "The heart and mind of the subject glitters softly in the void of their psyche akin to unfeeling gems. For the duration of the spell, any mundane attempt to appeal to the Mage’s emotions (Sapphire) or reason (Ruby) automatically fails. Mystically-backed ones force a Clash of Wills." + ) + + + spells << Spell.new( + :name => "Shun The Smiling Lady", + :mind => 2, + :practice => "Veiling", + :primary_factor => "Duration", + :withstand => "Composure", + :suggested_rote_skills => ["Subterfuge", "Streetwise", "Socialize"], + :authors => ["Altasaire", "NEETzsche"], + :rules_text => "Love is like an ending, no more keenly felt than when it is gone. This spell strikes a target’s name from the rolls of love, veiling any romantic feelings or approaches from his mind. This spell can also be used to veil other emotional states such as anger or fear. Mundane efforts to pierce the veil fail automatically, while supernatural ones provoke a Clash of Wills." + ) + + spells << Spell.new( + :name => "Stubborn God-Beast Indulgence / The Snake Within", + :mind => 3, + :practice => "Perfecting", + :primary_factor => "Duration", + :withstand => "Composure", + :suggested_rote_skills => ["Politics", "Streetwise", "Empathy"], + :authors => ["Altasaire"], + :rules_text => "The next time during this spell's duration that its subject would recover Willpower from indulging their Vice, they recover a number of points equal to the spell's Potency, instead of the usual one. If this value exceeds their Resolve, they will develop a Condition related to the rush of the experience, such as Addicted, Guilty, or Obsession.", + :reaches => [ + [1, "For one Mana, the subject may recover Willpower from their vice an additional time during the same scene."] + ] + ) + + spells << Spell.new( + :name => "Stoke the Flame", + :mind => 3, + :practice => "Perfecting", + :primary_factor => "Potency", + :suggested_rote_skills => ["Academics", "Medicine", "Survival"], + :authors => ["Altasaire"], + :rules_text => "Basking in the fires of their Animus and the cool, unstoppable power of their Gnosis, the Mage is reinvigorated. He regains a point of Willpower.", + :reaches => [ + [2, "Drawing deeper, more greedily, the Mage emerges a temporarily more perfect and mentally rarified being. They regain, instead, points of Willpower equal to the spell's Potency."] + ] + ) + + + spells << Spell.new( + :name => "Hyperfocus", + :mind => 3, + :practice => "Perfecting", + :primary_factor => "Potency", + :withstand => "Composure", + :suggested_rote_skills => ["Academics", "Medicine", "Survival"], + :authors => ["Altasaire"], + :rules_text => "The Mage launches their mind into a state of intense concentration, allowing them to keep track of difficult tasks far beyond what is possible for Sleepers. For each level of Potency, the Mage may exceed the normal number of iterations in extended actions by one.", + :reaches => [ + [1, "The heightened focus and clarity, combined with divergent, enhanced thinking, open up thought pathways to quick decisions and better choices. For the Duration, the Mage gains the effects of the Good Time Management merit."] + ] + ) + + spells << Spell.new( + :name => "Self-As-Goal Redefinition", + :mind => 3, + :practice => "Perfecting", + :primary_factor => "Potency", + :withstand => "Composure", + :suggested_rote_skills => ["Academics", "Medicine", "Survival"], + :authors => ["Altasaire"], + :rules_text => "Language shapes thought, and thought shapes action. Thus does the Mage whisper proper structure into her half-formed mind.This spell gives the Mage, for the Duration, another Aspiration slot, giving her soul the capacity to encompass more things and particulars of the world.", + :adds => [ + {:arcana => { :prime => 2 }, :effect => "For +1 Reach, the Mage may adopt another Obsession instead."} + ] + ) + + spells << Spell.new( + :name => "Pyretic Will-Crushing Song", + :mind => 3, + :practice => "Fraying", + :primary_factor => "Potency", + :withstand => "Resolve", + :suggested_rote_skills => ["Expression", "Intimidation", "Medicine"], + :authors => ["Altasaire"], + :rules_text => "Twisting a burning multifaceted song into the core of the opponent's mind, the Mage attacks their willpower reserves. This spell removes a Willpower point from the target entity's pool per Potency.", + :reaches => [ + [1, "The song is sinister and vile. The caster may apply the Shaken or Spooked Condition to the target of the spell."] + ] + ) + + spells << Spell.new( + :name => "Creation-Carving Blow", + :space => 1, + :practice => "Knowing", + :primary_factor => "Potency", + :suggested_rote_skills => ["Athletics", "Brawl", "Weaponry"], + :authors => ["Altasaire"], + :rules_text => "Space is more flexible than many believe. By subtly observing the laws of space around her, the Mage allows her blows to come from angles which are devilishly hard to parry. If employing the ‘Specified Targets’ rule, she may ignore an amount of attack penalties equal to Potency." + ) + + spells << Spell.new( + :name => "Celestial Atlas", + :space => 1, + :practice => "Knowing", + :primary_factor => "Duration", + :suggested_rote_skills => ["Science", "Occult", "Academics"], + :authors => ["Altasaire"], + :rules_text => "The Mage is aware of the direction and his relative position to visible celestial bodies.", + :reaches => [ + [1, "The Mage is likewise aware of objects too dim to be seen to the naked eye."] + ], + :adds => [ + {:arcana => { :forces => 1 }, :effect => "This spell can be used during the day, and in spite of light pollution."}, + {:arcana => { :time => 1 }, :effect => "The Mage also knows the age of the light from different celestial sources."} + ] + ) + + spells << Spell.new( + :name => "Iron Chains", + :space => 2, + :practice => "Shielding", + :primary_factor => "Duration", + :suggested_rote_skills => ["Socialize", "Politics", "Empathy"], + :authors => ["Altasaire", "NEETzsche"], + :rules_text => "This spell targets a sympathetic connection. As long as the spell endures, this link cannot be altered in strength or quality by mundane events: he'll remain in the friend zone, she'll never Manage to get a divorce, this kid will never get bored of his favorite toy. Alternatively, this spell can be used to prevent a sympathetic connection from forming in the first place. Supernatural attempts to alter the sympathetic connection provoke a Clash of Wills." + ) + + spells << Spell.new( + :name => "Motion Lock", + :space => 2, + :practice => "Shielding", + :primary_factor => "Duration", + :suggested_rote_skills => ["Science", "Brawl", "Academics"], + :authors => ["Altasaire"], + :rules_text => "The Mage shields a thing’s position, making it locked relative to a given reference frame, safe from outside interference. Mundane attempts to shift the thing automatically fail, even if it is damaged in the process. Mystical ones provoke a Clash of Wills." + ) + + + spells << Spell.new( + :name => "Tunnel Vision", + :space => 2, + :practice => "Veiling", + :primary_factor => "Duration", + :suggested_rote_skills => ["Science", "Subterfuge", "Stealth"], + :authors => ["Altasaire", "NEETzsche"], + :rules_text => "The Mage warps the lines of the world around their target, letting them look only in the direction or directions allowed by the Mage. From one to up to Potency direction quadrants are allowable for the target to look at, the rest the subject will be unaware of.", + :reaches => [ + [1, "the directions shrink to singular paths, allowing the target view of a single object and nothing else."], + [2, "the world is warped inwards for the target, making them unable to observe anything outside of themselves."] + ] + ) + + spells << Spell.new( + :name => "Accuracy Without Distance", + :space => 3, + :practice => "Weaving", + :primary_factor => "Duration", + :suggested_rote_skills => ["Athletics", "Firearms", "Weaponry"], + :authors => ["Altasaire"], + :rules_text => "Blurring the distinctions between 'far' and 'close', a Mage attacks a target she cannot hope to hit, and impossibly does. For the Duration of the spell a given target is treated as being in point blank range from the Mage. This spell may be combined with the Sympathetic Casting attainment.", + :reaches => [ + [2, "The spell, at this level of exertion, becomes anisotropic — the target is in point blank range from the Mage, but the Mage is in their normal range from the target."] + ] + ) + + spells << Spell.new( + :name => "Pristine Flowers Splashed Red", + :space => 3, + :practice => "Weaving", + :primary_factor => "Duration", + :suggested_rote_skills => ["Athletics", "Occult", "Weaponry"], + :authors => ["Altasaire"], + :rules_text => "The Mage warps space around their subject into the shape of a sublime lotus. The blade that follows through strikes from a side an enemy could never expect, angles impossibly twisted. The subject's quarries lose Defense against the melee attacks of the subject for the Duration of the spell.", + :reaches => [ + [1, "As above, but it also applies to ranged attacks."], + [1, "The subject may employ the short and medium burst actions in melee, as the world twists so that a single thrust or blade arc meets the flesh of the enemy twice, thrice, or more."], + [2, "As above, but the long burst action is, too, available."] + ] + ) + + spells << Spell.new( + :name => "Redefine Positionability", + :space => 4, + :practice => "Patterning", + :primary_factor => "Duration", + :withstand => "Resolve", + :suggested_rote_skills => ["Science", "Occult", "Academics"], + :authors => ["Altasaire"], + :rules_text => "The Mage redefines the “position” quality of a thing, assigning a specific value to it, or excising it from the target’s being. What follows is the target, in principle, not being able to change their position. The phenomenon of “moving”, as in, changing coordinate, or spatial relation to other things, is denied to it." + ) + + spells << Spell.new( + :name => "Fortress of Arrogance", + :prime => 2, + :practice => "Shielding", + :primary_factor => "Duration", + :suggested_rote_skills => ["Expression", "Intimidation", "Occult"], + :authors => ["Altasaire"], + :rules_text => "The Mage wraps the subject in symbol-planes and unassailable slopes, making incoming magic slide right off or ricochet harmlessly. Any external Supernal magical effect incoming at the subject provokes a Clash of Wills." + ) + + spells << Spell.new( + :name => "Ego-Infused Wholeness Embodiment", + :prime => 2, + :practice => "Shielding", + :primary_factor => "Duration", + :suggested_rote_skills => ["Expression", "Athletics", "Occult"], + :authors => ["Altasaire"], + :rules_text => "It is not the place of the Lie to dictate the identity and structure of Truth. Whenever a fully-Abyssal interference effect attempts to alter a target with this spell active, its integrity reasserts itself like an immune system waging war on a plague. Any such attempt to shape her against her will, be it by gulmoth-claw, abyssal Numen, or other vile deviance, provokes a Clash of Wills.", + :reaches => [ + [2, "Half-Lying Abyssal interferences (befouled spells and such) are likewise rejected."] + ] + ) + + spells << Spell.new( + :name => "Ironman", + :time => 2, + :practice => "Shielding", + :primary_factor => "Duration", + :suggested_rote_skills => ["Computer", "Academics", "Athletics"], + :authors => ["Altasaire"], + :rules_text => "For the Duration of the spell, any attempt to move back in time over its area of effect or including its subjects is met by a Clash of Wills." + ) + + spells << Spell.new( + :name => "Time out of Mind", + :time => 3, + :practice => "Weaving", + :primary_factor => "Duration", + :suggested_rote_skills => ["Subterfuge", "Academics", "Larceny"], + :authors => ["Altasaire"], + :rules_text => "Sometimes what you most need is a breather and a moment to think. For the Duration of the spell, the subject may perform any purely mental actions she can imagine. Objectively, this thinking is compressed to a singular moment in time, allowing a Mage to come to conclusions extremely fast. Spells cannot be cast in this period of compressed time.", + :reaches => [ + [1, " Extended actions performed under the auspices of this spell have their iteration durations halved."] + ], + :adds => [ + {:arcana => { :mind => 2 }, :effect => "The Mage may employ mental holograms and nirmitas for the subjective duration of the spell, allowing him to manifest in his mental palace the ethereal versions of any mental equipment he might require during his mental toil with equipment bonuses up to Potency."} + ] + ) + + spells << Spell.new( + :name => "Thousand Buzzing Wasps / Omae Wa Mo Shindeiru", + :time => 3, + :practice => "Perfecting", + :primary_factor => "Duration", + :suggested_rote_skills => ["Brawl", "Athletics", "Weaponry"], + :authors => ["Altasaire"], + :rules_text => "The Mage's body blurs, his fists impossibly fast. For the duration of the spell, the subject may use the short burst and medium burst maneuvers in melee against targets in their reach.", + :reaches => [ + [1, "as above, but the subject may also employ the long burst maneuver."] + ] + ) + + spells << Spell.new( + :name => "Terrifying Argent Witchery", + :time => 3, + :practice => "Fraying", + :primary_factor => "Duration", + :withstand => "Resolve", + :suggested_rote_skills => ["Expression", "Intimidation", "Occult"], + :authors => ["Altasaire"], + :rules_text => "The Mage projects an incessant stream of visions of potential bad futures at their target, showing them all ways they and theirs can come to harm, their works crumble, and their ideas die. The subject of the spell gains the Beaten Down Tilt.", + :reaches => [ + [1, "For the duration of the spell they may not do any actions or spells in the same manner as the spell \"Post-cognition\”."] + ] + ) + + spells << Spell.new( + :name => "Essense Feast", + :spirit => 2, + :practice => "Shielding", + :primary_factor => "Duration", + :suggested_rote_skills => ["Survival", "Empathy", "Occult"], + :authors => ["Altasaire"], + :rules_text => "The Mage protects a spirit from the mutative power of Essence. For the Duration of the spell the subject spirit will not pick up any new traits from the essence it consumes, neither harmful nor beneficial.", + :reaches => [ + [1, "Beneficial traits inside the spirit’s purview and theme are permissible."] + ] + ) + + spells << Spell.new( + :name => "Essense Famine", + :spirit => 2, + :practice => "Veiling", + :primary_factor => "Duration", + :withstand => "Rank", + :suggested_rote_skills => ["Survival", "Empathy", "Occult"], + :authors => ["Altasaire", "NEETzsche"], + :rules_text => "For the Duration of the spell, the afflicted spirit cannot perceive (and thus, willingly consume) sources of Essence external to it and capable of nourishing it. This spell cannot be used on spirits above Rank 5." + ) + + spells << Spell.new( + :name => "Thornwall", + :spirit => 3, + :practice => "Weaving", + :primary_factor => "Potency", + :suggested_rote_skills => ["Survival", "Occult", "Intimidation"], + :authors => ["Altasaire", "NEETzsche"], + :rules_text => "The Mage grows sharp blades and thorns on the Gauntlet, or forces screaming gales to traverse its surface. For the Duration of the spell, anything crossing the Gauntlet suffers the Potency of the spell in bashing damage.", + :adds => [ + {:arcana => { :spirit => 4 }, :effect => "It deals lethal damage instead, or with 1 Mana and a Reach, aggravated damage."}, + {:arcana => { :spirit => 5 }, :effect => "It tears them to shreds, immediately killing them. This is Withstood by either Rank or Stamina."}, + ], + :reaches => [ + [1, "The willworker may create a Key that allows for safe passage to those who possess it."] + ] + ) + + spells << Spell.new( + :name => "Imperfection-Revealing Diagrams", + :matter => 1, + :practice => "Knowing", + :withstand => "Durability", + :primary_factor => "Potency", + :suggested_rote_skills => ["Crafts", "Occult", "Science"], + :authors => ["Altasaire", "NEETzsche"], + :rules_text => "The Mage examines a structure or object and gains an understanding of what can damage or destroy it, and how well. For the Duration of the spell, attacks exploiting that knowledge performed by the target of the spell ignore a number of the object’s Durability levels equal to the spell's Potency." + ) + + + spells << Spell.new( + :name => "Irritate", + :matter => 3, + :practice => "Weaving", + :primary_factor => "Duration", + :suggested_rote_skills => ["Crafts", "Medicine", "Science"], + :authors => ["Altasaire"], + :rules_text => "The Mage affects the air (or another gas), granting it the qualities of a battlefield irritant. The air in the affected area becomes a toxin with Toxicity equal to Potency. People without proper gas masks on suffer the Blinded Tilt while in the area and roll Stamina + Resolve – Toxicity or suffer the Toxicity as a penalty on all actions until they are clear of the area.", + :reaches => [ + [1, "The affected air is particularly dense and is not displaced from the area significantly by winds or movement."], + [1, "The affected air becomes opaque."] + ] + ) + + spells << Spell.new( + :name => "Disperse Wounds", + :death => 3, + :practice => "Perfecting", + :primary_factor => "Potency", + :suggested_rote_skills => ["Survival", "Medicine", "Empathy"], + :authors => ["Dark Archon", "21C Hermit"], + :rules_text => "The necromancer calls forth entropy, but he may unwind it for those he favors. For each level of Potency, the mage may convert one point of lethal damage the subject suffers into two points of bashing damage. This spell does not work against lethal damage upgraded from accumulated bashing damage, including accumulation from this very spell. So, if a subject with 8 levels of Health had suffered 4 lethal damage, this spell may convert them into 1 lethal damage and 6 bashing damage at Potency 3, or 8 bashing damage at Potency 4. If that same subject had suffered 5 lethal damage instead, even at Potency 5 this spell would still leave him at 2 lethal damage and 6 bashing damage.", + :reaches => [ + [1, "The spell instead converts one point of lethal damage into one point of bashing damage per level of Potency."] + ], + :adds => [ + { :arcana => { :life => 2 }, :effect => "The spell also heals any Tilts connected to the Health box affected, even if the box is technically uncleared and thus the Tilt should remain."}, + { :arcana => { :time => 2 }, :effect => "The spell may also heal scars and physical Conditions related to the healed wounds. With the Temporal Sympathy Attainment, the spell may force persistent Conditions caused from past injuries into transient Conditions, so that they naturally heal over time." } + ] + ) + + spells << Spell.new( + :name => "Cursed Wounds", + :death => 3, + :practice => "Perfecting", + :primary_factor => "Potency", + :suggested_rote_skills => ["Survival", "Medicine", "Empathy"], + :authors => ["Dark Archon", "21C Hermit", "NEETzsche"], + :rules_text => "The necromancer coats a weapon with the venom of Death. For a number of attacks equal to Potency, wounds inflicted by the enchanted weapon are unable to be healed by natural healing or mundane medical attention. This includes any wound penalties, Personal Tilts, or Condtions tied to the wound. Supernatural healing works normally.", + :reaches => [ + [1, "The wound gains the resistant property."], + [1, "The weapon, instead of causing wounds that do not heal, inflicts the Agony Tilt instantly."] + ] + ) + + spells << Spell.new( + :name => "Blade of Grass", + :death => 3, + :practice => "Perfecting", + :primary_factor => "Potency", + :suggested_rote_skills => ["Crafts", "Medicine", "Weaponry"], + :authors => ["Dark Archon", "Menace"], + :rules_text => "In the hands of a Disciple of Death, even a blade of grass can become a deadly weapon. The mage improves the abillity to harm others in the targeted item, Perfecting qualities of lethality and rending. This bestows the 8-again quality on all attack roll made with selected item.", + :reaches => [ + [1, "For 1 Mana, all attack rolls made with the selected weapon gain the rote quality instead."] + ] + ) + + spells << Spell.new( + :name => "Reassert Mortality", + :death => 3, + :practice => "Fraying", + :primary_factor => "Potency", + :withstand => "Stamina", + :suggested_rote_skills => ["Intimidation", "Medicine", "Weaponry"], + :authors => ["Dark Archon", "Five Eyes"], + :rules_text => "There are plenty of things in the Fallen who have cheated death and mortality in various ways - vampires live forever, werewolves regenerate their wounds, and so on. But Death can’t be cheated, and neither are Disciples of Death, who are more than able to return things to their natural state. This spell reasserts Death's claim on a subject, overcoming supernatural resilience. For the Duration of the spell, the subject suffers lethal damage from any source that would cause lethal damage to a normal human; a manifested spirit or ambulatory corpse finds that blades and guns are just as fearsome to them as to a flesh-and-blood mortal. This affects a number of injuries equal to the spell's Potency during the course of its Duration.", + :reaches => [ + [2, "All injuries during the spell's Duration, including aggravated ones, are affected."], + [1, "For 1 Mana, the subject will suffer aggravated damage from sources that deal aggravated damage to normal humans."], + [1, "Attacks against the subject gain the armor-piercing quality, rated at the spell's Potency."], + [1, "Any reflexive or instant action taken to heal the subject by supernatural means provokes a Clash of Wills."] + ] + ) + + spells << Spell.new( + :name => "Fate Scan", + :fate => 1, + :practice => "Knowing", + :primary_factor => "Potency", + :withstand => "Composure", + :suggested_rote_skills => ["Empathy", "Investigation", "Occult"], + :authors => ["Dark Archon"], + :rules_text => "The Mage picks a narrative \"area of questioning\", and for each level of Potency the mage learns the most likely thing to happen with a subject in this area, in descending order of likelihood. The Mage doesn't know when or how it is likely to happen, but knows how likely it is.", + :reaches => [ + [1, "The Mage may define one more area of questioning, splitting the Potency between them as they see fit. This Reach can be taken multiple times."], + [1, "The Mage can analyze how target is going to affect other people and their destinies instead."], + [1, "Instead of scrutinizing one subject, mage can give himself insight about destinies of all people in the Scale for the Duration of the spell, seeing how their destinies interconnect and influence one another."] + ] + ) + + spells << Spell.new( + :name => "Dark Warning", + :fate => 1, + :practice => "Unveiling", + :primary_factor => "Duration", + :suggested_rote_skills => ["Empathy", "Investigation", "Occult"], + :authors => ["Dark Archon", "espritdecalmar"], + :rules_text => "Destiny never arrives without a warning - but if it is, mage can arrange for one. When a mage casts this spell, he chooses a destiny (or Destiny) of which he is aware. The spell causes the Fate to manifest one foreshadowing event per dot of Potency of that destiny between the time of casting and when the fated event occurs. For instance, if a Sleeper is destined to get into a car crash, the spell might cause her to see a commercial about auto insurance, or she might drive by the site of a car crash the day before. The effects of this spell are normally minor and subtle, but they can be useful for getting someone to believe in the power of fate and symbolism. Alternatively, the mage might wish to cause foreshadowing to manifest for particularly obscure destinies in order to analyze a mystery from a different point of view.", + :reaches => [ + [1, "The mage chooses exactly how the foreshadowing manifests."] + ] + ) + + spells << Spell.new( + :name => "No Tomorrow", + :fate => 2, + :practice => "Veiling", + :primary_factor => "Potency", + :withstand => "Composure", + :suggested_rote_skills => ["Academics", "Persuasion", "Subterfuge"], + :authors => ["Dark Archon", "Flinty"], + :rules_text => "Every action, even the tiniest movement, has consequences. This spell renders its subject unable to perceive the long-term consequences of an actions he contemplates taking. For example a man on vacation fails to see the damage an affair could have on his marriage.", + :reaches => [ + [1, "The mage may fabricate a false consequence the subject perceives to be the logical outcome of his actions. Said man might be made to think that having an affair be ultimatly benefical for his marriage."], + [2, "For 1 Mana, short term consequences are hidden aswell. The subject can contemplate the act of jumping from a building, but is unable to perceive what a fall from a high place will do to him."] + ] + ) + + spells << Spell.new( + :name => "Miracle of Hephaestus / Tesla's Bright Dream", + :forces => 3, + :practice => "Weaving", + :primary_factor => "Potency", + :suggested_rote_skills => ["Crafts", "Science", "Occult"], + :authors => ["Altasaire"], + :rules_text => "This spell makes it so that non-electromagnetic forces can flow along the same lines and by the same principles as electromagnetic ones. With this spell, one can transfer a measure of kinetic energy along a powerline or send a campfire over WiFi.", + :reaches => [ + [1, "The transfer can bypass symbolic gates and strictures of web-design. One can transfer a punch over the internet, making the kinetic energy of it go through the same pathways the information comprising a web-page or the lines of an IM messenger does."] + ] + ) + + spells << Spell.new( + :name => "Rest Well", + :life => 2, + :practice => "Ruling", + :primary_factor => "Potency", + :suggested_rote_skills => ["Athletics", "Medicine", "Occult"], + :authors => ["Dark Archon", "NEETzsche"], + :rules_text => "The Mage uses this spell to speed up his rest process. The spell's Duration may not terminate before the willworker is done sleeping, and each level of Potency divides time needed to get a full night rest by 2, so Potency 1 gives 4 hours, Potency 2 gives 2 hours, Potency 3 gives 1 hours, Potency 4 gives 30 minutes and Potency 5 gives 15 minutes to get a full night's rest. All Condition and penalties inflicted by lack of rest are removed by the end of said rest. The willworker cannot regain Willpower from this rest like a proper night's sleep would offer him.", + :reaches => [ + [1, "The target may also restore Willpower as if it got a full night's rest."] + ] + ) + + spells << Spell.new( + :name => "False Health", + :life => 2, + :practice => "Veiling", + :primary_factor => "Duration", + :suggested_rote_skills => ["Athletics", "Medicine", "Occult"], + :authors => ["Dark Archon"], + :rules_text => "Hiding your weaknesses is essential to survival, and any Apprentice of Life knows a lot about how to survive. The target’s health seems to be fine, even if it is actually suffering from wounds, diseases or toxins. This spell does nothing to alleviate suffering or stop bleeding, but any mundane attempts to determine hurt automatically fail, and all supernatural ones trigger a Clash of Wills. If the subject contains any foreign substances, like toxins or bullets, those will be detected by mundane means or Matter; Sleepers noticing that will subject spell to Dissonance and have a breaking point." + ) + + spells << Spell.new( + :name => "Brew Potion", + :matter => 3, + :practice => "Perfecting", + :primary_factor => "Duration", + :suggested_rote_skills => ["Crafts", "Survival", "Occult"], + :authors => ["MagicSwordsman"], + :rules_text => "Magical potions and unguents are widely recognized as part of the wizard’s trade. This spell prepares a material compound to hold a Supernal charge. A mage may then cast another spell into the potion, specifically shaping their Imago and spending a point of Mana. The potion may contain up to its Potency in spells, but using the compound triggers all of them. While within the potion, a spell counts against the caster’s spell control, but its Duration is held.\n\nPotions come with certain limitations. Whomever imbibes the potion becomes the subject of its spells, although a cream or oil might be spread or splattered. If Brew Potion’s Duration runs out while it still contains spells, the held spells are lost and the potion visibly spoils.\n\nUsually this spell is cast on a liquid that resonates with the spell effect, but it could also be cast on a piece of fruit to be eaten, a powder to be inhaled, a breakable object to be tossed like a grenade, etc. “Ingredients” act as Sacrament Yantras.", + :reaches => [ + [1, "The mage may add a Key to the activation of the potion. Perhaps it will only work once a certain reagent is mixed in, or it only has an effect on a certain person."], + [1, "The potion’s ingredients lose any effect they may have had on an imbiber; so an Acceleration potion of quicksilver won’t inflict mercury poisoning."], + [1, "The potion may contain multiple doses. If the same spell is cast into it multiple times, each adds an additional use to the potion."] + ] + ) + + spells << Spell.new( + :name => "Transparency", + :matter => 3, + :practice => "Weaving", + :primary_factor => "Duration", + :suggested_rote_skills => ["Crafts", "Stealth", "Subterfuge"], + :authors => ["Dark Archon"], + :rules_text => "One of the best ways to hide something is to make it invisible. This spell makes the matter of object completely transparent. While this does not alter the other properties of the material, objects that require light absorption, such as solar panels, are disabled for the Duration of this spell." + ) + + spells << Spell.new( + :name => "One-Man Forge", + :matter => 3, + :practice => "Weaving", + :primary_factor => "Potency", + :withstand => "Highest Durability of materials used in casting", + :suggested_rote_skills => ["Crafts", "Survival", "Intimidation"], + :authors => ["Dark Archon"], + :rules_text => "Shaping allows mages to mix materials, but they still remain separated at atomic level. To truly break boundaries and become one-man forge, Mage must make a step further. This spell breaks down raw materials in Scale, changing them to liquid and then creating an alloy or compound of those materials, \"mixing\" them on the atomic level. This allows for mage to create any alloy or compound which can be made at present temperature.", + :reaches => [ + [1, "The spellcaster may manipulate the physical and chemical conditions to make any possible alloy that uses the the precursor targets."] + ] + ) + + spells << Spell.new( + :name => "Golden Years, Tarnished Black", + :mind => 3, + :practice => "Fraying", + :primary_factor => "Potency", + :suggested_rote_skills => ["Occult", "Empathy", "Intimidation"], + :authors => ["amechra"], + :rules_text => "Memories are fickle and changeable - exploiting this, the subject has one of their happy memories stripped of all of its positive aspects. They suffer the False Memories (VtR: B&S) condition with regards to that memory.", + :reaches => [ + [1, "You are no longer restricted to only affecting happy memories. When this spell is used to worsen unhappy memories, the subject suffers the Fugue condition with regards to that memory instead."] + ] + ) + + spells << Spell.new( + :name => "Service is Mastery / Power Through Slavery", + :mind => 3, + :practice => "Weaving", + :primary_factor => "Duration", + :suggested_rote_skills => ["Occult", "Empathy", "Intimidation"], + :authors => ["amechra"], + :rules_text => "A distressingly popular spell amongst both the Adamantine Arrow and the Seers of the Throne (though for very different reasons). Upon casting this spell, choose another person to be your target's \"master\" - your target receives Obedience to [master] as a second Vice, and takes a Beat whenever they fulfil that Vice.", + :reaches => [ + [1, "The target may take an Arcane Beat instead of a normal Beat whenever they would fulfil their secondary Vice. They may also treat \"following my master's orders\" as an Oblation."], + [1, "The master you choose may be an organization rather a single person - the target's second Vice becomes Obedience to Members of [Organization Name]."], + [1, "The master you choose gains the benefits of the Loved merit with regards to the Target."] + + ], + :adds => [ + {:arcana => { :prime => 2 }, :effect => "The target does not suffer Breaking Points due to their master's spells - they still suffer from all the other effects of the Sleeping Curse." }, + {:arcana => { :death => 3 }, :effect => "The target suffers from the Soulless condition for the duration of the spell." } + ] + ) + + spells << Spell.new( + :name => "Cassandra's Curse", + :prime => 2, + :practice => "Veiling", + :primary_factor => "Duration", + :suggested_rote_skills => ["Occult", "Empathy", "Intimidation"], + :authors => ["Strill"], + :rules_text => "Just like the prophet who always spoke the truth but was cursed so that no one believed her, the mage conceals all truth the subject speaks. Everyone who listens to her words is left with the impression that she's either lying, ignorant, or confused. If the spell adds a tinge of falsehood to statements that Sleeper witnesses are absolutely certain is true, those Sleepers may suffer Quiescence if they think about the contradiction too much, and spell itself will be hit with Dissonance.", + :reaches => [ + [1, "Listeners perceive the subject to not just be confused or mistaken, but outright lying."], + [1, "The spell affects all forms of communication the subject engages in."], + [1, "The mage can restrict the curse to apply only to particular facts or categories. (e.g. \"My company's illegal financial dealings\", \"The secret tunnels underneath my house\", \"Statements made while performing as a fortune teller\")."] + ] + ) + + spells << Spell.new( + :name => "Liar, Liar", + :prime => 3, + :practice => "Weaving", + :primary_factor => "Duration", + :withstand => "Composure", + :suggested_rote_skills => ["Persuasion", "Brawl", "Intimidation"], + :authors => ["Dark Archon"], + :rules_text => "To speak a lie in the presence of a Prime Apperentice is to affront Truth itself. But Truth can strike back, forcing that person to speak it, no matter how hard or painful it is. The mage renders target unable to speak, write or articulate any falsehood. The target is not forced to speak, yet cannot transfer information it knows not to be true by mundane means; supernatural ones force Clash of Wills. Lies by omission are fine.", + :reaches => [ + [1, "Target is unable to lie by omission either, being forced to speak full truth or be silent."], + [1, "The Mage can allow the target to have some leniency, choosing a topic or situation in which the target can lie without the spell interfering."] + ] + ) + + spells << Spell.new( + :name => "Silent Room", + :prime => 2, + :practice => "Shielding", + :primary_factor => "Duration", + :suggested_rote_skills => ["Occult", "Crafts", "Survival"], + :authors => ["Dark Archon"], + :rules_text => "With this spell, the mage enforces silence and obedience, forcing all magic aside in his domain. For the Duration of the spell, all attempts to use Supernal magic inside the area of effect are Withstood by this spell's Potency. The Mage is subject to the effects of this spell as well.", + :reaches => [ + [1, "Target is unable to lie by omission either, being forced to speak full truth or be silent."], + [1, "Mage may specify one Key, which any mage can incorporate into his casting to avoid having to pass the Withstand."] + ] + ) + + spells << Spell.new( + :name => "Spitting on Heavenly Font", + :prime => 3, + :practice => "Fraying", + :primary_factor => "Duration", + :suggested_rote_skills => ["Larceny", "Occult", "Subterfuge"], + :authors => ["Dark Archon"], + :rules_text => "Sometimes, a mage needs to do the unthinkable and willingly distort existing magic. Disciples of Prime do not have the power to sling spells back across the Abyss, but he has the power to invite the Abyss into the spell, befouling and distorting it by Paradox.\n\nThis spell targets existing spells which are unsafely relinquished and speed up natural processes of Abyssal distortion. During the Duration of the spell, all rolls to distort the spell by the Storyteller have bonus dice equal to this spell's Potency.\n\nUsage of this spell would be definitely considered a Scelesti Practice by most Consilia, and would count as an Act of Hubris.", + :reaches => [ + [1, "For 1 Mana, the Mage rends the spell apart with Paradox, forcing its next Distortion roll to happen immediately."], + [1, "For 1 Mana, the Mage can use this spell against an active or safely relinquished spell, forcing its next Distortion roll to happen immediately. This attempt is Withstood by target spell's Potency."] + ] + ) + + spells << Spell.new( + :name => "Wrestle Out The Keys to Heaven", + :prime => 4, + :practice => "Unraveling", + :primary_factor => "Duration", + :withstand => "Potency of targeted spell", + :suggested_rote_skills => ["Brawl", "Occult", "Larceny"], + :authors => ["Dark Archon"], + :rules_text => "With this spell, an Adept of Prime applies brutal force, tearing down the mystical connection between spell and its creator. This spell forces a Clash of Wills between mage and creator of targeted active spell. If the caster of Wrestle Out The Keys To Heaven wins, the targeted active spell is unsafely relinquished against the will of its creator for the Duration of this spell. If the targeted active spell is cast upon a Scale, then Wrestle Out Keys to Heaven need to cover the same Scale.", + :reaches => [ + [1, "For 1 Mana, the Mage rends the spell apart with Paradox, forcing its next Distortion roll to happen immediately."], + [1, "For 1 Mana, the Mage can use this spell against an active or safely relinquished spell, forcing its next Distortion roll to happen immediately. This attempt is Withstood by target spell's Potency."] + ] + ) + + spells << Spell.new( + :name => "Pass On Greatest Treasure", + :prime => 4, + :practice => "Patterning", + :primary_factor => "Duration", + :withstand => "Resolve", + :suggested_rote_skills => ["Empathy", "Occult", "Persuasion"], + :authors => ["Dark Archon"], + :rules_text => "Sometimes a load is too heavy to carry alone. With this spell, an Adept of Prime can temporarily pass on control of a number of his active spells equal to Pass On Greatest Treasure's Potency without relinquishing them for the Duration of the spell. The should be somebody who is able to carry said spell: a Mage, a willing Sleepwalker, one's Sanctum, a Node or Artifact. The target does not gain control over the passed spells which original caster has, but passed spells count against their Gnosis-derived Reach limits. If target is unwilling, then spell is Withstood with Resolve.", + :reaches => [ + [1, "The target gets the same amount control over each passed spell which the original caster has and may drop or relinquish them safely or unsafely."], + [2, "For 1 Mana, the effect is Lasting and selected spells are transferred permanently to their new owner."] + ] + ) + + spells << Spell.new( + :name => "Thread of Ariadne", + :space => 1, + :practice => "Knowing", + :primary_factor => "Potency", + :withstand => "Sympathy of target", + :suggested_rote_skills => ["Survival", "Occult", "Investigation"], + :authors => ["Dark Archon"], + :rules_text => "The Mage uses his existing sympathetic connection to track the target. For the Duration of the spell, the mage knows the general direction, following which paths he can find toward his intended target.", + :reaches => [ + [1, "The Mage knows not just the general direction, but instinctively knows the best possible path to the target and can follow it for the Duration of the spell."] + ] + ) + + + spells << Spell.new( + :name => "Twist Link", + :space => 3, + :practice => "Weaving", + :primary_factor => "Potency", + :withstand => "Sympathy (connection)", + :suggested_rote_skills => ["Empathy", "Politics", "Subterfuge"], + :authors => ["amechra"], + :rules_text => "Relationships are fragile, weak things - easily twisted and turned and placed on their head. Twist Link allows the mage to redefine the context of a sympathetic link; they could redefine a business rivalry as a childhood friendship, or a pair of lovers as a pair of enemies. The mage only defines the new relationship in general terms - much like creating or destroying a link, this spell doesn't guarantee outcomes or force reactions. This effect is Lasting, but normal interactions can restore the original link context over time. Much like other weaker sympathy-changing magic, Twist Link cannot affect Connected links.", + :reaches => [ + [1, "Place the Embarassing Secret condition regarding the original context of the relationship on the link."], + [1, "Place the Swooning condition on the link."] + ] + ) + + spells << Spell.new( + :name => "Phasing", + :space => 4, + :practice => "Patterning", + :primary_factor => "Duration", + :suggested_rote_skills => ["Science", "Brawl", "Stealth"], + :authors => ["Dark Archon"], + :rules_text => "You are here; but at the same time, you aren't. By carefully manipulating the space your body occupies, you are protected against all physical attacks - they just pass through your body. People are still able to see, hear and smell you; mental and magical attacks work as normal. Liquids and gases don't affect you, but you are still able to be blinded, deafened and so on.", + :reaches => [ + [1, "By passing the light through the body to the other side, you are invisible as well."], + [1, "You can manipulate objects, carry items and physically attack your enemies."], + [1, "Aimed spells won't work on you - enemy needs to attack your Pattern directly to harm you."] + ] + ) + + spells << Spell.new( + :name => "Spirit Invitation", + :spirit => 3, + :practice => "Weaving", + :primary_factor => "Duration", + :suggested_rote_skills => ["Persuasion", "Occult", "Survival"], + :authors => ["Dark Archon"], + :rules_text => "The Shaman opens and closes ways from the Shadow to the material world as he sees fit. At this point, he is not able to bind spirits, but he is able to invite them. This spell creates the Open Condition on a specific Resonance for a target, for the Duration of spell. Unwilling sentient targets Withstand with Resolve.", + :reaches => [ + [1, "Shaman is able to give target universal Open Condition, useable by all spirits."] + ] + ) + + spells << Spell.new( + :name => "Preclude Waning Effect", + :spirit => 3, + :practice => "Perfecting or Fraying", + :primary_factor => "Duration", + :withstand => "Rank", + :suggested_rote_skills => ["Persuasion", "Occult", "Athletics"], + :authors => ["NEETzsche"], + :rules_text => "A spiritual Condition's effects are prolonged past when they would normally expire. As long as the spell remains active, the Condition cannot resolve. For example, a Possessed (Mage: the Awakening, p. 261) entity remains in such a state well past when the scene ends. Mundane attempts to resolve the Condition fail automatically, while supernatural methods to do so provoke a Clash of Wills.", + :adds => [ + { :verb => "Substitute", :arcana => { :fate => 3, :life => 3, :mind => 3}, :separator => "or", :effect => "A blessing or Condition, a Condition imposed on a living entity like a disease, or a Mental Condition persists instead. The Storyteller chooses an appropriate trait to Withstand if the effect being prolonged is negative."} + ] + ) + + spells << Spell.new( + :name => "See The Signs", + :fate => 1, + :practice => "Knowing", + :primary_factor => "Potency", + :withstand => "Composure", + :suggested_rote_skills => ["Persuasion", "Empathy", "Politics"], + :authors => ["Range"], + :rules_text => "This spell allows the Mage to know what Fate has in store for the subject, allowing the Mage to view the subject's Aspirations. This spell reveals a number of Aspirations equal to Potency, in an order determined by the Storyteller." + ) + + spells << Spell.new( + :name => "Sacred Mission", + :prime => 1, + :practice => "Knowing", + :primary_factor => "Potency", + :withstand => "Composure", + :suggested_rote_skills => ["Occult", "Expression", "Politics"], + :authors => ["Range"], + :rules_text => "All Willworkers work to achieve a higher calling, by means of this spell the Mage can learn what Truths the subject is trying to uncover. This spell reveals a number of Obsessions equal to Potency." + ) + + spells << Spell.new( + :name => "Full Night's Rest", + :life => 3, + :practice => "Perfecting", + :primary_factor => "Potency", + :suggested_rote_skills => ["Medicine", "Survival", "Persuasion"], + :authors => ["benisbagina"], + :rules_text => "The spell reproduces the effects of a full night’s rest in the subject, including regaining a point of Willpower if applicable. Each level of Potency instantly removes one level of negative modifier caused by exhaustion." + ) + + spells << Spell.new( + :name => "Bamboo's Vivacity", + :life => 3, + :practice => "Weaving", + :primary_factor => "Duration", + :suggested_rote_skills => ["Science", "Survival", "Crafts"], + :authors => ["benisbagina"], + :rules_text => "This spells allows the Mage to accelerate plants' growth rate to that of the fastest growing plant on earth. This means that they will gain a little under a meter per day in length, and grow to prodigious (although not outright supernatural) thickness. Each cast affects an area corresponding to scale, not a single plant (unless the plant in question is so large as to occupy the entire scale)." + ) + + spells << Spell.new( + :name => "Dog Whistle", + :spirit => 2, + :practice => "Veiling", + :primary_factor => "Potency", + :suggested_rote_skills => ["Subterfuge", "Streetwise", "Politics"], + :authors => ["NEETzsche"], + :rules_text => "The mage says something with a double meaning in the First Tongue. To her intended audience, it means one thing, and to every other entity, it means something entirely different. The audience needs to be a specific entity. Attempts by spirits and other entities to pierce the deception is Withstood by the spell's Potency.", + :reaches => [ + [1, "The caster can specify an entire category of entities as his target audience, like a spirit choir or werewolf Auspice."] + ] + ) + + spells << Spell.new( + :name => "Intense Dream", + :mind => 1, + :practice => "Compelling", + :primary_factor => "Duration", + :suggested_rote_skills => ["Expression", "Persuasion", "Intimidation"], + :authors => ["NEETzsche"], + :rules_text => "The mage compels a sleeping target to begin dreaming, and do so in a vivid and psychologically compelling fashion. The caster does not dictate the content of the dream. To do this, she should cast Dream Reaching (Mage: the Awakening, p. 160); otherwise the Storyteller controls the nature and subject matter of the dream.\n\nIn the state of this intense dream, the subject may experience Breaking Points and collect Beats as though they were awake. The entirety of the dream counts as one scene." + ) + + spells << Spell.new( + :name => "Twilight Object", + :spirit => 3, + :practice => "Weaving", + :primary_factor => "Duration", + :suggested_rote_skills => ["Crafts", "Survival", "Streetwise"], + :authors => ["NEETzsche"], + :rules_text => "The willworker renders an object usable on spiritual entities in Twilight. Guns can shoot at spirits as though they were Twilight guns and cameras can see the goings-on of both the physical world and Twilight. However, the object is not necessarily under the total control of the willworker; a spirit could pick a gun up and shoot someone in the physical world, as it can be used in both Twilight and the physical world, as an example.", + :reaches => [ + [1, "The object can Reach across the Gauntlet outright. This is Withstood by the Gauntlet's strength in the area it is currently in. As the Gauntlet's strength changes, so too does the effectiveness of this Reach ability. So if a gun is taken to a place with a stronger Gauntlet, it might not work there, or vice versa."] + ] + ) + + spells << Spell.new( + :name => "Supernal Steganography", + :forces => 2, + :practice => "Veiling", + :primary_factor => "Duration", + :suggested_rote_skills => ["Subterfuge", "Computer", "Stealth"], + :authors => ["NEETzsche"], + :rules_text => "The Mage masks the true meaning of an electronic message to unintended recipients, making something important look innocuous. Photos of a murdered target might be made to look like a dog face Snapchat picture and an email listing a Sanctum's exact location might read like Papa John's coupons. Mundane attempts to detect the true message fail automatically, while supernatural ones provoke a Clash of Wills.", + :reaches => [ + [1, "The real message destroys itself when the spell expires, and its removal is so thorough that attempts to recover it provoke a Clash of Wills like above."] + ] + ) + + spells << Spell.new( + :name => "Green Thumb", + :life => 1, + :practice => "Compelling", + :primary_factor => "Duration", + :suggested_rote_skills => ["Survival", "Empathy", "Crafts"], + :authors => ["NEETzsche"], + :rules_text => "The Mage creates the ideal conditions for plant life out of normal dirt and water. Using this spell, she can make plants grow even in polluted soil or in places the plant would not grow. As long as this spell is active, the plant grows as though it had perfect growing conditions.", + :reaches => [ + [1, "the Mage may customize the growing pattern of the plant. Nothing biologically impossible can happen, but small things like making a squash grow in a certain shape or a tree's branches emerge at certain spots and in certain directions are wholly plausible."] + ] + ) + + + spells << Spell.new( + :name => "Locked Locus", + :spirit => 2, + :practice => "Shielding", + :primary_factor => "Duration", + :suggested_rote_skills => ["Survival", "Politics", "Occult"], + :authors => ["NEETzsche"], + :rules_text => "This spell precludes a Locus from being used without authorization. The caster specifies a Key that must be used in order to use the Locus to cross the Gauntlet. Supernatural abilities that allow one to cross the Gauntlet using this Locus without permission provoke a Clash of Wills if the proper Key is not possessed.", + :reaches => [ + [1, "Essence cannot be extracted from the Locus without use of the Key."], + [1, "Attempts to impact anything across the Gauntlet is similarly restricted."] + ] + ) + + spells << Spell.new( + :name => "Babel", + :mind => 3, + :practice => "Fraying", + :primary_factor => "Duration", + :suggested_rote_skills => ["Intimidation", "Subterfuge", "Politics"], + :authors => ["NEETzsche"], + :rules_text => "The spell's subject is capable of understanding and translating no language. When he speaks, gibberish comes out, and when he writes, he only puts scribbling to paper. Just as he cannot communicate his thoughts to others, all he can get out of others is word salad or incoherent babbling. This is true for the spoken word, written language, symbols, encoded signals, body language, hand symbols and concepts that only exist as thought. The only exception is that Awakened characters do not lose their ability to understand High Speech.", + :reaches => [ + [1, "They also cannot comprehend High Speech."] + ] + ) + + spells << Spell.new( + :name => "Elusivity", + :space => 2, + :practice => "Veiling", + :primary_factor => "Duration", + :suggested_rote_skills => ["Stealth", "Subterfuge", "Survival"], + :authors => ["NEETzsche"], + :rules_text => "The Mage becomes particularly difficult to track. He naturally takes unexpected routes to his destination and people who would want to find him take routes other than the one he is. All mundane attempts to track him fail, and all supernatural attempts to do so provokes a Clash of Wills." + ) + + spells << Spell.new( + :name => "Supernal Will", + :mind => 4, + :practice => "Patterning", + :primary_factor => "Duration", + :suggested_rote_skills => ["Empathy", "Expression", "Survival"], + :authors => ["noire"], + :rules_text => "The mage taps into the deepest reserves of personal resolve and unleashes a tidal wave of conviction toward a single minded goal. When the target spends Willpower to go above and beyond what should be possible to achieve her goals, substitute her Resolve rating for the usual Willpower bonus. The spell cannot increase the subject’s Willpower bonus above her resolve.", + :reaches => [ + [1, "If the roll gaining this benefit is contested, roll with 8-again."], + [1, "The spell may temporarily increase Resolve by one dot per level of Potency of the spell. The spell cannot increase the subject’s Resolve above their normal maximum. Sleepers compelled to above their natural Resolve gain the broken condition after the spell ends."], + [1, "For a point of Mana, the benefit of the spell may affect spellcasting."] + + ] + ) + + spells << Spell.new( + :name => "Abuse Body", + :life => 2, + :practice => "Ruling", + :primary_factor => "Duration", + :withstand => "Stamina", + :suggested_rote_skills => ["Athletics", "Medicine", "Survival"], + :authors => ["noire"], + :rules_text => "With this spell a mage can control her subject’s bodily functions to a degree that would make even the most inwardly-focused monks terrified. She can do far more than cause heart palpitations; she can control her subject’s instinctual body functions, cause nervous twitches, and interrupt oxygen causing hiccups. For the spell’s Duration, each level of Potency inflicts one rank in one of the following:\nHiccups & Hyperventilation: Each rank raises the subject’s breathing, doubling the amount of oxygen she needs to function normally, inflicting -1 Initiative.\nHeart Murmurs: By tampering with the subject’s heartbeat, she can halve the interval at which hypoxia from diving or sleeping affects her. Obdormition durations also double, taking twice as long for numbness to pass.\nFunctional Dyspepsia: Deregulating the subject’s bodily functions forces her to subsist on twice as much food, projectile vomit (-1L acid attack Stamina + Athletics), and halves the amount of time between checks for deprivation or fatigue." + ) + + spells << Spell.new( + :name => "Warp Trigger Condition", + :prime => 3, + :practice => "Weaving", + :primary_factor => "Duration", + :withstand => "Potency", + :suggested_rote_skills => ["Athletics", "Medicine", "Survival"], + :authors => ["Altasaire", "NEETzsche"], + :rules_text => "The willworker changes the trigger condition of a targeted spell for the Duration of this one. He can set it to any valid condition.", + :reaches => [ + [2, "The effect is Lasting."], + [2, "For one Mana, he can target an Artifact. This cannot be combined with the other Reach effect."] + ] + + ) + + spells << Spell.new( + :name => "Flight", + :forces => 2, + :practice => "Ruling", + :primary_factor => "Duration", + :suggested_rote_skills => ["Athletics", "Occult", "Drive"], + :authors => ["NEETzsche", "Altasaire"], + :rules_text => "The willworker can fly. High altitudes are likely to result in the Heavy Winds Environmental Tilt. The caster may apply his Speed in any direction, including directly upwards.\n\nAccelerating forward in the fashion of a rocket requires the use of Velocity Control (Forces •••). Once his acceleration exceeds ten miles per hour, he suffers one point of Bashing damage per turn from whiplash. He cannot exceed the speed of sound with this spell.", + :reaches => [ + [2, "The caster does not suffer damage from whiplash."] + ] + + ) + + spells << Spell.new( + :name => "Living Drone / Eye In The Sky", + :life => 2, + :space => 2, + :practice => "Ruling", + :primary_factor => "Duration", + :suggested_rote_skills => ["Empathy", "Animal Ken", "Investigation"], + :authors => ["benisbagina"], + :rules_text => "This spell allows the caster not only to assume direct control of a lesser life-form, but also to see through its eyes, in the manner of modern drones. While piloting the target, the mage loses all Defense and may not take any actions or cast further spells. Casting this spell on multiple targets forces mage to perceive through multiple eyes simultaneously, causing confusion and inability to process sensory input without One Mind, Two Thoughts or analogue.", + :reaches => [ + [1, "the mage remains aware of her surroundings, and does not lose Defense."], + [1, "the mage is able to \"switch\" between his targets and perceive through their eyes normally one-by-one."], + [1, "the mage may receive all senses of the living being he operates."] + + ] + + ) + + spells << Spell.new( + :name => "Unerring Delivery/Message in A Bottle", + :fate => 2, + :space => 1, + :practice => "Ruling", + :primary_factor => "Duration", + :suggested_rote_skills => ["Persuasion", "Science", "Survival"], + :authors => ["Dark Archon"], + :rules_text => "Sometimes a willworker needs just to make sure that a certain object meets no obstacles on it’s 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, which is a Wolf-Blood who is soon to undergo their First Change. He watches their First Change." + ) + + spells << Spell.new( + :name => "Fingers Crossed", + :fate => 3, + :practice => "Fraying", + :primary_factor => "Duration", + :suggested_rote_skills => ["Politics", "Persuasion", "Occult"], + :authors => ["Dark Archon"], + :rules_text => "Sometimes, you want to get out of a deal. Perhaps it already cost you more than you thought it would. Perhaps you want to renegotiate the deal. Perhaps you got yours and screw the rest. Being a Disciple of Fate, you are unable to redefine an oath as you see fit yet, but you can break it altogether on a temporary basis. This spell targets the oath and suppresses it for the Duration of the spell. This always results in an Clash of Wills with the Oath's enforcer. If the spell fails, it counts as breaking the Oath and it triggers the hex effect, even if it normally would not. The Oath's enforcer is always aware that such an attempt was made." + ) + + spells << Spell.new( + :name => "Fine Print", + :fate => 2, + :practice => "Veiling", + :primary_factor => "Duration", + :cost => "1 Mana", + :suggested_rote_skills => ["Politics", "Subterfuge", "Stealth"], + :authors => ["NEETzsche"], + :rules_text => "Oaths are supposed to be clearly defined as people take them on, but some witches create hidden terms. For the Duration of the spell, the witch may hide some of the terms of an Oath that might be inconvenient for one of the parties. They simply go unnoticed. For example, an Oath that is actually \"you will protect my dog from the True Fae over the weekend in exchange for $100\" might appear to the person accepting it as \"you will feed my dog once daily over the weekend in exchange for $100.\"\n\nThis allows extremely one-sided arrangements to be passed off as though they were fair. Oaths that appear too good to be true often actually are. Any attempt to pierce this deception is Withstood by this spell's Potency. The deceived party does not know the real terms of the Oath until the spell expires, but once it does, he does not need to be informed of them, he naturally realizes what he really agreed to." + ) + + spells << Spell.new( + :name => "Addendum / Erratum", + :fate => 3, + :practice => "Weaving", + :primary_factor => "Potency", + :cost => "1 Mana", + :withstand => "Composure", + :suggested_rote_skills => ["Politics", "Occult", "Academics"], + :authors => ["Altasaire"], + :rules_text => "The Mage takes a silver pen and writes in additional clauses into an already existent agreement. Pray that they do not change them further.\n\nFor the Duration of the spell, the target agreement or oath boasts up to Potency in additional clauses. Trivial clauses cost one point of Potency, median cost two, and severe cost three. The willworker cannot entirely overwrite existing clauses with this spell.", + :reaches => [ + [2, "The Mage may also completely rewrite clauses, spending points of Potency on editing what is already there, as opposed to adding new terms."] + ] + ) + + spells << Spell.new( + :name => "Counterfeit", + :matter => 2, + :practice => "Veiling", + :primary_factor => "Duration", + :suggested_rote_skills => ["Larceny", "Subterfuge", "Crafts"], + :authors => ["NEETzsche"], + :rules_text => "The mage makes a fake item appear real. It does not matter how fake the item naturally appears. For example, he could take a small piece of paper of roughly the right size of a monetary note and write \"100 USD\" on it, and casting this spell on it will make it appear completely real. He could also use this spell to convince people that his toy water gun is a real assault rifle. Mundane efforts to detect this as a counterfeit automatically fail while supernatural efforts provoke a Clash of Wills.", + :adds => [ + { :arcana => { :fate => 2}, :effect => "The item appears to be cursed or blessed. The willworker can specify the boons, hexes, and other such effects it has."}, + { :arcana => { :prime => 2}, :effect => "He can make the item appear to be touched by the Supernal, such as Imbued Item, or even of Supernal origin outright, as in an Artifact."}, + { :arcana => { :spirit => 2}, :effect => "He can make the item appear to be unduly influenced spiritually. It might appear possessed or as a Fetish."} ] + ) + + spells << Spell.new( + :name => "Grease", + :matter => 2, + :practice => "Ruling", + :primary_factor => "Duration", + :suggested_rote_skills => ["Crafts", "Brawl", "Survival"], + :authors => ["Dark Archon"], + :rules_text => "One easy way to turn the tide of physical combat and make those damn wheels spin, this spell changes the properties of the ground surface it is cast upon, causing the following Ice Environmental Tilt." + ) + + spells << Spell.new( + :name => "Monitor", + :life => 1, + :space => 2, + :practice => "Ruling", + :primary_factor => "Duration", + :suggested_rote_skills => ["Science", "Medicine", "Investigation"], + :authors => ["benisbagina"], + :rules_text => "This spell allows the caster to monitor a target's position and its vital signs and biological changes.\n\nFor the duration, the mage is able to perfectly locate the target and is aware of any changes in its biological, toxicological, physical and neurological state. This informs on the general nature of these factors, not on the exact specifics.", + :reaches => [ + [1, "the Mage can Scry the target at will for the duration."], + [1, "the Mage is further informed about the state of the target."], + [2, "the spell creates spatial sympathy between the mage and the target, for the duration."] + ] + ) + + spells << Spell.new( + :name => "Read Gauntlet", + :spirit => 1, + :practice => "Unveiling", + :primary_factor => "Potency", + :suggested_rote_skills => ["Occult", "Empathy", "Survival"], + :authors => ["NEETzsche"], + :rules_text => "The willworker can get a perfect read on the Gauntlet's strength in an area. She can see it first hand just how thick it is. She cannot reduce the Gauntlet's strength at this level." + ) + + + spells << Spell.new( + :name => "Glue", + :matter => 2, + :practice => "Ruling", + :primary_factor => "Duration", + :suggested_rote_skills => ["Crafts", "Brawl", "Survival"], + :authors => ["Dark Archon", "NEETzsche"], + :rules_text => "An easy way to turn the tide of physical combat and make those damn wheels spin, this spell changes the properties of the ground surface it is cast upon, causing the following Sticky Ground Environmental Tilt." + ) + + spells << Spell.new( + :name => "Stone Skin", + :matter => 3, + :life => 3, + :practice => "Weaving", + :primary_factor => "Potency", + :suggested_rote_skills => ["Crafts", "Intimidation", "Survival"], + :authors => ["NEETzsche"], + :rules_text => "The willworker's skin hardens to an unnatural extent. The living subject gains a Durability rating equal to the spell's Potency.", + :cost => "1 Mana" + ) + + spells << Spell.new( + :name => "Pathfinder", + :space => 1, + :practice => "Knowing", + :primary_factor => "Potency", + :suggested_rote_skills => ["Science", "Persuasion", "Survival"], + :authors => ["Dark Archon"], + :rules_text => "The willworker's skin hardens to an unnatural extent. The living subject gains a Durability rating equal to the spell's Potency.", + :reaches => [ + [2, "Sometimes, you cannot afford to make an error. The subject gains the Steadfast (Pathfinding) Condition. This Reach effect requires the use of 1 Mana."] + ] + ) + + + spells << Spell.new( + :name => "Perpetual Motion Machine", + :forces => 3, + :practice => "Weaving", + :primary_factor => "Duration", + :suggested_rote_skills => ["Science", "Crafts", "Survival"], + :authors => ["NEETzsche"], + :rules_text => "The mage takes an object that could be used to generate power if work, in the mechanical engineering sense, is applied to it, and applies that work magically given a brief initial push. It could be an engine, a power crank, a gasoline powered generator that is out of fuel, or any other similar device. Use the spell's Potency rating and the Transform Energy table (Mage: the Awakening, p. 146) to determine how much electrical output it generates. Potency above 5 generates electricity at a level of a main line.", + :cost => "1 Mana", + :adds => [ + { :arcana => { :matter => 3}, :effect => "The object doesn't need to be workable in the sense listed. The caster could generate this energy from a potato if he were inclined."} + ] + ) + + + spells << Spell.new( + :name => "Labyrinth", + :space => 4, + :practice => "Patterning", + :primary_factor => "Duration", + :suggested_rote_skills => ["Occult", "Stealth", "Subterfuge"], + :authors => ["NEETzsche"], + :rules_text => "An Adept of Space can create an ever-shifting location, one that cannot be exited by conventional means. The Labyrinth Environmental Tilt is applied to the area of the spell, which is usually a single building, dungeons, or place. Mundane efforts to escape automatically fail, while supernatural ones provoke a Clash of Wills." + ) + + # TESTS + + duplicate_spells = spells.group_by(&:name).select {| k, v| v.length > 1 } + raise "Duplicate spells (on name) detected: #{duplicate_spells.collect{ |k,v| k}.to_list}" if duplicate_spells.length > 0 + + unpunctuated_spells = spells.select { |spell| spell.rules_text.unpunctuated? || spell.reaches.collect{|reach| reach[1]}.any?(&:unpunctuated?) || spell.adds.any? { |add| add[:effect].unpunctuated? } } + + raise "The following spells lack punctuation: #{unpunctuated_spells.collect(&:name).to_list}" if unpunctuated_spells.length > 0 + + spells + + end +end \ No newline at end of file diff --git a/writeup.pdf b/writeup.pdf index fe11512..57af90f 100644 Binary files a/writeup.pdf and b/writeup.pdf differ diff --git a/writeup.rb b/writeup.rb index e91ac77..d2c8a8f 100644 --- a/writeup.rb +++ b/writeup.rb @@ -1,7 +1,16 @@ require "prawn" require "prawn/table" +require "prawn/grouping" require "pry" +require_relative "spell" +require_relative "spells" + +require_relative "merit" +require_relative "merits" + +require_relative "primitive_adds" + class Prawn::Document def background_color(color) tmp_color = fill_color @@ -15,9 +24,12 @@ end class Awakened2069 FONT_SIZE_CHAPTER = 48 - FONT_SIZE_BODY = 10 + FONT_SIZE_BODY = 11 + FONT_SIZE_SECTION = 24 + FONT_SIZE_SUBSECTION = 18 - attr_accessor :pdf, :chapter_title + INDENT_SIZE = 25 + attr_accessor :pdf, :chapter_title, :section_name def start_chapter(chapter_name) @chapter_title = chapter_name @@ -27,12 +39,12 @@ class Awakened2069 pdf.outline.update do puts "\tAdding #{@awakened2069.chapter_title} on page #{page_number}" - section(@chapter_title, :destination => page_number) + section(@awakened2069.chapter_title, :destination => page_number) end puts "\tSetting font size" pdf.font_size Awakened2069::FONT_SIZE_CHAPTER - pdf.font "Abess" + pdf.font "Ultramarines" puts "\tPrinting chapter to document" pdf.text chapter_title, :align => :center @@ -41,6 +53,25 @@ class Awakened2069 pdf.font_size FONT_SIZE_BODY end + def start_section(section_name) + puts "Beginning section #{section_name}: " + + @section_name = section_name + + pdf.outline.add_subsection_to(chapter_title) do + @pdf.outline.section section_name, :destination => @pdf.page_number + end + + puts "\tSetting font size" + pdf.font "Ultramarines" + pdf.font_size FONT_SIZE_SECTION + pdf.text section_name, :align => :center + + puts "\tRestoring body text" + pdf.font_size FONT_SIZE_BODY + pdf.font "Goudy" + + end def generate @pdf = Prawn::Document.new(:margin => 0) @@ -87,13 +118,61 @@ class Awakened2069 pdf.text "25MpfjP", :align => :center pdf.font "Goudy" - pdf.font_size 24 pdf.text "\n\nAll content in this manual is inspired by the Storyteller and the players", :align => :center start_chapter "Introduction" + pdf.default_leading 5 + + pdf.column_box([0, pdf.cursor], :columns => 2, :width => pdf.bounds.width) do + start_section "So Last Century" + pdf.text "In the year 2020, they said that \"the future is now!\" In some ways, they were right, but in others they were decidedly incorrect. A lot of the technological promises that were made in past decades never realized, and others entirely unconceived materialized instead. The optimism of the 1950's and 1960's gave way to the policies of the 1990's that would lead to the economic collapse in the 2000's, and from there into the first serious Internet-aged political conflict in the 2010's. The conflict emerged as a combination of bottom-up, grass-roots submovements, and as a consequence of various entities from above meddling in the affairs of the populace.\nNobody was prepared for that conflict, as sociopathic social justice advocates and their opposition, the frustrated, nihilistic dank memers took control of the mainstream institutions. While some of this came about on their own, everybody wanted to blame some higher authority, some foreign government, some ethnic group, or political minority. These people were not entirely off, since only so much can come from above or below, but instead of grand conspiracies of Russian governments, most of the deterioration of society was generated opportunistically by malignant spirits, by Elder Kindred, by Changelings and the True Fae, and, yes, by the Exarchs.\nYouTube, Facebook, Twitter, and every other social media company banned noteworthy voices in the time's contemporary discourse. Universities put a hard clamp down on which perspectives their undergraduate students were allowed to hold, and large corporations mass terminated people who failed to toe the party line. Sure, the political party these institutions were playing favorites with were surely controlled by the Exarchs themselves, but the real thing they were desperately trying to keep under wraps is that the world people lived in was a Lie. A direct consequence of freedom of speech in practice combined with hundreds of millions of smartphones is that people are one idiot supernatural away from turning large swathes of the population into Sleepwalkers, and a decent chunk of them into the Awakened. These Exarchs could have none of that.", :inline_format => true, :indent_paragraphs => INDENT_SIZE + + start_section "Changing Times" + + pdf.text "The Guardians of the Veil played right into the plans of the Exarchs. As they distracted the Sleeping world with the banning of Holocaust denial videos and the termination of everybody with a wacky conspiracy theory from any form of conventional employment, they were frantically deleting videos of vampires coercing children to give them their blood, posts describing exactly how to eliminate Uratha who predated the wives and daughters of the citizenry, and, most importantly, any content betraying or, heaven forbid, detailing the way Supernal magic functioned. Too many were appearing too quickly; it was almost as though supernatural entities became more brazen about exposing their true natures as people's personal recording technology and communication skills increased.\nThe views of the people who knew they were being shut up for political reasons mixed with the realities that politically unaligned people were uploading. The two groups intermingled creating bizarre supernatural conspiracy theories that got many details right, but never quite got the whole picture. There was always something off, something missing or incorrect. The pace of this mixture increased as Guardian and Exarch alike lost control of the conversation. Everybody knew that something fucking huge was up, but very few people knew exactly what. Those holding taboo political views banded together with those openly discussing the supernatural, and began retaliating against this suppression. As the world entered 2020's, the United States fell into civil war from all of this, descending into a Weimerica scenario borne directly of the nightmarish rants of every no-name YouTuber with thirty to fifty subscribers.\n\n", :inline_format => true, :indent_paragraphs => INDENT_SIZE + start_section "The Hammer Comes Down" + + pdf.text "During that civil war, the videos stopped. The Internet went black. Cell phone networks suddenly got shut off without explanation. People were plunged into a long-term media blackout as every mainstream institution insisted that nothing out of the ordinary was taking place. This went on for a decade, where Internet access was considered a privilege that could be revoked for any or no reason, at the discretion of one's employer, university, or the government. Almost nobody was granted this access because unrestricted Internet access was considered \"dangerous.\" When it became normal for regular citizens to gain access to this service again, there were no conspiracy theories on the Internet anymore. Everything was normal again.\nThe 2030's were when different corporate entities became the new feudal lords of American society. It was the decade that travel between continents became trivial if you had the money, and a trip to the grocery store became untenable if you did not. Compulsory tracking devices were installed in every newborn American citizen as well as the European Union. The Chinese were even more severe, installing chips that could neural override their citizens on a whim. It was the decade that sophisticated cybernetics and brain-computer-interfaces became commonplace for the wealthy, and cheaper, crappier versions of the same, riddled with bugs, problems, and advertisements for the poor. It was the decade that all of humankind forever traded away wonder for reason. Or so it seemed...", :inline_format => true, :indent_paragraphs => INDENT_SIZE + + start_section "A Dark Age In The Computing Era" + + pdf.text "The 2040's and 2050's are now a blur. Nobody knows what really happened. Every week, the news, the university professors, the government, insists something different happened in those two decades. Yet everybody just plays along. It's hard to tell for the Awakened if these people are fully brainwashed or if they are merely pretending so as to avoid getting into some sort of trouble. Possession of books is forbidden, since they are less mutable than websites.\nIt took until the late 2060's for Awakened society to even partially recover. That recovery is ongoing. The old Pentacle Orders have re-emerged, in part due to forbidden records of their existence and histories being uncovered. However, it also seems as though these Orders exist naturally. Maybe they were re-seeded by the Oracles. Maybe it's just the way of the world. People were on the brink of a global Awakening in 2020, but as with all things, the more things change, they more they stay the same. Awakened society in 2069 is easily the most underground of the noteworthy supernatural entities. Demons and Beasts appear to be largely defeated, while Vampires and Werewolves appear to be given a deliberate carte blanche. Whenever an Awakened individual gets too arrogant and betrays what they're actually about, they seem to disappear. It's uncanny the efficiency with which this happens.\nWhat is known, however, is that no Awakened soul today appears to be born before 2030. The young scholars that have emerged seem to have formed a consensus that they were all disappeared much in the way their new friends will be if they get too Hubristic, but nobody seems to have concrete proof of this. It's one of those things that \"everybody knows\" in the Awakened community, yet nobody can prove. This may be because it's total hogwash, but it seems plausible enough that nobody questions it.", :inline_format => true, :indent_paragraphs => INDENT_SIZE + end + + start_chapter "Orders" + pdf.column_box([0, pdf.cursor], :columns => 2, :width => pdf.bounds.width) do + pdf.text "The Five Pentacle Orders have re-emerged in spirit if not in the specifics from the previous generations, or at least the ones before 2020. This short chapter should detail the ways in which they are unique to Awakened 2069.", :inline_format => true, :indent_paragraphs => INDENT_SIZE + + start_section "The Free Council" + + pdf.text "The Free Council is easily the largest Order that has re-emerged. While they were the young bucks, the punks before 2020, they borderline on the norm outright in 2069. Technomages through the 2000's, but pro-LGBT activists in the 2010's, their resurgence has restored them to their more dignified pre-2010 roots. The Free Council are the foremost authorities on cybernetics, artificial intelligence, brain computer interfaces among the Awakened community. Their claim to this domain carries Supernal weight. As such, all such Supernal Cybernetics Merits must be acquired through a member of the Free Council of appropriate status. This is no orthopractic issue; it carries such weight that losing one's stature in the Free Council seems to remove one's ability to create new Supernal Cybernetics. One simply cannot cast their way into cybernetic technology. Period. (More on this after the game begins)\nSample Character Concepts: transhumanist ideologue, corporate saboteur, cryptocurrency thief, digital grimoire seeder, cryptographic cracker", :inline_format => true, :indent_paragraphs => INDENT_SIZE + + start_section "The Guardians of the Veil" + + pdf.text "The Guardians of the Veil hold the least graceful position among the Pentacle Orders due to the fact that they were ultimately Seer pawns in the 2020's. However, they play an important role in 2069 that is not to be disregarded. Since Mages are routinely disappeared whenever they get a bit too obnoxious with their magic in public, the Veil isn't just to protect Sleepers from noticing, but more importantly, Seers. Guardians in 2069, as a consequence of being duped in the past, are likely the most rabidly anti-Seer among the Awakened, in that fascists have historically been reformed socialists.\nSample Character Concepts: safehouse manager, anti-Paradox ideologue, abyssal removal specialist, forcer of memes, good cop/bad cop dualist", :inline_format => true, :indent_paragraphs => INDENT_SIZE + + start_section "The Mysterium" + + pdf.text "The Mysterium's core beliefs have definitely come to the fore for many Mages, and one thing that has caught the attention of its current members more than any other Order is the verifiable existence of lost history. It is up for debate if Sleepers know that the history from recent decades is entirely lost or if they are merely deluded. Mind-readers seem to get different reads from person to person. However, it is not up for debate to Awakened society; most of what people are told about these decades is completely fabricated. The Mysterium takes particular note of this and Obsessions to the effect of \"what actually happened, here?\" are common themes among its scholarly class.\nSample Character Concepts: technoarchaeologist, digital archivist, Obsession-addler, secret broker, Artifact hoarder", :inline_format => true, :indent_paragraphs => INDENT_SIZE + + start_section "The Silver Ladder" + + pdf.text "The Silver Ladder has not lost faith in the possibility of a global Awakening, and will consistently cite the late 2010's as an example of this. They insist that if Awakened society creates conditions similar to it, but precludes more authoritarian elements from cropping up, that this global Awakening will realize. Sometimes this gets derided by the rest of Awakened society, but never to an extent that they are denounced or discarded completely. These people often lead worthy Mystery Cults, and endeavor to create as many Sleepwalkers as possible to in turn maximize their chance of Awakening. So far, this has created mixed results, partly due to the fact that Guardians create their own Mystery Cults that are about distracting the unworthy and stupid with nonsensical gibberish and forced memes.\nSample Character Concepts: redpilled Internet personality, intersplat negotiator, cult leader, newbie mentor, Awakened judicial watchdog", :inline_format => true, :indent_paragraphs => INDENT_SIZE + + start_section "The Adamantine Arrow" + + pdf.text "The Adamantine Arrow continues in its old footsteps, but that doesn't mean every single thing is the same. They know that these days, there are too many well-equipped enemy combatants out there to simply go at them hand-to-hand, or to be so simple in their approach as to start shooting fireballs out of their eyes. They know to manipulate the crowd to come for them. They know to be agile, and stealthy, and appear where they are not expected. Ensuring that someone they intend to protect can escape is often more important than looking like a hero, and using a magically-enhanced drone to kill someone from afar is more important than the satisfaction they might gain by looking them in the eye as they sink their knife into that quarry.\nSample Character Concepts: stochastic terrorist, urban guerrilla, drone general, trojan horse, technothug", :inline_format => true, :indent_paragraphs => INDENT_SIZE + end + + start_chapter "New Merits" + + + pdf.column_box([0, pdf.cursor], :columns => 2, :width => pdf.bounds.width) do + Merit.merits(pdf).each(&:render) + end pdf.render_file("writeup.pdf") end