Dungeon
@@ -334,140 +331,140 @@ const reactionButtonVal = [
`;
- complicationForm?.appendChild(formControls);
+ complicationForm?.appendChild(formControls);
- const rollDungeonEncounter3d4Button = document.getElementById(
- 'js-btnRollDungeonEncounter3d4'
- ),
- rollDungeonEncounter3d6Button = document.getElementById(
- 'js-btnRollDungeonEncounter3d6'
- ),
- rollDungeonEncounter3d8Button = document.getElementById(
- 'js-btnRollDungeonEncounter3d8'
- ),
- rollWildernessEncounter3d4Button = document.getElementById(
- 'js-btnRollWildernessEncounter3d4'
- ),
- rollWildernessEncounter3d6Button = document.getElementById(
- 'js-btnRollWildernessEncounter3d6'
- ),
- rollWildernessEncounter3d8Button = document.getElementById(
- 'js-btnRollWildernessEncounter3d8'
- );
+ const rollDungeonEncounter3d4Button = document.getElementById(
+ 'js-btnRollDungeonEncounter3d4'
+ ),
+ rollDungeonEncounter3d6Button = document.getElementById(
+ 'js-btnRollDungeonEncounter3d6'
+ ),
+ rollDungeonEncounter3d8Button = document.getElementById(
+ 'js-btnRollDungeonEncounter3d8'
+ ),
+ rollWildernessEncounter3d4Button = document.getElementById(
+ 'js-btnRollWildernessEncounter3d4'
+ ),
+ rollWildernessEncounter3d6Button = document.getElementById(
+ 'js-btnRollWildernessEncounter3d6'
+ ),
+ rollWildernessEncounter3d8Button = document.getElementById(
+ 'js-btnRollWildernessEncounter3d8'
+ );
- if (rollDungeonEncounter3d4Button)
- rollDungeonEncounter3d4Button.addEventListener('click', (e) => {
- e.preventDefault();
- rollEncounter(4, 'D');
- });
- if (rollDungeonEncounter3d6Button)
- rollDungeonEncounter3d6Button.addEventListener('click', (e) => {
- e.preventDefault();
- rollEncounter(6, 'D');
- });
- if (rollDungeonEncounter3d8Button)
- rollDungeonEncounter3d8Button.addEventListener('click', (e) => {
- e.preventDefault();
- rollEncounter(8, 'D');
- });
- if (rollWildernessEncounter3d4Button)
- rollWildernessEncounter3d4Button.addEventListener('click', (e) => {
- e.preventDefault();
- rollEncounter(4, 'W');
- });
- if (rollWildernessEncounter3d6Button)
- rollWildernessEncounter3d6Button.addEventListener('click', (e) => {
- e.preventDefault();
- rollEncounter(6, 'W');
- });
- if (rollWildernessEncounter3d8Button)
- rollWildernessEncounter3d8Button.addEventListener('click', (e) => {
- e.preventDefault();
- rollEncounter(8, 'W');
- });
- };
+ if (rollDungeonEncounter3d4Button)
+ rollDungeonEncounter3d4Button.addEventListener('click', (e) => {
+ e.preventDefault();
+ rollEncounter(4, 'D');
+ });
+ if (rollDungeonEncounter3d6Button)
+ rollDungeonEncounter3d6Button.addEventListener('click', (e) => {
+ e.preventDefault();
+ rollEncounter(6, 'D');
+ });
+ if (rollDungeonEncounter3d8Button)
+ rollDungeonEncounter3d8Button.addEventListener('click', (e) => {
+ e.preventDefault();
+ rollEncounter(8, 'D');
+ });
+ if (rollWildernessEncounter3d4Button)
+ rollWildernessEncounter3d4Button.addEventListener('click', (e) => {
+ e.preventDefault();
+ rollEncounter(4, 'W');
+ });
+ if (rollWildernessEncounter3d6Button)
+ rollWildernessEncounter3d6Button.addEventListener('click', (e) => {
+ e.preventDefault();
+ rollEncounter(6, 'W');
+ });
+ if (rollWildernessEncounter3d8Button)
+ rollWildernessEncounter3d8Button.addEventListener('click', (e) => {
+ e.preventDefault();
+ rollEncounter(8, 'W');
+ });
+ };
// Magic Item Concept Roller
// Based on http://recedingrules.blogspot.com/2010/03/spell-like-effect-spur.html
const modeOpts = ['Wielder', 'Touch', 'Distance', 'Area Effect'],
- intentOpts = ['Attack', 'Defense', 'Utility', 'Transport', 2, 3],
- rangeOpts = [10, 20, 30, 40, 50, 60, 70, 'Sight'],
- durationOpts = [
- 'Instant',
- '1 round',
- '1d6 rounds',
- '1 turn',
- '1d6 turns',
- '1 hour',
- '1d6 hours',
- '1 day',
- '1d6 days',
- 'Permanent',
- ],
- effectOpts = [
- 'Alter',
- 'Animate',
- 'Charm / Compel',
- 'Conjure',
- 'Delude',
- 'Dispel / Disappear',
- 'Distort',
- 'Divine',
- 'Evoke',
- 'Shield',
- 'Summon',
- 'Transmute',
- ],
- mediumOpts = [
- 'Animal',
- 'Vegetable',
- 'Mineral',
- 'Metal',
- 'Fire',
- 'Earth',
- 'Water',
- 'Air',
- 'Law',
- 'Chaos',
- 'Shadow',
- 'Light',
- 'Sound',
- 'Dead',
- 'Infernal',
- 'Time',
- 'Space / Dimension',
- 'Human',
- 'Demihuman',
- 'Humanoid',
- 'Monster',
- 'Terrain',
- ],
- getIntent = () => {
- const roll = getRandomValue(intentOpts.length),
- idx = roll - 1;
- if (typeof intentOpts[idx] === 'number') {
- const [total, ...rolls] = rollDice(4, intentOpts[idx]);
- return `${rolls
- .map((r) => `${intentOpts[r - 1]} (${r})`)
- .join(' / ')}`;
- }
+ intentOpts = ['Attack', 'Defense', 'Utility', 'Transport', 2, 3],
+ rangeOpts = [10, 20, 30, 40, 50, 60, 70, 'Sight'],
+ durationOpts = [
+ 'Instant',
+ '1 round',
+ '1d6 rounds',
+ '1 turn',
+ '1d6 turns',
+ '1 hour',
+ '1d6 hours',
+ '1 day',
+ '1d6 days',
+ 'Permanent',
+ ],
+ effectOpts = [
+ 'Alter',
+ 'Animate',
+ 'Charm / Compel',
+ 'Conjure',
+ 'Delude',
+ 'Dispel / Disappear',
+ 'Distort',
+ 'Divine',
+ 'Evoke',
+ 'Shield',
+ 'Summon',
+ 'Transmute',
+ ],
+ mediumOpts = [
+ 'Animal',
+ 'Vegetable',
+ 'Mineral',
+ 'Metal',
+ 'Fire',
+ 'Earth',
+ 'Water',
+ 'Air',
+ 'Law',
+ 'Chaos',
+ 'Shadow',
+ 'Light',
+ 'Sound',
+ 'Dead',
+ 'Infernal',
+ 'Time',
+ 'Space / Dimension',
+ 'Human',
+ 'Demihuman',
+ 'Humanoid',
+ 'Monster',
+ 'Terrain',
+ ],
+ getIntent = () => {
+ const roll = getRandomValue(intentOpts.length),
+ idx = roll - 1;
+ if (typeof intentOpts[idx] === 'number') {
+ const [total, ...rolls] = rollDice(4, intentOpts[idx]);
+ return `${rolls
+ .map((r) => `${intentOpts[r - 1]} (${r})`)
+ .join(' / ')}`;
+ }
- return `${intentOpts[idx]} (${roll})`;
- },
- getRange = () => {
- const roll = getRandomValue(rangeOpts.length),
- idx = roll - 1;
+ return `${intentOpts[idx]} (${roll})`;
+ },
+ getRange = () => {
+ const roll = getRandomValue(rangeOpts.length),
+ idx = roll - 1;
- if (typeof rangeOpts[idx] === 'number') {
- const val = rangeOpts[idx];
- return `${val}' / ${val * 2}' / ${val * 3}' (${roll})`;
- }
+ if (typeof rangeOpts[idx] === 'number') {
+ const val = rangeOpts[idx];
+ return `${val}' / ${val * 2}' / ${val * 3}' (${roll})`;
+ }
- return `${rangeOpts[idx]} (${roll})`;
- },
- getResultList = () => {
- return `
+ return `${rangeOpts[idx]} (${roll})`;
+ },
+ getResultList = () => {
+ return `
Magic Item Results
(${dayjs().format('YYYY-MM-DD HH:mm:ss')})
@@ -497,35 +494,35 @@ const modeOpts = ['Wielder', 'Touch', 'Distance', 'Area Effect'],
`;
- },
- addMagicItemConceptRoller = () => {
- const magicItemConceptForm = document.getElementById(
- 'js-magicItemConcept'
- );
- if (!magicItemConceptForm) return;
+ },
+ addMagicItemConceptRoller = () => {
+ const magicItemConceptForm = document.getElementById(
+ 'js-magicItemConcept'
+ );
+ if (!magicItemConceptForm) return;
- magicItemConceptForm?.appendChild(
- elementBuilder('input')
- .set('type', 'submit')
- .set('value', 'Roll!')
- .getElement()
- );
+ magicItemConceptForm?.appendChild(
+ elementBuilder('input')
+ .set('type', 'submit')
+ .set('value', 'Roll!')
+ .getElement()
+ );
- magicItemConceptForm?.addEventListener('submit', (e) => {
- e.preventDefault();
- elementBuilder('li')
- .setInnerHTML(getResultList())
- .prependToId('js-magicItemConcept-output');
- });
- };
+ magicItemConceptForm?.addEventListener('submit', (e) => {
+ e.preventDefault();
+ elementBuilder('li')
+ .setInnerHTML(getResultList())
+ .prependToId('js-magicItemConcept-output');
+ });
+ };
export default (() => {
- addRollerForm();
- addRoomForm();
- addComplicationForm();
- addAstralComplicationForm();
- addEncounterRoller();
- addMagicItemConceptRoller();
+ addRollerForm();
+ addRoomForm();
+ addComplicationForm();
+ addAstralComplicationForm();
+ addEncounterRoller();
+ addMagicItemConceptRoller();
})();
// @license-end
diff --git a/src/assets/styles/styles.css b/src/assets/styles/styles.css
index 9f34c62..a3da287 100644
--- a/src/assets/styles/styles.css
+++ b/src/assets/styles/styles.css
@@ -28,13 +28,13 @@ html {
body {
background: #2c0f2a;
/* Old browsers */
- background: url("/images/site-bg.jpg") top fixed;
+ background: url('/images/site-bg.jpg') top fixed;
background-size: cover;
color: #fadbb0;
font-family: sans-serif;
font-size: 100%;
line-height: 1.5em;
- font-family: "raleway", "Optima", arial, helvetica, sans-serif;
+ font-family: 'raleway', 'Optima', arial, helvetica, sans-serif;
}
a {
@@ -44,14 +44,20 @@ a {
font-weight: bold;
padding: 0 0.2rem;
text-decoration: none;
- -webkit-transition: 0.3s background-color, 0.3s color, 0.3s border-radius,
+ -webkit-transition:
+ 0.3s background-color,
+ 0.3s color,
+ 0.3s border-radius,
0.3s font-weight;
- transition: 0.3s background-color, 0.3s color, 0.3s border-radius,
+ transition:
+ 0.3s background-color,
+ 0.3s color,
+ 0.3s border-radius,
0.3s font-weight;
}
-a[target="_blank"]::after {
- content: " \29C9";
+a[target='_blank']::after {
+ content: ' \29C9';
font-weight: normal;
}
@@ -105,7 +111,7 @@ details[open] {
max-height: 100rem;
}
-details>summary {
+details > summary {
cursor: pointer;
display: block;
font-weight: bold;
@@ -115,7 +121,7 @@ details>summary {
user-select: none;
}
-details[open]>summary::before {
+details[open] > summary::before {
transform: rotate(90deg);
}
@@ -124,7 +130,7 @@ details summary::-webkit-details-marker {
}
details summary:before {
- content: "";
+ content: '';
border-width: 0.4rem;
border-style: solid;
border-color: transparent transparent transparent #44fcfc;
@@ -147,11 +153,11 @@ figure {
text-align: center;
}
-figure[data-type="image"]>a {
+figure[data-type='image'] > a {
position: relative;
}
-figure[data-type="image"]>a[target="_blank"]::after {
+figure[data-type='image'] > a[target='_blank']::after {
position: absolute;
bottom: 1rem;
right: 1rem;
@@ -218,7 +224,7 @@ h5,
h5 a,
h6,
h6 a {
- font-family: "unbounded", "Luminari", impact, arial, helvetica, sans-serif;
+ font-family: 'unbounded', 'Luminari', impact, arial, helvetica, sans-serif;
font-weight: 500;
}
@@ -267,7 +273,8 @@ samp {
table {
border: 1px solid #f6bc43;
- border-collapse: collapse;
+ border-radius: 0.5rem;
+ border-spacing: 0;
}
table caption {
@@ -288,14 +295,14 @@ table th {
/* Classes */
.alphaLink {
- border: 1px dashed #F6BC43;
+ border: 1px dashed #f6bc43;
margin: 1rem auto;
- padding: .5rem;
+ padding: 0.5rem;
}
.calendarWrapper {
border: 1px dashed #fadbb0;
- border-radius: .5rem;
+ border-radius: 0.5rem;
font: 100% system-ui;
grid-auto-rows: 1fr;
max-width: 28rem;
@@ -306,7 +313,7 @@ table th {
}
.calendarWrapper li {
- padding: .5rem;
+ padding: 0.5rem;
}
.calendarWrapper li:not(.dayName) {
@@ -334,9 +341,8 @@ table th {
.calendarWrapper .currDay {
border: 1px solid #fadbb0;
border-radius: 50%;
-
}
-
+
.calendarWrapper .firstDay {
grid-column-start: 1;
}
@@ -353,6 +359,26 @@ table th {
clear: both;
}
+.commandDetails {
+ border: 1px dashed;
+ border-radius: 0.5rem;
+ max-width: 30rem;
+ width: 100%;
+}
+
+.commandDetails summary::before {
+ left: 0.5rem;
+}
+
+.commandDetails summary {
+ padding: 1rem 1rem 1rem 1.25rem;
+}
+
+.commandDetails pre {
+ border-radius: 0 0 0.5rem 0.5rem;
+ margin: 0;
+}
+
.contentWarning {
font-style: italic;
}
@@ -364,30 +390,53 @@ table th {
max-height: 5000px;
max-width: 100%;
overflow-x: auto;
- transition: box-shadow 0.3s ease-out, max-height 0.3s ease-out;
+ transition:
+ box-shadow 0.3s ease-out,
+ max-height 0.3s ease-out;
}
.dividedTableWrapper h4 {
text-align: center;
}
-
.dividedTableWrapper table caption {
- padding: .5rem 1.5rem;
+ padding: 0.5rem 1.5rem;
position: relative;
}
.dividedTableWrapper table td {
- border: 1px dashed #f6bc43;
+ border: 1px solid #f6bc43;
+ text-align: center;
}
.dividedTableWrapper table th {
- border: 1px dashed #f6bc43;
+ border: 1px solid #f6bc43;
border-bottom-style: solid;
border-collapse: collapse;
padding: 0.5rem;
}
+.dividedTableWrapper table tr:first-child th:first-child {
+ border-radius: 0.5rem 0 0 0;
+}
+
+.dividedTableWrapper table tr:first-child th:last-child {
+ border-radius: 0 0.5rem 0 0;
+}
+
+.dividedTableWrapper table tr:last-child td:first-child {
+ border-radius: 0 0 0 0.5rem;
+}
+
+.dividedTableWrapper table tr:last-child td:last-child {
+ border-radius: 0 0 0.5rem 0;
+}
+
+.dividedTableWrapperBlock {
+ display: block;
+ margin-bottom: 1rem;
+}
+
.encounterResultTable {
margin-bottom: 1rem;
margin-top: 1rem;
@@ -415,12 +464,11 @@ table th {
.encounterButtonsWrapper > * {
border: 1px solid #e94e5c;
- border-radius: .3rem;
- padding: .25rem .5rem .5rem;
+ border-radius: 0.3rem;
+ padding: 0.25rem 0.5rem 0.5rem;
text-align: center;
}
-
.feature hr {
border: 1px 0 0 0;
border-color: #885c68;
@@ -430,7 +478,7 @@ table th {
}
.footnotes {
- font-size: .75em;
+ font-size: 0.75em;
line-height: 1.2em;
}
@@ -477,7 +525,7 @@ a.hiddenLink:hover {
.imgWrapper.fullWidth,
.imgWrapper.halfWidth {
float: none;
- margin: .5rem;
+ margin: 0.5rem;
max-width: 100%;
}
@@ -487,11 +535,10 @@ a.hiddenLink:hover {
}
.imgWrapper.fullWidth figure,
-.imgWrapper.halfWidth figure{
+.imgWrapper.halfWidth figure {
max-width: 100%;
}
-
.imgWrapper figure > a {
border-color: transparent;
display: inline-block;
@@ -537,7 +584,6 @@ a.licenseLink:hover {
.magicItemConcept-output {
padding-left: 0;
-
}
.menu-icon {
@@ -552,9 +598,9 @@ a.licenseLink:hover {
z-index: 9;
}
-.menu-icon>span,
-.menu-icon>span::before,
-.menu-icon>span::after {
+.menu-icon > span,
+.menu-icon > span::before,
+.menu-icon > span::after {
display: block;
position: absolute;
width: 100%;
@@ -563,13 +609,13 @@ a.licenseLink:hover {
transition-duration: 0.25s;
}
-.menu-icon>span::before {
- content: "";
+.menu-icon > span::before {
+ content: '';
top: -8px;
}
-.menu-icon>span::after {
- content: "";
+.menu-icon > span::after {
+ content: '';
top: 8px;
}
@@ -610,36 +656,36 @@ a.licenseLink:hover {
margin-top: -1rem;
}
-#menu-toggle:checked+.menu-label {
+#menu-toggle:checked + .menu-label {
position: fixed;
}
-#menu-toggle:checked+.menu-label .menu-icon>span {
+#menu-toggle:checked + .menu-label .menu-icon > span {
transform: rotate(45deg);
}
-#menu-toggle:checked+.menu-label .menu-icon>span::before {
+#menu-toggle:checked + .menu-label .menu-icon > span::before {
top: 0;
transform: rotate(0deg);
}
-#menu-toggle:checked+.menu-label .menu-icon>span::after {
+#menu-toggle:checked + .menu-label .menu-icon > span::after {
top: 0;
transform: rotate(90deg);
}
-#menu-toggle:checked~.navMenu {
+#menu-toggle:checked ~ .navMenu {
left: 0;
}
-#menu-toggle:checked+.menu-label .menu-text {
+#menu-toggle:checked + .menu-label .menu-text {
transform: rotate(90deg);
left: -1rem;
top: 4rem;
}
/* Prevents close toggle from scrolling offscreen */
-#menu-toggle:checked+.menu__btn {
+#menu-toggle:checked + .menu__btn {
position: fixed;
top: 1rem;
}
@@ -720,7 +766,7 @@ a.licenseLink:hover {
white-space: nowrap;
}
-.navMenu>ul>li.hasSubMenu:hover>a {
+.navMenu > ul > li.hasSubMenu:hover > a {
border: 1px solid #e94e5c;
}
@@ -746,16 +792,16 @@ a.licenseLink:hover {
padding-left: 0;
}
-.navMenu>ul {
+.navMenu > ul {
padding: 1rem 2rem 1rem 4rem;
overflow-y: auto;
}
-.navMenu>ul>li {
+.navMenu > ul > li {
margin-top: 1rem;
}
-.navMenu>ul>li:first-child {
+.navMenu > ul > li:first-child {
margin-top: 0;
}
@@ -786,7 +832,7 @@ a.licenseLink:hover {
padding-left: 2rem;
}
-.navMenu ul li.hasSubMenu>a {
+.navMenu ul li.hasSubMenu > a {
padding-left: 1rem;
}
@@ -800,8 +846,8 @@ a.licenseLink:hover {
padding-left: 1rem;
}
-.navMenu ul li.hasSubMenu>a::before {
- content: ">";
+.navMenu ul li.hasSubMenu > a::before {
+ content: '>';
margin-left: -1rem;
padding-right: 0.5rem;
}
@@ -906,7 +952,6 @@ a.licenseLink:hover {
margin-top: 0;
}
-
a.pageTitle-link,
a.pageTitle-link:visited {
color: #e94e5c;
@@ -937,7 +982,7 @@ a.pageTitle-sublink {
.refereeScreen .toolDetails > ol,
.refereeScreen .toolDetails > ul {
- margin-left: .25rem;
+ margin-left: 0.25rem;
padding-left: 0;
}
@@ -955,7 +1000,7 @@ a.pageTitle-sublink {
}
.refereeScreen .toolDetails > p {
- margin: -.5rem 0 -.5rem -1rem;
+ margin: -0.5rem 0 -0.5rem -1rem;
}
.refereeScreen .toolDetails > summary > h3 {
@@ -964,7 +1009,7 @@ a.pageTitle-sublink {
}
.refereeScreen .toolDetails > summary + * {
- margin-top: -.25rem;
+ margin-top: -0.25rem;
}
.refereeTools {
@@ -980,33 +1025,33 @@ a.pageTitle-sublink {
}
.refereeTools .toolDetails > summary + * {
- margin-top: .25rem;
+ margin-top: 0.25rem;
}
.refereeScreen .toolDetails summary,
.refereeTools .toolDetails summary {
backdrop-filter: blur(1rem);
position: sticky;
- top: 0;
+ top: 0;
}
-.rollerForm input[type=reset] {
+.rollerForm input[type='reset'] {
font-size: small;
margin-left: -1.5rem;
- margin-right: .5rem;
+ margin-right: 0.5rem;
vertical-align: text-top;
}
-.rollerForm input[type=text] {
+.rollerForm input[type='text'] {
padding-right: 1.5rem;
}
.rollerLink {
- margin: .5rem 0 .75rem;
+ margin: 0.5rem 0 0.75rem;
}
.rollerOutput {
- margin: .5rem 0;
+ margin: 0.5rem 0;
max-height: 9rem;
overflow-y: auto;
}
@@ -1123,8 +1168,12 @@ a.pageTitle-sublink {
max-width: 10rem;
fill: #e94e5c;
fill-opacity: 0.5;
- -webkit-transition: 0.3s fill, 0.3s fill-opacity;
- transition: 0.3s fill, 0.3s fill-opacity;
+ -webkit-transition:
+ 0.3s fill,
+ 0.3s fill-opacity;
+ transition:
+ 0.3s fill,
+ 0.3s fill-opacity;
}
.siteTitle-link:hover .siteTitle-shipIcon {
@@ -1190,7 +1239,6 @@ a.pageTitle-sublink {
font-weight: bold;
}
-
.toolDetails {
border: 1px dashed;
display: none;
@@ -1206,7 +1254,7 @@ a.pageTitle-sublink {
}
.toolDetails li {
- margin-bottom: .3rem;
+ margin-bottom: 0.3rem;
}
.toolDetails p {
@@ -1245,7 +1293,6 @@ a.pageTitle-sublink {
display: none;
}
-
/****************************************************************************
* JS Overrides
****************************************************************************/
@@ -1254,16 +1301,19 @@ a.pageTitle-sublink {
display: inline-block;
}
+.js .dividedTableWrapper.dividedTableWrapperBlock.js-toggleable {
+ display: block;
+}
+
.js .dividedTableWrapper.js-hideContent {
box-shadow: rgba(0, 0, 0, 0.35) 0px -50px 36px -28px inset;
max-height: 6rem;
overflow: hidden;
}
-
.js .dividedTableWrapper.js-toggleable table caption::before {
- content: "\25BC";
- left: .5rem;
+ content: '\25BC';
+ left: 0.5rem;
position: absolute;
transform: rotate(0deg);
transition: transform 0.5s ease-out;
@@ -1302,9 +1352,9 @@ a.pageTitle-sublink {
}
.imgWrapper.halfWidth {
- margin: .5rem auto;
+ margin: 0.5rem auto;
max-width: 480px;
- }
+ }
}
@media all and (min-width: 600px) {
@@ -1321,14 +1371,14 @@ a.pageTitle-sublink {
.imgWrapper figure {
max-width: 100%;
}
-
+
.menubar {
height: auto;
}
.pageMain h3 {
clear: none;
- }
+ }
.siteTitle-text {
text-align: center;
@@ -1375,11 +1425,11 @@ a.pageTitle-sublink {
font-size: 1em;
}
- #menu-toggle:checked+.menu-label {
+ #menu-toggle:checked + .menu-label {
position: absolute;
}
- #menu-toggle:checked+.menu-label .menu-text {
+ #menu-toggle:checked + .menu-label .menu-text {
transform: none;
left: 2.25rem;
top: 0.75rem;
@@ -1389,7 +1439,7 @@ a.pageTitle-sublink {
display: block;
}
- .navMenu>ul {
+ .navMenu > ul {
padding: 4rem 2rem 1rem 2rem;
}
@@ -1424,7 +1474,7 @@ a.pageTitle-sublink {
}
@media all and (min-width: 1200px) {
- #menu-toggle:checked+.menu-label .menu-text {
+ #menu-toggle:checked + .menu-label .menu-text {
background: rgba(37, 40, 55, 0.9);
border-radius: 0.3rem;
padding: 0.5rem;
diff --git a/src/layouts/partials/rulesHeader.ejs b/src/layouts/partials/rulesHeader.ejs
index cd35c47..3a203cd 100644
--- a/src/layouts/partials/rulesHeader.ejs
+++ b/src/layouts/partials/rulesHeader.ejs
@@ -36,7 +36,7 @@ var title = (page.title ?? '').replace('HOSR ', '');
-- Grants wearer AC of 11 + 1d4 when worn without armor.
-- Grants no bonus when worn with armor.
+- Grants wearer AC of 11 + 1d4 when worn without armor.
+ - AC value is determined at start of each day at dawn.
+- Grants no bonus when worn with armor.
diff --git a/src/pages/magic-items/bracers-of-redoubt.md b/src/pages/magic-items/bracers-of-redoubt.md
index fa6aa23..a34bac6 100644
--- a/src/pages/magic-items/bracers-of-redoubt.md
+++ b/src/pages/magic-items/bracers-of-redoubt.md
@@ -9,4 +9,8 @@ short_code: m1b0r
A pair of ornate, finely-crafted metal wrist-guards, etched with arcane runes of defense.
-- Grants +2 AC to wearer
+- Grants +1 AC to wearer
+
+### Bracers of Redoubt +2
+
+- Grants +2 AC to wearer
diff --git a/src/pages/magic-items/broom-of-flying.md b/src/pages/magic-items/broom-of-flying.md
index b7b73cd..1dd86b1 100644
--- a/src/pages/magic-items/broom-of-flying.md
+++ b/src/pages/magic-items/broom-of-flying.md
@@ -15,9 +15,11 @@ A well-made, wooden broom, craved with arcane symbols that make it capable of fl
-- When wielder speaks command word (_Ready_), broom begins to hover, whereupon it may be mounted and flown.
- - Capable of flying at 80' / round (8' per second or 5 MPH) while carrying a passenger.
- - Can carry an additional passenger (up to 200 lbs), but speed is reduced to 60' / round (6' per second or 4 MPH).
-- After landing, broom stops hovering.
-- When wielder speaks command word (_Go_) along with the name of a location within 1 mile that wielder is familiar with, broom will fly to that location.
- - Command word (_Return_) may be spoken to summon broom to return, provided it's still within 1 mile.
+### Activation
+
+- When wielder speaks command word (_Ready_), broom begins to hover, whereupon it may be mounted and flown.
+ - Capable of flying at 80' / round (8' per second or 5 MPH) while carrying a passenger.
+ - Can carry an additional passenger (up to 200 lbs), but speed is reduced to 60' / round (6' per second or 4 MPH).
+- When wielder speaks command word (_Go_) along with the name of a location within 1 mile that wielder is familiar with, broom will fly to that location.
+ - Command word (_Return_) may be spoken to summon broom to return, provided it's still within 1 mile.
+- After landing, broom stops hovering.
diff --git a/src/pages/magic-items/cloak-of-displacement.md b/src/pages/magic-items/cloak-of-displacement.md
index 8712f4d..76d1ec1 100644
--- a/src/pages/magic-items/cloak-of-displacement.md
+++ b/src/pages/magic-items/cloak-of-displacement.md
@@ -4,11 +4,18 @@ description: An enchanted cloak that bends light, making wearer difficult to hit
date_pub: 2025-04-20T18:16:14.000-04:00
section: magic items
content_type: feature
-short_code: mcd
+short_code: m1cd
---
An enchanted cloak that bends light, making wearer difficult to hit.
-- Wearer gains +2 bonus to AC and saves vs petrification, spells, and wielded items.
- - When wearer takes damage, bonus ends until next round.
- - Bonus is deactivated when wearer is [restrained](/rules/adventuring.html#restrained), [unconscious](/rules/adventuring.html#unconscious), or otherwise unable to move.
+- Wearer gains +1 bonus to AC and saves vs petrification, spells, and wielded items.
+ - When wearer takes damage, bonus ends until next round.
+ - Bonus is deactivated when wearer is [restrained](/rules/adventuring.html#restrained), [unconscious](/rules/adventuring.html#unconscious), or otherwise unable to move.
+
+### Cloak of Displacement +2
+
+Same as above except as noted below.
+
+- Wearer gains +2 bonus to AC and saves vs petrification, spells, and wielded items.
+ - Other restrictions still apply.
diff --git a/src/pages/magic-items/feathers-of-ferrnym/whip-feather.md b/src/pages/magic-items/feathers-of-ferrnym/whip-feather.md
index 7db5ccd..2ca96d0 100644
--- a/src/pages/magic-items/feathers-of-ferrnym/whip-feather.md
+++ b/src/pages/magic-items/feathers-of-ferrnym/whip-feather.md
@@ -9,16 +9,15 @@ short_code: m1fw
A small, magical feather that conjures a huge leather whip when tossed into the air.
-- Feather disappears with use.
+- Feather disappears with use.
### Whip
The conjured whip:
-- Remains for up to 6 turns.
-- Attacks on its own, at user's command.
-- +6 to attack
-- Counts as a magical weapon.
-- Inflicts 1d6+1 damage on a hit.
- - Victim must **Save vs Spells** or become entangled for 1d6+1 rounds.
- - Entangled victims can't move or attack.
+- Remains for up to 6 turns.
+- Attacks on its own, at user's command.
+- +6 to attack
+- Counts as a magical weapon.
+- Inflicts 1d6+1 damage on a hit.
+ - Victim must **Save vs Spells** or become [entangled](/rules/adventuring.html#entangled) for 1d6+1 rounds.
diff --git a/src/pages/magic-items/index.md b/src/pages/magic-items/index.md
index 09a30c6..329bd03 100644
--- a/src/pages/magic-items/index.md
+++ b/src/pages/magic-items/index.md
@@ -21,19 +21,20 @@ Below you'll find a growing list of 90+ magic items that can be found across the
-1. [Beyza, The Bandit's Heart (+2)](./beyza-the-bandits-heart.html): A finely crafted short sword capable of casting [Charm Person](/spells/charm-person.html) once per day.
-2. [Flaming Sword (+1)](./flaming-sword.html): A high-quality longsword, exquisitely decorated with fire and dragon iconography, capable of bursting into flames on command.
-3. [Limbcleaver, Greatsword of Sharpness (+1)](./limbcleaver-greatsword-of-sharpness.html): An absolutely enormous broadsword etched with various arcane symbols which glow a dull purple, and with a black, bejeweled pommel.
-4. [Lumye, Hope's Defender (+4)](./sword-lumye-hopes-defender.html): A golden longsword, edged and crusted in diamonds, that glows when readied or attacking, and which is capable of improving its wielder's AC.
-5. [The Mangler (+5)](./shortsword-mangler.html): A legendary black-and-silver short sword forged from an unknown metal and covered in strange runes.
-6. [Nemesys, the Enforcer (+2)](./sword-nemesys-the-enforcer.html): A blackened metal longsword, etched with eldritch runes that glow faintly green, which counter-attacks anyone who attacks its wielder.
-7. [Ryssa, Misery's Edge (+3)](./sword-ryssa-vorpal.html): A blackened, vorpal longsword edged in diamond and inlaid with ornate, golden, arcane symbols.
-8. [Sayka, Sword of Charming (+2)](./sword-of-charming-sayka.html): A finely-honed silver short sword with golden adornments and a large, glowing, purple gem in its ornate hilt which is capable of casting [Charm Person](/spells/charm-person.html).
-9. [Sai'ju, Blade of Quickness (+2)](./sword-of-quickness-saiju.html): A straight-edged short sword which allows its wielder to attack first in a combat round.
-10. [Tyrhung, Wolf Hunter (+2)](./tyrhung-wolf-hunter.html): A longsword that specializes in identifying and killing werewolves.
-11. [Vah'ki, Flametongue of Dulara (+1)](./flaming-sword-vahki.html): A legendary longsword with a fire elemental bound to it.
-12. [Vozath, the Wizard's Wail (+1)](./sword-vozath-the-wizards-wail.html): A sentient longsword devoted to killing arcane spellcasters.
-13. [Zyshak, Unholy Avenger (+4)](./sword-zyshak-unholy-avenger.html): A sentient, black, demonic longsword, inscribed with pulsating, blood-red runes of chaos, and obsessed with destroying the forces of Law.
+1. [Aylath, Saber of Light (+2)](./weapons/saber-of-light.html): An ancient, ornate, blackened metal sword hilt that can manifest a 3' long blade of pure light.
+2. [Beyza, The Bandit's Heart (+2)](./beyza-the-bandits-heart.html): A finely crafted short sword capable of casting [Charm Person](/spells/charm-person.html) once per day.
+3. [Flaming Sword (+1)](./flaming-sword.html): A high-quality longsword, exquisitely decorated with fire and dragon iconography, capable of bursting into flames on command.
+4. [Limbcleaver, Greatsword of Sharpness (+1)](./limbcleaver-greatsword-of-sharpness.html): An absolutely enormous broadsword etched with various arcane symbols which glow a dull purple, and with a black, bejeweled pommel.
+5. [Lumye, Hope's Defender (+4)](./sword-lumye-hopes-defender.html): A golden longsword, edged and crusted in diamonds, that glows when readied or attacking, and which is capable of improving its wielder's AC.
+6. [The Mangler (+5)](./shortsword-mangler.html): A legendary black-and-silver short sword forged from an unknown metal and covered in strange runes.
+7. [Nemesys, the Enforcer (+2)](./sword-nemesys-the-enforcer.html): A blackened metal longsword, etched with eldritch runes that glow faintly green, which counter-attacks anyone who attacks its wielder.
+8. [Ryssa, Misery's Edge (+3)](./sword-ryssa-vorpal.html): A blackened, vorpal longsword edged in diamond and inlaid with ornate, golden, arcane symbols.
+9. [Sayka, Sword of Charming (+2)](./sword-of-charming-sayka.html): A finely-honed silver short sword with golden adornments and a large, glowing, purple gem in its ornate hilt which is capable of casting [Charm Person](/spells/charm-person.html).
+10. [Sai'ju, Blade of Quickness (+2)](./sword-of-quickness-saiju.html): A straight-edged short sword which allows its wielder to attack first in a combat round.
+11. [Tyrhung, Wolf Hunter (+2)](./tyrhung-wolf-hunter.html): A longsword that specializes in identifying and killing werewolves.
+12. [Vah'ki, Flametongue of Dulara (+1)](./flaming-sword-vahki.html): A legendary longsword with a fire elemental bound to it.
+13. [Vozath, the Wizard's Wail (+1)](./sword-vozath-the-wizards-wail.html): A sentient longsword devoted to killing arcane spellcasters.
+14. [Zyshak, Unholy Avenger (+4)](./sword-zyshak-unholy-avenger.html): A sentient, black, demonic longsword, inscribed with pulsating, blood-red runes of chaos, and obsessed with destroying the forces of Law.
- license.](/images/magic-items/ring-of-fabled-destiny.jpg 'Ring of Fabled Destiny')
+ license.](/images/magic-items/ring-of-destiny.jpg 'Ring of Fabled Destiny')
-- When wearer fails a Save, they may roll again and take the best result.
-- Can be used up to 3 times per day.
+- When wearer fails a Save, they may roll again and take the best result.
+- Can be used up to 3 times per day.
diff --git a/src/pages/magic-items/robe-of-protection.md b/src/pages/magic-items/robe-of-protection.md
index 123fdfe..50031c8 100644
--- a/src/pages/magic-items/robe-of-protection.md
+++ b/src/pages/magic-items/robe-of-protection.md
@@ -9,4 +9,8 @@ short_code: mr0p
An enchanted robe that protects its wearer.
-- Wearer gains +1 bonus to AC and saves.
+- Grants wearer a +1 bonus to AC and all saving throws.
+
+### Robe of Protection +2
+
+- Grants wearer a +2 bonus to AC and all saving throws.
diff --git a/src/pages/magic-items/staff-of-adani.md b/src/pages/magic-items/staff-of-adani.md
index 9d3e7bf..3de4a70 100644
--- a/src/pages/magic-items/staff-of-adani.md
+++ b/src/pages/magic-items/staff-of-adani.md
@@ -9,17 +9,17 @@ short_code: m1s0a
A lightweight, platinum quarterstaff, about 6' long, etched with arcane symbols and set with 2 small gems towards the center, one red and one blue.
-- +2 to attack and damage rolls (1d4+2 / 1d6+2).
-- Light to use, but feels heavy when swung.
-- Wielder may cause the staff to grow or shrink on command by touching the correct gem.
- - Can be any length between 5' and 15'
- - When length > 5', gains **Reach** property, allowing wielder to make a melee attack against a foe within reach of the staff.
-- When 10' long or greater, counts as pole for jumping, leaping, or balancing (ex: on a tightrope).
+- +2 to attack and damage rolls (1d4+2 / 1d6+2).
+- Light to use, but feels heavy when swung.
+- Wielder may cause the staff to grow or shrink on command by touching the correct gem.
+ - Can be any length between 5' and 15'
+ - When length > 5', gains **Reach** property, allowing wielder to make a melee attack against a foe within reach of the staff.
+- When 10' long or greater, counts as pole for jumping, leaping, or balancing (ex: on a tightrope).
### Staff Properties
-- **Blunt**: No cutting edge, may be wielded by a cleric.
-- **Reach**: Grants a extra 5-15' reach for determining melee range.
-- **Versatile**: At start of combat round, if offhand is free, may choose to have staff deal 1d6 base damage for that round while gaining the following properties:
- - **Slow**: Always attacks last in a round.
- - **Two-handed**: Requires two hands to use.
+- **Blunt**: No cutting edge, may be wielded by certain classes with weapon restrictions.
+- **Reach**: Grants a extra 5-15' reach for determining melee range.
+- **Versatile**: At start of combat round, if offhand is free, may choose to have staff deal 1d6 base damage for that round while gaining the following properties:
+ - **Slow**: Always attacks last in a round.
+ - **Two-handed**: Requires two hands to use.
diff --git a/src/pages/magic-items/tyrhung-wolf-hunter.md b/src/pages/magic-items/tyrhung-wolf-hunter.md
index 9525b75..c040345 100644
--- a/src/pages/magic-items/tyrhung-wolf-hunter.md
+++ b/src/pages/magic-items/tyrhung-wolf-hunter.md
@@ -17,8 +17,10 @@ A finely-crafted silver longsword, acid-etched with lunar iconography and the na
### Abilities
-- +2 to attack and damage rolls (1d8+2 / 1d10+2), +3 vs werewolves (1d8+3 / 1d10+3).
-- When unsheathed in darkness, or the command word (_Lu'ar_) is spoken, illuminates a 15 foot radius with moonlight (as with the [Moonlight spell](/spells/moonlight.html)).
+- +2 to attack and damage rolls (1d8+2 / 1d10+2), +3 vs werewolves (1d8+3 / 1d10+3).
+- When unsheathed in darkness, or the command word (_Lu'ar_) is spoken while in hand, illuminates a 15' radius with [moonlight](#moonlight).
+
+!!!include(magic-items/moonlight.md)!!!
!!!include(weapons/longsword-properties.md)!!!
diff --git a/src/pages/magic-items/wand-of-illusions.md b/src/pages/magic-items/wand-of-illusions.md
index 2b3eab7..a5e70da 100644
--- a/src/pages/magic-items/wand-of-illusions.md
+++ b/src/pages/magic-items/wand-of-illusions.md
@@ -4,7 +4,7 @@ description: A magic wand for arcane spellcasters that can create illusions as w
date_pub: 2023-09-18T22:27:00-04:00
section: magic items
content_type: feature
-short_code: mw01
+short_code: m1w01
---
A small wand made out of a dark wood, carved with light blue runes, and inlaid with a light blue gem.
@@ -17,17 +17,17 @@ A small wand made out of a dark wood, carved with light blue runes, and inlaid w
-- As long as at least one charge remains, the runes glow faintly while the wand is wielded.
-- May only be used by an arcane spellcaster.
+- As long as at least one charge remains, the runes glow faintly while the wand is wielded.
+- May only be used by an arcane spellcaster.
### Activation
When the wand is waved by an arcane spellcaster, an illusion of the wielder's choosing manifests as per the [Phantasmal Force](/spells/phantasmal-force.html) spell, but with the following difference:
-- The wielder may move at up to half normal speed while [concentrating](/rules/magic.html#concentration).
+- The wielder may move at up to half normal speed while [concentrating](/rules/magic.html#concentration).
-#### Usage Die
+### Usage Die
-- Starts at d10.
-- After each use, roll the current die, and on a 1-2, the die drops one step (d10 -> d8 -> d6 -> d4 -> 1), as the glow becomes dimmer.
-- When no more charges are left, it becomes inert.
+- Starts at d10.
+- After each use, roll the current die, and on a 1-2, the die drops one step (d10 -> d8 -> d6 -> d4 -> 1), as the glow becomes dimmer.
+- When no more charges are left, it becomes inert.
diff --git a/src/pages/magic-items/wands/wand-of-magic-missiles.md b/src/pages/magic-items/wands/wand-of-magic-missiles.md
new file mode 100644
index 0000000..00f078b
--- /dev/null
+++ b/src/pages/magic-items/wands/wand-of-magic-missiles.md
@@ -0,0 +1,29 @@
+---
+title: Wand of Magic Missiles
+description: A magic wand for arcane spellcasters that can cast the Magic Missile spell.
+date_pub: 2026-10-12T22:50:19-04:00
+section: magic items
+content_type: feature
+short_code: m1wmm
+---
+
+A wand composed of twisted, pale wood etched with arcane symbols and topped with a small yellow gem.
+
+- As long as at least one charge remains, the gem glows faintly while the wand is wielded.
+- May only be used by an arcane spellcaster.
+
+### Activation
+
+When the wand is waved by an arcane spellcaster and a command word is spoken, one or two glowing yellow arrows of arcane energy fire from its tip.
+
+- When the command word "One" is spoken, a single arrow is fired at a single target within 150'.
+- When the command word "Two" is spoken, a pair of arrows are fired.
+ - Both arrows can target the same creature or object within 150', or each can target a different creature or object within 150'.
+ - When used in this way, the next Usage Die roll gets -1.
+- Each arrow hits unerringly (no saving throw allowed), doing 1d6+1 damage.
+
+### Usage Die
+
+- Starts at d10.
+- After each use, roll the current die, and on a 2 or less, the die drops one step (d10 -> d8 -> d6 -> d4 -> 1) and the glow becomes dimmer.
+- When no more charges are left, wand becomes inert.
diff --git a/src/pages/magic-items/weapons/bow-of-alarming.md b/src/pages/magic-items/weapons/bow-of-alarming.md
new file mode 100644
index 0000000..d3ea825
--- /dev/null
+++ b/src/pages/magic-items/weapons/bow-of-alarming.md
@@ -0,0 +1,17 @@
+---
+title: Bow of Alarming
+description: TBD
+date_pub: 2026-10-14T23:45:06-04:00
+section: magic items
+content_type: feature
+short_code: m1b0w
+---
+
+An enchanted bow made of bleached wood and accentuated with golden rings.
+
+- +1 to attack and damage rolls (1d6+1).
+- Holder and allies within 40':
+ - Can't be surprised, even while (naturally) sleeping; and
+ - Are magically awakened if sleeping naturally at start of combat.
+
+!!!include(weapons/bow-properties.md)!!!
diff --git a/src/pages/magic-items/weapons/claw-ripping-tearing.md b/src/pages/magic-items/weapons/claw-ripping-tearing.md
new file mode 100644
index 0000000..07360f6
--- /dev/null
+++ b/src/pages/magic-items/weapons/claw-ripping-tearing.md
@@ -0,0 +1,17 @@
+---
+title: Claw of Ripping and Tearing
+description: A Claw of Ripping and Tearing for OSR gaming.
+date_pub: 2026-10-10T21:24:46-04:00
+section: magic items
+content_type: feature
+short_code: m1crt
+status: hidden
+---
+
+A fist-sized metal handle mounted to a set of 4 razor-sharp metal blades, each 6" long.
+
+- +1 to attack and damage rolls (1d6+1).
+- When wielded, blades are mounted to back of wielder's hand.
+- Multiple Claws of Ripping and Tearing may be wielded at the same time.
+ - Wielder may make an attack with each one in a round.
+ - When wielding multiple Claws, the first attack occurs while wielder's side has initiative, with subsequent attacks occurring at the end of the round.
diff --git a/src/pages/magic-items/weapons/greatclub-of-energy-draining.md b/src/pages/magic-items/weapons/greatclub-of-energy-draining.md
index 71c0783..873b133 100644
--- a/src/pages/magic-items/weapons/greatclub-of-energy-draining.md
+++ b/src/pages/magic-items/weapons/greatclub-of-energy-draining.md
@@ -9,11 +9,11 @@ short_code: m1ged
A massive, white stone club engraved with golden runes of energy draining.
-- +1 to attack and damage rolls (1d8+1)
+- +1 to attack and damage rolls (1d8+1)
!!!include(magic-items/energy-drain.md)!!!
### Greatclub Properties
-- **Blunt**: No cutting edge, may be wielded by a cleric.
-- **Two-handed**: Requires two hands to use.
+- **Blunt**: No cutting edge, may be wielded by certain classes with weapon restrictions.
+- **Two-handed**: Requires two hands to use.
diff --git a/src/pages/magic-items/weapons/mace-of-moonlight.md b/src/pages/magic-items/weapons/mace-of-moonlight.md
new file mode 100644
index 0000000..d730e5a
--- /dev/null
+++ b/src/pages/magic-items/weapons/mace-of-moonlight.md
@@ -0,0 +1,19 @@
+---
+title: Mace of Moonlight
+description: TBD
+date_pub: 2026-10-14T22:26:24-04:00
+section: magic items
+content_type: feature
+short_code: m1m0m
+---
+
+A mace of blue and gold metal etched with arcane symbols and held with a grip wrapped in fine, dark-brown leather.
+
+### Abilities
+
+- +1 to attack and damage rolls (1d6+1).
+- When unsheathed in darkness, or the command word (_Moonlight_) is spoken while in hand, illuminates a 15 foot radius with [moonlight](#moonlight).
+
+!!!include(magic-items/moonlight.md)!!!
+
+!!!include(weapons/mace-properties.md)!!!
diff --git a/src/pages/magic-items/weapons/nightwatch-mace-of-moonlight.md b/src/pages/magic-items/weapons/nightwatch-mace-of-moonlight.md
new file mode 100644
index 0000000..2e02891
--- /dev/null
+++ b/src/pages/magic-items/weapons/nightwatch-mace-of-moonlight.md
@@ -0,0 +1,19 @@
+---
+title: Nightwatch, Mace of Moonlight
+description: TBD
+date_pub: 2026-10-15T22:24:16-04:00
+section: magic items
+content_type: feature
+short_code: m1nmm
+---
+
+An exceptionally crafted silver mace etched with arcane symbols and held with a grip wrapped in fine black leather.
+
+### Abilities
+
+- +1 to attack and damage rolls (1d6+1).
+- When unsheathed in darkness, or the command word (_Nightwatch_) is spoken while in hand, illuminates a 15 foot radius with [moonlight](#moonlight).
+
+!!!include(magic-items/moonlight.md)!!!
+
+!!!include(weapons/mace-properties.md)!!!
diff --git a/src/pages/magic-items/weapons/rod-of-parrying.md b/src/pages/magic-items/weapons/rod-of-parrying.md
new file mode 100644
index 0000000..e2fe653
--- /dev/null
+++ b/src/pages/magic-items/weapons/rod-of-parrying.md
@@ -0,0 +1,14 @@
+---
+title: Rod of Parrying
+description: A Rod of Parrying for OSR gaming.
+date_pub: 2026-10-12T21:34:03-04:00
+section: magic items
+content_type: feature
+short_code: m1r0py
+---
+
+A 5' long, 2" diameter, blackened metal rod inscribed with arcane symbols.
+
+- +1 to attack and damage (1d8+1).
+- Instead of attacking, may use rod defensively to parry an incoming attack, gaining +2 AC until end of round.
+ - Can't be used to parry while retreating.
diff --git a/src/pages/magic-items/weapons/saber-of-light.md b/src/pages/magic-items/weapons/saber-of-light.md
new file mode 100644
index 0000000..35fa912
--- /dev/null
+++ b/src/pages/magic-items/weapons/saber-of-light.md
@@ -0,0 +1,25 @@
+---
+title: Aylath, Saber of Light
+description: TBD
+date_pub: 2026-10-13T23:56:55-04:00
+section: magic items
+content_type: feature
+short_code: m15b
+---
+
+An ancient, ornate, blackened metal sword hilt engraved with archaic runes, with a single, thumb-sized red gem near the top and a gold strip running down the opposite side.
+
+### Activation
+
+While the hilt is grasped, pressing the red gem causes a 3' long blade of pure light to either spring from the hilt, or retract back into it.
+
+- While the blade is active:
+ - the weapon emits a low humming sound,
+ - it functions as a [shortsword](/rules/combat.html#melee-weapons),
+ - it emits bright light for 20' and dim light for an additional 20',
+ - it has +2 to attack and damage (1d6+2), and
+ - when an undead creature is struck, the target takes an extra 1d4 damage.
+- If a light-sensitive creature (ex: drow, vampire) is struck by the blade, it gets -4 on it's next attack.
+- The shed light can be adjusted up or down in 5' increments of both bright and dim light by sliding along the gold strip while grasped.
+ - The maximum radius is 30' of each kind of light, the minimum radius is 10' of each kind of light.
+- If the hilt is dropped and isn't grasped for 1 round (10 seconds), the blade automatically retracts.
diff --git a/src/pages/magic-items/weapons/stormsong-bow-of-alarming.md b/src/pages/magic-items/weapons/stormsong-bow-of-alarming.md
new file mode 100644
index 0000000..f8ae39c
--- /dev/null
+++ b/src/pages/magic-items/weapons/stormsong-bow-of-alarming.md
@@ -0,0 +1,17 @@
+---
+title: Stormsong, Bow of Alarming
+description: TBD
+date_pub: 2026-10-15T22:15:51-04:00
+section: magic items
+content_type: feature
+short_code: m15ba
+---
+
+An exceptionally crafted, enchanted bow made of blackened wood engraved with silver arcane symbols.
+
+- +2 to attack and damage rolls (1d6+2).
+- Holder and allies within 40':
+ - Can't be surprised, even while (naturally) sleeping; and
+ - Are magically awakened if sleeping naturally at start of combat.
+
+!!!include(weapons/bow-properties.md)!!!
diff --git a/src/pages/rules/adventuring.md b/src/pages/rules/adventuring.md
index 9e4e908..974f8c2 100644
--- a/src/pages/rules/adventuring.md
+++ b/src/pages/rules/adventuring.md
@@ -49,7 +49,7 @@ Then, check the results of the roll:
| Roll | Result |
| :----------------------: | :-----------------: |
-| 25+ or natural 20 | Critical Success |
+| 30+ or natural 20 | Critical Success |
| 11-24 | Complete Success |
| 6-10 | Complicated Success |
| 5 or less | Failure |
diff --git a/src/pages/rules/basics.md b/src/pages/rules/basics.md
index b232e2d..da0db0c 100644
--- a/src/pages/rules/basics.md
+++ b/src/pages/rules/basics.md
@@ -31,13 +31,13 @@ For most checks, roll a 20-sided die (d20), add any modifiers, and compare the r
-| Roll | Result |
-| :--------: | :-----------------: |
-| Natural 20 | Critical Success |
-| 11+ | Complete Success |
-| 6-10 | Complicated Success |
-| 5 or less | Failure |
-| Natural 1 | Fumble |
+| Roll | Result |
+| :----------------------: | :-----------------: |
+| 30+ or natural 20 | Critical Success |
+| 11+ | Complete Success |
+| 6-10 | Complicated Success |
+| 5 or less | Failure |
+| Less than 0 or natural 1 | Fumble |
[Ability Check Result]
@@ -45,58 +45,57 @@ For most checks, roll a 20-sided die (d20), add any modifiers, and compare the r
#### Advantage and Disadvantage
-- Rolling with **Advantage** means to roll 2 dice and keep the _highest_ result.
-- Rolling with **Disadvantage** means to roll 2 dice and keep the _lowest_ result.
+- Rolling with **Advantage** means to roll 2 dice and keep the _highest_ result.
+- Rolling with **Disadvantage** means to roll 2 dice and keep the _lowest_ result.
### Abilities
Each PC has 6 abilities that help to define how they can interact with the world. Each ability has a score from 3 to 18 (to start), and each score determines the modifier used when rolling a check for that ability.
-- **Strength (STR)**: Raw physical power, affects melee damage and carrying capacity.
-- **Dexterity (DEX)**: Speed and agility of movement, affects _armor class (AC)_ when under attack.
-- **Constitution (CON)**: Mettle and gumption, affects _hit points (HP)_ gained at each level.
-- **Intelligence (INT)**: Knowledge and reasoning, affects languages known and arcane magic.
-- **Wisdom (WIS)**: Experience and insight, affects divine magic.
-- **Charisma (CHA)**: Appearance and social capability, affects NPC reactions and eldritch magic.
+- **Strength (STR)**: Raw physical power, affects melee damage and carrying capacity.
+- **Dexterity (DEX)**: Speed and agility of movement, affects _armor class (AC)_ when under attack.
+- **Constitution (CON)**: Mettle and gumption, affects _hit points (HP)_ gained at each level.
+- **Intelligence (INT)**: Knowledge and reasoning, affects languages known and arcane magic.
+- **Wisdom (WIS)**: Experience and insight, affects divine magic.
+- **Charisma (CHA)**: Appearance and social capability, affects NPC reactions and eldritch magic.
### Race, Class, and Level
Each PC has a race and levels in one or more classes.
-- A PC's race may influence their ability scores, and usually grants the PC one (or more) special features.
-- A PC's class determines what kind of weapons and armor they can use, how much damage they can take, and what special skills they have access to (including spellcasting).
- - As a PC gains new levels in a class, they may gain additional special features.
- - Some PCs can also multiclass, gaining levels in multiple different classes.
+- A PC's race may influence their ability scores, and usually grants the PC one (or more) special features.
+- A PC's class determines what kind of weapons and armor they can use, how much damage they can take, and what special skills they have access to (including spellcasting).
+ - As a PC gains new levels in a class, they may gain additional special features.
+ - Some PCs can also multiclass, gaining levels in multiple different classes.
### Saving Throws
When something (bad) happens to a character or monster, they can usually make a saving throw to avoid some (or all) of it.
-- To make one, roll 1d20, add any appropriate modifiers, and compare the result with the **Save** value for your class and level.
-- Some types of saves are harder, and have different modifiers:
- - **Save vs Wielded** rolls (avoiding wands, ray guns, or similar) get -1.
- - **Save vs Blasts** rolls (avoiding explosions, breath weapons, or the like) get -3.
- - **Save vs Spells** rolls (avoiding direct, targeted magic) get -4.
- - **Save vs Paralyze** is generally equivalent to a standard Save, and is mostly used for historical purposes.
+- To make one, roll 1d20, add any appropriate modifiers, and compare the result with the **Save** value for your class and level.
+- Some types of saves are harder, and have different modifiers:
+ - **Save vs Wielded** rolls (avoiding wands, ray guns, or similar) get -1.
+ - **Save vs Blasts** rolls (avoiding explosions, breath weapons, or the like) get -3.
+ - **Save vs Spells** rolls (avoiding direct, targeted magic) get -4.
+ - **Save vs Paralyze** is generally equivalent to a standard Save, and is mostly used for historical purposes.
### Alignment
There are three alignments, cosmic principles that represent broad world views:
-- **Law**: Order, truth, justice, and civilization. Typically prosocial.
-- **Chaos**: Anarchy, power, chance, and destruction. Typically pro-individual.
-- **Neutrality**: Balance, mediation, and detachment.
+- **Law**: Order, truth, justice, and civilization. Typically prosocial.
+- **Chaos**: Anarchy, power, chance, and destruction. Typically pro-individual.
+- **Neutrality**: Balance, mediation, and detachment.
### Movement
Most characters have a base speed of 40', indicating they can move 40' in a combat round.
-- **Dungeon Turn**: Can move 5x base speed (200') in a turn (10 minutes) while exploring a dungeon.
+- **Dungeon Turn**: Can move 5x base speed (200') in a turn (10 minutes) while exploring a dungeon.
### Character Creation
1. Roll Ability Scores.
-
- Roll 4d6 and keep the highest 3 (aka "4d6KH3") for each ability.
- Either roll 4d6KH3 once for each ability in order and see what kind of character comes up, or make all 6 rolls and assign the results to fit a particular class or concept.
- On [Roll20](https://roll20.net/), all 6 scores can be rolled at once with this command:
diff --git a/src/pages/rules/combat.md b/src/pages/rules/combat.md
index 88b85e4..6766806 100644
--- a/src/pages/rules/combat.md
+++ b/src/pages/rules/combat.md
@@ -15,10 +15,11 @@ Adventurers tend to die easily, so most combat should be avoided unless the adve
That having been said, fights do occur, and when they do, the following steps are performed:
-1. **Declare Spells, Special Attacks, Defending, and Retreats**: Players declare if they will _cast a spell_, _use a special attack_, _defend_, or _retreat_ this round (and, if so, which type of retreat).
-2. **Roll Initiative**: Each side that can attack rolls 1d20, highest roll attacks first.
+1. **Update Combat Countdown Timer (Optional)**: If using a [Combat Countdown Timer](#combat-countdown-timer), it should be set or updated.
+2. **Declare Spells, Special Attacks, Defending, and Retreats**: Players declare if they will _cast a spell_, _use a special attack_, _defend_, or _retreat_ this round (and, if so, which type of retreat).
+3. **Roll Initiative**: Each side that can attack rolls 1d20, highest roll attacks first.
- Tie goes to the party side.
-3. **Winning Side Actions**: Each character or monster gets a move and an action, with either one occurring first.
+4. **Winning Side Actions**: Each character or monster gets a move and an action, with either one occurring first.
- [**Morale Check**](#morale-check): Creatures who've been severely wounded or seen their leaders killed may flee.
- **Move**: Move up to full speed
- If prone, use 1/2 movement to stand up.
@@ -27,10 +28,14 @@ That having been said, fights do occur, and when they do, the following steps ar
- **Action**: Do something, like _attack_, _defend_, _cast a spell_, or stowe an item.
- Spellcasters can move _before_ casting a spell, but can't move _after_ casting one.
-4. **Change Sides**: Opposing side becomes active.
+5. **Change Sides**: Opposing side becomes active.
- If more than 2 sides are fighting, the side with the next highest initiative roll becomes active.
-5. **Slow Weapons**: Resolve any slow weapons or end-of-round abilities.
-6. **Repeat**: Return to step 2 and repeat until only one side remains.
+6. **Slow Weapons**: Once each side has become active, resolve any slow weapons or end-of-round abilities.
+7. **Repeat**: Return to step 1 and repeat until only one side remains.
+
+#### Combat Countdown Timer (Optional)
+
+!!!include(rules/combat-countdown.md)!!!
#### Morale Check
diff --git a/src/pages/rules/magic.md b/src/pages/rules/magic.md
index c6b42ac..aba894d 100644
--- a/src/pages/rules/magic.md
+++ b/src/pages/rules/magic.md
@@ -434,6 +434,7 @@ Saving throws versus magical effects get an additional modifier, based on the ch
Most magic items can be identified via trial-and-error: using a weapon, wearing a ring, sipping a potion, etc.
+- Some classes can try to identify items that might be known to them via skill checks.
- High-level NPC spellcasters may also identify magic items, typically for a fee or exchange of services.
- This may take some time, based on the rituals required (and the spellcaster's schedule).
- Some powerful magic items (ex: [the Crystal Skull of Jund](/magic-items/crystal-skull-of-jund.html)) are themselves capable of identifying (many) other magic items.
@@ -504,6 +505,10 @@ Some magic items have limited uses, tracked via a **Usage Die**.
Aged sheets of paper, parchment, or similar material with magical spells inscribed on them.
+- May only be used by spellcasters of the same type of magic as the scroll (except as noted).
+- Arcane scrolls must be translated by casting [Read Magic](/spells/read-magic.html) before being used.
+ - Translation takes 1 minute per scroll.
+- Divine scrolls are written in a "sacred"version of an alignment language that can only be read by divine spellcasters of the same alignment, and cannot be translated.
- May be read aloud to cast inscribed spell.
- In combat, reading a scroll aloud takes 1 round.
- When read aloud, the words on the scroll disappear.
diff --git a/src/pages/spells/heat-metal.md b/src/pages/spells/heat-metal.md
new file mode 100644
index 0000000..7ef6d62
--- /dev/null
+++ b/src/pages/spells/heat-metal.md
@@ -0,0 +1,62 @@
+---
+title: Heat Metal
+description: The Heat Metal spell for OSR gaming.
+date_pub: 2025-01-20T22:51:26.000-04:00
+section: spells
+content_type: feature
+short_code: tbd
+tags: arcane divine
+---
+
+
+
+| | |
+| ------------ | -------- |
+| **Level** | 2 |
+| **Duration** | 7 rounds |
+| **Range** | 30' |
+
+
+
+Causes the metal on one or more targets to heat up to damaging levels.
+
+- One creature or one metal mass of up to 50 lbs may be targeted for every 2 caster levels.
+- Burns anyone in contact with the burning metal.
+- Dropping items stops burn damage.
+- Immersion in water or snow counters effects, as does casting Chill Metal.
+- Creatures that are immune to heat or fire are not harmed by spell.
+
+### Effects Each Round
+
+Metal heats up for first 3 rounds, peaks during round 4, and then cools back down during last 3 rounds.
+
+- **Uncomfortably Warm**: During rounds 1 and 7, causes discomfort but deals no damage.
+- **Burning**: During rounds 2 and 6, deals 1d4 damage.
+- **Searing**: During rounds 3-5, deals 1d6 damage and ignites things like wood, leather, or flammable cloth.
+ - If a creature is damaged during round 4, they must **Save vs. Spells** or suffer a disability based on the affected area(s):
+ - hand or foot -> severe blistering, becomes unusable for 2d4 days,
+ - body -> gains 1d4 levels of [exhaustion](/rules/adventuring#exhausted).
+ - head -> becomes [unconscious](/rules/adventuring.html#unconscious) for 1d4 turns.
+
+## Chill Metal
+
+Reversed version of **Heat Metal**: causes the metal on one or more targets to chill to damaging levels.
+
+- One creature or one metal mass of up to 50 lbs may be targeted for every 2 caster levels.
+- Causes freeze damage to anyone in contact with the chilled metal.
+- Dropping items stops freeze damage.
+- Proximity to a large fire (ex: campfire or bonfire), a magical flaming weapon, or properly-size fire-based spell (ex: Wall of Fire) counters effects, as does casting Heat Metal.
+- Immersion in water causes ice to form around metal, increasing buoyancy.
+- Creatures that are immune to cold or freezing are not harmed by spell.
+
+### Effects Each Round
+
+Metal cools down for first 3 rounds, bottoms-out during round 4, and then heats back up during last 3 rounds.
+
+- **Uncomfortably Cold**: During rounds 1 and 7, causes discomfort but deals no damage.
+- **Icy**: During rounds 2 and 6, deals 1d2 damage.
+- **Freezing**: During rounds 3-5, deals 1d4 damage and turns freezable things to ice.
+ - If a creature is damaged during round 4, they must **Save vs. Spells** or suffer a disability based on the affected area(s):
+ - hand or foot -> severe numbing, becomes unusable for 1d4 days,
+ - body -> gains 1d4 levels of [exhaustion](/rules/adventuring#exhausted).
+ - head -> becomes [unconscious](/rules/adventuring.html#unconscious) for 1d4 turns.
diff --git a/src/pages/spells/index.md b/src/pages/spells/index.md
index 455ba14..d65ed2a 100644
--- a/src/pages/spells/index.md
+++ b/src/pages/spells/index.md
@@ -43,6 +43,7 @@ If a spell is referenced and not listed below, it can usually be found in one of
9. [Grow / Shrink (1 A)](./grow.html)
10. [Haste / Slow (3 AD)](./haste.html)
11. [Heal / Harm (6 D)](./heal.html)
+12. [Heat Metal (2 AD)(./)
12. [Hideous Laughter (1 A)](./hideous-laughter.html)
13. [Hidden Step (2 A)](./hidden-step.html)
14. [Hypnotize (1 A)](./hypnotize.html)
diff --git a/src/pages/spells/polymorph-others.md b/src/pages/spells/polymorph-others.md
index b9cebe7..cdb3bc1 100644
--- a/src/pages/spells/polymorph-others.md
+++ b/src/pages/spells/polymorph-others.md
@@ -20,9 +20,11 @@ tags: arcane
Target living creature is changed into another type of creature, chosen by the caster.
-- Unwilling target may **Save vs Spells** to prevent the effect.
-- Fails if the new form's HD is more than twice the target's HD.
-- Target's hit points are not altered.
-- Target becomes new creature form, gaining the special abilities, behavioral tendencies, and intelligence of the new form.
-- Can not duplicate a specific individual.
-- If target dies, it reverts to its original form.
+- Unwilling target may **Save vs Spells** to prevent the effect.
+- Fails if the new form's HD is more than twice the target's HD.
+- Target's hit points are not altered.
+- Target becomes new creature form, gaining the special abilities, behavioral tendencies, and intelligence of the new form.
+- Can not duplicate a specific individual.
+- If target dies, it reverts to its original form.
+- Caster can end the spell at any time, reverting the target to their previous form.
+ - If cast from a magic item, caster must be holding item to end spell.
diff --git a/src/pages/tools/index.md b/src/pages/tools/index.md
index e313ea8..fcdd96c 100644
--- a/src/pages/tools/index.md
+++ b/src/pages/tools/index.md
@@ -50,7 +50,7 @@ short_code: t1
Locality
Exhaustion *
Light Source *
-
No Complications
+
Discovery
diff --git a/src/pages/updates.md b/src/pages/updates.md
index c3d7618..caaaa18 100644
--- a/src/pages/updates.md
+++ b/src/pages/updates.md
@@ -8,6 +8,18 @@ content_type: feature
Below are the most recent updates to the Guide.
+- **2026-10-16**: Updated rules to Beta-0.25.0.
+ - Added rule for the (optional) [Combat Countdown Timer]().
+ - Updated rules for [Ability Checks](/rules/adventuring.html#ability-checks) and [Magic](/rules/magic.html).
+ - Updated the campaign page for [Escape the O.V.T.!](/campaigns/one-shots/ovt/).
+ - Added entry for [skeletons](/bestiary/skeletons/skeleton.html) to [Bestiary](/bestiary/).
+ - Updated entry for [vampires](/bestiary/vampires/) under [Bestiary](/bestiary/).
+ - Updated entry for [Bloodmage](/classes/bloodmage.html) under [Classes](/classes/).
+ - Added entries for [Aylath, Saber of Light](/magic-items/weapons/saber-of-light.html), [Bow of Alarming](/magic-items/weapons/bow-of-alarming.html), [Greatclub of Energy Draining](/magic-items/weapons/greatclub-of-energy-draining.html), [Mace of Moonlight](/magic-items/weapons/mace-of-moonlight.html), [Nightwatch, Mace of Moonlight](/magic-items/weapons/nightwatch-mace-of-moonlight.html), [Rod of Parrying](/magic-items/weapons/rod-of-parrying.html), [Stormsong, Bow of Alarming](/magic-items/weapons/stormsong-bow-of-alarming.html), and [Wand of Magic Missiles](/magic-items/wands/wand-of-magic-missiles.html) to [Magic Items](/magic-items/).
+ - Updated entries for [Bracers of Bulwark](/magic-items/bracers-of-bulwark.html), [Bracers of Redoubt](/magic-items/bracers-of-redoubt.html), [Broom of Flying](/magic-items/broom-of-flying.html), [Cloak of Displacement](/magic-items/cloak-of-displacement.html), [Lor'nath, Breaker of Darkness](/magic-items/lornath-breaker-of-darkness.html), [Kaaji-jukai, Nunchaku of Defense](/magic-items/nunchaku-kaaji-jukai-defense.html), [Ring of Shielding](/magic-items/ring-of-shielding.html), [Ring of Fabled Destiny](/magic-items/rings/ring-of-fabled-destiny.html), [Robe of Protection](/magic-items/robe-of-protection.html), [Staff of Adani](/magic-items/staff-of-adani.html), [Tyrhung, Wolf Hunter](/magic-items/tyrhung-wolf-hunter.html), [Wand of Illusions](/magic-items/wand-of-illusions.html), and [the Whip Feather of Ferr'nym](/magic-items/feathers-of-ferrnym/whip-feather.html) under [Magic Items](/magic-items/).
+ - Added entry for [Heat Metal](/spells/heat-metal.html) to [Magic Spells](/spells/).
+ - Updated entry for [Polymorph Others](/spells/polymorph-others.html) under [Magic Spells](/spells/).
+
- **2026-10-05**: Updated rules to Beta-0.24.0.
- Updated rules for [complication checks](/rules/adventuring.html#complication-check), [complications](/rules/adventuring.html#complications), [morale checks](/rules/combat.html#morale-check), and [size](/rules/adventuring.html#size).
- Added rules for [explosives](/rules/combat.html#explosives), [firearms](/rules/combat.html#firearms) and [supporting NPCs](/rules/adventuring.html#supporting-npcs)
@@ -17,7 +29,7 @@ Below are the most recent updates to the Guide.
- Added entries for [Armor of Glamour](/magic-items/worn/armor-of-glamour.html), [Astral Booster](/magic-items/worn/astral-booster.html), [Buroko (Hand Axe of Quickness)](/magic-items/weapons/hand-axe-of-quickness-buroko.html), [Flask of Trapping](/magic-items/miscellaneous/flask-of-trapping.html), [Ring of Fabled Destiny](/magic-items/rings/ring-of-fabled-destiny.html), [Ring of Feather Falling](/magic-items/rings/ring-of-feather-falling.html), [Shirt of Elven Chainmail](/magic-items/worn/shirt-of-elven-chainmail.html), and [Thurid and Thurin](/magic-items/weapons/hand-axes-thurid-thurin.html) to [Magic Items](/magic-items/).
- Updated entry for [Bottled Lightning](/magic-items/bottled-lightning.html) under [Magic Items](/magic-items/).
- Added entries for [Beastkin](/races/beastkin.html), [Edges](/races/edges/), [Greyfolk](/races/greyfolk.html), and [Shiftlings](/races/shiftling.html) to [Races](/races/).
- - Added entries for [Black Tentacle](/spells/black-tentacle.html), [Bless](/spells/bless.html), [Find Familiar](/spells/find-familiar.html), [Hideous Laughter](/spells/hideous-laughter.html), [Levitate](/spells/levitate.html), [Mage Armor](/spells/mage-armor.html), [Protection from Extraplanar Entities](/spells/protection-from-extraplanar-entities.html), [Unseen Servant](/spells/unseen-servant.html), and some [Words of Power](/spells/words-of-power/) ([Blind](/spells/words-of-power/blind.html), [Kill](/spells/words-of-power/kill.html), [Stun](/spells/words-of-power/stun.html)).
+ - Added entries for [Black Tentacle](/spells/black-tentacle.html), [Bless](/spells/bless.html), [Find Familiar](/spells/find-familiar.html), [Hideous Laughter](/spells/hideous-laughter.html), [Levitate](/spells/levitate.html), [Mage Armor](/spells/mage-armor.html), [Protection from Extraplanar Entities](/spells/protection-from-extraplanar-entities.html), [Unseen Servant](/spells/unseen-servant.html), and some [Words of Power](/spells/words-of-power/) ([Blind](/spells/words-of-power/blind.html), [Kill](/spells/words-of-power/kill.html), [Stun](/spells/words-of-power/stun.html)) under [Magic Spells](/spells/).
- Added entry for [Escape the O.V.T.!](/campaigns/one-shots/ovt/) under [One-Shots](/campaigns/one-shots/).
- **2025-11-05**: Added entry for [Gloves of Ha'duu'kyn](/magic-items/worn/gloves-of-ha-duu-kyn.html) to [Magic Items](/magic-items/).
- Added entry for [Feather Fall](/spells/feather-fall.html) to [Spells](/spells/).