3 Commits

Author SHA1 Message Date
eric 32ef855af2 Update to 0.24.3.
Fix broken update links.
Add one-shot campaigns.
2026-10-05 20:56:36 -04:00
eric c42666bd57 Update ot v0.24.2.
Fixed broken link on main page to updates.
2026-10-05 01:17:42 -04:00
eric 2e527f7270 Update to v0.24.1.
Add missing skeletons fragment file.
Update yarn.
2026-10-05 01:12:00 -04:00
13 changed files with 114 additions and 16 deletions
Generated
+10 -9
View File
@@ -1039,16 +1039,16 @@ function convertToBigIntStats(stats) {
if (Object.hasOwn(stats, key)) {
const element = stats[key];
if (typeof element === `number`) {
bigintStats[key] = BigInt(element);
bigintStats[key] = BigInt(Math.floor(element));
} else if (nodeUtils__namespace.types.isDate(element)) {
bigintStats[key] = new Date(element);
}
}
}
bigintStats.atimeNs = bigintStats.atimeMs * BigInt(1e6);
bigintStats.mtimeNs = bigintStats.mtimeMs * BigInt(1e6);
bigintStats.ctimeNs = bigintStats.ctimeMs * BigInt(1e6);
bigintStats.birthtimeNs = bigintStats.birthtimeMs * BigInt(1e6);
bigintStats.atimeNs = bigintStats.atimeMs * BigInt(1e6) + BigInt(Math.floor(stats.atimeMs % 1 * 1e3)) * BigInt(1e3);
bigintStats.mtimeNs = bigintStats.mtimeMs * BigInt(1e6) + BigInt(Math.floor(stats.mtimeMs % 1 * 1e3)) * BigInt(1e3);
bigintStats.ctimeNs = bigintStats.ctimeMs * BigInt(1e6) + BigInt(Math.floor(stats.ctimeMs % 1 * 1e3)) * BigInt(1e3);
bigintStats.birthtimeNs = bigintStats.birthtimeMs * BigInt(1e6) + BigInt(Math.floor(stats.birthtimeMs % 1 * 1e3)) * BigInt(1e3);
return bigintStats;
}
function areStatsEqual(a, b) {
@@ -6536,7 +6536,7 @@ function getPathForDisplay(p) {
return npath.normalize(npath.fromPortablePath(p));
}
const [major, minor] = process.versions.node.split(`.`).map((value) => parseInt(value, 10));
const [major, minor, patch] = process.versions.node.split(`.`).map((value) => parseInt(value, 10));
const WATCH_MODE_MESSAGE_USES_ARRAYS = major > 19 || major === 19 && minor >= 2 || major === 18 && minor >= 13;
function readPackageScope(checkPath) {
@@ -6571,9 +6571,9 @@ Instead change the require of ${basename} in ${parentPath} to a dynamic import()
err.code = `ERR_REQUIRE_ESM`;
return err;
}
function reportRequiredFilesToWatchMode(files) {
function reportRequiredFilesToWatchMode(paths) {
if (process.env.WATCH_REPORT_DEPENDENCIES && process.send) {
files = files.map((filename) => npath.fromPortablePath(VirtualFS.resolveVirtual(npath.toPortablePath(filename))));
const files = paths.map((filename) => npath.fromPortablePath(VirtualFS.resolveVirtual(filename)));
if (WATCH_MODE_MESSAGE_USES_ARRAYS) {
process.send({ "watch:require": files });
} else {
@@ -8216,9 +8216,10 @@ Required by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuerForDi
const candidates = [];
const qualifiedPath = applyNodeExtensionResolution(unqualifiedPath, candidates, { extensions });
if (qualifiedPath) {
reportRequiredFilesToWatchMode([qualifiedPath]);
return ppath.normalize(qualifiedPath);
} else {
reportRequiredFilesToWatchMode(candidates.map((candidate) => npath.fromPortablePath(candidate)));
reportRequiredFilesToWatchMode(candidates);
const unqualifiedPathForDisplay = getPathForDisplay(unqualifiedPath);
const containingPackage = findPackageLocator(unqualifiedPath);
if (containingPackage) {
+5 -2
View File
@@ -1428,11 +1428,12 @@ class VirtualFS extends ProxiedFS {
const URL = Number(process.versions.node.split('.', 1)[0]) < 20 ? URL$1 : globalThis.URL;
const [major, minor] = process.versions.node.split(`.`).map((value) => parseInt(value, 10));
const [major, minor, patch] = process.versions.node.split(`.`).map((value) => parseInt(value, 10));
const WATCH_MODE_MESSAGE_USES_ARRAYS = major > 19 || major === 19 && minor >= 2 || major === 18 && minor >= 13;
const HAS_LAZY_LOADED_TRANSLATORS = major === 20 && minor < 6 || major === 19 && minor >= 3;
const SUPPORTS_IMPORT_ATTRIBUTES = major >= 21 || major === 20 && minor >= 10 || major === 18 && minor >= 20;
const SUPPORTS_IMPORT_ATTRIBUTES_ONLY = major >= 22;
const HAS_BROKEN_FSTAT_FOR_ZIP_FDS = major === 26 && minor < 1 || major === 25 && minor >= 7 || major === 24 && minor === 15 || major === 22 && (minor > 22 || minor === 22 && patch >= 3);
function readPackageScope(checkPath) {
const rootSeparatorIndex = checkPath.indexOf(npath.sep);
@@ -1549,9 +1550,11 @@ async function load$1(urlString, context, nextLoad) {
"watch:import": WATCH_MODE_MESSAGE_USES_ARRAYS ? [pathToSend] : pathToSend
});
}
const shouldReadSource = format === `commonjs` && HAS_BROKEN_FSTAT_FOR_ZIP_FDS && filePath.includes(`.zip/`);
const source = format !== `commonjs` || shouldReadSource ? await fs.promises.readFile(filePath, `utf8`) : void 0;
return {
format,
source: format === `commonjs` ? void 0 : await fs.promises.readFile(filePath, `utf8`),
source,
shortCircuit: true
};
}
Binary file not shown.
+33
View File
@@ -0,0 +1,33 @@
// eslint.config.js
import { defineConfig } from 'eslint/config';
export default defineConfig([
{
env: {
browser: true,
es2021: true,
},
extends: [
'eslint:recommended',
'prettier', // Make sure this is the last
],
overrides: [
{
env: {
node: true,
},
parserOptions: {
sourceType: 'script',
},
},
],
parserOptions: {
ecmaVersion: 'latest',
sourceType: 'module',
},
rules: {
'link.no-such-file': 'off',
link: 'off',
},
},
]);
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "planar-vagabond",
"version": "0.24.0",
"version": "0.24.3",
"description": "",
"main": "index.js",
"scripts": {
@@ -20,5 +20,5 @@
"devDependencies": {
"web-weevr": "git+ssh://git@git.itsericwoodward.com:eric/web-weevr.git"
},
"packageManager": "yarn@4.12.0"
"packageManager": "yarn@4.18.1"
}
@@ -0,0 +1,3 @@
- Always attack.
- Takes double damage from blunt weapons.
- Takes half damage from edged weapons.
+13
View File
@@ -0,0 +1,13 @@
---
title: One Shot Campaigns
description: Information about some of the one-shot RPG campaigns that run on occasion.
date_pub: 2026-10-04T21:32:03-04:00
section: campaigns
content_type: feature
short_code: c15
---
Some of the one-shot campaigns that I already have (or plan to) run.
- [Escape the OVT](./ovt/): The Halloween one-shot for 2026 _NEW_
- See also: [One Night One-Shots](../one-night/).
@@ -0,0 +1,27 @@
---
title: Escape the O.V.T.!
description: Information specific to my Halloween one-shot game for 2026, Escape the O.V.T.!
date_pub: 2026-10-04T21:43:06-04:00
section: campaigns
subsection: one-shots
content_type: feature
short_code: ca0vt
---
For 2026, rather than making _yet another_ pass at Ravenloft, I thought it might be time to change it up a bit...
> On the distant plane of Ayreon, in the land of Kalar, it's harvest season again. But this year, a shadow hangs over the festivities...
>
> In the small town of Grimpost, six villagers have gone missing in the past few weeks, all disappearing without a trace.
> The only clue anyone can find comes from the last time something like this happened, nearly 50 years ago - a rough map leading to a cave a few miles outside of town, marked with the words "Entrance to the O.V.T."
>
> And so, our party of adventurers has come to the cave searching for the missing villagers. But what horrors will they find inside? And will any of them survive long enough to...
>
> **Escape the O.V.T.!**
This will be a 4-5 hour one-shot for a party of 3-5 level 4 adventurers, with (what _should_ be) a mostly survival-horror vibe (with a bit of comedy thrown in for good measure). As usual, I'll be running it using the [HOSR system](/rules/index.html). Everyone can pick any available race and class from Planar Vagabond, [Old School Essentials](https://oldschoolessentials.necroticgnome.com/rules/doku.php?id=start), or any other B/X-compatible system for their character, and every character will start with a _single_ magic item (rolled randomly ahead of time).
So, do you have what it takes to face the challenge of the unknown and... **Escape the O.V.T.**?
Stay tuned for more!
@@ -0,0 +1,9 @@
---
title: Escape the O.V.T.!
description: Information specific to my Halloween one-shot game for 2026, Escape the O.V.T.!
date_pub: 2026-09-13T17:46:48-04:00
section: campaigns
subsection: one-shots
content_type: feature
status: hidden
---
@@ -0,0 +1,9 @@
---
title: Escape the O.V.T.!
description: Information specific to my Halloween one-shot game for 2026, Escape the O.V.T.!
date_pub: 2026-09-13T17:46:48-04:00
section: campaigns
subsection: one-shots
content_type: feature
status: hidden
---
+1 -1
View File
@@ -17,7 +17,7 @@ Within these hallowed pages, you'll find everything you need to know about the [
- 25+ [races](/races/) and 20+ [classes](/classes/) to join-up with (or become), _plus_
- the [rules](/rules/) you need to know to keep from getting lost.
All 100% _free_ and [recently updated](/updates/)!
All 100% _free_ and [recently updated](/updates.html)!
So please take a look around, and thanks for stopping by!
+1 -1
View File
@@ -13,7 +13,7 @@ Below are the most recent updates to the Guide.
- Added rules for [explosives](/rules/combat.html#explosives), [firearms](/rules/combat.html#firearms) and [supporting NPCs](/rules/adventuring.html#supporting-npcs)
- Updated entries for [bats](/bestiary/bats/), [dragons](/bestiary/dragons/), [goblins](/bestiary/goblin.html), [knights](/bestiary/knight.html), and [mules](/bestiary/mule.html) under [Bestiary](/bestiary/).
- Added entries for [familiars](/bestiary/familiar.html), [grokkyn](/bestiary/grokkyn.html), [jakkra](/bestiary/jakkra.html), [liches](/bestiary/lich.html), [master vamprie neurovores](/bestiary/vampires/master-vampire-neurovore.html), [neurovore vampires](/bestiary/neurovores/neurovore-vampire.html), [orcs](/bestiary/orc.html), [orgols](/bestiary/orgol.html), and [skeletons](/bestiary/skeletons/) to [Bestiary](/bestiary/).
- Updated entries for [Barbarian](/classes/barbarian.html), [Bloodmage](/classes/bloodmage.html), [Ecclesiastic](/classes/ecclesiastic.html), [Mystic Powers](/classes/mystic/powers.html), [Paladin](/classes/paladin/), [Sorcerer](/classes/sorcerer.html), [Thief](/classes/thief.html), the [Warlock spell list](/classes/warlock/spell-list.html), and [Wizard](/classes/wizard/) under [Classes](/classes/).
- Updated entries for [Barbarian](/classes/barbarian.html), [Bloodmage](/classes/bloodmage.html), [Ecclesiastic](/classes/ecclesiastic.html), [Mystic Powers](/classes/mystic/powers.html), [Paladin](/classes/paladin/), [Sorcerer](/classes/sorcerer.html), [Thief](/classes/thief.html), the [Warlock spell list](/classes/warlock/spell-list.html), and [Wizard](/classes/wizard.html) under [Classes](/classes/).
- 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/).
+1 -1
View File
@@ -2,7 +2,7 @@
# Manual changes might be lost - proceed with caution!
__metadata:
version: 8
version: 10
cacheKey: 10c0
"@commander-js/extra-typings@npm:^14.0.0":