Compare commits
3 Commits
2fd6f77b1d
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 32ef855af2 | |||
| c42666bd57 | |||
| 2e527f7270 |
@@ -1039,16 +1039,16 @@ function convertToBigIntStats(stats) {
|
|||||||
if (Object.hasOwn(stats, key)) {
|
if (Object.hasOwn(stats, key)) {
|
||||||
const element = stats[key];
|
const element = stats[key];
|
||||||
if (typeof element === `number`) {
|
if (typeof element === `number`) {
|
||||||
bigintStats[key] = BigInt(element);
|
bigintStats[key] = BigInt(Math.floor(element));
|
||||||
} else if (nodeUtils__namespace.types.isDate(element)) {
|
} else if (nodeUtils__namespace.types.isDate(element)) {
|
||||||
bigintStats[key] = new Date(element);
|
bigintStats[key] = new Date(element);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bigintStats.atimeNs = bigintStats.atimeMs * BigInt(1e6);
|
bigintStats.atimeNs = bigintStats.atimeMs * BigInt(1e6) + BigInt(Math.floor(stats.atimeMs % 1 * 1e3)) * BigInt(1e3);
|
||||||
bigintStats.mtimeNs = bigintStats.mtimeMs * BigInt(1e6);
|
bigintStats.mtimeNs = bigintStats.mtimeMs * BigInt(1e6) + BigInt(Math.floor(stats.mtimeMs % 1 * 1e3)) * BigInt(1e3);
|
||||||
bigintStats.ctimeNs = bigintStats.ctimeMs * BigInt(1e6);
|
bigintStats.ctimeNs = bigintStats.ctimeMs * BigInt(1e6) + BigInt(Math.floor(stats.ctimeMs % 1 * 1e3)) * BigInt(1e3);
|
||||||
bigintStats.birthtimeNs = bigintStats.birthtimeMs * BigInt(1e6);
|
bigintStats.birthtimeNs = bigintStats.birthtimeMs * BigInt(1e6) + BigInt(Math.floor(stats.birthtimeMs % 1 * 1e3)) * BigInt(1e3);
|
||||||
return bigintStats;
|
return bigintStats;
|
||||||
}
|
}
|
||||||
function areStatsEqual(a, b) {
|
function areStatsEqual(a, b) {
|
||||||
@@ -6536,7 +6536,7 @@ function getPathForDisplay(p) {
|
|||||||
return npath.normalize(npath.fromPortablePath(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;
|
const WATCH_MODE_MESSAGE_USES_ARRAYS = major > 19 || major === 19 && minor >= 2 || major === 18 && minor >= 13;
|
||||||
|
|
||||||
function readPackageScope(checkPath) {
|
function readPackageScope(checkPath) {
|
||||||
@@ -6571,9 +6571,9 @@ Instead change the require of ${basename} in ${parentPath} to a dynamic import()
|
|||||||
err.code = `ERR_REQUIRE_ESM`;
|
err.code = `ERR_REQUIRE_ESM`;
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
function reportRequiredFilesToWatchMode(files) {
|
function reportRequiredFilesToWatchMode(paths) {
|
||||||
if (process.env.WATCH_REPORT_DEPENDENCIES && process.send) {
|
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) {
|
if (WATCH_MODE_MESSAGE_USES_ARRAYS) {
|
||||||
process.send({ "watch:require": files });
|
process.send({ "watch:require": files });
|
||||||
} else {
|
} else {
|
||||||
@@ -8216,9 +8216,10 @@ Required by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuerForDi
|
|||||||
const candidates = [];
|
const candidates = [];
|
||||||
const qualifiedPath = applyNodeExtensionResolution(unqualifiedPath, candidates, { extensions });
|
const qualifiedPath = applyNodeExtensionResolution(unqualifiedPath, candidates, { extensions });
|
||||||
if (qualifiedPath) {
|
if (qualifiedPath) {
|
||||||
|
reportRequiredFilesToWatchMode([qualifiedPath]);
|
||||||
return ppath.normalize(qualifiedPath);
|
return ppath.normalize(qualifiedPath);
|
||||||
} else {
|
} else {
|
||||||
reportRequiredFilesToWatchMode(candidates.map((candidate) => npath.fromPortablePath(candidate)));
|
reportRequiredFilesToWatchMode(candidates);
|
||||||
const unqualifiedPathForDisplay = getPathForDisplay(unqualifiedPath);
|
const unqualifiedPathForDisplay = getPathForDisplay(unqualifiedPath);
|
||||||
const containingPackage = findPackageLocator(unqualifiedPath);
|
const containingPackage = findPackageLocator(unqualifiedPath);
|
||||||
if (containingPackage) {
|
if (containingPackage) {
|
||||||
|
|||||||
Generated
+5
-2
@@ -1428,11 +1428,12 @@ class VirtualFS extends ProxiedFS {
|
|||||||
|
|
||||||
const URL = Number(process.versions.node.split('.', 1)[0]) < 20 ? URL$1 : globalThis.URL;
|
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 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 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 = major >= 21 || major === 20 && minor >= 10 || major === 18 && minor >= 20;
|
||||||
const SUPPORTS_IMPORT_ATTRIBUTES_ONLY = major >= 22;
|
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) {
|
function readPackageScope(checkPath) {
|
||||||
const rootSeparatorIndex = checkPath.indexOf(npath.sep);
|
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
|
"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 {
|
return {
|
||||||
format,
|
format,
|
||||||
source: format === `commonjs` ? void 0 : await fs.promises.readFile(filePath, `utf8`),
|
source,
|
||||||
shortCircuit: true
|
shortCircuit: true
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Binary file not shown.
@@ -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
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "planar-vagabond",
|
"name": "planar-vagabond",
|
||||||
"version": "0.24.0",
|
"version": "0.24.3",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
@@ -20,5 +20,5 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"web-weevr": "git+ssh://git@git.itsericwoodward.com:eric/web-weevr.git"
|
"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.
|
||||||
@@ -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
@@ -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_
|
- 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.
|
- 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!
|
So please take a look around, and thanks for stopping by!
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
- 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/).
|
- 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/).
|
- 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/).
|
- 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/).
|
- 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 [Beastkin](/races/beastkin.html), [Edges](/races/edges/), [Greyfolk](/races/greyfolk.html), and [Shiftlings](/races/shiftling.html) to [Races](/races/).
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
# Manual changes might be lost - proceed with caution!
|
# Manual changes might be lost - proceed with caution!
|
||||||
|
|
||||||
__metadata:
|
__metadata:
|
||||||
version: 8
|
version: 10
|
||||||
cacheKey: 10c0
|
cacheKey: 10c0
|
||||||
|
|
||||||
"@commander-js/extra-typings@npm:^14.0.0":
|
"@commander-js/extra-typings@npm:^14.0.0":
|
||||||
|
|||||||
Reference in New Issue
Block a user