Browse Source

Bunch of stuff

master
The Stranjer 4 years ago
parent
commit
f8eb5d1aea
7 changed files with 1587 additions and 5 deletions
  1. +68
    -0
      merit.rb
  2. +62
    -0
      merits.rb
  3. +59
    -0
      primitive_adds.rb
  4. +83
    -0
      spell.rb
  5. +1231
    -0
      spells.rb
  6. BIN
      writeup.pdf
  7. +84
    -5
      writeup.rb

+ 68
- 0
merit.rb View File

@@ -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 "<b>#{prerequisites.size == 1 ? "Prerequisite" : "Prerequisites"}:</b> #{prerequisites_text}", :inline_format => true, :indent_paragraphs => Awakened2069::INDENT_SIZE
end

g.text "<b>Effect:</b> #{rules_text}", :inline_format => true, :indent_paragraphs => Awakened2069::INDENT_SIZE
end

self
end
end

+ 62
- 0
merits.rb View File

@@ -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 <i>part</i> of it.\nBy spending a <i>point</i> 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 <i>dot</i>, 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.\n<b>Practical Training (#{1.to_dots}):</b> Your character may use her chosen Skill in combat as a reflexive Yantra, adding dice to a spell cast on subsequent turns.\n<b>Muscle Memory (#{2.to_dots}):</b> Your character may use her chosen skill as a reflexive Yantra on any spell cast reflexively in the same turn as the combat action.\n<b>Specialist Training (#{3.to_dots}):</b> If your character possesses an applicable specialty in their chosen skill, the Yantra bonus it provides increases from +1 to +2.\n<b>Unity (#{4.to_dots}):</b> 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.\n<b>The Adamant Way (#{5.to_dots}):</b> 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

+ 59
- 0
primitive_adds.rb View File

@@ -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

+ 83
- 0
spell.rb View File

@@ -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

+ 1231
- 0
spells.rb
File diff suppressed because it is too large
View File


BIN
writeup.pdf View File


+ 84
- 5
writeup.rb View File

@@ -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 <b>the Exarchs</b>.\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 <i>real</i> 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 <i>something fucking huge</i> 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 <i>carte blanche</i>. Whenever an Awakened individual gets too arrogant and betrays what they're <i>actually</i> 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)\n<b>Sample Character Concepts:</b> 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.\n<b>Sample Character Concepts:</b> 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.\n<b>Sample Character Concepts:</b> 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.\n<b>Sample Character Concepts:</b> 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.\n<b>Sample Character Concepts:</b> 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


Loading…
Cancel
Save