mirror of
https://github.com/RussellChamp/tpw-roller.git
synced 2026-10-28 00:22:36 +00:00
add some more cool rollers
This commit is contained in:
1 parent
c896a4b9d9
commit
ec4617e036
9 files changed
+364
-123
No files matched your search
@@ -1,3 +1,3 @@
|
|||||||
Add Discovery, Danger, Details, NPC, and Dungeons roll tables
|
Add NPC, and Dungeons roll tables
|
||||||
Put the rollers in their own accordion slots
|
Put the rollers in their own accordion slots
|
||||||
Make everything look nicer
|
Make everything look nicer
|
||||||
@@ -3,7 +3,10 @@
|
|||||||
import KingdomRoller from "./rollers/KingdomRoller.svelte";
|
import KingdomRoller from "./rollers/KingdomRoller.svelte";
|
||||||
import RegionRoller from "./rollers/RegionRoller.svelte";
|
import RegionRoller from "./rollers/RegionRoller.svelte";
|
||||||
import PlaceRoller from "./rollers/PlaceRoller.svelte";
|
import PlaceRoller from "./rollers/PlaceRoller.svelte";
|
||||||
|
import DangerRoller from "./rollers/DangerRoller.svelte";
|
||||||
|
import DiscoveryRoller from "./rollers/DiscoveryRoller.svelte";
|
||||||
import FollowerRoller from "./rollers/FollowerRoller.svelte";
|
import FollowerRoller from "./rollers/FollowerRoller.svelte";
|
||||||
|
import DetailsRoller from "./rollers/DetailsRoller.svelte";
|
||||||
import Footer from "./componenets/Footer.svelte";
|
import Footer from "./componenets/Footer.svelte";
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@@ -17,10 +20,15 @@
|
|||||||
<hr />
|
<hr />
|
||||||
<PlaceRoller />
|
<PlaceRoller />
|
||||||
<hr />
|
<hr />
|
||||||
|
<DangerRoller />
|
||||||
|
<hr />
|
||||||
|
<DiscoveryRoller />
|
||||||
|
<hr />
|
||||||
<CreatureRoller />
|
<CreatureRoller />
|
||||||
<hr />
|
<hr />
|
||||||
<FollowerRoller />
|
<FollowerRoller />
|
||||||
<hr />
|
<hr />
|
||||||
|
<DetailsRoller />
|
||||||
<Footer />
|
<Footer />
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import * as _ from "lodash";
|
||||||
|
import { format as formatDate } from "date-fns";
|
||||||
|
import { Danger, rollDanger } from "./dangers";
|
||||||
|
|
||||||
|
export let rollResults: { value: Danger; timestamp: string }[] = [];
|
||||||
|
|
||||||
|
function roll(event: Event) {
|
||||||
|
rollResults = [{ value: rollDanger(), timestamp: formatDate(new Date(), "P kk:mm:ss") }, ...rollResults];
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<main>
|
||||||
|
<h2>Random Danger</h2>
|
||||||
|
<button type="button" class="btn btn-primary" on:click={roll}>Roll Danger</button>
|
||||||
|
|
||||||
|
{#each rollResults as result}
|
||||||
|
<h4>
|
||||||
|
{result.timestamp}: {result.value.category} ({result.value.subcategory}): {result.value.description}
|
||||||
|
</h4>
|
||||||
|
{/each}
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,102 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import * as _ from "lodash";
|
||||||
|
import { format as formatDate } from "date-fns";
|
||||||
|
import { Button, Icon } from "sveltestrap";
|
||||||
|
import {
|
||||||
|
rollAbility,
|
||||||
|
rollActivity,
|
||||||
|
rollAdjective,
|
||||||
|
rollAge,
|
||||||
|
rollAlignment,
|
||||||
|
rollAspect,
|
||||||
|
rollCondition,
|
||||||
|
rollDisposition,
|
||||||
|
rollElement,
|
||||||
|
rollFeature,
|
||||||
|
rollMagicType,
|
||||||
|
rollNumAppearing,
|
||||||
|
rollOddity,
|
||||||
|
rollOrientation,
|
||||||
|
rollRuination,
|
||||||
|
rollSize,
|
||||||
|
rollTag,
|
||||||
|
rollTerrain,
|
||||||
|
rollVisibility,
|
||||||
|
} from "./details";
|
||||||
|
|
||||||
|
let rollResults: { category: string; value: string; timestamp: string }[] = [];
|
||||||
|
|
||||||
|
function addResult(item: { roll: number; description: string }) {
|
||||||
|
rollResults = [
|
||||||
|
{ category: item.constructor.name, value: item.description, timestamp: formatDate(new Date(), "P kk:mm:ss") },
|
||||||
|
...rollResults,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<main>
|
||||||
|
<span class="btn">
|
||||||
|
<Button color="primary" on:click={() => addResult(rollAbility())}>Roll Ability</Button>
|
||||||
|
</span>
|
||||||
|
<span class="btn">
|
||||||
|
<Button color="primary" on:click={() => addResult(rollActivity())}>Roll Activity</Button>
|
||||||
|
</span>
|
||||||
|
<span class="btn">
|
||||||
|
<Button color="primary" on:click={() => addResult(rollAdjective())}>Roll Adjective</Button>
|
||||||
|
</span>
|
||||||
|
<span class="btn">
|
||||||
|
<Button color="primary" on:click={() => addResult(rollAge())}>Roll Age</Button>
|
||||||
|
</span>
|
||||||
|
<span class="btn">
|
||||||
|
<Button color="primary" on:click={() => addResult(rollAlignment())}>Roll Alignment</Button>
|
||||||
|
</span>
|
||||||
|
<span class="btn">
|
||||||
|
<Button color="primary" on:click={() => addResult(rollAspect())}>Roll Aspect</Button>
|
||||||
|
</span>
|
||||||
|
<span class="btn">
|
||||||
|
<Button color="primary" on:click={() => addResult(rollCondition())}>Roll Condition</Button>
|
||||||
|
</span>
|
||||||
|
<span class="btn">
|
||||||
|
<Button color="primary" on:click={() => addResult(rollDisposition())}>Roll Disposition</Button>
|
||||||
|
</span>
|
||||||
|
<span class="btn">
|
||||||
|
<Button color="primary" on:click={() => addResult(rollElement())}>Roll Element</Button>
|
||||||
|
</span>
|
||||||
|
<span class="btn">
|
||||||
|
<Button color="primary" on:click={() => addResult(rollFeature())}>Roll Feature</Button>
|
||||||
|
</span>
|
||||||
|
<span class="btn">
|
||||||
|
<Button color="primary" on:click={() => addResult(rollMagicType())}>Roll MagicType</Button>
|
||||||
|
</span>
|
||||||
|
<span class="btn">
|
||||||
|
<Button color="primary" on:click={() => addResult(rollNumAppearing())}>Roll NumAppearing</Button>
|
||||||
|
</span>
|
||||||
|
<span class="btn">
|
||||||
|
<Button color="primary" on:click={() => addResult(rollOddity())}>Roll Oddity</Button>
|
||||||
|
</span>
|
||||||
|
<span class="btn">
|
||||||
|
<Button color="primary" on:click={() => addResult(rollOrientation())}>Roll Orientation</Button>
|
||||||
|
</span>
|
||||||
|
<span class="btn">
|
||||||
|
<Button color="primary" on:click={() => addResult(rollRuination())}>Roll Ruination</Button>
|
||||||
|
</span>
|
||||||
|
<span class="btn">
|
||||||
|
<Button color="primary" on:click={() => addResult(rollSize())}>Roll Size</Button>
|
||||||
|
</span>
|
||||||
|
<span class="btn">
|
||||||
|
<Button color="primary" on:click={() => addResult(rollTag())}>Roll Tag</Button>
|
||||||
|
</span>
|
||||||
|
<span class="btn">
|
||||||
|
<Button color="primary" on:click={() => addResult(rollTerrain())}>Roll Terrain</Button>
|
||||||
|
</span>
|
||||||
|
<span class="btn">
|
||||||
|
<Button color="primary" on:click={() => addResult(rollVisibility())}>Roll Visibility</Button>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
{#each rollResults as result}
|
||||||
|
<h4>{result.timestamp}: ({result.category}): {result.value}</h4>
|
||||||
|
{/each}
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import * as _ from "lodash";
|
||||||
|
import { format as formatDate } from "date-fns";
|
||||||
|
import { Discovery, rollDiscovery } from "./discoveries";
|
||||||
|
|
||||||
|
export let rollResults: { value: Discovery; timestamp: string }[] = [];
|
||||||
|
|
||||||
|
function roll(event: Event) {
|
||||||
|
rollResults = [{ value: rollDiscovery(), timestamp: formatDate(new Date(), "P kk:mm:ss") }, ...rollResults];
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<main>
|
||||||
|
<h2>Random Discovery</h2>
|
||||||
|
<button type="button" class="btn btn-primary" on:click={roll}>Roll Discovery</button>
|
||||||
|
|
||||||
|
{#each rollResults as result}
|
||||||
|
<h4>
|
||||||
|
{result.timestamp}: {result.value.category} ({result.value.subcategory}): {result.value.description}
|
||||||
|
</h4>
|
||||||
|
{/each}
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
</style>
|
||||||
@@ -144,17 +144,11 @@ export function rollTrapHazard(roll: number = random(1, 12)): string {
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
// 1-3 1-2 1-2
|
|
||||||
// 4-8 34 3-5
|
|
||||||
// 9-11 5-7 6-8
|
|
||||||
// 12 divine 8-9 9
|
|
||||||
// 10-11 10-12 ambush
|
|
||||||
// ASPECT, VISIBILITY 12 ODDITY CREATURE responsible,
|
|
||||||
// ASPECT, VISIBILITY
|
|
||||||
|
|
||||||
export function rollDangerCreature(roll: number = random(1, 12)): Danger {
|
export function rollDangerCreature(roll: number = random(1, 12)): Danger {
|
||||||
let danger = new Danger(roll, 0, 0, "creature");
|
let danger = new Danger(roll, 0, 0, "creature");
|
||||||
danger.creature = rollCreature();
|
danger.creature = rollCreature();
|
||||||
|
danger.subcategory = danger.creature.type + (danger.creature.subtype !== "" ? "/" + danger.creature.subtype : "");
|
||||||
|
danger.description = danger.creature.description;
|
||||||
|
|
||||||
return danger;
|
return danger;
|
||||||
}
|
}
|
||||||
+168
-114
@@ -1,7 +1,9 @@
|
|||||||
import { random, sample } from 'lodash';
|
import { random, sample } from 'lodash';
|
||||||
import { Creature, rollCreature } from './creatures';
|
import { Creature, rollCreature } from './creatures';
|
||||||
import { rollAlignment, rollElement, rollMagicType } from './details';
|
import { rollAlignment, rollElement, rollMagicType, rollOddity, rollTerrain } from './details';
|
||||||
|
import { rollDungeon } from './dungeons';
|
||||||
import { rollSteading, Steading } from './steadings';
|
import { rollSteading, Steading } from './steadings';
|
||||||
|
import { rollTreasure } from './treasures';
|
||||||
|
|
||||||
export class Discovery {
|
export class Discovery {
|
||||||
constructor(public roll: number = 0, public subroll: number = 0, public specificroll: number = 0, public category: string = "", public subcategory: string = "", public description: string = "") { };
|
constructor(public roll: number = 0, public subroll: number = 0, public specificroll: number = 0, public category: string = "", public subcategory: string = "", public description: string = "") { };
|
||||||
@@ -47,7 +49,7 @@ export function rollUnnaturalFeature(roll: number = random(1, 12), subroll: numb
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function rollArcaneFeature(roll: number = random(1, 12)): string {
|
export function rollArcaneFeature(roll: number = random(1, 12)): string {
|
||||||
let feature = random(1, 3) == 3 ? sample([rollAlignment(), rollMagicType()]) + " " : "";
|
let feature = random(1, 3) == 3 ? sample([rollAlignment().description, rollMagicType().description]) + " " : "";
|
||||||
|
|
||||||
if (roll <= 2) {
|
if (roll <= 2) {
|
||||||
feature += "residue";
|
feature += "residue";
|
||||||
@@ -127,71 +129,96 @@ export function rollNaturalFeature(roll: number = random(1, 12), subroll: number
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function rollLair(roll: number = random(1, 12)): string {
|
export function rollLair(roll: number = random(1, 12)): string {
|
||||||
// 1-2 LAIR
|
if (roll <= 3) {
|
||||||
|
return "burrow";
|
||||||
|
} else if (roll <= 7) {
|
||||||
|
return "cave/tunnels";
|
||||||
|
} else if (roll <= 9) {
|
||||||
|
return "nest/aerie";
|
||||||
|
} else if (roll <= 10) {
|
||||||
|
return "hive";
|
||||||
|
} else if (roll <= 10) {
|
||||||
|
return `${rollRuinStructure()} ruins`;
|
||||||
|
}
|
||||||
|
|
||||||
// 1-3 burrow
|
|
||||||
// 4-7 cave/tunnels
|
|
||||||
// 8-9 nest/aerie
|
|
||||||
// 10 hive
|
|
||||||
// 1142 ruins (see STRUCTURE)
|
|
||||||
return "";
|
return "";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function rollObstacle(roll: number = random(1, 12)): string {
|
export function rollObstacle(roll: number = random(1, 12)): string {
|
||||||
// 3-4 OBSTACLE
|
if (roll <= 5) {
|
||||||
// 1-5 difficult ground
|
return "difficult ground";
|
||||||
// (specific to terrain)
|
} else if (roll <= 8) {
|
||||||
// 6-8 cliff/crevasse/chasm
|
return "cliff/crevasse/chasm";
|
||||||
// 9-10 ravine/gorge
|
} else if (roll <= 10) {
|
||||||
// 11-12 ODDITY
|
return "ravine/gorge";
|
||||||
|
} else if (roll <= 12) {
|
||||||
|
return rollOddity().description;
|
||||||
|
}
|
||||||
|
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
export function rollTerrainChange(roll: number = random(1, 12)): string {
|
export function rollTerrainChange(roll: number = random(1, 12)): string {
|
||||||
// 5-7 TERRAIN CHANGE
|
if (roll <= 4) {
|
||||||
// 14 limited area of an
|
return `limited area of ${rollTerrain()}`;
|
||||||
// another TERRAIN type
|
} else if (roll <= 6) {
|
||||||
// 5-6 crevice/hole/pit/cave
|
return "crevice/hole/pit/cave";
|
||||||
// 7-8 altitude change
|
} else if (roll <= 8) {
|
||||||
// 9-10 canyon/valley
|
return "altitude change";
|
||||||
// 11-12 rise/peak in distance
|
} else if (roll <= 10) {
|
||||||
|
return "canyon/valley";
|
||||||
|
} else if (roll <= 12) {
|
||||||
|
return "rise/peak in distance";
|
||||||
|
}
|
||||||
|
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
export function rollWaterFeature(roll: number = random(1, 12)): string {
|
export function rollWaterFeature(roll: number = random(1, 12)): string {
|
||||||
// 8-9 WATER FEATURE 10-11 LANDMARK 12 RESOURCE
|
if (roll <= 1) {
|
||||||
// I spring/hotspring 1-3 water-based (water- 1-4 game/fruit/vegetable
|
return "spring/hotspring";
|
||||||
// 2 waterfall/geyser fall, geyser, etc.) 5-6 herb/spice/dye source
|
} else if (roll <= 2) {
|
||||||
// 3-6 creek/stream/brook 4-6 plant-based (ancient 7-9 timber/stone
|
return "waterfall/geyser";
|
||||||
// 7-8 pond/lake tree, giant flowers, etc.) 10-11 ore (copper, iron, etc.)
|
} else if (roll <= 6) {
|
||||||
// 9-10 river 7-10 earth-based (peak, 12 precious metal/gems
|
return "creek/stream/brook";
|
||||||
// 11-12 sea/ocean formation, crater, etc.)
|
} else if (roll <= 8) {
|
||||||
// SIZE, ............................... VISIBILITY.
|
return "pond/lake";
|
||||||
|
} else if (roll <= 10) {
|
||||||
|
return "river";
|
||||||
|
} else if (roll <= 12) {
|
||||||
|
return "sea/ocean";
|
||||||
|
}
|
||||||
|
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
export function rollLandmark(roll: number = random(1, 12)): string {
|
export function rollLandmark(roll: number = random(1, 12)): string {
|
||||||
// 8-9 WATER FEATURE 10-11 LANDMARK 12 RESOURCE
|
if (roll <= 3) {
|
||||||
// I spring/hotspring 1-3 water-based (water- 1-4 game/fruit/vegetable
|
return "water-based (water-fall, geyser, etc.)";
|
||||||
// 2 waterfall/geyser fall, geyser, etc.) 5-6 herb/spice/dye source
|
} else if (roll <= 6) {
|
||||||
// 3-6 creek/stream/brook 4-6 plant-based (ancient 7-9 timber/stone
|
return "plant-based (ancient tree, giant flowers, etc.)";
|
||||||
// 7-8 pond/lake tree, giant flowers, etc.) 10-11 ore (copper, iron, etc.)
|
} else if (roll <= 10) {
|
||||||
// 9-10 river 7-10 earth-based (peak, 12 precious metal/gems
|
return "earth-based (peak, formation, crater, etc.)";
|
||||||
// 11-12 sea/ocean formation, crater, etc.)
|
} else if (roll <= 12) {
|
||||||
// SIZE, ............................... VISIBILITY.
|
return rollOddity().description
|
||||||
|
}
|
||||||
|
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
export function rollResource(roll: number = random(1, 12)): string {
|
export function rollResource(roll: number = random(1, 12)): string {
|
||||||
// 8-9 WATER FEATURE 10-11 LANDMARK 12 RESOURCE
|
if (roll <= 4) {
|
||||||
// I spring/hotspring 1-3 water-based (water- 1-4 game/fruit/vegetable
|
return "game/fruit/vegetable";
|
||||||
// 2 waterfall/geyser fall, geyser, etc.) 5-6 herb/spice/dye source
|
} else if (roll <= 6) {
|
||||||
// 3-6 creek/stream/brook 4-6 plant-based (ancient 7-9 timber/stone
|
return "herb/spice/dye source";
|
||||||
// 7-8 pond/lake tree, giant flowers, etc.) 10-11 ore (copper, iron, etc.)
|
} else if (roll <= 9) {
|
||||||
// 9-10 river 7-10 earth-based (peak, 12 precious metal/gems
|
return "timber/stone";
|
||||||
// 11-12 sea/ocean formation, crater, etc.)
|
} else if (roll <= 11) {
|
||||||
// SIZE, ............................... VISIBILITY.
|
return "ore (copper, iron, etc.)";
|
||||||
|
} else if (roll <= 12) {
|
||||||
|
return "precious metal/gems";
|
||||||
|
}
|
||||||
|
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -215,44 +242,60 @@ function rollEvidence(roll: number = random(1, 12), subroll: number = random(1,
|
|||||||
|
|
||||||
|
|
||||||
export function rollTracksSpoor(roll: number = random(1, 12)): string {
|
export function rollTracksSpoor(roll: number = random(1, 12)): string {
|
||||||
|
if (roll <= 3) {
|
||||||
|
return "faint/unclear";
|
||||||
|
} else if (roll <= 6) {
|
||||||
|
return "definite/clear";
|
||||||
|
} else if (roll <= 8) {
|
||||||
|
return "multiple";
|
||||||
|
} else if (roll <= 10) {
|
||||||
|
return "signs of violence";
|
||||||
|
} else if (roll <= 12) {
|
||||||
|
return "trail of blood/other";
|
||||||
|
}
|
||||||
|
|
||||||
// 1-6 TRACKS/SPOOR
|
|
||||||
// 1-3 faint/unclear
|
|
||||||
// 4-6 definite/clear
|
|
||||||
// 7-8 multiple
|
|
||||||
// 9-10 signs of violence
|
|
||||||
// 11-12 trail of blood/other
|
|
||||||
// AGE, CREATURE responsible
|
|
||||||
// 44
|
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
export function rollRemainsDebris(roll: number = random(1, 12)): string {
|
export function rollRemainsDebris(roll: number = random(1, 12)): string {
|
||||||
|
if (roll <= 4) {
|
||||||
|
return "bones";
|
||||||
|
} else if (roll <= 7) {
|
||||||
|
return "corpse/carcass";
|
||||||
|
} else if (roll <= 9) {
|
||||||
|
return "site of violence";
|
||||||
|
} else if (roll <= 10) {
|
||||||
|
return "junk/refuse";
|
||||||
|
} else if (roll <= 11) {
|
||||||
|
return "lost supplies/cargo";
|
||||||
|
} else if (roll <= 12) {
|
||||||
|
return "tools/weapons/armor";
|
||||||
|
}
|
||||||
|
|
||||||
// 7-10 REMAINS/DEBRIS
|
|
||||||
// 1-4 bones
|
|
||||||
// 5-7 corpse/carcass
|
|
||||||
// 8-9 site of violence
|
|
||||||
// 10 junk/refuse
|
|
||||||
// 11 lost supplies/cargo
|
|
||||||
// 12 tools/weapons/armor
|
|
||||||
// AGE, VISIBILITY
|
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
export function rollStashCache(roll: number = random(1, 12)): string {
|
export function rollStashCache(roll: number = random(1, 12)): string {
|
||||||
// 1142 STASH/CACHE
|
if (roll <= 3) {
|
||||||
// 1-3 trinkets/coins
|
return "trinkets/coins";
|
||||||
// 4-5 tools/weapons/armor
|
} else if (roll <= 5) {
|
||||||
// 6-7 map
|
return "tools/weapons/armor";
|
||||||
// 8-9 food/supplies
|
} else if (roll <= 7) {
|
||||||
// 10-12 treasure (p43)
|
return "map";
|
||||||
|
} else if (roll <= 9) {
|
||||||
|
return "food/supplies";
|
||||||
|
} else if (roll <= 12) {
|
||||||
|
return rollTreasure();
|
||||||
|
}
|
||||||
|
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
export function rollDiscoveryCreature(roll: number = random(1, 12)): Discovery {
|
export function rollDiscoveryCreature(roll: number = random(1, 12)): Discovery {
|
||||||
let discovery = new Discovery(roll, 0, 0, "creature");
|
let discovery = new Discovery(roll, 0, 0, "creature");
|
||||||
discovery.creature = rollCreature();
|
discovery.creature = rollCreature();
|
||||||
|
discovery.subcategory = `${discovery.creature.type}/${discovery.creature.subtype}`;
|
||||||
|
discovery.description = discovery.creature.description;
|
||||||
|
|
||||||
return discovery;
|
return discovery;
|
||||||
}
|
}
|
||||||
@@ -273,9 +316,9 @@ export function rollStructure(roll: number = random(1, 12), subroll: number = ra
|
|||||||
discovery.description = rollBurialReligiousStructure(specificroll);
|
discovery.description = rollBurialReligiousStructure(specificroll);
|
||||||
} else if (subroll <= 8) {
|
} else if (subroll <= 8) {
|
||||||
discovery.subcategory = "steading";
|
discovery.subcategory = "steading";
|
||||||
discovery.description = "steading";
|
|
||||||
discovery.specificroll = 0;
|
|
||||||
discovery.steading = rollSteading();
|
discovery.steading = rollSteading();
|
||||||
|
discovery.description = discovery.steading.description;
|
||||||
|
discovery.specificroll = 0;
|
||||||
} else if (subroll <= 12) {
|
} else if (subroll <= 12) {
|
||||||
discovery.subcategory = "ruin";
|
discovery.subcategory = "ruin";
|
||||||
discovery.description = rollRuinStructure(specificroll);
|
discovery.description = rollRuinStructure(specificroll);
|
||||||
@@ -285,70 +328,81 @@ export function rollStructure(roll: number = random(1, 12), subroll: number = ra
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function rollEnigmaticStructure(roll: number = random(1, 12)): string {
|
export function rollEnigmaticStructure(roll: number = random(1, 12)): string {
|
||||||
|
if (roll <= 4) {
|
||||||
|
return "earthworks";
|
||||||
|
} else if (roll <= 8) {
|
||||||
|
return "megalith";
|
||||||
|
} else if (roll <= 11) {
|
||||||
|
return "statue/idol/totem";
|
||||||
|
} else if (roll <= 12) {
|
||||||
|
return rollOddity().description;
|
||||||
|
}
|
||||||
|
|
||||||
// 912 STRUCTURE. Who built it? Is it connected to anything else they made nearby?
|
|
||||||
// 1 ENIGMATIC 2-3 INFRASTRUCTURE 4 DWELLING
|
|
||||||
// 1-4 earthworks 14 track/path 1-3 campsite
|
|
||||||
// 5-8 megalith 5-8 road 4-6 hovel/hut
|
|
||||||
// 941 statue/idol/totem 9-10 bridge/ford 7-8 farm
|
|
||||||
// 12 ODDITY 11 mine/quarry 9-10 inn/roadhouse
|
|
||||||
// AGE (1d844) SIZE (1d844) 12 aqueduct/canal/portal 1112 tower/keep/estate
|
|
||||||
// VISIBILITY CREATURE responsible (1d4.4) CREATURE responsible (1d4+4)
|
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
export function rollInfrastructureStructure(roll: number = random(1, 12)): string {
|
export function rollInfrastructureStructure(roll: number = random(1, 12)): string {
|
||||||
|
if (roll <= 4) {
|
||||||
|
return "track/path";
|
||||||
|
} else if (roll <= 8) {
|
||||||
|
return "road";
|
||||||
|
} else if (roll <= 10) {
|
||||||
|
return "bridge/ford";
|
||||||
|
} else if (roll <= 11) {
|
||||||
|
return "mine/quarry";
|
||||||
|
} else if (roll <= 12) {
|
||||||
|
return "aqueduct/canal/portal";
|
||||||
|
}
|
||||||
|
|
||||||
// 912 STRUCTURE. Who built it? Is it connected to anything else they made nearby?
|
|
||||||
// 1 ENIGMATIC 2-3 INFRASTRUCTURE 4 DWELLING
|
|
||||||
// 1-4 earthworks 14 track/path 1-3 campsite
|
|
||||||
// 5-8 megalith 5-8 road 4-6 hovel/hut
|
|
||||||
// 941 statue/idol/totem 9-10 bridge/ford 7-8 farm
|
|
||||||
// 12 ODDITY 11 mine/quarry 9-10 inn/roadhouse
|
|
||||||
// AGE (1d844) SIZE (1d844) 12 aqueduct/canal/portal 1112 tower/keep/estate
|
|
||||||
// VISIBILITY CREATURE responsible (1d4.4) CREATURE responsible (1d4+4)
|
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
export function rollDwellingStructure(roll: number = random(1, 12)): string {
|
export function rollDwellingStructure(roll: number = random(1, 12)): string {
|
||||||
|
if (roll <= 3) {
|
||||||
|
return "campsite";
|
||||||
|
} else if (roll <= 6) {
|
||||||
|
return "hovel/hut";
|
||||||
|
} else if (roll <= 8) {
|
||||||
|
return "farm";
|
||||||
|
} else if (roll <= 10) {
|
||||||
|
return "inn/roadhouse";
|
||||||
|
} else if (roll <= 12) {
|
||||||
|
return "tower/keep/estate";
|
||||||
|
}
|
||||||
|
|
||||||
// 912 STRUCTURE. Who built it? Is it connected to anything else they made nearby?
|
|
||||||
// 1 ENIGMATIC 2-3 INFRASTRUCTURE 4 DWELLING
|
|
||||||
// 1-4 earthworks 14 track/path 1-3 campsite
|
|
||||||
// 5-8 megalith 5-8 road 4-6 hovel/hut
|
|
||||||
// 941 statue/idol/totem 9-10 bridge/ford 7-8 farm
|
|
||||||
// 12 ODDITY 11 mine/quarry 9-10 inn/roadhouse
|
|
||||||
// AGE (1d844) SIZE (1d844) 12 aqueduct/canal/portal 1112 tower/keep/estate
|
|
||||||
// VISIBILITY CREATURE responsible (1d4.4) CREATURE responsible (1d4+4)
|
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
export function rollBurialReligiousStructure(roll: number = random(1, 12)): string {
|
export function rollBurialReligiousStructure(roll: number = random(1, 12)): string {
|
||||||
|
if (roll <= 2) {
|
||||||
|
return "grave marker/barrow";
|
||||||
|
} else if (roll <= 4) {
|
||||||
|
return "graveyard/necropolis";
|
||||||
|
} else if (roll <= 6) {
|
||||||
|
return "tomb/crypt";
|
||||||
|
} else if (roll <= 9) {
|
||||||
|
return "shrine";
|
||||||
|
} else if (roll <= 11) {
|
||||||
|
return "temple/retreat";
|
||||||
|
} else if (roll <= 12) {
|
||||||
|
return "great temple";
|
||||||
|
}
|
||||||
|
|
||||||
// 5-6 BURIAL/RELIGIOUS 7-8 STEADING 9-12 RUIN
|
|
||||||
// 1-2 grave marker/barrow Roll on STEADING table 1-2 Ias'raucruRE (1d646)
|
|
||||||
// 3-4 graveyard/necropolis 3-4 DWELLING (1d844)
|
|
||||||
// 5-6 tomb/crypt 5-6 BURIAIJREIJGI0us
|
|
||||||
// 7-9 shrine (1d8+4)
|
|
||||||
// 1041 temple/retreat 7-8 STEADING (00+2)
|
|
||||||
// 12 great temple 9-12 DUNGEON (pp60-61)
|
|
||||||
// CREATURE responsible (1d4+4), CREATURE responsible (1d444),
|
|
||||||
// ALIGNMENT, ASPECT AGE (1d8.4), RUINATION,
|
|
||||||
// VISIBILITY
|
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
export function rollRuinStructure(roll: number = random(1, 12)): string {
|
export function rollRuinStructure(roll: number = random(1, 12)): string {
|
||||||
|
if (roll <= 2) {
|
||||||
|
return `${rollInfrastructureStructure(random(1, 6) + 6)} ruins`;
|
||||||
|
} else if (roll <= 4) {
|
||||||
|
return `${rollDwellingStructure(random(1, 8) + 4)} ruins`;
|
||||||
|
} else if (roll <= 6) {
|
||||||
|
return `${rollBurialReligiousStructure(random(1, 8) + 4)} ruins`;
|
||||||
|
} else if (roll <= 8) {
|
||||||
|
return `${rollSteading(random(1, 10) + 2).description} ruins`;
|
||||||
|
} else if (roll <= 12) {
|
||||||
|
return `${rollDungeon().printDescription()} ruins`;
|
||||||
|
}
|
||||||
|
|
||||||
// 5-6 BURIAL/RELIGIOUS 7-8 STEADING 9-12 RUIN
|
|
||||||
// 1-2 grave marker/barrow Roll on STEADING table 1-2 Ias'raucruRE (1d646)
|
|
||||||
// 3-4 graveyard/necropolis 3-4 DWELLING (1d844)
|
|
||||||
// 5-6 tomb/crypt 5-6 BURIAIJREIJGI0us
|
|
||||||
// 7-9 shrine (1d8+4)
|
|
||||||
// 1041 temple/retreat 7-8 STEADING (00+2)
|
|
||||||
// 12 great temple 9-12 DUNGEON (pp60-61)
|
|
||||||
// CREATURE responsible (1d4+4), CREATURE responsible (1d444),
|
|
||||||
// ALIGNMENT, ASPECT AGE (1d8.4), RUINATION,
|
|
||||||
// VISIBILITY
|
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
export class Dungeon {
|
||||||
|
size: Size;
|
||||||
|
ruination: string;
|
||||||
|
builder: string;
|
||||||
|
function: string;
|
||||||
|
themes: string[];
|
||||||
|
discovery: string;
|
||||||
|
danger: string;
|
||||||
|
|
||||||
|
printDescription() {
|
||||||
|
return `${this.size.size} ${this.builder} ${this.function}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class Size {
|
||||||
|
constructor(public size: string = "", public themes: string = "", public areas: string = "") { };
|
||||||
|
}
|
||||||
|
|
||||||
|
export function rollDungeon(): Dungeon {
|
||||||
|
// TODO: Add the who dungeon thing
|
||||||
|
let dungeon = new Dungeon();
|
||||||
|
dungeon.size = new Size("huge");
|
||||||
|
dungeon.builder = "dwarves";
|
||||||
|
dungeon.function = "mine";
|
||||||
|
|
||||||
|
return new Dungeon();
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
import { random } from "lodash";
|
||||||
|
|
||||||
|
export function rollTreasure(roll: number = random(1, 18)) {
|
||||||
|
// TODO: Scan the treasures table
|
||||||
|
return "treasure";
|
||||||
|
}
|
||||||
Reference in new issue
Block a user