3 Commits

Author SHA1 Message Date
3effb0406e feat: Add template spell picker from spells.yml; polish spell table
- Add yaml-loader; import data/spells.yml at build time
- Add SpellTemplate/SpellsFile types to globals.d.ts
- Add 'Add Template Spell' button that opens a modal picker pre-filling
  all spell fields from the YAML data
- Move spell data files into data/ directory
- Split spell rows into inputs row + full-width notes row (colspan=6)
- Shrink delete column to fit-content; bold spell name input
- Add class column to spell table; change MP cost to free-text input
- Auto-resize spell notes textarea on load and on input
- Add 10px padding between spells for visual separation

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-26 17:52:02 -04:00
b6d8e34090 fix: Expand spell notes textarea full-width; add inter-spell padding
Split each spell into two table rows: the inputs row (name, MP, targets,
duration, delete) and a full-width notes row (colspan=5). Adds 10px
padding above/below each spell for visual separation between entries.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-26 16:46:46 -04:00
e26f135b79 fix: Auto-resize spell/class textareas on load; shrink delete column
- Add autoResize helper and wire it via ref callback (mount) and onInput
  (typing) to spell notes and class skills textareas
- Change .spell-del-col from width:40px to width:1px + white-space:nowrap
  so the delete button column shrink-wraps to its content

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-26 16:38:10 -04:00
32 changed files with 21172 additions and 25741 deletions

View File

@@ -64,16 +64,8 @@ jobs:
- name: Copy backend binary + unit file - name: Copy backend binary + unit file
run: | run: |
# Copy to a temp path then atomically rename into place. You can't
# overwrite a running executable in place (ETXTBSY / "Text file busy"),
# but rename(2) just swaps the directory entry while the old inode keeps
# serving the running process until the restart step picks up the new
# binary. chmod first so the exec bit survives the rename (scp doesn't
# preserve mode without -p).
scp -i ~/.ssh/deploy_key server/share-svc \ scp -i ~/.ssh/deploy_key server/share-svc \
"$DEPLOY_USER@$DEPLOY_HOST:/usr/local/bin/share-svc.new" "$DEPLOY_USER@$DEPLOY_HOST:/usr/local/bin/share-svc"
ssh -i ~/.ssh/deploy_key "$DEPLOY_USER@$DEPLOY_HOST" \
'chmod 0755 /usr/local/bin/share-svc.new && mv -f /usr/local/bin/share-svc.new /usr/local/bin/share-svc'
scp -i ~/.ssh/deploy_key server/share-svc.service \ scp -i ~/.ssh/deploy_key server/share-svc.service \
"$DEPLOY_USER@$DEPLOY_HOST:/etc/systemd/system/share-svc.service" "$DEPLOY_USER@$DEPLOY_HOST:/etc/systemd/system/share-svc.service"

View File

@@ -18,26 +18,17 @@
<tr> <tr>
<td>Minor</td> <td>Minor</td>
<td>5</td> <td>5</td>
<td> <td>Enemy commanders, unique and infamous monsters, and antagonists causing trouble in small settlements.</td>
Enemy commanders, unique and infamous monsters, and antagonists causing
trouble in small settlements.
</td>
</tr> </tr>
<tr> <tr>
<td>Major</td> <td>Major</td>
<td>10</td> <td>10</td>
<td> <td>Tyrants, powerful mages, legendary creatures, and entities that threaten entire countries.</td>
Tyrants, powerful mages, legendary creatures, and entities that threaten
entire countries.
</td>
</tr> </tr>
<tr> <tr>
<td>Supreme</td> <td>Supreme</td>
<td>15</td> <td>15</td>
<td> <td>Archdemons, immortal entities, and alien deities bent on destruction or domination.</td>
Archdemons, immortal entities, and alien deities bent on destruction or
domination.
</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
@@ -53,33 +44,25 @@
<tbody> <tbody>
<tr> <tr>
<td>Escape</td> <td>Escape</td>
<td> <td>A Villain may spend 1 Ultima Point to safely leave the scene — the Game Master describes how they do so,
A Villain may spend 1 Ultima Point to safely leave the scene — the Game perhaps leaving a few henchmen behind to "keep the heroes company".</td>
Master describes how they do so, perhaps leaving a few henchmen behind
to "keep the heroes company".
</td>
</tr> </tr>
<tr> <tr>
<td>Invoke Trait</td> <td>Invoke Trait</td>
<td> <td>After performing a Check, a Villain may spend 1 Ultima Point to invoke one of their Traits and reroll one or
After performing a Check, a Villain may spend 1 Ultima Point to invoke both dice (this follows the same rules seen on <a href="/books/core/#page-46">page 46</a>).</td>
one of their Traits and reroll one or both dice (this follows the same
rules seen on <a href="/books/core/#page-46">page 46</a>).
</td>
</tr> </tr>
<tr> <tr>
<td>Recovery</td> <td>Recovery</td>
<td> <td>A Villain may use an action and spend 1 Ultima Point to recover from all status effects and also recover 50
A Villain may use an action and spend 1 Ultima Point to recover from all Mind Points.</td>
status effects and also recover 50 Mind Points.
</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
<p> <p>
While Player Characters can gain Fabula Points in several ways, Villains While Player Characters can gain Fabula Points in several ways, Villains
cannot recharge their Ultima Points — in a way, they represent the Villain's cannot recharge their Ultima Points — in a way, they represent the Villain's
determination and will to pursue their objectives. A Villain with no remaining determination and will to pursue their objectives. A Villain with no
Ultima Points is no longer a Villain and becomes equivalent to any other NPC; remaining Ultima Points is no longer a Villain and becomes equivalent to any
alternatively, they may choose to escalate (see next page). other NPC; alternatively, they may choose to escalate (see next page).
</p> </p>

View File

@@ -1,20 +1,22 @@
<h2>SHOULD THIS VILLAIN ESCALATE?</h2> <h2>SHOULD THIS VILLAIN ESCALATE?</h2>
<p> <p>
When choosing whether a Villain will escalate, the Game Master should consider When choosing whether a Villain will escalate, the Game Master should
the antagonist's importance within the story, their personality, and the way consider the antagonist's importance within the story, their personality,
the heroes chose to confront them: a Villain's escalation shows that the and the way the heroes chose to confront them: a Villain's escalation shows
heroes might win a conflict but still make the situation worse. that the heroes might win a conflict but still make the situation worse.
</p> </p>
<p> <p>
Most of the time it's best to simply let a Villain be defeated: maybe their Most of the time it's best to simply let a Villain be defeated: maybe their
resolve is broken, maybe they even realized they were wrong and will turn into resolve is broken, maybe they even realized they were wrong and will turn
an ally. into an ally.
</p> </p>
<p> <p>
Escalating your Villains sparingly will make them more memorable and also Escalating your Villains sparingly will make them more memorable and also
ensure that Players feel like their actions have an impact on the world. ensure that Players feel like their actions have an impact on the world.
</p> </p>
<p>In general, you should only have two to four escalations per campaign.</p> <p>
In general, you should only have two to four escalations per campaign.
</p>
<h2>VILLAIN AND FABULA POINTS</h2> <h2>VILLAIN AND FABULA POINTS</h2>
<p> <p>
@@ -24,28 +26,28 @@
<ul> <ul>
<li> <li>
<strong>Multiple identities.</strong> If a Villain has more than one <strong>Multiple identities.</strong> If a Villain has more than one
identity, the heroes only receive Fabula Points when they appear using their identity, the heroes only receive Fabula Points when they appear using
"antagonist persona". Once the deception is exposed, however, they will their "antagonist persona". Once the deception is exposed, however, they
begin awarding Fabula Points every time they appear on a scene, whether will begin awarding Fabula Points every time they appear on a scene,
disguised or else. whether disguised or else.
</li> </li>
<li> <li>
<strong>Multiple Villains.</strong> If two or more Villains appear during <strong>Multiple Villains.</strong> If two or more Villains appear during
the same scene, each Player Character will gain 1 Fabula Point per Villain, the same scene, each Player Character will gain 1 Fabula Point per
up to a maximum of 3 Fabula Points per Player Character earned this way Villain, up to a maximum of 3 Fabula Points per Player Character earned
during the same scene. this way during the same scene.
</li> </li>
<li> <li>
<strong>Back-to-back scenes with Villains.</strong> If a Villain's presence <strong>Back-to-back scenes with Villains.</strong> If a Villain's
extends for several consecutive scenes, the Player Characters only gain 1 presence extends for several consecutive scenes, the Player Characters
Fabula Point at the beginning, and no additional Fabula Points for the only gain 1 Fabula Point at the beginning, and no additional Fabula Points
following scenes. for the following scenes.
</li> </li>
</ul> </ul>
<p> <p>
Whenever the heroes are running low on Fabula Points, the Game Master should Whenever the heroes are running low on Fabula Points, the Game Master should
run a Game Master scene and show a Villain in action — this is a great way to run a Game Master scene and show a Villain in action — this is a great way
push the story forward while also giving the heroes a bit more "fuel". to push the story forward while also giving the heroes a bit more "fuel".
</p> </p>
<blockquote> <blockquote>

View File

@@ -1,95 +1,89 @@
<h2>Elementalist Spells</h2> <h1>ELEMENTALIST SPELLS</h1>
<table> <h2>SPELL</h2>
<thead> <div class="spell-entry">
<tr> <h3>Elemental Shroud</h3>
<th>Name</th> <p><strong>Cost:</strong> 5</p>
<th>Cost</th> <p><strong>Targets:</strong> T</p>
<th>Targets</th> <p><strong>Duration:</strong> Up to three creatures</p>
<th>Duration</th> <p><strong>Action:</strong> Scene</p>
</tr> <p>
</thead> You weave magical energy and protect the targets from the fury of the
<tbody> elements.
<tr> </p>
<td>Elemental Shroud</td> <p>
<td>5 x T</td> Choose a damage type: air, bolt, earth, fire or ice. Until this spell ends,
<td>Up to three creatures</td> each target gains Resistance against the chosen damage type.
<td>scene</td> </p>
</tr> </div>
<tr> <div class="spell-entry">
<td colspan="4"> <h3>Elemental Weapon</h3>
You weave magical energy and protect the targets from the fury of the <p><strong>Cost:</strong> 10</p>
elements. Choose a damage type: air, bolt, earth, fire or ice. Until <p><strong>Targets:</strong> One weapon</p>
this spell ends, each target gains Resistance against the chosen damage <p><strong>Duration:</strong> Scene</p>
type. <p>
</td> You imbue a weapon with elemental energy. Choose a damage type: air, bolt,
</tr> earth, fire, or ice. Until this spell ends, all damage dealt by the weapon
<tr> becomes of the chosen damage type.
<td>Elemental Weapon</td> </p>
<td>10</td> <ul>
<td>One weapon</td> <li>
<td>Scene</td> If you have that weapon equipped while you cast this spell, you may
</tr> perform a free attack with it as part of the same action.
<tr> </li>
<td colspan="4"> <li>
You imbue a weapon with elemental energy. Choose a damage type: air, This spell can only be cast on a weapon equipped by a willing creature.
bolt, earth, fire, or ice. Until this spell ends, all damage dealt by </li>
the weapon becomes of the chosen damage type. If you have that weapon </ul>
equipped while you cast this spell, you may perform a free attack with </div>
it as part of the same action. This spell can only be cast on a weapon <div class="spell-entry">
equipped by a willing creature. <h3>Flare</h3>
</td> <p><strong>Cost:</strong> rr 20</p>
</tr> <p><strong>Targets:</strong> One creature</p>
<tr> <p><strong>Duration:</strong> Instantaneous</p>
<td>Flare</td> <p>
<td>20</td> You channel a single ray of fire towards your foe, its temperature so high
<td>One creature</td> that it will pierce through most defenses. The target suffers
<td>Instantaneous</td> <strong>【HR + 25】</strong> fire damage.
</tr> </p>
<tr> <p>Damage dealt by this spell ignores Resistances.</p>
<td colspan="4"> </div>
You channel a single ray of fire towards your foe, its temperature so <div class="spell-entry">
high that it will pierce through most defenses. The target suffers【 HR <h3>Fulgur</h3>
+ 25】 fire damage. Damage dealt by this spell ignores Resistances. <p><strong>Cost:</strong> rr 10</p>
</td> <p><strong>Targets:</strong> × T</p>
</tr> <p><strong>Duration:</strong> Up to three creatures</p>
<tr> <p><strong>Action:</strong> Instantaneous</p>
<td>Fulgur</td> <p>
<td>10 x T</td> You weave electricity into a wave of crackling bolts. Each target hit by
<td>Up to three creatures</td> this spell suffers <strong>【HR + 15】</strong> bolt damage.
<td>Instantaneous</td> </p>
</tr> <p class="opportunity">
<tr> <strong>Opportunity:</strong> Each target hit by this spell suffers dazed.
<td colspan="4"> </p>
You weave electricity into a wave of crackling bolts. Each target hit by </div>
this spell suffers 【HR + 15】 bolt damage. Opportunity: Each target hit <div class="spell-entry">
by this spell suffers dazed. <h3>Glacies</h3>
</td> <p><strong>Cost:</strong> rr 10</p>
</tr> <p><strong>Targets:</strong> × T</p>
<tr> <p><strong>Duration:</strong> Up to three creatures</p>
<td>Glacies</td> <p><strong>Action:</strong> Instantaneous</p>
<td>10 x T</td> <p>
<td>Up to three creatures</td> You coat your foes under a thick layer of frost. Each target hit by this
<td>Instantaneous</td> spell suffers <strong>【HR + 15】</strong> ice damage.
</tr> </p>
<tr> <p class="opportunity">
<td colspan="4"> <strong>Opportunity:</strong> Each target hit by this spell suffers slow.
You coat your foes under a thick layer of frost. Each target hit by this </p>
spell suffers【 HR + 15】 ice damage. Opportunity: Each target hit by </div>
this spell suffers slow. <div class="spell-entry">
</td> <h3>Iceberg</h3>
</tr> <p><strong>Cost:</strong> rr 20</p>
<tr> <p><strong>Targets:</strong> One creature</p>
<td>Iceberg</td> <p><strong>Duration:</strong> Instantaneous</p>
<td>20</td> <p>
<td>One creature</td> A pillar of ice magic envelops your foe, suddenly dropping their body
<td>Instantaneous</td> temperature to a critical level. The target suffers
</tr> <strong>【HR + 25】</strong> ice damage.
<tr> </p>
<td colspan="4"> <p>Damage dealt by this spell ignores Resistances.</p>
A pillar of ice magic envelops your foe, suddenly dropping their body </div>
temperature to a critical level. The target suffers【 HR + 25】 ice
damage. Damage dealt by this spell ignores Resistances.
</td>
</tr>
</tbody>
</table>

View File

@@ -1,97 +1,91 @@
<h2>Elementalist Spells (Cont.)</h2> <div>
<h2>Spell Catalogue</h2>
<table> <section>
<thead> <h3>Ignis</h3>
<tr> <p>
<th>Name</th> <strong>Metadata:</strong> rr 10 × T | Up to three creatures |
<th>Cost</th> Instantaneous
<th>Targets</th> </p>
<th>Duration</th> <p>
</tr> You unleash a searing barrage against your foes, conjuring flames out of
</thead> thin air. Each target hit by this spell suffers
<tbody> <strong>【HR + 15】 fire damage</strong>.
<tr> </p>
<td>Ignis</td> <p><em>Opportunity:</em> Each target hit by this spell suffers shaken.</p>
<td>10 x T</td> </section>
<td>Up to three creatures</td> <section>
<td>Instantaneous</td> <h3>Soaring Strike</h3>
</tr> <p><strong>Metadata:</strong> 10 | Self | Instantaneous</p>
<tr> <p>
<td colspan="4"> The wind carries your strikes across the battlefield. You may immediately
You unleash a searing barrage against your foes, conjuring flames out of perform a free attack with a melee weapon you have equipped. This attack
thin air. Each target hit by this spell suffers【 HR + 15】 fire damage. may target creatures that can only be targeted by ranged attacks.
Opportunity: Each target hit by this spell suffers shaken. </p>
</td> <ul>
</tr> <li>
<tr> If you used a weapon belonging to the brawling or spear Category for
<td>Soaring Strike</td> this attack, it deals 5 extra damage.
<td>10</td> </li>
<td>Self</td> <li>
<td>Instantaneous</td> If you hit a flying target with this attack, you may force them to land
</tr> immediately.
<tr> </li>
<td colspan="4"> </ul>
The wind carries your strikes across the battlefield. You may </section>
immediately perform a free attack with a melee weapon you have equipped. <section>
This attack may target creatures that can only be targeted by ranged <h3>Terra</h3>
attacks. If you used a weapon belonging to the brawling or spear <p>
Category for this attack, it deals 5 extra damage. If you hit a flying <strong>Metadata:</strong> rr 10 × T | Up to three creatures |
target with this attack, you may force them to land immediately. Instantaneous
</td> </p>
</tr> <p>
<tr> Spires of jagged rock erupt from the ground beneath your foes, closing
<td>Terra</td> around them. Each target hit by this spell suffers
<td>10 x T</td> <strong>【HR + 15】 earth damage</strong>. This spell cannot target
<td>Up to three creatures</td> creatures who are flying, floating, falling, or otherwise in mid-air.
<td>Instantaneous</td> </p>
</tr> <p>
<tr> <em>Opportunity:</em> Each target hit by this spell performs one fewer
<td colspan="4"> action on their next turn (to a minimum of 0 actions).
Spires of jagged rock erupt from the ground beneath your foes, closing </p>
around them. Each target hit by this spell suffers【 HR + 15】 earth </section>
damage. This spell cannot target creatures who are flying, floating, <section>
falling, or otherwise in mid-air. Opportunity: Each target hit by this <h3>Thunderbolt</h3>
spell performs one fewer action on their next turn (to a minimum of 0 <p><strong>Metadata:</strong> rr 20 | One creature | Instantaneous</p>
actions). <p>
</td> You send lightning striking at your foe. The target suffers
</tr> <strong>【HR + 25】 bolt damage</strong>.
<tr> </p>
<td>Thunderbolt</td> <p>Damage dealt by this spell ignores Resistances.</p>
<td>20</td> </section>
<td>One creature</td> <section>
<td>Instantaneous</td> <h3>Ventus</h3>
</tr> <p>
<tr> <strong>Metadata:</strong> rr 10 × T | Up to three creatures |
<td colspan="4"> Instantaneous
You send lightning striking at your foe. The target suffers【 HR + 25】 </p>
bolt damage. Damage dealt by this spell ignores Resistances. <p>
</td> You summon the power of winds against your enemy. Each target hit by this
</tr> spell suffers <strong>【HR + 15】 air damage</strong>.
<tr> </p>
<td>Ventus</td> <p>
<td>10 x T</td> <em>Opportunity:</em> Each flying target hit by this spell is forced to
<td>One creature</td> land immediately.
<td>Instantaneosu</td> </p>
</tr> </section>
<tr> <section>
<td colspan="4"> <h3>Vortex</h3>
You summon the power of winds against your enemy. Each target hit by <p><strong>Metadata:</strong> 10 | Self | Scene</p>
this spell suffers【 HR + 15】 air damage. Opportunity: Each flying <p>
target hit by this spell is forced to land immediately. A roaring gale surrounds you, blowing away arrows and bullets. Until this
</td> spell ends, you gain a +2 bonus to your Defense against ranged attacks.
</tr> </p>
<tr> </section>
<td>Vortex</td> <aside>
<td>10</td> <h4>Notes</h4>
<td>Self</td> <p>
<td>Scene</td> <strong>cc</strong> Spells marked with <code>rr</code> are offensive
</tr> spells and require Magic Checks!
<tr> </p>
<td colspan="4"> </aside>
A roaring gale surrounds you, blowing away arrows and bullets. Until </div>
this spell ends, you gain a +2 bonus to your Defense against ranged
attacks.
</td>
</tr>
</tbody>
</table>

View File

@@ -1,112 +1,98 @@
<h2>Entropist Spells</h2> <h1>Spell List</h1>
<table> <section>
<thead> <h2>Acceleration</h2>
<tr> <p>
<th>Name</th> <strong>Cost:</strong> 20 | <strong>Type:</strong> One creature |
<th>Cost</th> <strong>Scene:</strong>
<th>Targets</th> </p>
<th>Duration</th> <p>
</tr> You bend the fabric of time. Until this spell ends, the target gains the
</thead> ability to perform a single additional action during each of their turns.
<tbody> Once the target has performed a total of two additional actions granted by
<tr> this spell, this spell ends.
<td>Acceleration</td> </p>
<td>20</td> </section>
<td>One creature</td> <section>
<td>Scene</td> <h2>Anomaly</h2>
</tr> <p>
<tr> <strong>Cost:</strong> 20 | <strong>Type:</strong> One creature |
<td colspan="4"> <strong>Scene:</strong>
You bend the fabric of time. Until this spell ends, the target gains the </p>
ability to perform a single additional action during each of their <p>
turns. Once the target has performed a total of two additional actions You alter the very nature of your target. Until this spell ends, if the
granted by this spell, this spell ends. target would suffer damage of a type they Absorb or are Immune to, they are
</td> instead treated as if they were Vulnerable to that damage type. Once that
</tr> happens, this spell ends.
<tr> </p>
<td>Anomaly</td> </section>
<td>20</td> <section>
<td>One creature</td> <h2>Dark Weapon</h2>
<td>Scene</td> <p>
</tr> <strong>Cost:</strong> 10 | <strong>Type:</strong> One equipped weapon |
<tr> <strong>Scene:</strong>
<td colspan="4"> </p>
You alter the very nature of your target. Until this spell ends, if the <p>
target would suffer damage of a type they Absorb or are Immune to, they You imbue a weapon with dark energy. Until this spell ends, all damage dealt
are instead treated as if they were Vulnerable to that damage type. Once by the weapon becomes of the dark type. If you have that weapon equipped
that happens, this spell ends. while you cast this spell, you may perform a free attack with it as part of
</td> the same action.
</tr> </p>
<tr> <p class="restrictions">
<td>Dark Weapon</td> <em
<td>10</td> >This spell can only be cast on a weapon equipped by a willing
<td>One equipped weapon</td> creature.</em
<td>Scene</td> >
</tr> </p>
<tr> </section>
<td colspan="4"> <section>
You imbue a weapon with dark energy. Until this spell ends, all damage <h2>Dispel</h2>
dealt by the weapon becomes of the dark type. If you have that weapon <p>
equipped while you cast this spell, you may perform a free attack with <strong>Cost:</strong> 10 | <strong>Type:</strong> One creature |
it as part of the same action. This spell can only be cast on a weapon <strong>Instantaneous:</strong>
equipped by a willing creature. </p>
</td> <p>
</tr> You release a wave of negative energy and cleanse all magic from a creature.
<tr> If the target is affected by one or more spells with a duration of Scene,
<td>Dispel</td> they are no longer affected by any of those spells instead.
<td>10</td> </p>
<td>One creature</td> </section>
<td>Instantaneous</td> <section>
</tr> <h2>Divination</h2>
<tr> <p>
<td colspan="4"> <strong>Cost:</strong> 10 | <strong>Type:</strong> Self |
You release a wave of negative energy and cleanse all magic from a <strong>Scene:</strong>
creature. If the target is affected by one or more spells with a </p>
duration of Scene, they are no longer affected by any of those spells <p>
instead. You glimpse briefly into the future. Until this spell ends, after a creature
</td> you can see performs a Check, if it was not a fumble nor a critical success,
</tr> you may force that creature to reroll both dice. Once you have forced two
<tr> rerolls this way, this spell ends.
<td>Divination</td> </p>
<td>10</td> </section>
<td>Self</td> <section>
<td>Scene</td> <h2>Drain Spirit</h2>
</tr> <p>
<tr> <strong>Cost:</strong> 5 | <strong>Type:</strong> One creature |
<td colspan="4"> <strong>Instantaneous:</strong>
You glimpse briefly into the future. Until this spell ends, after a </p>
creature you can see performs a Check, if it was not a fumble nor a <p>
critical success, you may force that creature to reroll both dice. Once You consume a creature's psyche. The target loses 【HR + 15】 Mind Points.
you have forced two rerolls this way, this spell ends. Then, you recover an amount of Mind Points equal to half the Mind Points
</td> loss they suffered (if the loss was reduced to 0 in some way, you recover
</tr> none).
<tr> </p>
<td>Drain Spirit</td> </section>
<td>5</td> <section>
<td>One creature</td> <h2>Drain Vigor</h2>
<td>Instantaneous</td> <p>
</tr> <strong>Cost:</strong> 10 | <strong>Type:</strong> One creature |
<tr> <strong>Instantaneous:</strong>
<td colspan="4"> </p>
You consume a creature's psyche. The target loses【 HR + 15】 Mind <p>
Points. Then, you recover an amount of Mind Points equal to half the You steal another creature's life force. The target suffers 【HR + 15 】
Mind Points loss they suffered (if the loss was reduced to 0 in some dark damage. Then, you recover an amount of Hit Points equal to half the Hit
way, you recover none). Points loss they suffered (if the loss was reduced to 0 in some way, you
</td> recover none).
</tr> </p>
<tr> </section>
<td>Drain Vigor</td> <aside class="collection-info"><h3>Entropist Spells</h3></aside>
<td>10</td>
<td>One creature</td>
<td>Instantaneous</td>
</tr>
<tr>
<td colspan="4">
You steal another creature's life force. The target suffers【 HR + 15】
dark damage. Then, you recover an amount of Hit Points equal to half the
Hit Points loss they suffered (if the loss was reduced to 0 in some way,
you recover none).
</td>
</tr>
</tbody>
</table>

View File

@@ -1,102 +1,75 @@
<h2>Entropist Spells (Cont.)</h2> <h2>Gamble up to 20</h2>
<table> <p><strong>Type:</strong> Special</p>
<thead> <p><strong>Target:</strong> Instantaneous</p>
<tr> <p class="duration">
<th>Name</th> You summon a vortex of chaotic energy. Roll your current Willpower die once
<th>Cost</th> for every 10 Mind Points spent while casting this spell, then keep the single
<th>Targets</th> die you prefer: the number on that die determines the effects of this spell.
<th>Duration</th> </p>
</tr> <ol>
</thead> <li>
<tbody> <strong>1:</strong> You lose half of your current Hit Points and half of
<tr> your current Mind Points.
<td>Gamble</td> </li>
<td>Up to 20</td> <li>
<td>Special</td> <strong>2-3:</strong> Each creature present on the scene, including
<td>Scene</td> yourself, suffers poisoned.
</tr> </li>
<tr> <li>
<td colspan="4"> <strong>4-6:</strong> Each creature present on the scene, including
You summon a vortex of chaotic energy. Roll your current Willpower die yourself, suffers slow.
once for every 10 Mind Points spent while casting this spell, then keep </li>
the single die you prefer: the number on that die determines the effects <li>
of this spell. <strong>7-8:</strong> Choose up to three creatures you can see: each of them
<ul> recovers 50 Hit Points and also recovers from all status effects.
<li> </li>
1) You lose half of your current Hit Points and half of your current <li>
Mind Points. <strong>9+:</strong> Choose any number of creatures you can see: each of
</li> them suffers 30 damage. The damage type is determined randomly by rolling a
<li> d6:
2-3) Each creature present on the scene, including yourself, suffers </li>
poisoned. <ul>
</li> <li>1. air</li>
<li> <li>2. bolt</li>
4-6) Each creature present on the scene, including yourself, suffers <li>3. dark</li>
slow. <li>4. earth</li>
</li> <li>5. fire</li>
<li> <li>6. poison</li>
7-8) Choose up to three creatures you can see: each of them recovers </ul>
50 Hit Points and also recovers from all status effects. </ol>
</li> <h2>Mirror 10</h2>
<li> <p><strong>Type:</strong> One creature</p>
9+) Choose any number of creatures you can see: each of them suffers <p><strong>Scene Duration:</strong> Until this spell ends</p>
30 damage. The damage type is determined randomly by rolling a d6: <p>
1. air 2. bolt 3. dark 4. earth 5. fire 6. poison You twist the laws of magic. Until this spell ends, if an offensive spell is
</li> cast on the target, the creature who cast that offensive spell will be
</ul> targeted in their stead (any other targets of the offensive spell will be
</td> targeted as normal). Once that happens, this spell ends.
</tr> </p>
<tr> <h2>Omega rr 20</h2>
<td>Mirror</td> <p><strong>Type:</strong> One creature</p>
<td>10</td> <p><strong>Duration:</strong> Instantaneous</p>
<td>One creature</td> <p>
<td>Scene</td> You invoke doom on your foe, turning strength into frailty. The target loses
</tr> an amount of Hit Points equal to
<tr> <code>【20 + half the target's level】</code>.
<td colspan="4"> </p>
You twist the laws of magic. Until this spell ends, if an offensive (r) <h2>Stop rr 10</h2>
spell is cast on the target, the creature who cast that offensive spell <p><strong>Type:</strong> One creature</p>
will be targeted in their stead (any other targets of the offensive <p><strong>Duration:</strong> Instantaneous</p>
spell will be targeted as normal). Once that happens, this spell ends. <p>
</td> You trap a foe inside a circle of altered time and space. The target will
</tr> perform one fewer action on their next turn (to a minimum of 0 actions).
<tr> </p>
<td>Omega</td> <h2>Umbra rr 10 × T</h2>
<td>20</td> <p><strong>Type:</strong> Up to three creatures</p>
<td>One creature</td> <p><strong>Duration:</strong> Instantaneous</p>
<td>Instantaneous</td> <p>
</tr> A storm of dark energy turns matter into ash. Each target hit by this spell
<tr> suffers <code>【HR + 15】</code> dark damage.
<td colspan="4"> </p>
You invoke doom on your foe, turning strength into frailty. The target <p><em>Opportunity:</em> Each target hit by this spell suffers weak.</p>
loses an amount of Hit Points equal to【 20 + half the target's level】 <h3>Notes</h3>
</td> <ul>
</tr> <li>Spells marked with rr are offensive spells and require Magic Checks!</li>
<tr> </ul>
<td>Stop</td>
<td>10</td>
<td>One creature</td>
<td>Instantaneous</td>
</tr>
<tr>
<td colspan="4">
You trap a foe inside a circle of altered time and space. The target
will perform one fewer action on their next turn (to a minimum of 0
actions).
</td>
</tr>
<tr>
<td>Umbra</td>
<td>10 x T</td>
<td>Up to three creatures</td>
<td>Scene</td>
</tr>
<tr>
<td colspan="4">
A storm of dark energy turns matter into ash. Each target hit by this
spell suffers 【HR + 15】 dark damage. Opportunity: Each target hit by
this spell suffers weak.
</td>
</tr>
</tbody>
</table>

View File

@@ -1 +0,0 @@
<em> This page is intentionally left blank. </em>

View File

@@ -1,20 +1,20 @@
<h1>Spiritist</h1> <h1>Spiritist</h1>
<p><strong>ALSO:</strong> Healer, Priest, Witch</p> <section>
<h2>Related Terms</h2>
<h3>Definition</h3> <p><strong>ALSO:</strong> Healer, Priest, Witch</p>
<div class="motto-block"><em>"Show me the truths of your heart."</em></div>
<p> <h3>Definition</h3>
Spiritists have developed a powerful connection with the raw aspects of soul: <p>
emotion, energy, life, and death. They wield power both miraculous and Spiritists have developed a powerful connection with the raw aspects of
frightening, and are quite often affiliated with cults or religions. soul: emotion, energy, life, and death. They wield power both miraculous and
</p> frightening, and are quite often affiliated with cults or religions.
</p>
<h3>Nature of Abilities</h3> </section>
<section class="further-details">
<p> <h3>Nature of Abilities</h3>
Several worlds see the powers of Spiritism as gifts from a deity or proof that <p>
a person's heart is pure; however, there is no definite proof of these Several worlds see the powers of Spiritism as gifts from a deity or proof
abilities coming from anything but discipline, empathy, and focus. that a person's heart is pure; however, there is no definite proof of these
</p> abilities coming from anything but discipline, empathy, and focus.
</p>
<blockquote>Show me the truths of your heart.</blockquote> </section>

View File

@@ -1,17 +1,14 @@
<h2>SPIRITIST BENEFITS AND SKILLS</h2> <h1>SPIRITIST BENEFITS AND SKILLS</h1>
<h2>Free Benefits</h2>
<h3>Free Benefits:</h3>
<ul> <ul>
<li>Permanently increase your maximum Mind Points by 5.</li> <li>Permanently increase your maximum Mind Points by 5.</li>
<li> <li>
You may perform Rituals whose effects fall within the Ritualism discipline. You may perform Rituals whose effects fall within the Ritualism discipline.
</li> </li>
</ul> </ul>
<hr />
<h3>SPIRITIST SKILLS</h3> <h2>SPIRITIST SKILLS</h2>
<h3>HEALING POWER (çç2)</h3>
<h4>HEALING POWER</h4>
<p> <p>
When you cast a spell that targets one or more allies, if you have an arcane When you cast a spell that targets one or more allies, if you have an arcane
weapon equipped, you may have each of those allies recover an amount of Hit weapon equipped, you may have each of those allies recover an amount of Hit
@@ -19,29 +16,25 @@
<strong>【SL, multiplied by the number of Bonds you have】</strong>. This <strong>【SL, multiplied by the number of Bonds you have】</strong>. This
healing is separate from any healing caused by the effects of the spell. healing is separate from any healing caused by the effects of the spell.
</p> </p>
<h3>RITUAL SPIRITISM</h3>
<h4>RITUAL SPIRITISM</h4>
<p> <p>
You may perform Rituals whose effects fall within the Spiritism discipline. You may perform Rituals whose effects fall within the Spiritism discipline.
Spiritism Rituals use <strong>【INS + WLP】</strong> for the Magic Check. Spiritism Rituals use <strong>【INS + WLP】</strong> for the Magic Check.
</p> </p>
<h3>SPIRITUAL MAGIC (çç10)</h3>
<h4>SPIRITUAL MAGIC (çç10)</h4>
<p> <p>
Each time you acquire this Skill, learn one Spiritist spell (see next two Each time you acquire this Skill, learn one Spiritist spell (see next two
pages). Offensive Spiritist spells use <strong>【INS + WLP】</strong> for the pages). Offensive Spiritist spells use <strong>【INS + WLP】</strong> for the
Magic Check. Magic Check.
</p> </p>
<h3>SUPPORT MAGIC</h3>
<h4>SUPPORT MAGIC</h4>
<p> <p>
When you cast a spell that targets one or more allies, if you have an arcane When you cast a spell that targets one or more allies, if you have an arcane
weapon equipped, you may choose one of those allies you have a Bond towards. weapon equipped, you may choose one of those allies you have a Bond towards.
If you do, that ally gains a bonus to the next Check they perform during the If you do, that ally gains a bonus to the next Check they perform during the
current scene; this bonus is equal to the strength of your Bond towards them. current scene; this bonus is equal to the strength of your Bond towards them.
</p> </p>
<h3>VISMAGUS</h3>
<h4>VISMAGUS</h4>
<p> <p>
When you cast a spell, if you don't have enough Mind Points to pay for its When you cast a spell, if you don't have enough Mind Points to pay for its
total cost, you may choose to spend twice as many Hit Points instead. You total cost, you may choose to spend twice as many Hit Points instead. You
@@ -49,7 +42,7 @@
cast this way would cause you to recover Hit Points, you instead recover no cast this way would cause you to recover Hit Points, you instead recover no
Hit Points (the spell functions normally on any other target). Hit Points (the spell functions normally on any other target).
</p> </p>
<hr />
<h2>Background Prompts</h2> <h2>Background Prompts</h2>
<ul> <ul>
<li> <li>
@@ -65,5 +58,4 @@
</li> </li>
<li>What does your magic look like?</li> <li>What does your magic look like?</li>
</ul> </ul>
<p>Show me the truths of your heart.</p>
<blockquote>Show me the truths of your heart.</blockquote>

View File

@@ -1,95 +1,63 @@
<h2>Spiritist Spells</h2> <h1>SPIRITIST SPELLS</h1>
<table> <h2>Aura</h2>
<thead> <p>
<tr> <strong>Cost:</strong> 5 × T | <strong>Targets:</strong> Up to three creatures
<th>Name</th> | <strong>Duration:</strong> Scene
<th>Cost</th> </p>
<th>Targets</th> <p>
<th>Duration</th> You project your soul outside your body and direct it to surround the targets,
</tr> shielding them from dangerous magic. Until this spell ends, each target may
</thead> treat their Magic Defense as being equal to 12 against any effects that target
<tbody> it (they are still free to use their normal Defense score if higher than 12).
<tr> </p>
<td>Aura</td> <h2>Awaken</h2>
<td>5 x T</td> <p>
<td>Up to three creatures</td> <strong>Cost:</strong> 20 | <strong>Targets:</strong> One creature |
<td>scene</td> <strong>Duration:</strong> Scene
</tr> </p>
<tr> <p>
<td colspan="4"> You allow a creature to focus their vital energy into accomplishing what they
You project your soul outside your body and direct it to surround the previously could not. Choose one Attribute: Dexterity, Insight, Might, or
targets, shielding them from dangerous magic. Until this spell ends, Willpower. Until this spell ends, the target treats the chosen Attribute as if
each target may treat their Magic Defense as being equal to 12 against it were one die size higher (up to a maximum of d12).
any effects that target it (they are still free to use their normal </p>
Defense score if higher than 12). <h2>Barrier</h2>
</td> <p>
</tr> <strong>Cost:</strong> 5 × T | <strong>Targets:</strong> Up to three creatures
<tr> | <strong>Duration:</strong> Scene
<td>Awaken</td> </p>
<td>20</td> <p>
<td>One creature</td> You project your soul outside your body and weave it into a barrier to protect
<td>scene</td> the targets from attacks. Until this spell ends, each target may treat their
</tr> Defense as being equal to 12 against any effects that target it (they are
<tr> still free to use their normal Defense score if higher than 12).
<td colspan="4"> </p>
You allow a creature to focus their vital energy into accomplishing what <h2>Cleanse</h2>
they previously could not. Choose one Attribute: Dexterity, Insight, <p>
Might, or Willpower. Until this spell ends, the target treats the chosen <strong>Cost:</strong> 5 × T | <strong>Targets:</strong> Up to three creatures
Attribute as if it were one die size higher (up to a maximum of d12). | <strong>Duration:</strong> Instantaneous
</td> </p>
</tr> <p>
<tr> You strengthen and purify the soul energy coursing through your companions.
<td>Barrier</td> Each target recovers from all status effects.
<td>5 x T</td> </p>
<td>Up to three creatures</td> <h2>Enrage</h2>
<td>scene</td> <p>
</tr> <strong>Cost:</strong> rr 10 | <strong>Targets:</strong> One creature |
<tr> <strong>Duration:</strong> Instantaneous
<td colspan="4"> </p>
You project your soul outside your body and weave it into a barrier to <p>
protect the targets from attacks. Until this spell ends, each target may You cause a creature to lose any semblance of temper and act brazenly. The
treat their Defense as being equal to 12 against any effects that target target suffers enraged and cannot perform the Guard or Spell actions during
it (they are still free to use their normal Defense score if higher than their next turn.
12). </p>
</td> <h2>Hallucination</h2>
</tr> <p>
<tr> <strong>Cost:</strong> rr 5 × T | <strong>Targets:</strong> Up to three
<td>Cleanse</td> creatures | <strong>Duration:</strong> Instantaneous
<td>5 x T</td> </p>
<td>Up to three creatures</td> <p>
<td>Instantaneous</td> You alter the senses of your enemies, causing them to experience bizarre or
</tr> frightening hallucinations. Choose dazed or shaken: you inflict the chosen
<tr> status effect on each target hit by this spell.
<td colspan="4"> </p>
You strengthen and purify the soul energy coursing through your
companions. Each target recovers from all status effects.
</td>
</tr>
<tr>
<td>Enrage</td>
<td>rr 10</td>
<td>One creature</td>
<td>Instantaneous</td>
</tr>
<tr>
<td colspan="4">
You cause a creature to lose any semblance of temper and act brazenly.
The target suffers enraged and cannot perform the Guard or Spell actions
during their next turn.
</td>
</tr>
<tr>
<td>Hallucination</td>
<td>rr 5 x T</td>
<td>Up to three creatures</td>
<td>Instantaneous</td>
</tr>
<tr>
<td colspan="4">
You alter the senses of your enemies, causing them to experience bizarre
or frightening hallucinations. Choose dazed or shaken: you inflict the
chosen status effect on each target hit by this spell.
</td>
</tr>
</tbody>
</table>

View File

@@ -1,95 +0,0 @@
<h2>Spiritist Spells (Cont.)</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Cost</th>
<th>Targets</th>
<th>Duration</th>
</tr>
</thead>
<tbody>
<tr>
<td>Heal</td>
<td>10 x T</td>
<td>Up to three creatures</td>
<td>Instantaneous</td>
</tr>
<tr>
<td colspan="4">
You invigorate your companions, soothing their pain and healing their
fatigue. Each target recovers 40 Hit Points. This amount increases to 50
Hit Points if you are level 20 or higher, or to 60 Hit Points if you are
level 40 or higher.
</td>
</tr>
<tr>
<td>Lux</td>
<td>10 x T</td>
<td>Up to three creatures</td>
<td>Instantaneous</td>
</tr>
<tr>
<td colspan="4">
You focus your inner energy into a barrage of blinding soul rays. Each
target hit by this spell suffers【 HR + 15】 light damage. Opportunity:
Each target hit by this spell suffers dazed.
</td>
</tr>
<tr>
<td>Mercy</td>
<td>20</td>
<td>One creature</td>
<td>Scene</td>
</tr>
<tr>
<td colspan="4">
You strengthen the heart of a creature against suffering and despair.
Until this spell ends, if the target would be reduced to 0 Hit Points,
they are instead left standing with exactly 1 Hit Point. Once that
happens, this spell ends.
</td>
</tr>
<tr>
<td>Reinforce</td>
<td>5 x T</td>
<td>Up to three creatures</td>
<td>Scene</td>
</tr>
<tr>
<td colspan="4">
You protect the targets from attacks that would corrupt their body and
spirit. Choose dazed, enraged, poisoned, shaken, slow, or weak. Until
this spell ends, each target becomes immune to the chosen status effect.
</td>
</tr>
<tr>
<td>Soul Weapon</td>
<td>10</td>
<td>One equipped weapon</td>
<td>Scene</td>
</tr>
<tr>
<td colspan="4">
You imbue a weapon with the cleansing energy of your spirit. Until this
spell ends, all damage dealt by the weapon becomes of the light type. If
you have that weapon equipped while you cast this spell, you may perform
a free attack with it as part of the same action. This spell can only be
cast on a weapon equipped by a willing creature.
</td>
</tr>
<tr>
<td>Torpor</td>
<td>5 x T</td>
<td>Up to three creatures</td>
<td>Instantaneous</td>
</tr>
<tr>
<td colspan="4">
You smother the soul energy coursing through the bodies of your foes,
hindering their movements. Choose slow or weak: you inflict the chosen
status effect on each target hit by this spell.
</td>
</tr>
</tbody>
</table>

View File

@@ -41,6 +41,7 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr class="main"> <tr class="main">
<td class="icon" rowspan="2">🗡️</td> <td class="icon" rowspan="2">🗡️</td>
<td><b>Blessed Mace</b></td> <td><b>Blessed Mace</b></td>
@@ -71,11 +72,8 @@
<td>【HR + 6】light</td> <td>【HR + 6】light</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">Two-handed ◆ Melee ◆ You gain a +2 bonus to Magic Checks against <b>demons</b>, as well as a
Two-handed ◆ Melee ◆ You gain a +2 bonus to Magic Checks against <b>+2</b> bonus to Opposed Checks against <b>demons</b>.</td>
<b>demons</b>, as well as a <b>+2</b> bonus to Opposed Checks against
<b>demons</b>.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -86,9 +84,7 @@
<td>【HR + 2】physical</td> <td>【HR + 2】physical</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Melee ◆ You gain a +1 bonus to your Magic Checks.</td>
One-handed ◆ Melee ◆ You gain a +1 bonus to your Magic Checks.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -99,10 +95,8 @@
<td>【HR + 6】dark</td> <td>【HR + 6】dark</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">Two-handed ◆ Melee ◆ Whenever you hit one or more creatures with this weapon, each of them loses
Two-handed ◆ Melee ◆ Whenever you hit one or more creatures with this 10 Mind Points.</td>
weapon, each of them loses 10 Mind Points.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -113,10 +107,8 @@
<td>【HR + 6】air</td> <td>【HR + 6】air</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Melee ◆ When you hit one or more creatures with this weapon, you may recover 5 Hit
One-handed ◆ Melee ◆ When you hit one or more creatures with this Points.</td>
weapon, you may recover 5 Hit Points.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -127,10 +119,8 @@
<td>【HR + 6】physical</td> <td>【HR + 6】physical</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">Two-handed ◆ Melee ◆ Spells you cast whose effects restore Hit Points will restore 5 extra Hit
Two-handed ◆ Melee ◆ Spells you cast whose effects restore Hit Points Points.</td>
will restore 5 extra Hit Points.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -141,10 +131,8 @@
<td>【HR + 6】dark</td> <td>【HR + 6】dark</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">Two-handed ◆ Melee ◆ When you hit one or more creatures with an offensive (⚡) spell, each of them
Two-handed ◆ Melee ◆ When you hit one or more creatures with an suffers <b>shaken</b>.</td>
offensive (⚡) spell, each of them suffers <b>shaken</b>.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -155,9 +143,7 @@
<td>【HR + 6】physical</td> <td>【HR + 6】physical</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">Two-handed ◆ Melee ◆ Spells you cast deal 5 extra damage.</td>
Two-handed ◆ Melee ◆ Spells you cast deal 5 extra damage.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -168,10 +154,9 @@
<td>【HR + 10】poison</td> <td>【HR + 10】poison</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">Two-handed ◆ Melee ◆ When you hit one or more creatures with an offensive (⚡) spell, each of them
Two-handed ◆ Melee ◆ When you hit one or more creatures with an suffers <b>poisoned</b>.</td>
offensive (⚡) spell, each of them suffers <b>poisoned</b>.
</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>

View File

@@ -47,6 +47,7 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr class="main"> <tr class="main">
<td class="icon" rowspan="2">🗡️</td> <td class="icon" rowspan="2">🗡️</td>
<td><b>Hand Crossbow</b></td> <td><b>Hand Crossbow</b></td>
@@ -77,9 +78,7 @@
<td>【HR + 12】physical</td> <td>【HR + 12】physical</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">Two-handed ◆ Ranged ◆ Damage dealt by this weapon ignores Resistances.</td>
Two-handed ◆ Ranged ◆ Damage dealt by this weapon ignores Resistances.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -90,9 +89,7 @@
<td>【HR + 8】air</td> <td>【HR + 8】air</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">Two-handed ◆ Ranged ◆ You are immune to <b>shaken</b>.</td>
Two-handed ◆ Ranged ◆ You are immune to <b>shaken</b>.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -103,9 +100,7 @@
<td>【HR + 8】bolt</td> <td>【HR + 8】bolt</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">Two-handed ◆ Ranged ◆ You have Resistance to <b>bolt</b> damage.</td>
Two-handed ◆ Ranged ◆ You have Resistance to <b>bolt</b> damage.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -116,10 +111,8 @@
<td>【HR + 8】fire</td> <td>【HR + 8】fire</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">Two-handed ◆ Ranged ◆ When you reduce a creature to 0 Hit Points with this weapon, you may
Two-handed ◆ Ranged ◆ When you reduce a creature to 0 Hit Points with immediately recover 2 Inventory Points.</td>
this weapon, you may immediately recover 2 Inventory Points.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -130,9 +123,7 @@
<td>【HR + 12】physical</td> <td>【HR + 12】physical</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">Two-handed ◆ Ranged ◆ Attacks with this weapon have <b>multi (2)</b>.</td>
Two-handed ◆ Ranged ◆ Attacks with this weapon have <b>multi (2)</b>.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -143,10 +134,8 @@
<td>【HR + 12】earth</td> <td>【HR + 12】earth</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">Two-handed ◆ Ranged ◆ When you hit a flying target with this weapon, you may force that target to
Two-handed ◆ Ranged ◆ When you hit a flying target with this weapon, you land immediately.</td>
may force that target to land immediately.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -157,11 +146,8 @@
<td>【HR + 12】ice</td> <td>【HR + 12】ice</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">Two-handed ◆ Ranged ◆ When you hit one or more creatures with this weapon, if you have at least
Two-handed ◆ Ranged ◆ When you hit one or more creatures with this one <b>Bond</b> of <b>inferiority</b>, you may recover 5 MP.</td>
weapon, if you have at least one <b>Bond</b> of <b>inferiority</b>, you
may recover 5 MP.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -172,10 +158,7 @@
<td>【HR + 12】poison</td> <td>【HR + 12】poison</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">Two-handed ◆ Ranged ◆ Each target hit by this weapon suffers <b>slow</b>.</td>
Two-handed ◆ Ranged ◆ Each target hit by this weapon suffers
<b>slow</b>.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -186,9 +169,8 @@
<td>【HR + 12】light</td> <td>【HR + 12】light</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">Two-handed ◆ Ranged ◆ You have Immunity to <b>dark</b> damage.</td>
Two-handed ◆ Ranged ◆ You have Immunity to <b>dark</b> damage.
</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>

View File

@@ -1,207 +1,186 @@
<meta charset="UTF-8" /> <meta charset="UTF-8">
<title>Sample Rare Brawling Weapons</title> <title>Sample Rare Brawling Weapons</title>
<style> <style>
table { table {
border-collapse: collapse; border-collapse: collapse;
width: 100%; width: 100%;
} }
th { th {
/* background-color: #2d5a4e; /* background-color: #2d5a4e;
color: white; */ color: white; */
padding: 8px 12px; padding: 8px 12px;
text-align: left; text-align: left;
} }
td { td {
padding: 6px 12px; padding: 6px 12px;
vertical-align: top; vertical-align: top;
} }
tr.desc td { tr.desc td {
/* background-color: #f0f4f0; */ /* background-color: #f0f4f0; */
font-size: 0.95em; font-size: 0.95em;
} }
tr.main td { tr.main td {
border-top: 1px solid #ccc; border-top: 1px solid #ccc;
} }
.icon { .icon {
width: 48px; width: 48px;
text-align: center; text-align: center;
} }
.rare { .rare {
color: #c0392b; color: #c0392b;
} }
</style> </style>
<h2>SAMPLE RARE BRAWLING WEAPONS</h2> <h2>SAMPLE RARE BRAWLING WEAPONS</h2>
<table> <table>
<thead> <thead>
<tr> <tr>
<th colspan="2">WEAPON</th> <th colspan="2">WEAPON</th>
<th>COST</th> <th>COST</th>
<th>ACCURACY</th> <th>ACCURACY</th>
<th>DAMAGE</th> <th>DAMAGE</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr class="main">
<td class="icon" rowspan="2">🗡️</td>
<td><b>Nekode</b></td>
<td>250 z</td>
<td>【DEX + MIG】+1</td>
<td>【HR + 6】physical</td>
</tr>
<tr class="desc">
<td colspan="4">One-handed ◆ Melee ◆ No Quality.</td>
</tr>
<tr class="main"> <tr class="main">
<td class="icon" rowspan="2">🗡️</td> <td class="icon" rowspan="2">🗡️</td>
<td><b>Hellfist</b></td> <td><b>Nekode</b></td>
<td>350 z</td> <td>250 z</td>
<td>【DEX + MIG】</td> <td>【DEX + MIG】+1</td>
<td>【HR + 6】dark</td> <td>【HR + 6】physical</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Melee ◆ No Quality.</td>
One-handed ◆ Melee ◆ Attacks with this weapon target Magic Defense. </tr>
</td>
</tr>
<tr class="main"> <tr class="main">
<td class="icon" rowspan="2">🗡️</td> <td class="icon" rowspan="2">🗡️</td>
<td><b>Frozen Grasp</b></td> <td><b>Hellfist</b></td>
<td>750 z</td> <td>350 z</td>
<td>【DEX + MIG】</td> <td>【DEX + MIG】</td>
<td>【HR + 6】ice</td> <td>【HR + 6】dark</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Melee ◆ Attacks with this weapon target Magic Defense.</td>
One-handed ◆ Melee ◆ You are immune to <b>enraged</b>. </tr>
</td>
</tr>
<tr class="main"> <tr class="main">
<td class="icon" rowspan="2">🗡️</td> <td class="icon" rowspan="2">🗡️</td>
<td><b>Bear Paw</b> <span class="rare"></span></td> <td><b>Frozen Grasp</b></td>
<td>850 z</td> <td>750 z</td>
<td>【DEX + MIG】</td> <td>【DEX + MIG】</td>
<td>【HR + 10】physical</td> <td>【HR + 6】ice</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4">One-handed ◆ Melee ◆ You are immune to <b>weak</b>.</td> <td colspan="4">One-handed ◆ Melee ◆ You are immune to <b>enraged</b>.</td>
</tr> </tr>
<tr class="main"> <tr class="main">
<td class="icon" rowspan="2">🗡️</td> <td class="icon" rowspan="2">🗡️</td>
<td><b>Fuel Knuckle</b></td> <td><b>Bear Paw</b> <span class="rare"></span></td>
<td>950 z</td> <td>850 z</td>
<td>【DEX + MIG】</td> <td>【DEX + MIG】</td>
<td>【HR + 6】fire</td> <td>【HR + 10】physical</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Melee ◆ You are immune to <b>weak</b>.</td>
One-handed ◆ Melee ◆ You have Resistance to <b>fire</b> damage. </tr>
</td>
</tr>
<tr class="main"> <tr class="main">
<td class="icon" rowspan="2">🗡️</td> <td class="icon" rowspan="2">🗡️</td>
<td><b>Silver Talon</b></td> <td><b>Fuel Knuckle</b></td>
<td>1100 z</td> <td>950 z</td>
<td>【DEX + DEX</td> <td>【DEX + MIG</td>
<td>【HR + 6】light</td> <td>【HR + 6】fire</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Melee ◆ You have Resistance to <b>fire</b> damage.</td>
One-handed ◆ Melee ◆ You gain a +1 bonus to Magic Defense. </tr>
</td>
</tr>
<tr class="main"> <tr class="main">
<td class="icon" rowspan="2">🗡️</td> <td class="icon" rowspan="2">🗡️</td>
<td><b>Old Bandages</b></td> <td><b>Silver Talon</b></td>
<td>1250 z</td> <td>1100 z</td>
<td>【DEX + MIG】+1</td> <td>【DEX + DEX】</td>
<td>【HR + 6】physical</td> <td>【HR + 6】light</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Melee ◆ You gain a +1 bonus to Magic Defense.</td>
One-handed ◆ Melee ◆ You have Resistance to <b>dark</b> and </tr>
<b>poison</b> damage.
</td>
</tr>
<tr class="main"> <tr class="main">
<td class="icon" rowspan="2">🗡️</td> <td class="icon" rowspan="2">🗡️</td>
<td><b>Storm Fist</b></td> <td><b>Old Bandages</b></td>
<td>1300 z</td> <td>1250 z</td>
<td>MIG + MIG】</td> <td>DEX + MIG】+1</td>
<td>【HR + 6】bolt</td> <td>【HR + 6】physical</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Melee ◆ You have Resistance to <b>dark</b> and <b>poison</b> damage.</td>
One-handed ◆ Melee ◆ Attacks with this weapon have <b>multi (2)</b>. </tr>
</td>
</tr>
<tr class="main"> <tr class="main">
<td class="icon" rowspan="2">🗡️</td> <td class="icon" rowspan="2">🗡️</td>
<td><b>Lobster Claw</b> <span class="rare"></span></td> <td><b>Storm Fist</b></td>
<td>1950 z</td> <td>1300 z</td>
<td>DEX + MIG】+1</td> <td>MIG + MIG】</td>
<td>【HR + 10】physical</td> <td>【HR + 6】bolt</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Melee ◆ Attacks with this weapon have <b>multi (2)</b>.</td>
One-handed ◆ Melee ◆ Each target hit by this weapon suffers <b>slow</b>. </tr>
</td>
</tr>
<tr class="main"> <tr class="main">
<td class="icon" rowspan="2">🗡️</td> <td class="icon" rowspan="2">🗡️</td>
<td><b>Dozer Glove</b> <span class="rare"></span></td> <td><b>Lobster Claw</b> <span class="rare"></span></td>
<td>2000 z</td> <td>1950 z</td>
<td>MIG + MIG】</td> <td>DEX + MIG】+1</td>
<td>【HR + 10】earth</td> <td>【HR + 10】physical</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Melee ◆ Each target hit by this weapon suffers <b>slow</b>.</td>
One-handed ◆ Melee ◆ Each target hit by this weapon suffers </tr>
<b>dazed</b>.
</td>
</tr>
<tr class="main"> <tr class="main">
<td class="icon" rowspan="2">🗡️</td> <td class="icon" rowspan="2">🗡️</td>
<td><b>Venom Claw</b></td> <td><b>Dozer Glove</b> <span class="rare"></span></td>
<td>2250 z</td> <td>2000 z</td>
<td>DEX + MIG】+1</td> <td>MIG + MIG】</td>
<td>【HR + 6】physical</td> <td>【HR + 10】earth</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Melee ◆ Each target hit by this weapon suffers <b>dazed</b>.</td>
One-handed ◆ Melee ◆ Each target hit by this weapon suffers </tr>
<b>poisoned</b>.
</td>
</tr>
<tr class="main"> <tr class="main">
<td class="icon" rowspan="2">🗡️</td> <td class="icon" rowspan="2">🗡️</td>
<td><b>God Hand</b> <span class="rare"></span></td> <td><b>Venom Claw</b></td>
<td>2550 z</td> <td>2250 z</td>
<td>【DEX + MIG】+1</td> <td>【DEX + MIG】+1</td>
<td>【HR + 10】light</td> <td>【HR + 6】physical</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Melee ◆ Each target hit by this weapon suffers <b>poisoned</b>.</td>
One-handed ◆ Melee ◆ Damage dealt by this weapon ignores Immunities. </tr>
</td>
</tr> <tr class="main">
</tbody> <td class="icon" rowspan="2">🗡️</td>
<td><b>God Hand</b> <span class="rare"></span></td>
<td>2550 z</td>
<td>【DEX + MIG】+1</td>
<td>【HR + 10】light</td>
</tr>
<tr class="desc">
<td colspan="4">One-handed ◆ Melee ◆ Damage dealt by this weapon ignores Immunities.</td>
</tr>
</tbody>
</table> </table>

View File

@@ -1,196 +1,176 @@
<style> <style>
table { table {
border-collapse: collapse; border-collapse: collapse;
width: 100%; width: 100%;
} }
th { th {
/* background-color: #2d5a4e; /* background-color: #2d5a4e;
color: white; */ color: white; */
padding: 8px 12px; padding: 8px 12px;
text-align: left; text-align: left;
} }
td { td {
padding: 6px 12px; padding: 6px 12px;
vertical-align: top; vertical-align: top;
} }
tr.desc td { tr.desc td {
/* background-color: #f0f4f0; */ /* background-color: #f0f4f0; */
font-size: 0.95em; font-size: 0.95em;
} }
tr.main td { tr.main td {
border-top: 1px solid #ccc; border-top: 1px solid #ccc;
} }
.icon { .icon {
width: 48px; width: 48px;
text-align: center; text-align: center;
} }
.rare { .rare {
color: #c0392b; color: #c0392b;
} }
</style> </style>
<h2>SAMPLE RARE DAGGER WEAPONS</h2> <h2>SAMPLE RARE DAGGER WEAPONS</h2>
<table> <table>
<thead> <thead>
<tr> <tr>
<th colspan="2">WEAPON</th> <th colspan="2">WEAPON</th>
<th>COST</th> <th>COST</th>
<th>ACCURACY</th> <th>ACCURACY</th>
<th>DAMAGE</th> <th>DAMAGE</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr class="main">
<td class="icon" rowspan="2">🗡️</td>
<td><b>Latrodectus</b></td>
<td>250 z</td>
<td>【DEX + INS】+1</td>
<td>【HR + 4】poison</td>
</tr>
<tr class="desc">
<td colspan="4">One-handed ◆ Melee ◆ No Quality.</td>
</tr>
<tr class="main"> <tr class="main">
<td class="icon" rowspan="2">🗡️</td> <td class="icon" rowspan="2">🗡️</td>
<td><b>Heart Knife</b></td> <td><b>Latrodectus</b></td>
<td>550 z</td> <td>250 z</td>
<td>【DEX + WLP】</td> <td>【DEX + INS】+1</td>
<td>【HR + 4】light</td> <td>【HR + 4】poison</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Melee ◆ No Quality.</td>
One-handed ◆ Melee ◆ Deals 5 extra damage to <b>demons</b>. </tr>
</td>
</tr>
<tr class="main"> <tr class="main">
<td class="icon" rowspan="2">🗡️</td> <td class="icon" rowspan="2">🗡️</td>
<td><b>Atom Slicer</b></td> <td><b>Heart Knife</b></td>
<td>600 z</td> <td>550 z</td>
<td>【DEX + DEX】+1</td> <td>【DEX + WLP】</td>
<td>【HR + 4】physical</td> <td>【HR + 4】light</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Melee ◆ Deals 5 extra damage to <b>demons</b>.</td>
One-handed ◆ Melee ◆ Damage dealt by this weapon ignores Resistances. </tr>
</td>
</tr>
<tr class="main"> <tr class="main">
<td class="icon" rowspan="2">🗡️</td> <td class="icon" rowspan="2">🗡️</td>
<td><b>Silent Edge</b></td> <td><b>Atom Slicer</b></td>
<td>700 z</td> <td>600 z</td>
<td>【DEX + DEX】</td> <td>【DEX + DEX】+1</td>
<td>【HR + 4】air</td> <td>【HR + 4】physical</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4">One-handed ◆ Melee ◆ You are immune to <b>slow</b>.</td> <td colspan="4">One-handed ◆ Melee ◆ Damage dealt by this weapon ignores Resistances.</td>
</tr> </tr>
<tr class="main"> <tr class="main">
<td class="icon" rowspan="2">🗡️</td> <td class="icon" rowspan="2">🗡️</td>
<td><b>Spell Sever</b></td> <td><b>Silent Edge</b></td>
<td>850 z</td> <td>700 z</td>
<td>【DEX + INS】+1</td> <td>【DEX + DEX】</td>
<td>【HR + 4】dark</td> <td>【HR + 4】air</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Melee ◆ You are immune to <b>slow</b>.</td>
One-handed ◆ Melee ◆ When you hit a creature with this weapon, if the </tr>
attack had a <b>single</b> target, you may choose a single spell with a
<b>duration</b> of Scene affecting the target and end its effects on
that creature.
</td>
</tr>
<tr class="main"> <tr class="main">
<td class="icon" rowspan="2">🗡️</td> <td class="icon" rowspan="2">🗡️</td>
<td><b>Assassin's Blade</b></td> <td><b>Spell Sever</b></td>
<td>1000 z</td> <td>850 z</td>
<td>【DEX + INS】+1</td> <td>【DEX + INS】+1</td>
<td>【HR + 4】physical</td> <td>【HR + 4】dark</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Melee ◆ When you hit a creature with this weapon, if the attack had a
One-handed ◆ Melee ◆ Deals 5 extra damage to targets who are in <b>single</b> target, you may choose a single spell with a <b>duration</b> of Scene affecting the target
<b>Crisis</b>. and end its effects on that creature.</td>
</td> </tr>
</tr>
<tr class="main"> <tr class="main">
<td class="icon" rowspan="2">🗡️</td> <td class="icon" rowspan="2">🗡️</td>
<td><b>Gourmet Cutter</b></td> <td><b>Assassin's Blade</b></td>
<td>1350 z</td> <td>1000 z</td>
<td>【DEX + INS】+1</td> <td>【DEX + INS】+1</td>
<td>【HR + 8】physical</td> <td>【HR + 4】physical</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Melee ◆ Deals 5 extra damage to targets who are in <b>Crisis</b>.</td>
One-handed ◆ Melee ◆ When you hit one or more creatures with this </tr>
weapon, you may recover 5 Hit Points.
</td>
</tr>
<tr class="main"> <tr class="main">
<td class="icon" rowspan="2">🗡️</td> <td class="icon" rowspan="2">🗡️</td>
<td><b>Barbed Knife</b></td> <td><b>Gourmet Cutter</b></td>
<td>1650 z</td> <td>1350 z</td>
<td>【DEX + INS】+1</td> <td>【DEX + INS】+1</td>
<td>【HR + 4】physical</td> <td>【HR + 8】physical</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Melee ◆ When you hit one or more creatures with this weapon, you may recover 5
One-handed ◆ Melee ◆ Each target hit by this weapon suffers Hit Points.</td>
<b>shaken</b>. </tr>
</td>
</tr>
<tr class="main"> <tr class="main">
<td class="icon" rowspan="2">🗡️</td> <td class="icon" rowspan="2">🗡️</td>
<td><b>Cold Finger</b></td> <td><b>Barbed Knife</b></td>
<td>1950 z</td> <td>1650 z</td>
<td>【DEX + INS】+1</td> <td>【DEX + INS】+1</td>
<td>【HR + 8】ice</td> <td>【HR + 4】physical</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Melee ◆ Each target hit by this weapon suffers <b>shaken</b>.</td>
One-handed ◆ Melee ◆ Each target hit by this weapon suffers <b>weak</b>. </tr>
</td>
</tr>
<tr class="main"> <tr class="main">
<td class="icon" rowspan="2">🗡️</td> <td class="icon" rowspan="2">🗡️</td>
<td><b>Hornet</b></td> <td><b>Cold Finger</b></td>
<td>2200 z</td> <td>1950 z</td>
<td>【DEX + DEX】+1</td> <td>【DEX + INS】+1</td>
<td>【HR + 4】physical</td> <td>【HR + 8】ice</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Melee ◆ Each target hit by this weapon suffers <b>weak</b>.</td>
One-handed ◆ Melee ◆ Attacks with this weapon have <b>multi (3)</b>. </tr>
</td>
</tr>
<tr class="main"> <tr class="main">
<td class="icon" rowspan="2">🗡️</td> <td class="icon" rowspan="2">🗡️</td>
<td><b>Frantic Nail</b></td> <td><b>Hornet</b></td>
<td>2450 z</td> <td>2200 z</td>
<td>INS + INS】+1</td> <td>DEX + DEX】+1</td>
<td>【HR + 8】fire</td> <td>【HR + 4】physical</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Melee ◆ Attacks with this weapon have <b>multi (3)</b>.</td>
One-handed ◆ Melee ◆ Each target hit by this weapon suffers </tr>
<b>enraged</b>.
</td> <tr class="main">
</tr> <td class="icon" rowspan="2">🗡️</td>
</tbody> <td><b>Frantic Nail</b></td>
<td>2450 z</td>
<td>【INS + INS】+1</td>
<td>【HR + 8】fire</td>
</tr>
<tr class="desc">
<td colspan="4">One-handed ◆ Melee ◆ Each target hit by this weapon suffers <b>enraged</b>.</td>
</tr>
</tbody>
</table> </table>

View File

@@ -47,6 +47,7 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr class="main"> <tr class="main">
<td class="icon" rowspan="2">🗡️</td> <td class="icon" rowspan="2">🗡️</td>
<td><b>Revolver</b> <span class="rare"></span></td> <td><b>Revolver</b> <span class="rare"></span></td>
@@ -77,9 +78,7 @@
<td>【HR + 8】physical</td> <td>【HR + 8】physical</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Ranged ◆ Attacks with this weapon target Magic Defense.</td>
One-handed ◆ Ranged ◆ Attacks with this weapon target Magic Defense.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -90,9 +89,7 @@
<td>【HR + 8】physical</td> <td>【HR + 8】physical</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Ranged ◆ Deals 5 extra damage to <b>constructs</b>.</td>
One-handed ◆ Ranged ◆ Deals 5 extra damage to <b>constructs</b>.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -103,10 +100,8 @@
<td>【HR + 8】physical</td> <td>【HR + 8】physical</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Ranged ◆ Deals 5 extra damage to targets you have a <b>Bond</b> of <b>hatred</b>
One-handed ◆ Ranged ◆ Deals 5 extra damage to targets you have a towards.</td>
<b>Bond</b> of <b>hatred</b> towards.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -139,10 +134,8 @@
<td>【HR + 8】poison</td> <td>【HR + 8】poison</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">Two-handed ◆ Ranged ◆ Potions you create with your Inventory Points deal 5 extra damage and
Two-handed ◆ Ranged ◆ Potions you create with your Inventory Points deal restore 5 extra Hit Points.</td>
5 extra damage and restore 5 extra Hit Points.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -153,9 +146,7 @@
<td>【HR + 16】fire</td> <td>【HR + 16】fire</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">Two-handed ◆ Ranged ◆ Attacks with this weapon have <b>multi (2)</b>.</td>
Two-handed ◆ Ranged ◆ Attacks with this weapon have <b>multi (2)</b>.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -166,10 +157,7 @@
<td>【HR + 8】ice</td> <td>【HR + 8】ice</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Ranged ◆ Each target hit by this weapon suffers <b>slow</b>.</td>
One-handed ◆ Ranged ◆ Each target hit by this weapon suffers
<b>slow</b>.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -180,10 +168,9 @@
<td>【HR + 12】air</td> <td>【HR + 12】air</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">Two-handed ◆ Ranged ◆ Deals extra damage equal to the difference between your current and maximum
Two-handed ◆ Ranged ◆ Deals extra damage equal to the difference between <b>Inventory Points</b>.</td>
your current and maximum <b>Inventory Points</b>.
</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>

View File

@@ -47,6 +47,7 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr class="main"> <tr class="main">
<td class="icon" rowspan="2">🗡️</td> <td class="icon" rowspan="2">🗡️</td>
<td><b>Old Whip</b></td> <td><b>Old Whip</b></td>
@@ -55,10 +56,7 @@
<td>【HR + 8】physical</td> <td>【HR + 8】physical</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">Two-handed ◆ Melee ◆ Deals 5 extra damage to <b>beasts</b> and <b>monsters</b>.</td>
Two-handed ◆ Melee ◆ Deals 5 extra damage to <b>beasts</b> and
<b>monsters</b>.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -80,12 +78,9 @@
<td>【HR + 8】physical</td> <td>【HR + 8】physical</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">Two-handed ◆ Melee ◆ Damage dealt by this weapon reduces the target's <b>Mind Points</b> instead
Two-handed ◆ Melee ◆ Damage dealt by this weapon reduces the target's of their <b>Hit Points</b>. If the target's Mind Points reach 0, any excess damage is applied to their Hit
<b>Mind Points</b> instead of their <b>Hit Points</b>. If the target's Points as normal.</td>
Mind Points reach 0, any excess damage is applied to their Hit Points as
normal.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -96,9 +91,7 @@
<td>【HR + 8】physical</td> <td>【HR + 8】physical</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Melee ◆ You have Resistance to <b>fire</b> damage.</td>
One-handed ◆ Melee ◆ You have Resistance to <b>fire</b> damage.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -120,10 +113,8 @@
<td>【HR + 8】fire</td> <td>【HR + 8】fire</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Melee ◆ You gain a +2 bonus to Accuracy Checks and Magic Checks against
One-handed ◆ Melee ◆ You gain a +2 bonus to Accuracy Checks and Magic <b>enraged</b> targets.</td>
Checks against <b>enraged</b> targets.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -134,9 +125,7 @@
<td>【HR + 12】physical</td> <td>【HR + 12】physical</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">Two-handed ◆ Melee ◆ Attacks with this weapon have <b>multi (2)</b>.</td>
Two-handed ◆ Melee ◆ Attacks with this weapon have <b>multi (2)</b>.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -147,9 +136,7 @@
<td>【HR + 12】physical</td> <td>【HR + 12】physical</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">Two-handed ◆ Melee ◆ You have Resistance to <b>physical</b> damage.</td>
Two-handed ◆ Melee ◆ You have Resistance to <b>physical</b> damage.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -160,9 +147,7 @@
<td>【HR + 8】physical</td> <td>【HR + 8】physical</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">Two-handed ◆ Melee ◆ Each target hit by this weapon suffers <b>slow</b>.</td>
Two-handed ◆ Melee ◆ Each target hit by this weapon suffers <b>slow</b>.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -173,9 +158,7 @@
<td>【HR + 12】dark</td> <td>【HR + 12】dark</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">Two-handed ◆ Melee ◆ Attacks with this weapon have <b>multi (3)</b>.</td>
Two-handed ◆ Melee ◆ Attacks with this weapon have <b>multi (3)</b>.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -186,10 +169,8 @@
<td>【HR + 12】physical</td> <td>【HR + 12】physical</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">Two-handed ◆ Melee ◆ You have Immunity to <b>dark</b> and <b>light</b> damage.</td>
Two-handed ◆ Melee ◆ You have Immunity to <b>dark</b> and
<b>light</b> damage.
</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>

View File

@@ -46,6 +46,7 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr class="main"> <tr class="main">
<td class="icon" rowspan="2">🗡️</td> <td class="icon" rowspan="2">🗡️</td>
<td><b>Bardiche</b> <span class="rare"></span></td> <td><b>Bardiche</b> <span class="rare"></span></td>
@@ -65,9 +66,7 @@
<td>【HR + 6】physical</td> <td>【HR + 6】physical</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Melee ◆ Deals 5 extra damage to <b>constructs</b>.</td>
One-handed ◆ Melee ◆ Deals 5 extra damage to <b>constructs</b>.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -78,9 +77,7 @@
<td>【HR + 10】physical</td> <td>【HR + 10】physical</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Melee ◆ Deals 5 extra damage to <b>monsters</b>.</td>
One-handed ◆ Melee ◆ Deals 5 extra damage to <b>monsters</b>.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -91,9 +88,7 @@
<td>【HR + 14】poison</td> <td>【HR + 14】poison</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">Two-handed ◆ Melee ◆ Deals 5 extra damage to <b>humanoids</b>.</td>
Two-handed ◆ Melee ◆ Deals 5 extra damage to <b>humanoids</b>.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -104,10 +99,7 @@
<td>【HR + 10】physical</td> <td>【HR + 10】physical</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Melee ◆ Deals 5 extra damage to <b>beasts</b> and <b>plants</b>.</td>
One-handed ◆ Melee ◆ Deals 5 extra damage to <b>beasts</b> and
<b>plants</b>.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -129,9 +121,7 @@
<td>【HR + 14】light</td> <td>【HR + 14】light</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">Two-handed ◆ Melee ◆ Attacks with this weapon have <b>multi (2)</b>.</td>
Two-handed ◆ Melee ◆ Attacks with this weapon have <b>multi (2)</b>.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -142,9 +132,7 @@
<td>【HR + 14】earth</td> <td>【HR + 14】earth</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">Two-handed ◆ Melee ◆ Each target hit by this weapon suffers <b>slow</b>.</td>
Two-handed ◆ Melee ◆ Each target hit by this weapon suffers <b>slow</b>.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -155,10 +143,7 @@
<td>【HR + 10】bolt</td> <td>【HR + 10】bolt</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Melee ◆ Each target hit by this weapon suffers <b>dazed</b>.</td>
One-handed ◆ Melee ◆ Each target hit by this weapon suffers
<b>dazed</b>.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -169,9 +154,7 @@
<td>【HR + 18】fire</td> <td>【HR + 18】fire</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">Two-handed ◆ Melee ◆ You have Immunity to <b>fire</b> damage.</td>
Two-handed ◆ Melee ◆ You have Immunity to <b>fire</b> damage.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -182,10 +165,7 @@
<td>【HR + 18】dark</td> <td>【HR + 18】dark</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">Two-handed ◆ Melee ◆ Each target hit by this weapon suffers <b>enraged</b>.</td>
Two-handed ◆ Melee ◆ Each target hit by this weapon suffers
<b>enraged</b>.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -196,9 +176,8 @@
<td>【HR + 18】ice</td> <td>【HR + 18】ice</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">Two-handed ◆ Melee ◆ You gain a +1 bonus to Defense and Magic Defense.</td>
Two-handed ◆ Melee ◆ You gain a +1 bonus to Defense and Magic Defense.
</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>

View File

@@ -34,6 +34,7 @@
.rare { .rare {
color: #c0392b; color: #c0392b;
} }
</style> </style>
<table> <table>
@@ -46,6 +47,7 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr class="main"> <tr class="main">
<td class="icon" rowspan="2">🗡️</td> <td class="icon" rowspan="2">🗡️</td>
<td><b>Dragontongue</b> <span class="rare"></span></td> <td><b>Dragontongue</b> <span class="rare"></span></td>
@@ -54,9 +56,7 @@
<td>【HR + 12】fire</td> <td>【HR + 12】fire</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">Two-handed ◆ Melee ◆ Attacks with this weapon target Magic Defense.</td>
Two-handed ◆ Melee ◆ Attacks with this weapon target Magic Defense.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -67,9 +67,7 @@
<td>【HR + 8】physical</td> <td>【HR + 8】physical</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Melee ◆ Deals 1 extra damage per status effect you have.</td>
One-handed ◆ Melee ◆ Deals 1 extra damage per status effect you have.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -80,9 +78,7 @@
<td>【HR + 16】physical</td> <td>【HR + 16】physical</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">Two-handed ◆ Melee ◆ Damage dealt by this weapon ignores Resistances.</td>
Two-handed ◆ Melee ◆ Damage dealt by this weapon ignores Resistances.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -104,9 +100,7 @@
<td>【HR + 12】ice</td> <td>【HR + 12】ice</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Melee ◆ You have Resistance to <b>ice</b> damage.</td>
One-handed ◆ Melee ◆ You have Resistance to <b>ice</b> damage.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -117,10 +111,8 @@
<td>【HR + 12】earth</td> <td>【HR + 12】earth</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">Two-handed ◆ Melee ◆ As long as you have at least three <b>Bonds</b> of <b>loyalty</b> or
Two-handed ◆ Melee ◆ As long as you have at least three <b>Bonds</b> of <b>affection</b>, you gain a +1 bonus to Defense and Magic Defense.
<b>loyalty</b> or <b>affection</b>, you gain a +1 bonus to Defense and
Magic Defense.
</td> </td>
</tr> </tr>
@@ -132,10 +124,8 @@
<td>【HR + 12】dark</td> <td>【HR + 12】dark</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">Two-handed ◆ Melee ◆ When you hit one or more creatures with this weapon, you may recover 10
Two-handed ◆ Melee ◆ When you hit one or more creatures with this Mind Points.</td>
weapon, you may recover 10 Mind Points.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -146,11 +136,8 @@
<td>【HR + 12】physical</td> <td>【HR + 12】physical</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">Two-handed ◆ Melee ◆ If you roll a <b>critical success</b> on an Accuracy Check with this
Two-handed ◆ Melee ◆ If you roll a <b>critical success</b> on an weapon, you may spend that <b>opportunity</b> to deal 10 extra damage.</td>
Accuracy Check with this weapon, you may spend that
<b>opportunity</b> to deal 10 extra damage.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -161,9 +148,7 @@
<td>【HR + 16】physical</td> <td>【HR + 16】physical</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">Two-handed ◆ Melee ◆ Each target hit by this weapon suffers <b>weak</b>.</td>
Two-handed ◆ Melee ◆ Each target hit by this weapon suffers <b>weak</b>.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -185,10 +170,8 @@
<td>【HR + 16】light</td> <td>【HR + 16】light</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">Two-handed ◆ Melee ◆ You have Immunity to <b>fire</b> and <b>ice</b> damage.</td>
Two-handed ◆ Melee ◆ You have Immunity to <b>fire</b> and
<b>ice</b> damage.
</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>

View File

@@ -47,6 +47,7 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr class="main"> <tr class="main">
<td class="icon" rowspan="2">🗡️</td> <td class="icon" rowspan="2">🗡️</td>
<td><b>Zweihänder</b> <span class="rare"></span></td> <td><b>Zweihänder</b> <span class="rare"></span></td>
@@ -66,9 +67,7 @@
<td>【HR + 10】ice</td> <td>【HR + 10】ice</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">Two-handed ◆ Melee ◆ Attacks with this weapon target Magic Defense.</td>
Two-handed ◆ Melee ◆ Attacks with this weapon target Magic Defense.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -90,9 +89,7 @@
<td>【HR + 6】physical</td> <td>【HR + 6】physical</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Melee ◆ You are immune to <b>enraged</b>.</td>
One-handed ◆ Melee ◆ You are immune to <b>enraged</b>.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -114,9 +111,7 @@
<td>【HR + 6】dark</td> <td>【HR + 6】dark</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Melee ◆ Deals 5 extra damage if you are in <b>Crisis</b>.</td>
One-handed ◆ Melee ◆ Deals 5 extra damage if you are in <b>Crisis</b>.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -127,9 +122,7 @@
<td>【HR + 10】physical</td> <td>【HR + 10】physical</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">Two-handed ◆ Melee ◆ This weapon can target <b>flying</b> creatures.</td>
Two-handed ◆ Melee ◆ This weapon can target <b>flying</b> creatures.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -151,10 +144,7 @@
<td>【HR + 10】physical</td> <td>【HR + 10】physical</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">Two-handed ◆ Melee ◆ Deals 2 extra damage for each <b>Class</b> you have mastered.</td>
Two-handed ◆ Melee ◆ Deals 2 extra damage for each <b>Class</b> you have
mastered.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -165,9 +155,7 @@
<td>【HR + 10】poison</td> <td>【HR + 10】poison</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Melee ◆ Deals 5 extra damage to <b>weak</b> targets.</td>
One-handed ◆ Melee ◆ Deals 5 extra damage to <b>weak</b> targets.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -178,9 +166,7 @@
<td>【HR + 14】air</td> <td>【HR + 14】air</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">Two-handed ◆ Melee ◆ Attacks with this weapon have <b>multi (2)</b>.</td>
Two-handed ◆ Melee ◆ Attacks with this weapon have <b>multi (2)</b>.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -191,9 +177,8 @@
<td>【HR + 10】light</td> <td>【HR + 10】light</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">Two-handed ◆ Melee ◆ You are immune to all status effects.</td>
Two-handed ◆ Melee ◆ You are immune to all status effects.
</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>

View File

@@ -43,6 +43,7 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr class="main"> <tr class="main">
<td class="icon" rowspan="2">🗡️</td> <td class="icon" rowspan="2">🗡️</td>
<td><b>Crescent Edge</b></td> <td><b>Crescent Edge</b></td>
@@ -51,9 +52,7 @@
<td>【HR + 4】light</td> <td>【HR + 4】light</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Ranged ◆ Attacks with this weapon target Magic Defense.</td>
One-handed ◆ Ranged ◆ Attacks with this weapon target Magic Defense.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -86,10 +85,7 @@
<td>【HR + 4】physical</td> <td>【HR + 4】physical</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Ranged ◆ Deals 5 extra damage to <b>beasts</b> and <b>monsters</b>.</td>
One-handed ◆ Ranged ◆ Deals 5 extra damage to <b>beasts</b> and
<b>monsters</b>.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -100,9 +96,7 @@
<td>【HR + 8】air</td> <td>【HR + 8】air</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Ranged ◆ Damage dealt by this weapon ignores Resistances.</td>
One-handed ◆ Ranged ◆ Damage dealt by this weapon ignores Resistances.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -113,9 +107,7 @@
<td>【HR + 8】physical</td> <td>【HR + 8】physical</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Ranged ◆ You are immune to <b>poisoned</b>.</td>
One-handed ◆ Ranged ◆ You are immune to <b>poisoned</b>.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -126,9 +118,7 @@
<td>【HR + 4】ice</td> <td>【HR + 4】ice</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Ranged ◆ You have Resistance to <b>ice</b> damage.</td>
One-handed ◆ Ranged ◆ You have Resistance to <b>ice</b> damage.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -139,9 +129,7 @@
<td>【HR + 4】earth</td> <td>【HR + 4】earth</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Ranged ◆ You have Resistance to <b>dark</b> damage.</td>
One-handed ◆ Ranged ◆ You have Resistance to <b>dark</b> damage.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -152,9 +140,7 @@
<td>【HR + 4】physical</td> <td>【HR + 4】physical</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Ranged ◆ Attacks with this weapon have <b>multi (2)</b>.</td>
One-handed ◆ Ranged ◆ Attacks with this weapon have <b>multi (2)</b>.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -165,10 +151,7 @@
<td>【HR + 8】bolt</td> <td>【HR + 8】bolt</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Ranged ◆ Each target hit by this weapon suffers <b>shaken</b>.</td>
One-handed ◆ Ranged ◆ Each target hit by this weapon suffers
<b>shaken</b>.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -179,9 +162,7 @@
<td>【HR + 4】dark</td> <td>【HR + 4】dark</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Ranged ◆ You gain a +1 bonus to Defense and Magic Defense.</td>
One-handed ◆ Ranged ◆ You gain a +1 bonus to Defense and Magic Defense.
</td>
</tr> </tr>
<tr class="main"> <tr class="main">
@@ -192,10 +173,8 @@
<td>【HR + 4】poison</td> <td>【HR + 4】poison</td>
</tr> </tr>
<tr class="desc"> <tr class="desc">
<td colspan="4"> <td colspan="4">One-handed ◆ Ranged ◆ Each target hit by this weapon suffers <b>poisoned</b>.</td>
One-handed ◆ Ranged ◆ Each target hit by this weapon suffers
<b>poisoned</b>.
</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>

View File

@@ -11,45 +11,29 @@
<li><a href="/books/core/#page-30">Scenes</a> <span>30</span></li> <li><a href="/books/core/#page-30">Scenes</a> <span>30</span></li>
<li><a href="/books/core/#page-31">Interlude Scenes</a> <span>31</span></li> <li><a href="/books/core/#page-31">Interlude Scenes</a> <span>31</span></li>
<li><a href="/books/core/#page-31">Game Master Scenes</a> <span>31</span></li> <li><a href="/books/core/#page-31">Game Master Scenes</a> <span>31</span></li>
<li> <li><a href="/books/core/#page-32">Sessions and Campaigns</a> <span>32</span></li>
<a href="/books/core/#page-32">Sessions and Campaigns</a> <span>32</span>
</li>
<li><a href="/books/core/#page-33">Important Rules</a> <span>33</span></li> <li><a href="/books/core/#page-33">Important Rules</a> <span>33</span></li>
<li> <li><a href="/books/core/#page-34">Anatomy of a Character</a> <span>34</span></li>
<a href="/books/core/#page-34">Anatomy of a Character</a> <span>34</span>
</li>
<li><a href="/books/core/#page-38">Checks</a> <span>38</span></li> <li><a href="/books/core/#page-38">Checks</a> <span>38</span></li>
<li><a href="/books/core/#page-40">Critical Success</a> <span>40</span></li> <li><a href="/books/core/#page-40">Critical Success</a> <span>40</span></li>
<li><a href="/books/core/#page-40">Fumble</a> <span>40</span></li> <li><a href="/books/core/#page-40">Fumble</a> <span>40</span></li>
<li><a href="/books/core/#page-41">Opportunities</a> <span>41</span></li> <li><a href="/books/core/#page-41">Opportunities</a> <span>41</span></li>
<li> <li><a href="/books/core/#page-42">Performing an Attribute Check</a> <span>42</span></li>
<a href="/books/core/#page-42">Performing an Attribute Check</a>
<span>42</span>
</li>
<li><a href="/books/core/#page-43">Difficulty Levels</a> <span>43</span></li> <li><a href="/books/core/#page-43">Difficulty Levels</a> <span>43</span></li>
<li><a href="/books/core/#page-46">Invoking a Trait</a> <span>46</span></li> <li><a href="/books/core/#page-46">Invoking a Trait</a> <span>46</span></li>
<li><a href="/books/core/#page-47">Invoking a Bond</a> <span>47</span></li> <li><a href="/books/core/#page-47">Invoking a Bond</a> <span>47</span></li>
<li><a href="/books/core/#page-48">Opposed Checks</a> <span>48</span></li> <li><a href="/books/core/#page-48">Opposed Checks</a> <span>48</span></li>
<li><a href="/books/core/#page-49">Open Checks</a> <span>49</span></li> <li><a href="/books/core/#page-49">Open Checks</a> <span>49</span></li>
<li> <li><a href="/books/core/#page-49">Situational Modifiers</a> <span>49</span></li>
<a href="/books/core/#page-49">Situational Modifiers</a> <span>49</span>
</li>
<li><a href="/books/core/#page-50">Group Checks</a> <span>50</span></li> <li><a href="/books/core/#page-50">Group Checks</a> <span>50</span></li>
<li> <li><a href="/books/core/#page-51">Frequently Used Checks</a> <span>51</span></li>
<a href="/books/core/#page-51">Frequently Used Checks</a> <span>51</span>
</li>
<li><a href="/books/core/#page-52">Clocks</a> <span>52</span></li> <li><a href="/books/core/#page-52">Clocks</a> <span>52</span></li>
<li><a href="/books/core/#page-56">Bonds</a> <span>56</span></li> <li><a href="/books/core/#page-56">Bonds</a> <span>56</span></li>
<li><a href="/books/core/#page-58">Conflict Scenes</a> <span>58</span></li> <li><a href="/books/core/#page-58">Conflict Scenes</a> <span>58</span></li>
<li> <li><a href="/books/core/#page-58">The Structure of a Conflict</a> <span>58</span></li>
<a href="/books/core/#page-58">The Structure of a Conflict</a>
<span>58</span>
</li>
<li><a href="/books/core/#page-61">Initiative</a> <span>61</span></li> <li><a href="/books/core/#page-61">Initiative</a> <span>61</span></li>
<li><a href="/books/core/#page-62">Rounds and Turns</a> <span>62</span></li> <li><a href="/books/core/#page-62">Rounds and Turns</a> <span>62</span></li>
<li> <li><a href="/books/core/#page-64">Space and Distances</a> <span>64</span></li>
<a href="/books/core/#page-64">Space and Distances</a> <span>64</span>
</li>
<li><a href="/books/core/#page-66">Actions</a> <span>66</span></li> <li><a href="/books/core/#page-66">Actions</a> <span>66</span></li>
<li><a href="/books/core/#page-68">Attack</a> <span>68</span></li> <li><a href="/books/core/#page-68">Attack</a> <span>68</span></li>
<li><a href="/books/core/#page-70">Equipment</a> <span>70</span></li> <li><a href="/books/core/#page-70">Equipment</a> <span>70</span></li>
@@ -62,13 +46,8 @@
<li><a href="/books/core/#page-76">Skill</a> <span>76</span></li> <li><a href="/books/core/#page-76">Skill</a> <span>76</span></li>
<li><a href="/books/core/#page-76">Teamwork</a> <span>76</span></li> <li><a href="/books/core/#page-76">Teamwork</a> <span>76</span></li>
<li><a href="/books/core/#page-78">Sample Goal Clocks</a> <span>78</span></li> <li><a href="/books/core/#page-78">Sample Goal Clocks</a> <span>78</span></li>
<li> <li><a href="/books/core/#page-82">Optional Conflict Rules</a> <span>82</span></li>
<a href="/books/core/#page-82">Optional Conflict Rules</a> <span>82</span> <li><a href="/books/core/#page-84">Hit Points and Mind Points</a> <span>84</span></li>
</li>
<li>
<a href="/books/core/#page-84">Hit Points and Mind Points</a>
<span>84</span>
</li>
<li><a href="/books/core/#page-86">0 Hit Points</a> <span>86</span></li> <li><a href="/books/core/#page-86">0 Hit Points</a> <span>86</span></li>
<li><a href="/books/core/#page-88">Sacrifice</a> <span>88</span></li> <li><a href="/books/core/#page-88">Sacrifice</a> <span>88</span></li>
<li><a href="/books/core/#page-89">Surrendering</a> <span>89</span></li> <li><a href="/books/core/#page-89">Surrendering</a> <span>89</span></li>
@@ -82,9 +61,7 @@
<li><a href="/books/core/#page-101">Ultima Points</a> <span>101</span></li> <li><a href="/books/core/#page-101">Ultima Points</a> <span>101</span></li>
<li><a href="/books/core/#page-102">Escalation</a> <span>102</span></li> <li><a href="/books/core/#page-102">Escalation</a> <span>102</span></li>
<li><a href="/books/core/#page-104">Inventory Points</a> <span>104</span></li> <li><a href="/books/core/#page-104">Inventory Points</a> <span>104</span></li>
<li> <li><a href="/books/core/#page-106">Journeys and Travels</a> <span>106</span></li>
<a href="/books/core/#page-106">Journeys and Travels</a> <span>106</span>
</li>
<li><a href="/books/core/#page-108">Dangers</a> <span>108</span></li> <li><a href="/books/core/#page-108">Dangers</a> <span>108</span></li>
<li><a href="/books/core/#page-109">Discoveries</a> <span>109</span></li> <li><a href="/books/core/#page-109">Discoveries</a> <span>109</span></li>
<li><a href="/books/core/#page-110">Dungeons</a> <span>110</span></li> <li><a href="/books/core/#page-110">Dungeons</a> <span>110</span></li>

View File

@@ -1,21 +1,11 @@
<ul> <ul>
<li> <li><a href="/books/core/#page-120">Rituals during Conflicts</a> <span>120</span></li>
<a href="/books/core/#page-120">Rituals during Conflicts</a> <li><a href="/books/core/#page-122">Economy and Items</a> <span>122</span></li>
<span>120</span> <li><a href="/books/core/#page-124">Services and Transports</a> <span>124</span></li>
</li>
<li>
<a href="/books/core/#page-122">Economy and Items</a> <span>122</span>
</li>
<li>
<a href="/books/core/#page-124">Services and Transports</a> <span>124</span>
</li>
<li><a href="/books/core/#page-126">Equipment</a> <span>126</span></li> <li><a href="/books/core/#page-126">Equipment</a> <span>126</span></li>
<li><a href="/books/core/#page-126">Martial Items</a> <span>126</span></li> <li><a href="/books/core/#page-126">Martial Items</a> <span>126</span></li>
<li><a href="/books/core/#page-130">Basic Weapons</a> <span>130</span></li> <li><a href="/books/core/#page-130">Basic Weapons</a> <span>130</span></li>
<li> <li><a href="/books/core/#page-132">Basic Armors and Shields</a> <span>132</span></li>
<a href="/books/core/#page-132">Basic Armors and Shields</a>
<span>132</span>
</li>
<li><a href="/books/core/#page-134">Projects</a> <span>134</span></li> <li><a href="/books/core/#page-134">Projects</a> <span>134</span></li>
<li><a href="/books/core/#page-140">Group Dynamics</a> <span>140</span></li> <li><a href="/books/core/#page-140">Group Dynamics</a> <span>140</span></li>
</ul> </ul>
@@ -25,12 +15,8 @@
<li><a href="/books/core/#page-146">Before You Start</a> <span>146</span></li> <li><a href="/books/core/#page-146">Before You Start</a> <span>146</span></li>
<li><a href="/books/core/#page-148">World Creation</a> <span>148</span></li> <li><a href="/books/core/#page-148">World Creation</a> <span>148</span></li>
<li><a href="/books/core/#page-152">Group Creation</a> <span>152</span></li> <li><a href="/books/core/#page-152">Group Creation</a> <span>152</span></li>
<li> <li><a href="/books/core/#page-154">Character Creation</a> <span>154</span></li>
<a href="/books/core/#page-154">Character Creation</a> <span>154</span> <li><a href="/books/core/#page-172">Classic Characters</a> <span>172</span></li>
</li>
<li>
<a href="/books/core/#page-172">Classic Characters</a> <span>172</span>
</li>
<li><a href="/books/core/#page-176">Arcanist</a> <span>176</span></li> <li><a href="/books/core/#page-176">Arcanist</a> <span>176</span></li>
<li><a href="/books/core/#page-182">Chimerist</a> <span>182</span></li> <li><a href="/books/core/#page-182">Chimerist</a> <span>182</span></li>
<li><a href="/books/core/#page-184">Darkblade</a> <span>184</span></li> <li><a href="/books/core/#page-184">Darkblade</a> <span>184</span></li>
@@ -47,60 +33,32 @@
<li><a href="/books/core/#page-216">Wayfarer</a> <span>216</span></li> <li><a href="/books/core/#page-216">Wayfarer</a> <span>216</span></li>
<li><a href="/books/core/#page-218">Weaponmaster</a> <span>218</span></li> <li><a href="/books/core/#page-218">Weaponmaster</a> <span>218</span></li>
<li><a href="/books/core/#page-220">Prologues</a> <span>220</span></li> <li><a href="/books/core/#page-220">Prologues</a> <span>220</span></li>
<li> <li><a href="/books/core/#page-226">Experience and Levels</a> <span>226</span></li>
<a href="/books/core/#page-226">Experience and Levels</a> <span>226</span> <li><a href="/books/core/#page-229">Creating High Level PCs</a> <span>229</span></li>
</li> <li><a href="/books/core/#page-230">Optional Advancement Rules</a> <span>230</span></li>
<li>
<a href="/books/core/#page-229">Creating High Level PCs</a> <span>229</span>
</li>
<li>
<a href="/books/core/#page-230">Optional Advancement Rules</a>
<span>230</span>
</li>
<li><a href="/books/core/#page-232">Heroic Skills</a> <span>232</span></li> <li><a href="/books/core/#page-232">Heroic Skills</a> <span>232</span></li>
</ul> </ul>
<h2>4. GAME MASTER</h2> <h2>4. GAME MASTER</h2>
<ul> <ul>
<li> <li><a href="/books/core/#page-244">The Game Master's Role</a> <span>244</span></li>
<a href="/books/core/#page-244">The Game Master's Role</a> <span>244</span> <li><a href="/books/core/#page-248">Character Classes</a> <span>248</span></li>
</li> <li><a href="/books/core/#page-254">The Art of Villains</a> <span>254</span></li>
<li>
<a href="/books/core/#page-248">Character Classes</a> <span>248</span>
</li>
<li>
<a href="/books/core/#page-254">The Art of Villains</a> <span>254</span>
</li>
<li><a href="/books/core/#page-258">Dungeons</a> <span>258</span></li> <li><a href="/books/core/#page-258">Dungeons</a> <span>258</span></li>
<li><a href="/books/core/#page-264">Rewards</a> <span>264</span></li> <li><a href="/books/core/#page-264">Rewards</a> <span>264</span></li>
<li> <li><a href="/books/core/#page-266">Designing Rare Items</a> <span>266</span></li>
<a href="/books/core/#page-266">Designing Rare Items</a> <span>266</span> <li><a href="/books/core/#page-268">Designing Rare Weapons</a> <span>268</span></li>
</li> <li><a href="/books/core/#page-280">Designing Rare Armors and Shields</a> <span>280</span></li>
<li> <li><a href="/books/core/#page-284">Designing Accessories</a> <span>284</span></li>
<a href="/books/core/#page-268">Designing Rare Weapons</a> <span>268</span>
</li>
<li>
<a href="/books/core/#page-280">Designing Rare Armors and Shields</a>
<span>280</span>
</li>
<li>
<a href="/books/core/#page-284">Designing Accessories</a> <span>284</span>
</li>
<li><a href="/books/core/#page-288">Artifacts</a> <span>288</span></li> <li><a href="/books/core/#page-288">Artifacts</a> <span>288</span></li>
<li> <li><a href="/books/core/#page-292">Designing Battles</a> <span>292</span></li>
<a href="/books/core/#page-292">Designing Battles</a> <span>292</span> <li><a href="/books/core/#page-295">Elites and Champions</a> <span>295</span></li>
</li>
<li>
<a href="/books/core/#page-295">Elites and Champions</a> <span>295</span>
</li>
<li><a href="/books/core/#page-300">Boss Battles</a> <span>300</span></li> <li><a href="/books/core/#page-300">Boss Battles</a> <span>300</span></li>
<li><a href="/books/core/#page-300">Designing NPCs</a> <span>300</span></li> <li><a href="/books/core/#page-300">Designing NPCs</a> <span>300</span></li>
<li><a href="/books/core/#page-304">NPC Species</a> <span>304</span></li> <li><a href="/books/core/#page-304">NPC Species</a> <span>304</span></li>
<li><a href="/books/core/#page-306">NPC Skills</a> <span>306</span></li> <li><a href="/books/core/#page-306">NPC Skills</a> <span>306</span></li>
<li><a href="/books/core/#page-310">NPC Spells</a> <span>310</span></li> <li><a href="/books/core/#page-310">NPC Spells</a> <span>310</span></li>
<li> <li><a href="/books/core/#page-312">Sample Boss Designs</a> <span>312</span></li>
<a href="/books/core/#page-312">Sample Boss Designs</a> <span>312</span>
</li>
</ul> </ul>
<h2>5. BESTIARY</h2> <h2>5. BESTIARY</h2>

View File

@@ -1,4 +1,4 @@
<h2>Objective</h2> <h1>Objective</h1>
<p> <p>
You use this action when you want to make progress towards one of your goals You use this action when you want to make progress towards one of your goals
within the conflict — either one you had established at the start of the within the conflict — either one you had established at the start of the
@@ -7,64 +7,54 @@
grab a target and try to immobilize them, pull a lever to activate a grab a target and try to immobilize them, pull a lever to activate a
mechanism, and so on. mechanism, and so on.
</p> </p>
<p>
<ol> <strong>O W</strong> Describe what you want to accomplish and how you intend
to approach it.
</p>
<p>
Needless to say, you can only pursue a goal if you have a reasonable way to
achieve it — the <strong>Game Master</strong> has final say on which actions
can be performed, but should do their best to allow a variety of different
approaches.
</p>
<h3>1</h3>
<p>
If your goal is simple enough—such as leaping past a chasm or climbing a
rope—you will likely accomplish it with a single successful
<strong>Check</strong>.
</p>
<p>
<strong>O W</strong> Since Objective gets you closer to what you want to
achieve within the conflict, it will always require a Check.
</p>
<ul>
<li> <li>
<p> If your goal is opposed by another participant in the conflict scene, the
Describe what you want to accomplish and how you intend to approach it. Check will be an Opposed Check against them. Even if multiple participants
</p> can oppose you, only one of them will perform the Check — this should be the
<p> most capable among your adversaries.
Needless to say, you can only pursue a goal if you have a reasonable way
to achieve it — the <strong>Game Master</strong> has final say on which
actions can be performed, but should do their best to allow a variety of
different approaches.
</p>
</li> </li>
<li>Otherwise, it will be an Attribute Check.</li>
</ul>
<h3>2</h3>
<p>
<strong>O W</strong> If your Check is successful, you alter the
<strong>Clock</strong> in your favor — which, based on the Clock in question,
means filling or erasing a certain number of sections, as previously explained
on <a href="/books/core/#page-53">page 53</a>:
</p>
<ul>
<li>One section for succeeding.</li>
<li> <li>
<p> An additional section for beating the Difficulty Level or the opponent's
Since Objective gets you closer to what you want to achieve within the roll by three (3) or more, or two additional sections for beating it by six
conflict, it will always require a Check. (6) or more.
</p>
<ul>
<li>
If your goal is opposed by another participant in the conflict scene,
the Check will be an Opposed Check against them. Even if multiple
participants can oppose you, only one of them will perform the Check —
this should be the most capable among your adversaries.
</li>
<li>Otherwise, it will be an Attribute Check.</li>
</ul>
</li> </li>
</ul>
<li> <h3>3</h3>
<p> <p>
If your goal is simple enough—such as leaping past a chasm or climbing a Most of the time, your goal will be complex enough to involve the use of a
rope—you will likely accomplish it with a single successful <strong>Clock</strong> — especially if achieving it brings you closer to
<strong>Check</strong>. winning the conflict.
</p> </p>
</li> <hr />
<li>
<p>
Most of the time, your goal will be complex enough to involve the use of a
<strong>Clock</strong> — especially if achieving it brings you closer to
winning the conflict.
</p>
</li>
<li>
<p>
If your Check is successful, you alter the
<strong>Clock</strong> in your favor — which, based on the Clock in
question, means filling or erasing a certain number of sections, as
previously explained on <a href="/books/core/#page-53">page 53</a>:
</p>
<ul>
<li>One section for succeeding.</li>
<li>
An additional section for beating the Difficulty Level or the opponent's
roll by three (3) or more, or two additional sections for beating it by
six (6) or more.
</li>
</ul>
</li>
</ol>

File diff suppressed because it is too large Load Diff

View File

@@ -205,160 +205,3 @@ li.active .page-num {
padding-bottom: 0.8em; padding-bottom: 0.8em;
margin-bottom: 1.4em; margin-bottom: 1.4em;
} }
/* ── Search modal ── */
.search-overlay {
position: fixed;
inset: 0;
background: rgba(0, 0, 0, 0.55);
z-index: 1000;
display: flex;
align-items: flex-start;
justify-content: center;
padding-top: 10vh;
}
.search-modal {
width: 580px;
max-width: calc(100vw - 40px);
max-height: 70vh;
background: var(--surface2);
border: 1px solid var(--border-bright);
display: flex;
flex-direction: column;
overflow: hidden;
}
.search-input {
width: 100%;
padding: 14px 16px;
background: var(--surface);
border: none;
border-bottom: 1px solid var(--border-bright);
color: var(--text);
font-family: var(--font-body);
font-size: 1rem;
outline: none;
flex-shrink: 0;
}
.search-input::placeholder { color: var(--text-dim); }
.search-results {
overflow-y: auto;
flex: 1;
list-style: none;
padding: 0;
margin: 0;
}
.search-result {
padding: 10px 16px;
border-bottom: 1px solid var(--border);
cursor: pointer;
display: flex;
flex-direction: column;
gap: 3px;
transition: background 0.1s;
}
.search-result:last-child { border-bottom: none; }
.search-result:hover,
.search-result.active { background: var(--surface3); }
.search-result-meta {
display: flex;
justify-content: space-between;
align-items: baseline;
gap: 8px;
}
.search-result-heading {
font-family: var(--font-display);
font-size: 0.7rem;
letter-spacing: 0.08em;
color: var(--teal);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
min-width: 0;
}
.search-result-page {
font-family: var(--font-mono);
font-size: 0.7rem;
color: var(--text-dim);
white-space: nowrap;
flex-shrink: 0;
}
.search-result-snippet {
font-size: 0.85rem;
color: var(--text-dim);
line-height: 1.5;
}
.search-result-snippet mark {
background: none;
color: var(--gold);
font-weight: 600;
}
.search-empty {
padding: 24px 16px;
text-align: center;
color: var(--text-dim);
font-family: var(--font-mono);
font-size: 0.8rem;
}
.search-footer {
display: flex;
gap: 16px;
padding: 7px 14px;
border-top: 1px solid var(--border);
background: var(--surface3);
flex-shrink: 0;
}
.search-footer span {
font-family: var(--font-mono);
font-size: 0.68rem;
color: var(--text-dim);
}
/* ── Heading permalink buttons ── */
.page-section h1,
.page-section h2,
.page-section h3 {
position: relative;
scroll-margin-top: 60px;
}
.heading-link {
position: absolute;
left: -24px;
top: 50%;
transform: translateY(-50%);
background: none;
border: none;
cursor: pointer;
color: var(--text-dim);
font-family: var(--font-mono);
font-size: 17px;
padding: 2px 4px;
line-height: 1;
transition: color 0.15s;
user-select: none;
}
/* h1 has padding-bottom: 0.3em — shift button up so it centers with the text line, not the full box */
.page-section h1 > .heading-link {
top: calc(50% - 5px);
}
.heading-link:hover,
.heading-link--copied {
color: var(--teal);
}

0
data/spells.json Normal file
View File

View File

@@ -1,49 +0,0 @@
#!/usr/bin/env node
const fs = require('node:fs')
const path = require('node:path')
const { parse } = require('yaml')
const ymlPath = path.join(__dirname, "..", "data", "spells.yml");
const data = parse(fs.readFileSync(ymlPath, "utf8"));
const columns = ["name", "cost", "targets", "duration"];
const myEscape = (s) =>
String(s ?? "")
.replace(/&/g, "&amp;")
.replace(/</g, "&lt;")
.replace(/>/g, "&gt;");
const generateTable = (spells, class_) => {
const rows = spells
.filter((elem) => elem.class === class_)
.map(
(spell) =>
` <tr>\n${columns.map((col) => ` <td>${myEscape(spell[col])}</td>`).join("\n")}\n </tr><tr><td colspan="4">${spell["description"]}</td></tr>`,
)
.join("\n");
const headers = columns
.map((col) => ` <th>${col.charAt(0).toUpperCase() + col.slice(1)}</th>`)
.join("\n");
return `<table>
<thead>
<tr>
${headers}
</tr>
</thead>
<tbody>
${rows}
</tbody>
</table>
`;
};
["arcanist", "chimerist", "elementalist", "entropist", "spiritist"].forEach(
(class_) => {
process.stdout.write(`<h2>${class_} Spells</h2>\n`)
process.stdout.write(generateTable(data.spells, class_));
},
);

View File

@@ -1,5 +1,4 @@
import React, { useState, useEffect, useRef, useCallback, useMemo } from 'react'; import React, { useState, useEffect, useRef, useCallback, useMemo } from 'react';
import SearchModal, { SearchEntry } from './SearchModal';
interface BookIndexProps { interface BookIndexProps {
title: string; title: string;
@@ -7,63 +6,10 @@ interface BookIndexProps {
pages: BookPage[]; pages: BookPage[];
} }
function slugify(text: string): string {
return text
.toLowerCase()
.replace(/[^\w\s-]/g, '')
.replace(/\s+/g, '-')
.replace(/-+/g, '-')
.trim();
}
export default function BookIndex({ title, logoText, pages }: BookIndexProps) { export default function BookIndex({ title, logoText, pages }: BookIndexProps) {
const pageNums = useMemo(() => pages.map(p => p.n), [pages]); const pageNums = useMemo(() => pages.map(p => p.n), [pages]);
const total = pageNums.length; const total = pageNums.length;
// Single DOMParser pass per page: build search index then inject permalink buttons.
// Both outputs are stable memos so React's dangerouslySetInnerHTML diffing never
// strips the injected buttons on re-render.
const { processedPages, searchIndex } = useMemo(() => {
const parser = new DOMParser();
const slugCount: Record<string, number> = {};
const searchIndex: SearchEntry[] = [];
const processedPages = pages.map(({ n, content }) => {
const doc = parser.parseFromString(content, 'text/html');
// 1. Index text blocks before mutation so heading textContent has no '#' noise
let currentHeading = '';
doc.body.querySelectorAll('h1, h2, h3, p, li, blockquote, td').forEach(el => {
if (/^H[1-3]$/.test(el.tagName)) {
currentHeading = el.textContent?.trim() || '';
} else {
const text = el.textContent?.trim() || '';
if (text.length > 20) {
searchIndex.push({ pageNum: n, headingContext: currentHeading, text });
}
}
});
// 2. Add IDs and permalink buttons to headings
doc.querySelectorAll('h1, h2, h3').forEach(heading => {
const baseSlug = slugify(heading.textContent || '');
if (!baseSlug) return;
slugCount[baseSlug] = (slugCount[baseSlug] || 0) + 1;
const id = slugCount[baseSlug] === 1 ? baseSlug : `${baseSlug}-${slugCount[baseSlug] - 1}`;
heading.id = id;
const btn = doc.createElement('button');
btn.className = 'heading-link';
btn.setAttribute('aria-label', 'Copy permalink');
btn.textContent = '#';
heading.insertBefore(btn, heading.firstChild);
});
return { n, content: doc.body.innerHTML };
});
return { processedPages, searchIndex };
}, [pages]);
const [currentIdx, setCurrentIdx] = useState(() => { const [currentIdx, setCurrentIdx] = useState(() => {
const m = window.location.hash.match(/^#page-(\d+)$/); const m = window.location.hash.match(/^#page-(\d+)$/);
if (m) { if (m) {
@@ -73,8 +19,6 @@ export default function BookIndex({ title, logoText, pages }: BookIndexProps) {
return 0; return 0;
}); });
const [isSearchOpen, setIsSearchOpen] = useState(false);
const contentRef = useRef<HTMLDivElement>(null); const contentRef = useRef<HTMLDivElement>(null);
const goTo = useCallback((n: number, smooth: boolean, push: boolean) => { const goTo = useCallback((n: number, smooth: boolean, push: boolean) => {
@@ -122,15 +66,9 @@ export default function BookIndex({ title, logoText, pages }: BookIndexProps) {
return () => container.removeEventListener('scroll', handleScroll); return () => container.removeEventListener('scroll', handleScroll);
}, [pageNums]); }, [pageNums]);
// Keyboard navigation (page-level) and search shortcut // Keyboard navigation
useEffect(() => { useEffect(() => {
const handleKeyDown = (e: KeyboardEvent) => { const handleKeyDown = (e: KeyboardEvent) => {
// Ctrl+K / Ctrl+F → open search
if ((e.ctrlKey || e.metaKey) && (e.key === 'k' || e.key === 'f')) {
e.preventDefault();
setIsSearchOpen(true);
return;
}
const tag = (e.target as HTMLElement).tagName; const tag = (e.target as HTMLElement).tagName;
if (tag === 'INPUT' || tag === 'TEXTAREA') return; if (tag === 'INPUT' || tag === 'TEXTAREA') return;
setCurrentIdx(prev => { setCurrentIdx(prev => {
@@ -150,61 +88,16 @@ export default function BookIndex({ title, logoText, pages }: BookIndexProps) {
// Browser back/forward // Browser back/forward
useEffect(() => { useEffect(() => {
const handlePopState = () => { const handlePopState = () => {
const hash = location.hash.slice(1); const m = location.hash.match(/^#page-(\d+)$/);
const pageM = hash.match(/^page-(\d+)$/); if (m) {
if (pageM) { const n = parseInt(m[1], 10);
const n = parseInt(pageM[1], 10);
if (pageNums.includes(n)) goTo(n, false, false); if (pageNums.includes(n)) goTo(n, false, false);
} else if (hash) {
const target = document.getElementById(hash);
if (target) target.scrollIntoView({ behavior: 'smooth', block: 'start' });
} }
}; };
window.addEventListener('popstate', handlePopState); window.addEventListener('popstate', handlePopState);
return () => window.removeEventListener('popstate', handlePopState); return () => window.removeEventListener('popstate', handlePopState);
}, [goTo, pageNums]); }, [goTo, pageNums]);
// Event delegation for heading permalink buttons
useEffect(() => {
const container = contentRef.current;
if (!container) return;
const handleClick = (e: MouseEvent) => {
const btn = (e.target as Element).closest('.heading-link') as HTMLButtonElement | null;
if (!btn) return;
const id = btn.closest('h1, h2, h3')?.id;
if (!id) return;
e.preventDefault();
const url = `${window.location.origin}${window.location.pathname}#${id}`;
history.pushState(null, '', `#${id}`);
navigator.clipboard.writeText(url).catch(() => {
const ta = document.createElement('textarea');
ta.value = url;
document.body.appendChild(ta);
ta.select();
document.execCommand('copy');
document.body.removeChild(ta);
});
const prev = btn.textContent!;
btn.textContent = '✓';
btn.classList.add('heading-link--copied');
setTimeout(() => {
btn.textContent = prev;
btn.classList.remove('heading-link--copied');
}, 1500);
};
container.addEventListener('click', handleClick);
return () => container.removeEventListener('click', handleClick);
}, []);
// Scroll to heading hash on initial load
useEffect(() => {
const hash = window.location.hash.slice(1);
if (hash && !/^page-\d+$/.test(hash)) {
const target = document.getElementById(hash);
if (target) target.scrollIntoView({ behavior: 'instant', block: 'start' });
}
}, []); // eslint-disable-line react-hooks/exhaustive-deps
const currentPage = pageNums[currentIdx]; const currentPage = pageNums[currentIdx];
return ( return (
@@ -212,9 +105,6 @@ export default function BookIndex({ title, logoText, pages }: BookIndexProps) {
<header> <header>
<div className="logo">{logoText}</div> <div className="logo">{logoText}</div>
<div className="toolbar"> <div className="toolbar">
<button className="tab" onClick={() => setIsSearchOpen(true)} title="Search (Ctrl+K)">
Search
</button>
<span id="page-indicator">{currentIdx + 1} / {total}</span> <span id="page-indicator">{currentIdx + 1} / {total}</span>
</div> </div>
</header> </header>
@@ -263,7 +153,7 @@ export default function BookIndex({ title, logoText, pages }: BookIndexProps) {
</button> </button>
</div> </div>
<div id="content" ref={contentRef}> <div id="content" ref={contentRef}>
{processedPages.map(({ n, content }) => ( {pages.map(({ n, content }) => (
<section <section
key={n} key={n}
id={`page-${n}`} id={`page-${n}`}
@@ -274,14 +164,6 @@ export default function BookIndex({ title, logoText, pages }: BookIndexProps) {
</div> </div>
</div> </div>
</div> </div>
{isSearchOpen && (
<SearchModal
searchIndex={searchIndex}
onNavigate={n => goTo(n, false, true)}
onClose={() => setIsSearchOpen(false)}
/>
)}
</> </>
); );
} }

View File

@@ -1,128 +0,0 @@
import React, { useState, useEffect, useRef, useMemo, useCallback } from 'react';
export interface SearchEntry {
pageNum: number;
headingContext: string;
text: string;
}
interface Props {
searchIndex: SearchEntry[];
onNavigate: (pageNum: number) => void;
onClose: () => void;
}
function escapeHtml(s: string): string {
return s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
}
function buildSnippetHtml(text: string, q: string): string {
const lo = text.toLowerCase();
const idx = lo.indexOf(q);
if (idx === -1) return escapeHtml(text.slice(0, 140)) + (text.length > 140 ? '…' : '');
const r = 65;
const s = Math.max(0, idx - r);
const e = Math.min(text.length, idx + q.length + r);
return (
(s > 0 ? '…' : '') +
escapeHtml(text.slice(s, idx)) +
`<mark>${escapeHtml(text.slice(idx, idx + q.length))}</mark>` +
escapeHtml(text.slice(idx + q.length, e)) +
(e < text.length ? '…' : '')
);
}
export default function SearchModal({ searchIndex, onNavigate, onClose }: Props) {
const [query, setQuery] = useState('');
const [activeIdx, setActiveIdx] = useState(0);
const inputRef = useRef<HTMLInputElement>(null);
const listRef = useRef<HTMLUListElement>(null);
useEffect(() => { inputRef.current?.focus(); }, []);
const results = useMemo(() => {
const q = query.trim().toLowerCase();
if (q.length < 2) return [];
const seen: Record<number, number> = {};
const out: { pageNum: number; headingContext: string; snippetHtml: string }[] = [];
for (const entry of searchIndex) {
if (out.length >= 40) break;
const hitText = entry.text.toLowerCase().includes(q);
const hitHeading = entry.headingContext.toLowerCase().includes(q);
if (!hitText && !hitHeading) continue;
const count = seen[entry.pageNum] ?? 0;
if (count >= 2) continue;
seen[entry.pageNum] = count + 1;
out.push({
pageNum: entry.pageNum,
headingContext: entry.headingContext,
snippetHtml: buildSnippetHtml(hitText ? entry.text : entry.headingContext, q),
});
}
return out;
}, [query, searchIndex]);
useEffect(() => { setActiveIdx(0); }, [results]);
useEffect(() => {
const el = listRef.current?.children[activeIdx] as HTMLElement | undefined;
el?.scrollIntoView({ block: 'nearest' });
}, [activeIdx]);
const go = useCallback((pageNum: number) => {
onNavigate(pageNum);
onClose();
}, [onNavigate, onClose]);
const handleKeyDown = (e: React.KeyboardEvent) => {
if (e.key === 'Escape') { onClose(); return; }
if (e.key === 'ArrowDown') { e.preventDefault(); setActiveIdx(i => Math.min(i + 1, results.length - 1)); }
if (e.key === 'ArrowUp') { e.preventDefault(); setActiveIdx(i => Math.max(i - 1, 0)); }
if (e.key === 'Enter' && results[activeIdx]) go(results[activeIdx].pageNum);
};
const q = query.trim();
return (
<div className="search-overlay" onClick={onClose}>
<div className="search-modal" onClick={e => e.stopPropagation()}>
<input
ref={inputRef}
className="search-input"
type="text"
placeholder="Search the rulebook…"
value={query}
onChange={e => setQuery(e.target.value)}
onKeyDown={handleKeyDown}
/>
{q.length < 2 ? (
<div className="search-empty">Type at least 2 characters</div>
) : results.length === 0 ? (
<div className="search-empty">No results for &ldquo;{q}&rdquo;</div>
) : (
<ul className="search-results" ref={listRef}>
{results.map((r, i) => (
<li
key={i}
className={`search-result${i === activeIdx ? ' active' : ''}`}
onClick={() => go(r.pageNum)}
onMouseEnter={() => setActiveIdx(i)}
>
<div className="search-result-meta">
<span className="search-result-heading">{r.headingContext || '—'}</span>
<span className="search-result-page">p.{r.pageNum}</span>
</div>
<div className="search-result-snippet" dangerouslySetInnerHTML={{ __html: r.snippetHtml }} />
</li>
))}
</ul>
)}
<div className="search-footer">
<span> navigate</span>
<span> go to page</span>
<span>esc close</span>
</div>
</div>
</div>
);
}

View File

@@ -85,25 +85,6 @@ module.exports = (env, argv) => {
...(isProd ...(isProd
? [new MiniCssExtractPlugin({ filename: "[name].[contenthash].css" })] ? [new MiniCssExtractPlugin({ filename: "[name].[contenthash].css" })]
: []), : []),
// Register book HTML source files as compilation dependencies so webpack
// watches them in dev mode and triggers a rebuild when they change.
{
apply(compiler) {
compiler.hooks.afterCompile.tap("WatchBookPages", (compilation) => {
const bookDirs = [
path.resolve(__dirname, "books/core"),
path.resolve(__dirname, "books/natural-fantasy-atlas"),
];
for (const dir of bookDirs) {
try {
fs.readdirSync(dir)
.filter(f => f.endsWith(".html") && f !== "index.html")
.forEach(f => compilation.fileDependencies.add(path.join(dir, f)));
} catch (_) {}
}
});
},
},
new HtmlWebpackPlugin({ new HtmlWebpackPlugin({
template: "./src/fabula-ultima-sheet.html", template: "./src/fabula-ultima-sheet.html",
filename: "index.html", filename: "index.html",
@@ -111,7 +92,7 @@ module.exports = (env, argv) => {
scriptLoading: "blocking", scriptLoading: "blocking",
}), }),
new HtmlWebpackPlugin({ new HtmlWebpackPlugin({
templateContent: () => bookTemplate( templateContent: bookTemplate(
"Fabula Ultima - Core Rulebook", "Fabula Ultima - Core Rulebook",
"Core Rules", "Core Rules",
"./books/core" "./books/core"
@@ -121,7 +102,7 @@ module.exports = (env, argv) => {
scriptLoading: "blocking", scriptLoading: "blocking",
}), }),
new HtmlWebpackPlugin({ new HtmlWebpackPlugin({
templateContent: () => bookTemplate( templateContent: bookTemplate(
"Fabula Ultima - Natural Fantasy Atlas", "Fabula Ultima - Natural Fantasy Atlas",
"Natural Fantasy Atlas", "Natural Fantasy Atlas",
"./books/natural-fantasy-atlas" "./books/natural-fantasy-atlas"