adding sand strider, fixing statblock css
This commit is contained in:
parent
7f07990f58
commit
1bd9dee29d
|
@ -7,7 +7,7 @@ tags: monster
|
||||||
date: 2023-05-27 14:43:16.001825
|
date: 2023-05-27 14:43:16.001825
|
||||||
template: monster
|
template: monster
|
||||||
show_dm_content: True
|
show_dm_content: True
|
||||||
status: published
|
status: draft
|
||||||
monster:
|
monster:
|
||||||
name: "Rolling Cactus"
|
name: "Rolling Cactus"
|
||||||
size: medium
|
size: medium
|
||||||
|
|
|
@ -45,22 +45,6 @@ monster:
|
||||||
attributes:
|
attributes:
|
||||||
options:
|
options:
|
||||||
"Opportunity Attack": The Sand Bear makes one attack with its claws.
|
"Opportunity Attack": The Sand Bear makes one attack with its claws.
|
||||||
Legendary Actions:
|
|
||||||
attributes:
|
|
||||||
"count": 3
|
|
||||||
options:
|
|
||||||
"name1": description
|
|
||||||
"name2": description
|
|
||||||
Legendary Reactions:
|
|
||||||
options:
|
|
||||||
"name1": description
|
|
||||||
"name2": description
|
|
||||||
Lair and Actions:
|
|
||||||
attributes:
|
|
||||||
"name1": description
|
|
||||||
options:
|
|
||||||
"name1": description
|
|
||||||
"name2": description
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Flavour text goes here.
|
Flavour text goes here.
|
||||||
|
|
57
deadsands/content/bestiary/sand-strider.md
Normal file
57
deadsands/content/bestiary/sand-strider.md
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
---
|
||||||
|
# bestiary/sand-strider.md
|
||||||
|
|
||||||
|
title: Sand Strider
|
||||||
|
author: evilchili
|
||||||
|
tags: monster
|
||||||
|
date: 2023-12-15 17:05:35.445106
|
||||||
|
template: monster
|
||||||
|
show_dm_content: True
|
||||||
|
status: published
|
||||||
|
monster:
|
||||||
|
name: "Sand Strider"
|
||||||
|
size: medium
|
||||||
|
type: beast
|
||||||
|
alignment: unaligned
|
||||||
|
AC: 14
|
||||||
|
HP: 25 (4d10 + 3)
|
||||||
|
speed: 40ft, climbing 20ft
|
||||||
|
STR: 15, +2
|
||||||
|
DEX: 13, +1
|
||||||
|
CON: 12, +1
|
||||||
|
INT: 5, -3
|
||||||
|
WIS: 10, 0
|
||||||
|
CHA: 3, -4
|
||||||
|
skills: Athletics +5, Stealth +7
|
||||||
|
saving_throws:
|
||||||
|
resistances: Resistant to magical spell effects and damage.
|
||||||
|
damage_immunities:
|
||||||
|
condition_immunities:
|
||||||
|
senses: Passive Perception 10
|
||||||
|
languages: Lizardfolk
|
||||||
|
cr:
|
||||||
|
attributes:
|
||||||
|
"Lithe": Sand Striders ignore movement penalties due to difficult terrain while in the desert.
|
||||||
|
"Hardy": Sand Striders can survive for up to two weeks without water.
|
||||||
|
"Ornery": Unless given a command by its rider, a Sand Strider will use its movement to approach the nearest target and make a bite attack.
|
||||||
|
"Bonded": A bonded Sand Strider acts on its rider's initiative. As a bonus action, the rider can command the strider to use its Bite or Spit attacks.
|
||||||
|
traits:
|
||||||
|
Actions:
|
||||||
|
attributes:
|
||||||
|
options:
|
||||||
|
"Bite": "+5 to hit, reach 5 ft., one target. Hit: 8 (1d8+3) Piercing damage."
|
||||||
|
"Spit": "Recharge 5-6. The Sand Strider spits a jet of magical fluid in a straight line 5ft wide and 30ft long. Each creature in the line must make a DC13 Dexterity saving throw. A creature that fails the save takes 2d6 damage, or half that if it succeeds. The damage type depends on the Sand Strider's sub-species variant."
|
||||||
|
---
|
||||||
|
|
||||||
|
Sand Striders are 6-legged giant lizards evolved to survive in the harsh magical climates of the Sahwat Desert. Despite their large size, standing nearly 5 feet at the shoulder and up to 10ft long from snout to tail, striders are quick, silent predators that move with ease on difficult terrain. While experienced hoppers quickly learn to stay well clear of the beasts, Lizardfolk tribes have been known to ride Sand Striders. Just how they are able to tame the great lizards is unknown.
|
||||||
|
|
||||||
|
There are numerous sub-species, each with its own distinct coloration and elemental affinity, which determines the type of damage done by their spit:
|
||||||
|
|
||||||
|
| Sub-Species | Damage Type |
|
||||||
|
| ----------- | ----------- |
|
||||||
|
| Blue | Lightning |
|
||||||
|
| White | Frost |
|
||||||
|
| Red | Fire |
|
||||||
|
| Green | Poison |
|
||||||
|
| Black | Acid |
|
||||||
|
|
|
@ -706,13 +706,19 @@ a.disabled:hover {
|
||||||
text-transform: capitalize;
|
text-transform: capitalize;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
margin-bottom: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.statblock table {
|
.statblock table {
|
||||||
margin: 0;
|
margin: 2em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.statblock table.stats {
|
||||||
|
border: 1px solid #000;
|
||||||
}
|
}
|
||||||
|
|
||||||
.statblock table tr, .statblock table tr td {
|
.statblock table tr, .statblock table tr td {
|
||||||
|
text-align: center;
|
||||||
background: inherit;
|
background: inherit;
|
||||||
}
|
}
|
||||||
.statblock table tr th,
|
.statblock table tr th,
|
||||||
|
@ -720,17 +726,22 @@ a.disabled:hover {
|
||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
padding-right: 2em;
|
padding-right: 2em;
|
||||||
}
|
}
|
||||||
.statblock table tr td:first-of-type {
|
|
||||||
font-weight: bold;
|
.statblock table.properties td {
|
||||||
white-space: nowrap;
|
text-align: left
|
||||||
}
|
|
||||||
.statblock table tr td:first-of-type:last-of-type {
|
|
||||||
font-weight: normal;
|
|
||||||
white-space: wrap;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.statblock table tr:last-child,
|
.statblock table.properties tr td:first-of-type {
|
||||||
.statblock table tr:last-child {
|
font-weight: bold;
|
||||||
|
width: 10%;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
.statblock table.properties tr td:first-of-type:last-of-type {
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.statblock table.properties tr:last-child,
|
||||||
|
.statblock table.properties tr:last-child {
|
||||||
padding-right: 1em;
|
padding-right: 1em;
|
||||||
}
|
}
|
||||||
.statblock table tr:nth-child(even) {
|
.statblock table tr:nth-child(even) {
|
||||||
|
@ -740,8 +751,6 @@ a.disabled:hover {
|
||||||
background: rgba(255,255,255, 0.3);
|
background: rgba(255,255,255, 0.3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.statblock dl {
|
.statblock dl {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-flow: row;
|
flex-flow: row;
|
||||||
|
|
|
@ -22,117 +22,7 @@
|
||||||
{% set target = article.title.replace(' ', '_') %}
|
{% set target = article.title.replace(' ', '_') %}
|
||||||
{% if self.is_dm() or article.show_dm_content %}
|
{% if self.is_dm() or article.show_dm_content %}
|
||||||
<div class='statblock monster'>
|
<div class='statblock monster'>
|
||||||
<h3>{{ article.title }}</h3>
|
{% include "statblock.html" %}
|
||||||
<div class='monster-type'>
|
|
||||||
<em>
|
|
||||||
{{m.size}} {{m.type}}{% if m.alignment %}, {{m.alignment}}{%endif%}
|
|
||||||
</em>
|
|
||||||
</div>
|
|
||||||
<hr>
|
|
||||||
<div class='stat'>
|
|
||||||
Armor Class <span class='value'>{{ m.AC }}</span>
|
|
||||||
</div>
|
|
||||||
<div class='stat'>
|
|
||||||
Hit Points <span class='value'>{{ m.HP }}</span>
|
|
||||||
</div>
|
|
||||||
<div class='stat'>
|
|
||||||
Speed <span class='value'>{{ m.speed }}</span>
|
|
||||||
</div>
|
|
||||||
<hr>
|
|
||||||
<table>
|
|
||||||
<tr>
|
|
||||||
<th>STR</th><th>DEX</th><th>CON</th><th>INT</th><th>WIS</th><th>CHA</th>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>{{ m.STR }}</td>
|
|
||||||
<td>{{ m.DEX }}</td>
|
|
||||||
<td>{{ m.CON }}</td>
|
|
||||||
<td>{{ m.INT }}</td>
|
|
||||||
<td>{{ m.WIS }}</td>
|
|
||||||
<td>{{ m.CHA }}</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<hr>
|
|
||||||
|
|
||||||
{% if m.saving_throws %}
|
|
||||||
<div class='stat'>
|
|
||||||
Saving Throws <span class='value'>{{ m.saving_throws }}</span>
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if m.skills %}
|
|
||||||
<div class='stat'>
|
|
||||||
Skills <span class='value'>{{ m.skills }}</span>
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if m.resistances %}
|
|
||||||
<div class='stat'>
|
|
||||||
Damage Resistances <span class='value'>{{ m.resistances }}</span>
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if m.vulnerabilities %}
|
|
||||||
<div class='stat'>
|
|
||||||
Damage Vulnerabilities <span class='value'>{{ m.vulnerabilities }}</span>
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if m.damage_immunities %}
|
|
||||||
<div class='stat'>
|
|
||||||
Damage Immunities <span class='value'>{{ m.damage_immunities }}</span>
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if m.condition_immunities %}
|
|
||||||
<div class='stat'>
|
|
||||||
Condition Immunities <span class='value'>{{ m.condition_immunities }}</span>
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if m.saving_throws %}
|
|
||||||
<div class='stat'>
|
|
||||||
Senses <span class='value'>{{ m.senses }}</span>
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if m.languages %}
|
|
||||||
<div class='stat'>
|
|
||||||
Languages <span class='value'>{{ m.languages }}</span>
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if m.cr %}
|
|
||||||
<div class='stat'>
|
|
||||||
Challenge <span class='value'>{{ m.cr }}</span>
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
<hr>
|
|
||||||
|
|
||||||
{% for (attr_name, attr_desc) in m.attributes.items() %}
|
|
||||||
<div class='stat'>{{ attr_name }}. <span class='value'>{{attr_desc}}</span></div>
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
{% for section in ('Actions', 'Reactions', 'Legendary Actions', 'Legendary Reactions', 'Lair and Actions') %}
|
|
||||||
{% if section in m.traits %}
|
|
||||||
{% set trait = m.traits[section] %}
|
|
||||||
{% if 'attributes' in trait or 'options' in trait %}
|
|
||||||
<h4>{{ section }}</h4>
|
|
||||||
{% if trait.attributes %}
|
|
||||||
{% for (attr_name, attr_desc) in trait.attributes.items() %}
|
|
||||||
<div class='stat'>{{ attr_name }}. <span class='value'>{{attr_desc}}</span></div>
|
|
||||||
{% endfor %}
|
|
||||||
{% endif %}
|
|
||||||
{% if trait.options %}
|
|
||||||
{% for (attr_name, attr_desc) in trait.options.items() %}
|
|
||||||
<div class='stat'>{{ attr_name }}. <span class='value'>{{attr_desc}}</span></div>
|
|
||||||
{% endfor %}
|
|
||||||
{% endif %}
|
|
||||||
{% endif %}
|
|
||||||
{% endif %}
|
|
||||||
{% endfor %}
|
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
|
63
deadsands/deadsands-theme/templates/statblock.html
Normal file
63
deadsands/deadsands-theme/templates/statblock.html
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
{% set stats = ['STR', 'DEX', 'CON', 'INT', 'WIS', 'CHA'] %}
|
||||||
|
<h3>{{ article.title }}</h3>
|
||||||
|
<div class='monster-type'>
|
||||||
|
<em>
|
||||||
|
{{m.size}} {{m.type}}{% if m.alignment %}, {{m.alignment}}{%endif%}
|
||||||
|
</em>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
<table class='stats'>
|
||||||
|
<tr>
|
||||||
|
{% for stat in stats %}
|
||||||
|
<th>{{ stat }} </th>
|
||||||
|
{% endfor %}
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
{% for stat in ['STR', 'DEX', 'CON', 'INT', 'WIS', 'CHA'] %}
|
||||||
|
{% set score, bonus = m[stat].split(',') %}
|
||||||
|
<td><b>{{score}}</b><br>{{bonus}}</td>
|
||||||
|
{% endfor %}
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<table class='properties'>
|
||||||
|
<tr><td>Armor Class</td><td>{{ m.AC }}</td></tr>
|
||||||
|
<tr><td>Hit Points</td><td>{{ m.HP }}</td></tr>
|
||||||
|
<tr><td>Speed</td><td>{{ m.speed }}</td></tr>
|
||||||
|
{% if m.skills %}<tr><td>Skills</td><td>{{ m.skills }}</td></tr>{% endif %}
|
||||||
|
{% if m.saving_throws %}<tr><td>Saving Throws</td><td>{{ m.saving_throws }}</td></tr>{% endif %}
|
||||||
|
{% if m.resistances %}<tr><td>Resistances</td><td>{{ m.resistances }}</td></tr>{% endif %}
|
||||||
|
{% if m.vulnerabilities %}<tr><td>Vulnerabilities</td><td>{{ m.vulnerabilities }}</td></tr>{% endif %}
|
||||||
|
{% if m.damage_immunities %}<tr><td>Damage Immunities</td><td>{{ m.damage_immunities }}</td></tr>{% endif %}
|
||||||
|
{% if m.condition_immunities %}<tr><td>Condition Immunities</td><td>{{ m.condition_immunities }}</td></tr>{% endif %}
|
||||||
|
{% if m.senses %}<tr><td>Senses</td><td>{{ m.senses }}</td></tr>{% endif %}
|
||||||
|
{% if m.languages %}<tr><td>Languages</td><td>{{ m.languages }}</td></tr>{% endif %}
|
||||||
|
{% if m.cr %}<tr><td>Challenge Rating</td><td>{{ m.cr }}</td></tr>{% endif %}
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
{% for (attr_name, attr_desc) in m.attributes.items() %}
|
||||||
|
<div class='stat'>{{ attr_name }}. <span class='value'>{{attr_desc}}</span></div>
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
{% for section in ('Actions', 'Reactions', 'Legendary Actions', 'Legendary Reactions', 'Lair and Actions') %}
|
||||||
|
{% if section in m.traits %}
|
||||||
|
{% set trait = m.traits[section] %}
|
||||||
|
{% if 'attributes' in trait or 'options' in trait %}
|
||||||
|
<h4>{{ section }}</h4>
|
||||||
|
{% if trait.attributes %}
|
||||||
|
{% for (attr_name, attr_desc) in trait.attributes.items() %}
|
||||||
|
<div class='stat'>{{ attr_name }}. <span class='value'>{{attr_desc}}</span></div>
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
{% if trait.options %}
|
||||||
|
{% for (attr_name, attr_desc) in trait.options.items() %}
|
||||||
|
<div class='stat'>{{ attr_name }}. <span class='value'>{{attr_desc}}</span></div>
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
|
|
@ -4,6 +4,7 @@ from pathlib import Path
|
||||||
from jinja2 import Environment, FileSystemLoader
|
from jinja2 import Environment, FileSystemLoader
|
||||||
from pelican.utils import sanitised_join, slugify
|
from pelican.utils import sanitised_join, slugify
|
||||||
from pelican.writers import Writer
|
from pelican.writers import Writer
|
||||||
|
from pprint import pprint as print
|
||||||
|
|
||||||
from site_tools import SETTINGS
|
from site_tools import SETTINGS
|
||||||
|
|
||||||
|
@ -43,7 +44,7 @@ def create(
|
||||||
target_path = base_path / SETTINGS["PATH"] / relpath
|
target_path = base_path / SETTINGS["PATH"] / relpath
|
||||||
dest = sanitised_join(str(target_path / target_filename))
|
dest = sanitised_join(str(target_path / target_filename))
|
||||||
|
|
||||||
SETTINGS["WRITE_SELECTED"].append(dest)
|
#SETTINGS["WRITE_SELECTED"].append(dest)
|
||||||
writer = Writer(target_path, settings=SETTINGS)
|
writer = Writer(target_path, settings=SETTINGS)
|
||||||
writer.write_file(
|
writer.write_file(
|
||||||
name=target_filename,
|
name=target_filename,
|
||||||
|
|
|
@ -23,7 +23,7 @@ Effect:
|
||||||
- Why do we have to keep doing things? Doing things is hard.
|
- Why do we have to keep doing things? Doing things is hard.
|
||||||
- Your movement speed is reduced by 10ft and you cannot use reactions. Advantage on saves against psychic effects.
|
- Your movement speed is reduced by 10ft and you cannot use reactions. Advantage on saves against psychic effects.
|
||||||
- Horror:
|
- Horror:
|
||||||
- You have stared into the abyss of your soul and only blackness awaits you.
|
- You have stared into the abyss of your soul and found only blackness.
|
||||||
- Frightened by all creatures. Disadvantage on all saves against psychic effects.
|
- Frightened by all creatures. Disadvantage on all saves against psychic effects.
|
||||||
- Mania:
|
- Mania:
|
||||||
- You are possessed by feverish mania; ideas and words tumble out of as quickly as possible. You cannot stop them.
|
- You are possessed by feverish mania; ideas and words tumble out of as quickly as possible. You cannot stop them.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user