diff --git a/deadsands/content/bestiary/rolling-cactus.md b/deadsands/content/bestiary/rolling-cactus.md new file mode 100644 index 0000000..9d30c7d --- /dev/null +++ b/deadsands/content/bestiary/rolling-cactus.md @@ -0,0 +1,65 @@ +--- +# bestiary/rolling-cactus.md + +title: Rolling Cactus +author: evilchili +tags: monster +date: 2023-05-27 14:43:16.001825 +template: monster +show_dm_content: True +status: published +monster: + name: "Rolling Cactus" + size: medium + type: beast + alignment: unaligned + AC: 10 + HP: 100 (10d10 + 50) + speed: 30ft + STR: 10,0 + DEX: 10,0 + CON: 10,0 + INT: 10,0 + WIS: 10,0 + CHA: 10,0 + skills: + saving_throws: + resistances: + damage_immunities: + condition_immunities: + senses: Passive Perception 10 + languages: Common + cr: + attributes: + "name1": description + "name2": description + traits: + Actions: + attributes: + "multiattack": description + options: + "name1": "+1 to hit, reach 5 ft., one target. Hit: 5 (2d4) DamageType damage." + "name2": "+1 to hit, reach 5 ft., one target. Hit: 5 (2d4) DamageType damage." + Reactions: + attributes: + options: + "Opportunity Attack": description + Legendary Actions: + attributes: + "count": 3 + options: + "name1": description + "name2": description + Legendary Reactions: + options: + "name1": description + "name2": description + Lair and Actions: + attributes: + "name1": description + options: + "name1": description + "name2": description +--- + +Flavour text goes here. diff --git a/deadsands/content/dm/hooks.md b/deadsands/content/dm/hooks.md new file mode 100644 index 0000000..8509253 --- /dev/null +++ b/deadsands/content/dm/hooks.md @@ -0,0 +1,130 @@ +--- +title: PC Hooks +--- + +Player character hooks for plot etc... + +### Krjn + +##### 1. what is your secret reason for becoming an adventurer? + +hoping to do enough to make up for what happened in the forest such that I put myself in exile, so that I can go home. + +##### 2. who have you wronged? + +my people and the forest they live in + +##### 3. what would you kill to know? + +who really is responsible for the devastation of my forest home. I took the blame upon myself, but was only an indirect cause + +##### 4. what do you fear? + +I fear I will never be able to atone for my sins. I also value propriety and am horrified whenever I set a toe out of line. + +##### Goals + +**STG**: just exist. go on quests, make money to survive. live with my guilt +**MTG**: eke out a life in exile that is satisfactory. +**LTG**: rejoin my brethren in the forest + +### Rosney + +##### 1. what is your secret reason for becoming an adventurer? + +Find papa. to make my mark. + +##### 2. who have you wronged? + +Sanders, shady alchemist who sold bad potions. run off into the desert. + +Liberty Sisters not happy she left? + +##### 3. what would you kill to know? + +Ways to survive. + +Where is papa? + +##### 4. what do you fear? + +**STG**: Money and connections +**MTG**: make a name for myself +**LTG**: My own faction + +### The Gaunt Traveler + +##### 1. What is your secret reason for becoming an adventurer? + +My secret is that I am FELURIUS MAGNUS MAGNUSSON PASHTUM, Magnus Stairwell, The Man Who Will Not Die. + +I sent myself unknowingly into the past of Telisar to learn about Residium. + +##### 2. Who have you wronged? + +I sell high grade nitrogen fertilizer for gun powder and incendiaries. + +My brand is FUNGUS MINERALS. + +Minus a 'U', this is an anagram of Magnus Felurius. + +The fertilizer bags' logo is a rainbow formed of the brand name, over a cartoon character. + +The character is a smiling mushroom, giving a thumbs up of approval. + +If you consider the rainbow an inverted 'U', his name is on every bag he sells. + +Someone considers the sale of these materials a wrong. + +##### 3. What would you kill to know? + +I would kill to: +* know the fundamental secrets of how Residium works +* establish my hidden Myconid colony. (Know that my family is safe) +* keep the secrets of Residium for the colony. (Know that my future is assured) + +##### 4. What do you fear? + +I fear dying without understanding how Residium works. + +##### Extra Credit Goals + +###### Short-term + +* find a safe place to reincarnate as a Myconid. +* secure the trust of folks to protect myself and the colony. + +###### Medium-term + +* found a new Myconid colony around the secrets of Residium crystals. + +###### Long-term + +* discover the secrets of the Residium waste and crystals. +* collect, protect, harvest and distribute Rresidium among an army of Myconids. +* found a distributed set of colonies. +* establish a store house of knowledge and equipment as a legacy for my future self, trusted travelers and companions. + +### Evelina's Character + +##### 1. What is your secret reason for becoming an adventurer? +- Was sent into exile after going against wishes of her tribe and saving an individual who then took advantage of the hospitality - causing harm to her tribe and perhaps even resulting in the death of some of her people. + +##### 2. Who have you wronged +- Her own people, according to them. She is estranged from family for her choices to help “selfish” adventurers. +- Probably countless competing adventurers + +##### 3. What would you kill to know +- How to restore the land and thus restore her people (she was raised in a “corrupted view” tribe) +- The location of the individual that wronged her and her people and led to her exile. But she isn’t entirely sure what she would do when/if she ever found them. + +##### 4. What do you fear +- Losing those she has grown close to, which perhaps has hindered her getting too close to anyone in the past +- Losing herself (her physiology being tied to the land - she was raised with a belief that she is corrupted and can succumb further to her people’s “curse” and become more and more savage) + +##### What are your short, medium, and long-term goals +**STG**: Surviving and making a difference in the way she best can. Getting stronger and finding ways to adapt and market her skills. Collecting cool things + tattoos of her exploits. + +**MTG**: Finding a place to belong. Filling the void of connection with her tribe. + +**LTG**: Restoring the land to the legacy of her ancestors, and in turn hopefully restoring her people. diff --git a/deadsands/content/images/gopher_gulch.png b/deadsands/content/images/gopher_gulch.png new file mode 100644 index 0000000..2c77435 Binary files /dev/null and b/deadsands/content/images/gopher_gulch.png differ diff --git a/deadsands/content/images/notes b/deadsands/content/images/notes deleted file mode 120000 index 347f67a..0000000 --- a/deadsands/content/images/notes +++ /dev/null @@ -1 +0,0 @@ -../../../deadsands-notes/images/notes/ \ No newline at end of file diff --git a/deadsands/content/images/overland_blooming_wastes.png b/deadsands/content/images/overland_blooming_wastes.png index f6da5e9..aa26ab1 100644 Binary files a/deadsands/content/images/overland_blooming_wastes.png and b/deadsands/content/images/overland_blooming_wastes.png differ diff --git a/deadsands/content/images/overland_calamity_ridge.png b/deadsands/content/images/overland_calamity_ridge.png new file mode 100644 index 0000000..b9cbebe Binary files /dev/null and b/deadsands/content/images/overland_calamity_ridge.png differ diff --git a/deadsands/content/images/overland_dust_river_canyon.png b/deadsands/content/images/overland_dust_river_canyon.png new file mode 100644 index 0000000..5c83773 Binary files /dev/null and b/deadsands/content/images/overland_dust_river_canyon.png differ diff --git a/deadsands/content/images/overland_gopher_gulch.png b/deadsands/content/images/overland_gopher_gulch.png new file mode 100644 index 0000000..e4956e1 Binary files /dev/null and b/deadsands/content/images/overland_gopher_gulch.png differ diff --git a/deadsands/content/images/overland_map.png b/deadsands/content/images/overland_map.png index 6d3d5e0..514c886 100644 Binary files a/deadsands/content/images/overland_map.png and b/deadsands/content/images/overland_map.png differ diff --git a/deadsands/content/images/overland_map_thumbnail.png b/deadsands/content/images/overland_map_thumbnail.png new file mode 100644 index 0000000..411f723 Binary files /dev/null and b/deadsands/content/images/overland_map_thumbnail.png differ diff --git a/deadsands/content/images/tokens/rolling_cactus.png b/deadsands/content/images/tokens/rolling_cactus.png new file mode 100644 index 0000000..18f457f Binary files /dev/null and b/deadsands/content/images/tokens/rolling_cactus.png differ diff --git a/deadsands/content/images/tokens/rolling_cactus.png~ b/deadsands/content/images/tokens/rolling_cactus.png~ new file mode 100644 index 0000000..ecccb6a Binary files /dev/null and b/deadsands/content/images/tokens/rolling_cactus.png~ differ diff --git a/deadsands/content/regions/blooming-wastes.md b/deadsands/content/locations/blooming-wastes.md similarity index 84% rename from deadsands/content/regions/blooming-wastes.md rename to deadsands/content/locations/blooming-wastes.md index c1fb688..324e2ac 100644 --- a/deadsands/content/regions/blooming-wastes.md +++ b/deadsands/content/locations/blooming-wastes.md @@ -1,13 +1,14 @@ --- -# /Users/evilchili/dnd/deadsands/www/content/region/blooming-wastes.md +# /Users/evilchili/dnd/deadsands/www/content/locations/blooming-wastes.md title: The Blooming Wastes author: evilchili -tags: region, homebrew +tags: region date: 2022-07-20 17:54:47.286869 template: region show_dm_content: True -description: Detail of an overland map of the Sahwat Desert Leads to Calamity Ridge, Dust River Canyon, and Tano's Edge. +thumbnail: /images/overland_blooming_wastes.png +description: region: name: The Blooming Wastes size: 20 @@ -69,5 +70,8 @@ region: Rarity: Weird Value: 5 GP --- - The Blooming Wastes stretch out before you: a mostly flat expanse of hard, cracked earth blanketed by some kind of sandy brown scrub. Small mesas dot the horizon, suggesting the possibility of shelter. As you approach you see that the scrub is covered in thick black thorns sharp enough to pierce boot leather; you will need to tread carefully. + + +**Leads to Calamity Ridge, Dust River Canyon, and Tano's Edge.** + diff --git a/deadsands/content/regions/calamity-ridge.md b/deadsands/content/locations/calamity-ridge.md similarity index 94% rename from deadsands/content/regions/calamity-ridge.md rename to deadsands/content/locations/calamity-ridge.md index cc37c5e..d58427a 100644 --- a/deadsands/content/regions/calamity-ridge.md +++ b/deadsands/content/locations/calamity-ridge.md @@ -7,6 +7,8 @@ tags: region date: 2022-08-07 13:59:35.261130 template: region show_dm_content: False +thumbnail: /images/overland_calamity_ridge.png +description: region: name: Calamity Ridge size: 25 @@ -68,3 +70,5 @@ region: --- Southwest of the Blooming Wastes lies an empty stretch of hard-packed stone, from which rises Calamity Ridge -- a sprawling mesa 15 miles long and 200 feet high. Sheltering at the base of the ridge is advised, as the otherwise empty land provides no cover from stalking predators. Legend has it that a tribe of lizardfolk once claimed the mesa but were wiped out by faction miners who descended on the region following rumours of veins of precious metals. Whether the rumours proved false or the veins were exhausted isn't clear, but the region is uninhabited today. + +**Leads to Tano's Edge.** diff --git a/deadsands/content/regions/dust-river-canyon.md b/deadsands/content/locations/dust-river-canyon.md similarity index 89% rename from deadsands/content/regions/dust-river-canyon.md rename to deadsands/content/locations/dust-river-canyon.md index 5fab4e7..bbbe96e 100644 --- a/deadsands/content/regions/dust-river-canyon.md +++ b/deadsands/content/locations/dust-river-canyon.md @@ -1,5 +1,5 @@ --- -# regions/dust-river-canyon.md +# locations/dust-river-canyon.md title: Dust River Canyon status: published @@ -8,6 +8,8 @@ tags: region date: 2022-08-07 13:21:31.543012 template: region show_dm_content: True +thumbnail: /images/overland_dust_river_canyon.png +description: region: name: Dust River Canyon size: 40 @@ -69,3 +71,5 @@ region: --- Dust River Canyon is a half-mile wide gash in the landscape, running forty miles southeast from the edge of the Blooming Wastes. A sheer, crumbling switchback leads to its base where thick clouds of red dust some 2 feet thick swirl, resisting all attempts to settle or disperse. Stalking predators move unseen within the dust, emerging from caves in the canyon walls. + +**Leads to The Blooming Wastes and Gopher Gulcch.** diff --git a/deadsands/content/regions/gopher-gulch.md b/deadsands/content/locations/gopher-gulch.md similarity index 84% rename from deadsands/content/regions/gopher-gulch.md rename to deadsands/content/locations/gopher-gulch.md index fee3838..e33ffc3 100644 --- a/deadsands/content/regions/gopher-gulch.md +++ b/deadsands/content/locations/gopher-gulch.md @@ -1,5 +1,5 @@ --- -# regions/gopher-gulch.md +# locations/gopher-gulch.md title: Gopher Gulch status: published @@ -7,7 +7,9 @@ author: evilchili tags: region date: 2022-08-07 13:38:52.296672 template: region -show_dm_content: False +show_dm_content: True +thumbnail: /images/overland_gopher_gulch.png +description: region: name: Gopher Gulch size: 30 @@ -20,10 +22,10 @@ region: Notes: Forage: DC: 18 - Notes: no shelter; water harvestable from rolling cacti - Track: - DC: 15 Notes: + Track: + DC: 19 + Notes: no shelter Evade: DC: 19 Notes: @@ -34,11 +36,11 @@ region: encounters: d1-d2: Difficulty: Dangerous - d3-d4: + d3-d10: Difficulty: Deadly - d5-d7: + d11-d15: Difficulty: Easy - d8-d20: + d15-d20: Difficulty: None weather: d1-d2: @@ -59,8 +61,7 @@ region: Rarity: Uncommon d6-d7: Description: Sand Storm - Effect: Heavily obscured; visibility 5ft, disadvantage on WIS (Perception) checks - and INT (Investigation) checks + Effect: Heavily obscured; visibility 5ft, disadvantage on WIS (Perception) checks and INT (Investigation) checks Rarity: Uncommon d8: Description: Inverted Bubble Rain @@ -81,10 +82,13 @@ region: Rarity: Common Value: 1 GP d5-d8: - Name: Rolling Cactus - Description: A globular cactus that rolls and bounces freely in the wind. 1 gallon of water can be harvested from 10 cacti. + Name: Globe Cactus + Description: A globular cactus. 1 gallon of water can be harvested from 10 cacti. Rarity: Common Value: 5 GP --- Gopher Gulch emerges from the southern edge of Dust River Canyon and turns east towards the rocky foothills at the base of the eastern range of Hoard's Vault. Heavy irregular stone cover the shallow riverbed which traverses a barren plain of cracked, broken ground. Shrub and small plants dot the area, but the most prominent flora is the Rolling Catci -- an odd species of globular cactus that rolls and bounces freely, pushed about by the desert winds. + + +**Leads to Dust River Canyon.** diff --git a/deadsands/content/locations/tanos-edge.md b/deadsands/content/locations/tanos-edge.md new file mode 100644 index 0000000..5c0f8cc --- /dev/null +++ b/deadsands/content/locations/tanos-edge.md @@ -0,0 +1,27 @@ +--- +# locations/tanos-edge.md + +title: Tano's Edge +author: evilchili +tags: location +date: 2023-06-11 16:57:53.734985 +template: location +show_dm_content: False +thumbnail: /images/tanos_edge_thumb.png +image: /images/tanos_edge.png +location: + type: settlement + name: Tano's Edge + population: 1000 + notable_races: Humans, Halfings, Dragonborn + economy: Arcane research, enchantment, antiquities + dm_notes: | + DM's notes go here. + stores: + - angry-andoks-apothecary + - generals-store + +status: published +--- + +Until recently, Tano's Edge was little more than a remote village on a ridge of the same name overlooking the Sahwat desert, catering to outcasts and the lawless. But with the discovery of ruins under the sands and the riches they contain, this town has become a powder keg of competing interests. diff --git a/deadsands/content/locations/the-haunted-hills.md b/deadsands/content/locations/the-haunted-hills.md new file mode 100644 index 0000000..9bc64c4 --- /dev/null +++ b/deadsands/content/locations/the-haunted-hills.md @@ -0,0 +1,86 @@ +--- +# regions/the-haunted-hills.md + +title: The Haunted Hills +author: evilchili +tags: region +date: 2023-06-09 18:36:37.735366 +template: region +show_dm_content: False +region: + name: The Haunted Hills + size: 20 + terrain: normal + dm_notes: Talisman of Blightward required to avoid effects of weather. + skills: + Travel: + DC: 19 + Notes: + Forage: + DC: 12 + Notes: + Track: + DC: 10 + Notes: + Evade: + DC: 13 + Notes: + Survey: + DC: 10 + Notes: + cr: 5 + encounters: + d1: + Difficulty: Dangerous + d2-d3: + Difficulty: Deadly + d4-d6: + Difficulty: Difficult + d7-d14: + Difficulty: Easy + d15-d20: + Difficulty: None + weather: + d1-d2: + Rarity: Common + Description: Clear Skies + Effect: No effect + d3: + Rarity: Rare + Description: Howling Fantods + Effect: A phantasm appears and disappears at random. Anyone who can see it is frightened. + d4-d5: + Description: Ghostly Wailing + Effect: Disadvantage on CON checks for concentration checks + Rarity: Uncommon + d6-d7: + Rarity: Rare + Description: Breath of the Dead + Effect: 1d6 Necrotic damage per half-day + d8: + Rarity: Rare + Description: Soul Blight + Effect: Maximum HP is reduced by 1d4 per half-day unless wearing a Talisman of Blightward. + regional_effects: + - On a spell attack critical hit or miss, roll on the Wild Magic Table + forage_table: + d1-d2: + Rarity: Rare + Name: Deadbreath + Description: A tough black root that grows in cracks in the stone. When disturbed, the bark releases Breath of the Dead spores. DC 13 Nature, Survival, Constitution check or 1d4 Necrotic damage. + Value: 5 GP + d3: + Rarity: Uncommon + Name: Brightshrooms + Description: | + A grey, partially translucent mushroom that glows green in the presence of leaving creatures. + Value: 1 GP + d4: + Rarity: Common + Name: Water + Description: Cool, crisp, clear. Small pools and springs dot the caverns. + Value: 1 GP +status: draft +--- + +South of Gopher Gulch at the base of the eastern range of Hoard's Vault, lies a long series of rocky foothills carved through by howling winds; the interior of the hills is a vast network of tunnels that wail like the moaning of the dead, leading to the popular superstition that the land is cursed. diff --git a/deadsands/content/mechanics/desert-travel-rules.md b/deadsands/content/mechanics/desert-travel-rules.md index c628e75..186e619 100644 --- a/deadsands/content/mechanics/desert-travel-rules.md +++ b/deadsands/content/mechanics/desert-travel-rules.md @@ -26,8 +26,6 @@ For each half-day, the party will:
  • Resolve skill check successes / complications
  • -The Sahwat is a vast desert region stretching some thousands of square miles, containing a variety of conditions: rocky mesas, scrub, cactus forests, empty bedrock, plateaus, valleys, caverns, salt flats, and endless dunes. At the heart of the desert lies an impenetrable whirlwind called the Heartstorm through which no one has passed and which is the subject of wild speculation. - Until recently traveling the Sahwat proper was an activity limited to the desparate and the outcast, and nearly none of it had been mapped. This is changing, though, with the discovery of buried wonders of the Yanrin Didan. Now every faction, bandit crew, hedge wizard and treasure hunter is descending on the desert and racing to uncover its secrets. When you undertake a journey into the desert, the party will need to contend with *Provisioning*, *Survival*, and *Regional Effects*; these are described below. diff --git a/deadsands/content/pages/index.md b/deadsands/content/pages/index.md index 981671b..f48dacd 100644 --- a/deadsands/content/pages/index.md +++ b/deadsands/content/pages/index.md @@ -9,6 +9,12 @@ date: 2022-07-09 11:00 ## Welcome to Telisar... -The Second Era ended in fire. The Empire of Yanrin Didan -- "Glowing Sands" in the common tongue -- spanned half the continent of Vosh, from the Sea of Storms in the south and across the jungles of Dewa Q'Asos to the peaks of Hoard's Vault. Its civilization stood unchallenged for an age, until a great power swept aside their magics, destroyed their cities, and scorched the earth leaving behind only dry, dead rock. No one knows just what caused destruction on such a scale, for it is said that not one soul survived the cataclysm and now, a thousand years later, their name and thousands of miles of desert are all that remain. The Empire's arcane wonders, their secrets, and their doom all lie buried under the dead sands of the Sahwat. +*The Second Era ended in fire. The Empire of Yanrin Didan -- "Glowing Sands" in the common tongue -- spanned half the continent of Vosh, from the Sea of Storms in the south and across the jungles of Dewa Q'Asos to the peaks of Hoard's Vault. Its civilization stood unchallenged for an age, until a great power swept aside their magics, destroyed their cities, and scorched the earth leaving behind only dry, dead rock. No one knows just what caused destruction on such a scale, for it is said that not one soul survived the cataclysm and now, a thousand years later, their name and thousands of miles of desert are all that remain. The Empire's arcane wonders, their secrets, and their doom all lie buried under the dead sands of the Sahwat.* -But there are whispers. Rumours of hoppers returning from the desert streaming gold from their packs and long-dead artifacts suddenly glowing with new enchantments. Sightings of strange, twisted creatures appearing on the dunes only to disappear like a mirage. And rumours that somewhere in the heart of the Sahwat, through the magical storms, across the dunes, at the very seat of that dead empire: history is stirring. +*But there are whispers. Rumours of hoppers returning from the desert streaming gold from their packs and long-dead artifacts suddenly glowing with new enchantments. Sightings of strange, twisted creatures appearing on the dunes only to disappear like a mirage. And rumours that somewhere in the heart of the Sahwat, through the magical storms, across the dunes, at the very seat of that dead empire: history is stirring.* + +### The Dead Sands + +The Dead Sands, our group's second campaign, is a **post-apocalyptic gold rush weird western** set in a realm of Telisar. Our first campaign explored the meaning of story and the interplay of myth, religion, and fate, and led to grand adventures on a huge scale with gods, demons, and the fey. For the Dead Sands I'd like to explore stories more grounded in local events: in civilized areas, the tension between magic and technology, the politics of factions, and the effects of a gold rush transforming societies. In the desert, exploration and survival will be key themes. + +We'll dig into these themes using some new mechanics; [A Hopper's Guide to the Dewa Q'Asos](locations/) is the compendium of information unlocked by the party as they [explore the world](mechanics/desert-travel-rules). diff --git a/deadsands/content/pages/maps.md b/deadsands/content/pages/maps.md deleted file mode 100644 index 5f7dbb7..0000000 --- a/deadsands/content/pages/maps.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -# pages/maps.md - -title: Maps -author: evilchili -tags: page -date: 2022-08-03 23:20:02.243922 -key_image: - src: '/images/dewa_qasos.png' - alt: "Hand-drawn map of the Dewa Q'Asos" -gallery: - overland_map.png: "Overland map of the Sahwat Desert (so far)" - tanos_edge.png: "Old Town district of Tano's Edge" ---- - diff --git a/deadsands/content/stores/angry-andoks-apothecary.md b/deadsands/content/stores/angry-andoks-apothecary.md index 0b577ac..ca644ec 100644 --- a/deadsands/content/stores/angry-andoks-apothecary.md +++ b/deadsands/content/stores/angry-andoks-apothecary.md @@ -4,21 +4,22 @@ title: Angry Andok's Apothecary author: evilchili show_dm_content: False -tags: post +location: Tano's Edge +tags: store date: 2023-05-13 13:18:26.226450 description: Was that a short joke?! I'll gut you! See if I don't!
    --Andok status: published --- -Andok's is a cantankerous dwarf who specializes in nonmagical salves, potions, and reagants. He makes a killing -supplying hoppers who wisely avoid magical healing when in the desert, but is notorious for his quick, violent -temper and contempt for, well, pretty much everything and everyone. He remains stubbornly unaligned, but his wares -are so useful the Liberty Sisters don't dare chase him out of town. +Andok's is a cantankerous dwarf who specializes in nonmagical salves, potions, +and reagents. He makes a killing supplying hoppers who wisely avoid magical +healing when in the desert, but is notorious for his quick, violent temper and +contempt for, well, pretty much everything and everyone. He remains stubbornly +unaligned, but his wares are so useful the Liberty Sisters don't dare chase him +out of town. "Andok's Elixirs" are reliable, if vile, substitutes for potions of healing, if you can afford them. - - Location: **Tano's Edge** Faction: **Unaligned** @@ -34,4 +35,4 @@ Faction: **Unaligned** | Uncommon | Andok's Elixir of Fire Resistence | Grants resistence to fire damage for a half-day. | 500 GP | 0.5 Lb | | Uncommon | Andok's Elixir of Poison Resistence | Grants resistence to poison damage and advantage on saves against the Poisoned condition for a half-day. | 500 GP | 0.5 Lb | | Uncommon | Andok's Elixir of the Berserker | Grants the Rage ability for 1 hour. | 800 GP | 0.5 Lb | -| Very Rare | Andok's Fuckin' Great Elixir of Healing (Special Order) | Heals 10d4+20 | 200000 GP | 0.5 Lb | \ No newline at end of file +| Very Rare | Andok's Fuckin' Great Elixir of Healing (Special Order) | Heals 10d4+20 | 200000 GP | 0.5 Lb | diff --git a/deadsands/content/stores/generals-store.md b/deadsands/content/stores/generals-store.md index a1e0d24..2ae6b31 100644 --- a/deadsands/content/stores/generals-store.md +++ b/deadsands/content/stores/generals-store.md @@ -4,7 +4,9 @@ title: General's Store author: evilchili show_dm_content: False -tags: post +location: Tano's Edge +faction: Liberty Sisters +tags: store date: 2023-04-12 17:52:34.363950 description: Inventory subject to availability, prices subject to change, haggle at your own risk. -- The General status: published @@ -18,8 +20,6 @@ The general supply is well-stocked with basic adventuring gear and a healthy cli items high. The General has a reputation for being able to move just about anything, from random metal scraps to gardening supplies to artifacts of historical interest. - - Location: **Tano's Edge** Faction: **Liberty Sisters** diff --git a/deadsands/deadsands-theme/static/deadsands/css/style.css b/deadsands/deadsands-theme/static/deadsands/css/style.css index 58a4b6d..0e42ee9 100644 --- a/deadsands/deadsands-theme/static/deadsands/css/style.css +++ b/deadsands/deadsands-theme/static/deadsands/css/style.css @@ -136,13 +136,14 @@ h6 { font-size: 1.25em; } color: #692F28; } -.container .box article.recent p:first-of-type::first-letter { - font-family: inherit; - font-size: inherit; - float: inherit; - margin: inherit; - padding: inherit; - color: inherit; +.container .box article.recent p:first-of-type::first-letter, +.summary p:first-of-type::first-letter { + font-family: inherit !important; + font-size: inherit !important; + float: inherit !important; + margin: inherit !important; + padding: inherit !important; + color: inherit !important; } img { @@ -186,6 +187,19 @@ img { text-justify: left; } +.thumbnail { + float: right; + max-width: 150px; + margin-left: 1em; +} +.thumbnail img { + border: 1px solid black; + box-shadow: inset 0px 0px 4px 0px rgba(0,0,0,1); + max-width: 150px; + max-height: 150px; + height: auto; +} + article.recent { font-style: italic; margin-bottom: 1em; @@ -196,6 +210,7 @@ article.recent a.title { font-style: normal; } +article.recent .pull, article.recent h3, article.recent h4, article.recent h5, @@ -753,6 +768,46 @@ a.disabled:hover { display: none; } +.statblock > .stat { + font-weight: bold; +} + +.statblock > .stat > .value { + font-weight: normal; + margin-left: 0.5em; +} + +.monster { + font-family: Roboto,Helvetica,sans-serif !important; + text-align: justify; + font-size: 0.9em; + column-count: 2; + -webkit-column-break-inside: avoid; + page-break-inside: avoid; + break-inside: avoid-column; +} + +.monster h3, h4 { + margin-bottom: 0; +} + +.monster h4 { + margin-top: 1em; + border-bottom: 1px solid #000; +} + +.monster hr { + content: ""; + display: block; + width: 100%; + margin: 10px 0px; +} + +.monster-type { + text-align: center; +} + + .pull { float: right; max-width: 40%; @@ -810,6 +865,19 @@ a.disabled:hover { text-align: left; } + div.location { + display: block; + clear: both; + } + div.location:hover, div.location:active { + background: rgba(244,241,232, 0.5); + cursor: pointer; + } + + div.location:hover h4 a, div.location:active h4 a { + color:#cca138; + } + .container .box p:first-of-type::first-letter { margin-bottom: -0.5em; } diff --git a/deadsands/deadsands-theme/templates/base.html b/deadsands/deadsands-theme/templates/base.html index 3d6e665..a0472c8 100644 --- a/deadsands/deadsands-theme/templates/base.html +++ b/deadsands/deadsands-theme/templates/base.html @@ -27,14 +27,18 @@ {% if self.is_dm() %}
  • DM
  • {% endif %} + {% if DISPLAY_CATEGORIES_ON_MENU %} {% for category, articles in categories %} {% if category != 'dm' %}
  • {{ category }}
  • {% endif %} {% endfor %} + {% endif %} + {% if DISPLAY_PAGES_ON_MENU %} {% for p in pages %} {{ p.title }} {% endfor %} + {% endif %} {% for m in MENU_ITEMS %}
  • {{ m[0] }}
  • {% endfor %} diff --git a/deadsands/deadsands-theme/templates/index.html b/deadsands/deadsands-theme/templates/index.html index dc51305..6b6194b 100644 --- a/deadsands/deadsands-theme/templates/index.html +++ b/deadsands/deadsands-theme/templates/index.html @@ -6,7 +6,11 @@ {% else %}
    {% if category %} - {% with key='category', values=[category], title=category %}{% include "category-index.html" %}{% endwith %} + {% if category.name in ('locations', ) %} + {% include category.name + "-index.html" %} + {% else %} + {% with key='category', values=[category], title=category %}{% include "category-index.html" %}{% endwith %} + {% endif %} {% elif tag %} {% include "tag-index.html" %} {% endif %} diff --git a/deadsands/deadsands-theme/templates/location.html b/deadsands/deadsands-theme/templates/location.html new file mode 100644 index 0000000..5d7a610 --- /dev/null +++ b/deadsands/deadsands-theme/templates/location.html @@ -0,0 +1,33 @@ +{% extends "base.html" %} +{% import "macros.html" as macros %} +{% block title %}{{ article.title|capitalize }} - {{SITENAME}}{% endblock title %} +{% block summary %}{{ article.summary|striptags }}{% endblock %} +{% block key_image %}{{ macros.key_image(article) }}{% endblock key_image %} +{% block content %} +{% if not self.is_dm() and article.category == 'dm' %} +{% else %} +
    +
    +

    {{ article.title }}

    +
    + + {% if article.description or article.thumbnail %} +
    +
    + + {{ article.description or '' }} +
    +
    + {% endif %} + {{ article.content }} + {% if article.location.type == 'settlement' %} + {% with article=article %}{% include "settlement.html" %}{% endwith %} + {% endif %} +
    + {% include "bottom-nav.html" %} +
    +
    +{% endif %} +{% endblock content %} diff --git a/deadsands/deadsands-theme/templates/locations-index.html b/deadsands/deadsands-theme/templates/locations-index.html new file mode 100644 index 0000000..8536206 --- /dev/null +++ b/deadsands/deadsands-theme/templates/locations-index.html @@ -0,0 +1,36 @@ +{% set locations = articles | selectattr('category', 'in', ['locations']) | list | sort(attribute=date) %} +Hand-drawn map of the Dewa Q'Asos +
    +

    A Hopper's Guide To
    The Dewa Q'Asos

    +

    Cites, Towns, and Settlements

    + {% for location in locations if 'region' not in location.tags %} +
    +

    {{ location.title }}

    +
    {{location.title}}
    + {{ location.summary }} +
    + {% endfor %} +

    The Sahwat Desert

    +
    The known regions of the Sawhat Desert
    + + The Sahwat Desert is a vast expanse covering thousands of miles of the Dewa Q'Asos region in southwestern Vosh, from + Tano's Edge to the Sea of Storms. It is comprised of a multitude of regions each with its own geography, weather, + and secrets, ranging from inhospitable to deadly. At the heart of the desert lies an impenetrable whirlwind called + the Heartstorm, through which no one has passed and which is the subject of wild speculation. +

    +
    + Travel in the Sahwat is governed by the rules for overland travel. Mind how you step, Hopper. +

    +
    + + {% for location in locations if 'region' in location.tags %} +
    +

    {{ location.title }}

    +
    {{location.title}}
    + {{ location.summary }} +
    + {% endfor %} + +
    +
    + diff --git a/deadsands/deadsands-theme/templates/monster.html b/deadsands/deadsands-theme/templates/monster.html new file mode 100644 index 0000000..29936e0 --- /dev/null +++ b/deadsands/deadsands-theme/templates/monster.html @@ -0,0 +1,147 @@ +{% extends "base.html" %} +{% import "macros.html" as macros %} +{% block title %}{{ article.title|capitalize }} - {{SITENAME}}{% endblock title %} +{% block summary %}{{ article.summary|striptags }}{% endblock %} +{% block key_image %}{{ macros.key_image(article) }}{% endblock key_image %} +{% block content %} +{% set m = article.metadata.monster %} + +
    +
    +

    {{ article.title }}

    + {% import 'translations.html' as translations with context %} + {{ translations.translations_for(article) }} +
    + + {% if article.description %} +
    {{ article.description }}
    + {% endif %} + + {% set target = article.title.replace(' ', '_') %} + {% if self.is_dm() or article.show_dm_content %} +
    +

    {{ article.title }}

    +
    + + {{m.size}} {{m.type}}{% if m.alignment %}, {{m.alignment}}{%endif%} + +
    +
    +
    + Armor Class {{ m.AC }} +
    +
    + Hit Points {{ m.HP }} +
    +
    + Speed {{ m.speed }} +
    +
    + + + + + + + + + + + + +
    STRDEXCONINTWISCHA
    {{ m.STR }}{{ m.DEX }}{{ m.CON }}{{ m.INT }}{{ m.WIS }}{{ m.CHA }}
    + +
    + + {% if m.saving_throws %} +
    + Saving Throws {{ m.saving_throws }} +
    + {% endif %} + + {% if m.skills %} +
    + Skills {{ m.skills }} +
    + {% endif %} + + {% if m.resistances %} +
    + Damage Resistances {{ m.resistances }} +
    + {% endif %} + + {% if m.vulnerabilities %} +
    + Damage Vulnerabilities {{ m.vulnerabilities }} +
    + {% endif %} + + {% if m.damage_immunities %} +
    + Damage Immunities {{ m.damage_immunities }} +
    + {% endif %} + + {% if m.condition_immunities %} +
    + Condition Immunities {{ m.condition_immunities }} +
    + {% endif %} + + {% if m.saving_throws %} +
    + Senses {{ m.senses }} +
    + {% endif %} + + {% if m.languages %} +
    + Languages {{ m.languages }} +
    + {% endif %} + + {% if m.cr %} +
    + Challenge {{ m.cr }} +
    + {% endif %} + +
    + + {% for (attr_name, attr_desc) in m.attributes.items() %} +
    {{ attr_name }}. {{attr_desc}}
    + {% endfor %} + + {% for section in ('Actions', 'Reactions', 'Legendary Actions', 'Legendary Reactions', 'Lair and Actions') %} + {% if section in m.traits %} + {% set trait = m.traits[section] %} + {% if 'attributes' in trait or 'options' in trait %} +

    {{ section }}

    + {% if trait.attributes %} + {% for (attr_name, attr_desc) in trait.attributes.items() %} +
    {{ attr_name }}. {{attr_desc}}
    + {% endfor %} + {% endif %} + {% if trait.options %} + {% for (attr_name, attr_desc) in trait.options.items() %} +
    {{ attr_name }}. {{attr_desc}}
    + {% endfor %} + {% endif %} + {% endif %} + {% endif %} + {% endfor %} +
    + {% endif %} + + {{ article.content }} + +
    {{ m.dm_notes }}
    + +
    + {% include "bottom-nav.html" %} +
    +
    +{% endblock %} diff --git a/deadsands/deadsands-theme/templates/pages/index.html b/deadsands/deadsands-theme/templates/pages/index.html index 27aca8e..17d5ed3 100644 --- a/deadsands/deadsands-theme/templates/pages/index.html +++ b/deadsands/deadsands-theme/templates/pages/index.html @@ -5,12 +5,6 @@

    {{ page.content }} -
    - {% if page.show_recent %} -

    Recent Posts

    - {% with count=10, key='category', values=['lore', 'mechanics', 'regions'] %}{% include "recent.html" %}{% endwith %} -
    - {% endif %}
    {% endblock %} diff --git a/deadsands/deadsands-theme/templates/region.html b/deadsands/deadsands-theme/templates/region.html index 30893b7..c5b0f26 100644 --- a/deadsands/deadsands-theme/templates/region.html +++ b/deadsands/deadsands-theme/templates/region.html @@ -15,8 +15,13 @@
    {{ article.locale_date }} {% if article.tags %}{% for tag in article.tags %}{{ tag }} {% endfor %}{% endif %}
    - {% if article.description %} -
    {{ article.description }}
    + {% if article.description or article.thumbnail %} +
    +
    + + {{ article.description or '' }} +
    +
    {% endif %} {{ article.content }} @@ -32,7 +37,7 @@
    Size
    {{ r.size }} sq. miles
    -
    Terrain
    {{ r.terrain }} (walking: {{ r.size / 10 if r.terrain == 'difficult' else 20 |round }} days)
    +
    Terrain
    {{ r.terrain }} (walking: {{ r.size / (10 if r.terrain == 'difficult' else 20) |round }} days)
    Regional Effects
    {{ macros.table(r.regional_effects) }}
    Skill Challenges
    {{ macros.table(r.skills, ['Skills', 'DC', 'Notes']) }}
    Encounters (CR {{r.cr}})
    {{ macros.table(r.encounters, ['Roll', 'Difficulty']) }}
    diff --git a/deadsands/deadsands-theme/templates/settlement.html b/deadsands/deadsands-theme/templates/settlement.html new file mode 100644 index 0000000..30d9fc6 --- /dev/null +++ b/deadsands/deadsands-theme/templates/settlement.html @@ -0,0 +1,24 @@ + + + + + + + + + + + +
    PopulationNotable RacesEconomy
    {{ article.location.population }}{{ article.location.notable_races }}{{ article.location.economy }}
    + +

    Stores

    +{% set stores = articles |selectattr('tags', 'eq', ['store']) | selectattr('location', 'eq', article.title) | list %} +{% if stores %} + {% for store in stores %} +
    +

    {{ store.title }}

    + {{ store.summary }} +
    + {% endfor %} +{% endif %} + diff --git a/deadsands/markdown-templates/location.md b/deadsands/markdown-templates/location.md new file mode 100644 index 0000000..58d0a5b --- /dev/null +++ b/deadsands/markdown-templates/location.md @@ -0,0 +1,29 @@ +--- +# {{filename}} + +title: {{ title }} +author: {{ author if author else 'evilchili' }} +tags: {{ tags or 'location'}} +{% if date %} +date: {{ date }} +{% endif %} +template: location +show_dm_content: False +thumbnail: /images/{{ title|slugify }}_thumb.png +image: /images/{{title|slugify}}.png +{% if summary %} + summary: {{summary}} +{% endif %} +location: + type: settlment + name: {{ title }} + population: 1000 + notable_races: humans + economy: textiles + dm_notes: | + DM's notes go here. + stores: +status: {{ status if status else 'draft' }} +--- + +{{ description }} diff --git a/deadsands/markdown-templates/monster.md b/deadsands/markdown-templates/monster.md new file mode 100644 index 0000000..a7c8118 --- /dev/null +++ b/deadsands/markdown-templates/monster.md @@ -0,0 +1,70 @@ +--- +# {{filename}} + +title: {{ title }} +author: {{ author if author else 'evilchili' }} +tags: {{ tags or 'monster'}} +{% if date %} +date: {{ date }} +{% endif %} +template: monster +show_dm_content: True +{% if summary %} + summary: {{summary}} +{% endif %} +status: {{ status if status else 'draft' }} +monster: + name: "{{title}}" + size: medium + type: beast + alignment: unaligned + AC: 10 + HP: 100 (10d10 + 50) + speed: 30ft + STR: 10,0 + DEX: 10,0 + CON: 10,0 + INT: 10,0 + WIS: 10,0 + CHA: 10,0 + skills: + saving_throws: + resistances: + damage_immunities: + condition_immunities: + senses: Passive Perception 10 + languages: Common + cr: + attributes: + "name1": description + "name2": description + traits: + Actions: + attributes: + "multiattack": description + options: + "name1": "+1 to hit, reach 5 ft., one target. Hit: 5 (2d4) DamageType damage." + "name2": "+1 to hit, reach 5 ft., one target. Hit: 5 (2d4) DamageType damage." + Reactions: + attributes: + options: + "Opportunity Attack": description + Legendary Actions: + attributes: + "count": 3 + options: + "name1": description + "name2": description + Legendary Reactions: + options: + "name1": description + "name2": description + Lair and Actions: + attributes: + "name1": description + options: + "name1": description + "name2": description +--- + +Flavour text goes here. diff --git a/deadsands/markdown-templates/store.md b/deadsands/markdown-templates/store.md new file mode 100644 index 0000000..d76bc4a --- /dev/null +++ b/deadsands/markdown-templates/store.md @@ -0,0 +1,27 @@ +--- +# {{filename}} + +title: {{ title }} +author: {{ author if author else 'evilchili' }} +show_dm_content: False +tags: {{ tags }} +{% if date %} +date: {{ date }} +{% endif %} +{% if description %} +description: {{description}} +{% endif %} +status: {{ status if status else 'published' }} +--- + +{{ summary }} + + +Location: **{{location}}** + +Faction: **{{faction}}** + + +### Current Stock + +{{ inventory }} diff --git a/deadsands/pelicanconf.py b/deadsands/pelicanconf.py index 0f44063..30d91c9 100644 --- a/deadsands/pelicanconf.py +++ b/deadsands/pelicanconf.py @@ -30,6 +30,9 @@ LINKS = (('Pelican', 'https://getpelican.com/'), SOCIAL = (('You can add links in your config file', '#'), ('Another social link', '#'),) +DISPLAY_PAGES_ON_MENU = False +DISPLAY_CATEGORIES_ON_MENU = False + ARTICLE_URL = '{category}/{slug}/' CATEGORY_URL = "{slug}/index.html" TAG_URL = "tags/{slug}/" @@ -52,12 +55,16 @@ ARCHIVE_SAVE_AS = "archives/{slug}.html" ARCHIVES_SAVE_AS = "archives/index.html" MENU_ITEMS = ( + ("A Hopper's Guide", "locations/"), + ("Lore", "lore/"), + ("Bestiary", "bestiary/"), + ("Mechanics", "mechanics/"), ("Index", "archives/"), ) SITEMAP = { 'format': 'xml', - "exclude": ["tag/"], + "exclude": ["tag/", "session0"], } PLUGINS = [ diff --git a/deadsands/site_tools/cli.py b/deadsands/site_tools/cli.py index 65da8d7..dad4618 100644 --- a/deadsands/site_tools/cli.py +++ b/deadsands/site_tools/cli.py @@ -49,6 +49,7 @@ class ContentType(str, Enum): lore = 'lore' monster = 'monster' region = 'region' + location = 'location' page = 'page' @@ -226,9 +227,11 @@ def new( print("You must specify a category for 'post' content.") sys.exit() case 'monster': - category = 'beastiary' + category = 'bestiary' case 'region': - category = 'regions' + category = 'locations' + case 'location': + category = 'locations' case 'page': category = 'pages' case _: diff --git a/deadsands/site_tools/content_manager.py b/deadsands/site_tools/content_manager.py index 7a4eb6b..b9ad6d4 100644 --- a/deadsands/site_tools/content_manager.py +++ b/deadsands/site_tools/content_manager.py @@ -18,10 +18,10 @@ def create(content_type: str, title: str, template_dir: str, return slugify(s, regex_subs=SETTINGS['SLUG_REGEX_SUBSTITUTIONS']) template_path = Path(template_dir) - template_name = template + ".md" + template_name = f"{template or content_type}.md" if not (template_path / template_name).exists(): + print(f"Expected template {template_name} not found. Using default markdown template.") template_name = 'default.md' - print("Not found. Using default markdown template.") env = Environment( loader=FileSystemLoader(template_path), trim_blocks=True,