CI: add rust/ build+test workflow
All checks were successful
build / build-test (push) Successful in 39s
All checks were successful
build / build-test (push) Successful in 39s
This commit is contained in:
parent
1da6aa35a0
commit
9cd8e2f717
27 changed files with 5774 additions and 8 deletions
32
data/dungeons/catacombs_1.json
Normal file
32
data/dungeons/catacombs_1.json
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
{
|
||||
"id": "catacombs_1",
|
||||
"name": "Catacombs - Level 1",
|
||||
"dungeon": "catacombs",
|
||||
"level": 1,
|
||||
"width": 22,
|
||||
"height": 22,
|
||||
"description": "The upper catacombs beneath the Temple of the Mad God. Ancient burial chambers where the dead stir restlessly.",
|
||||
"encounter_level": 3,
|
||||
"special_squares": [
|
||||
{ "x": 0, "y": 0, "type": "stairs_up", "destination": "skara_brae", "label": "Return to Temple of Mad God" },
|
||||
{ "x": 1, "y": 0, "type": "stairs_up", "destination": "sewers_3", "label": "Return to Sewers Level 3" },
|
||||
{ "x": 21, "y": 21, "type": "stairs_down", "destination": "catacombs_2", "label": "Descend to Catacombs Level 2" },
|
||||
{ "x": 5, "y": 4, "type": "message", "text": "Ancient burial alcoves line the walls. Most have been broken open." },
|
||||
{ "x": 10, "y": 3, "type": "darkness", "text": "The torches on the walls have long since burned out. Only darkness here." },
|
||||
{ "x": 3, "y": 8, "type": "special_encounter", "text": "A skeleton rises from its resting place!", "encounter": "skeleton_guardian" },
|
||||
{ "x": 16, "y": 6, "type": "trap", "text": "A tomb lid shifts! A mummified hand grabs your ankle!", "damage": "1d6" },
|
||||
{ "x": 8, "y": 12, "type": "anti_magic", "text": "A cursed sarcophagus radiates anti-magic energy." },
|
||||
{ "x": 14, "y": 10, "type": "spinner", "text": "The catacomb corridors twist and turn. You lose your sense of direction." },
|
||||
{ "x": 6, "y": 16, "type": "silence", "text": "The whispers of the dead fall silent. Even bard songs cannot pierce this quiet." },
|
||||
{ "x": 18, "y": 14, "type": "message", "text": "Faded inscriptions on the walls tell of an ancient civilization." },
|
||||
{ "x": 11, "y": 17, "type": "trap", "text": "Poison gas seeps from cracks in a burial vault!", "damage": "2d4" },
|
||||
{ "x": 20, "y": 18, "type": "special_encounter", "text": "A wight emerges from the shadows, hungry for life force!", "encounter": "catacomb_wight" },
|
||||
{ "x": 4, "y": 19, "type": "message", "text": "A small shrine to unknown gods. The offerings are still fresh." },
|
||||
{ "x": 15, "y": 2, "type": "darkness", "text": "This section was sealed off. Something scratched its way out from inside." }
|
||||
],
|
||||
"connections": [
|
||||
{ "from_x": 21, "from_y": 21, "to": "catacombs_2", "type": "stairs_down" },
|
||||
{ "from_x": 0, "from_y": 0, "to": "skara_brae", "type": "stairs_up" },
|
||||
{ "from_x": 1, "from_y": 0, "to": "sewers_3", "type": "stairs_up" }
|
||||
]
|
||||
}
|
||||
30
data/dungeons/catacombs_2.json
Normal file
30
data/dungeons/catacombs_2.json
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
{
|
||||
"id": "catacombs_2",
|
||||
"name": "Catacombs - Level 2",
|
||||
"dungeon": "catacombs",
|
||||
"level": 2,
|
||||
"width": 22,
|
||||
"height": 22,
|
||||
"description": "The middle catacombs. The dead here are more powerful and the architecture grows more ancient. Strange rituals were performed in these halls.",
|
||||
"encounter_level": 3,
|
||||
"special_squares": [
|
||||
{ "x": 0, "y": 0, "type": "stairs_up", "destination": "catacombs_1", "label": "Return to Catacombs Level 1" },
|
||||
{ "x": 21, "y": 21, "type": "stairs_down", "destination": "catacombs_3", "label": "Descend to Catacombs Level 3" },
|
||||
{ "x": 7, "y": 3, "type": "special_encounter", "text": "A zombie lord commands a shambling horde!", "encounter": "zombie_lord" },
|
||||
{ "x": 14, "y": 5, "type": "trap", "text": "A curse tablet crumbles under your boot. Dark magic latches onto you!", "damage": "1d8" },
|
||||
{ "x": 4, "y": 7, "type": "darkness", "text": "The darkness here seems to have weight. It presses against you." },
|
||||
{ "x": 10, "y": 9, "type": "anti_magic", "text": "Runes carved into the floor form a magic-suppression circle." },
|
||||
{ "x": 17, "y": 11, "type": "spinner", "text": "The catacomb maze disorients you completely." },
|
||||
{ "x": 3, "y": 13, "type": "silence", "text": "An enchanted silence zone. The dead sleep silently here." },
|
||||
{ "x": 19, "y": 15, "type": "message", "text": "A ritual chamber. Dark stains on the altar suggest blood sacrifice." },
|
||||
{ "x": 8, "y": 17, "type": "trap", "text": "A ceiling collapse! Dust and rubble rain down!", "damage": "2d6" },
|
||||
{ "x": 13, "y": 19, "type": "special_encounter", "text": "Wraiths drift through the walls, surrounding you!", "encounter": "wraith_circle" },
|
||||
{ "x": 20, "y": 3, "type": "message", "text": "A sealed vault. The lock requires a special key to open." },
|
||||
{ "x": 6, "y": 10, "type": "spinner", "text": "You enter a circular chamber with six identical exits." },
|
||||
{ "x": 16, "y": 18, "type": "darkness", "text": "Even magical light fizzles in this area." }
|
||||
],
|
||||
"connections": [
|
||||
{ "from_x": 21, "from_y": 21, "to": "catacombs_3", "type": "stairs_down" },
|
||||
{ "from_x": 0, "from_y": 0, "to": "catacombs_1", "type": "stairs_up" }
|
||||
]
|
||||
}
|
||||
30
data/dungeons/catacombs_3.json
Normal file
30
data/dungeons/catacombs_3.json
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
{
|
||||
"id": "catacombs_3",
|
||||
"name": "Catacombs - Level 3",
|
||||
"dungeon": "catacombs",
|
||||
"level": 3,
|
||||
"width": 22,
|
||||
"height": 22,
|
||||
"description": "The deepest catacombs. This level connects to Harkyn's Castle. Powerful undead and dark magic pervade every corner.",
|
||||
"encounter_level": 3,
|
||||
"special_squares": [
|
||||
{ "x": 0, "y": 0, "type": "stairs_up", "destination": "catacombs_2", "label": "Return to Catacombs Level 2" },
|
||||
{ "x": 21, "y": 21, "type": "stairs_down", "destination": "harkyn_1", "label": "Descend to Harkyn's Castle" },
|
||||
{ "x": 11, "y": 11, "type": "special_encounter", "text": "A powerful lich guards the bridge to Harkyn's domain!", "encounter": "catacomb_lich" },
|
||||
{ "x": 5, "y": 3, "type": "trap", "text": "A necromantic trap drains your life force!", "damage": "2d8" },
|
||||
{ "x": 16, "y": 5, "type": "anti_magic", "text": "The lich's phylactery nearby suppresses all magic in this area." },
|
||||
{ "x": 3, "y": 8, "type": "darkness", "text": "Total darkness. You hear chanting in a language you don't recognize." },
|
||||
{ "x": 18, "y": 10, "type": "spinner", "text": "The magical maze shifts around you. Walls move when you're not looking." },
|
||||
{ "x": 8, "y": 14, "type": "silence", "text": "A zone of absolute silence enforced by dark runes." },
|
||||
{ "x": 14, "y": 16, "type": "trap", "text": "Spectral hands reach from the walls and drain your vitality!", "damage": "1d10" },
|
||||
{ "x": 6, "y": 18, "type": "message", "text": "Ancient prophecy carved in stone: 'When the seven sleep, Skara Brae shall be free.'" },
|
||||
{ "x": 19, "y": 7, "type": "special_encounter", "text": "A ghost appears and points toward Harkyn's Castle!", "encounter": "benevolent_ghost" },
|
||||
{ "x": 10, "y": 19, "type": "message", "text": "The passage to Harkyn's Castle is behind a massive stone door." },
|
||||
{ "x": 2, "y": 12, "type": "darkness", "text": "Shadow creatures dart at the edge of your vision." },
|
||||
{ "x": 15, "y": 3, "type": "trap", "text": "A pressure plate triggers a cascade of bones!", "damage": "1d6" }
|
||||
],
|
||||
"connections": [
|
||||
{ "from_x": 21, "from_y": 21, "to": "harkyn_1", "type": "stairs_down" },
|
||||
{ "from_x": 0, "from_y": 0, "to": "catacombs_2", "type": "stairs_up" }
|
||||
]
|
||||
}
|
||||
32
data/dungeons/cellar_1.json
Normal file
32
data/dungeons/cellar_1.json
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
{
|
||||
"id": "cellar_1",
|
||||
"name": "Wine Cellar - Level 1",
|
||||
"dungeon": "cellar",
|
||||
"level": 1,
|
||||
"width": 22,
|
||||
"height": 22,
|
||||
"description": "The wine cellar of the Scarlet Bard. The air is musty with the scent of old wine and something else.",
|
||||
"encounter_level": 1,
|
||||
"special_squares": [
|
||||
{ "x": 0, "y": 0, "type": "stairs_up", "destination": "skara_brae", "label": "Return to Scarlet Bard" },
|
||||
{ "x": 0, "y": 1, "type": "stairs_down", "destination": "sewers_1", "label": "Descend to Sewers" },
|
||||
{ "x": 2, "y": 2, "type": "message", "text": "Fine wines - 10 years or older. The bottles are covered in dust." },
|
||||
{ "x": 4, "y": 2, "type": "message", "text": "Rare wines - 50 years and older. These bottles have unusual labels." },
|
||||
{ "x": 6, "y": 4, "type": "message", "text": "This is the wine cellar of the Scarlet Bard." },
|
||||
{ "x": 10, "y": 3, "type": "trap", "text": "A broken bottle crunches underfoot. Glass cuts your feet!", "damage": "1d4" },
|
||||
{ "x": 14, "y": 6, "type": "message", "text": "The wine racks here have been smashed. Something large passed through." },
|
||||
{ "x": 18, "y": 8, "type": "darkness", "text": "The torches have burned out here. It is pitch black." },
|
||||
{ "x": 3, "y": 10, "type": "trap", "text": "A loose barrel rolls into you from the shadows!", "damage": "1d6" },
|
||||
{ "x": 8, "y": 12, "type": "message", "text": "Rat droppings everywhere. The rats here are unusually large." },
|
||||
{ "x": 15, "y": 14, "type": "special_encounter", "text": "A giant rat scurries out from behind the barrels!", "encounter": "giant_rat" },
|
||||
{ "x": 5, "y": 16, "type": "message", "text": "Empty bottles line the walls. This section has been picked clean." },
|
||||
{ "x": 12, "y": 18, "type": "trap", "text": "The floor gives way slightly! You catch yourself on a wine rack.", "damage": "1d3" },
|
||||
{ "x": 19, "y": 10, "type": "darkness", "text": "No light reaches this corner of the cellar." },
|
||||
{ "x": 7, "y": 7, "type": "spinner", "text": "You stumble in the dark. Which way were you facing?" },
|
||||
{ "x": 16, "y": 16, "type": "message", "text": "A heavy oak door bars further passage. Beyond it, you hear running water." }
|
||||
],
|
||||
"connections": [
|
||||
{ "from_x": 0, "from_y": 1, "to": "sewers_1", "type": "stairs_down" },
|
||||
{ "from_x": 0, "from_y": 0, "to": "skara_brae", "type": "stairs_up" }
|
||||
]
|
||||
}
|
||||
34
data/dungeons/harkyn_1.json
Normal file
34
data/dungeons/harkyn_1.json
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
{
|
||||
"id": "harkyn_1",
|
||||
"name": "Harkyn's Castle - Level 1",
|
||||
"dungeon": "harkyn",
|
||||
"level": 1,
|
||||
"width": 22,
|
||||
"height": 22,
|
||||
"description": "The upper halls of Harkyn's ruined castle. Once a noble fortress, now home to the Jabberwock and other beasts.",
|
||||
"encounter_level": 4,
|
||||
"special_squares": [
|
||||
{ "x": 0, "y": 0, "type": "stairs_up", "destination": "skara_brae", "label": "Return to Skara Brae" },
|
||||
{ "x": 1, "y": 0, "type": "stairs_up", "destination": "sewers_3", "label": "Return to Sewers Level 3" },
|
||||
{ "x": 2, "y": 0, "type": "stairs_up", "destination": "catacombs_3", "label": "Return to Catacombs Level 3" },
|
||||
{ "x": 21, "y": 21, "type": "stairs_down", "destination": "harkyn_2", "label": "Descend to Harkyn's Level 2" },
|
||||
{ "x": 11, "y": 5, "type": "special_encounter", "text": "The Jabberwock! With eyes of flame and jaws that bite!", "encounter": "jabberwock" },
|
||||
{ "x": 6, "y": 3, "type": "trap", "text": "A portcullis slams down! You barely dodge it.", "damage": "1d8" },
|
||||
{ "x": 16, "y": 4, "type": "message", "text": "Faded tapestries depict the history of Harkyn's Castle in its glory days." },
|
||||
{ "x": 4, "y": 9, "type": "darkness", "text": "The great hall is lit only by embers. Shadows dance on crumbling walls." },
|
||||
{ "x": 13, "y": 8, "type": "spinner", "text": "The castle's corridors twist deceptively. You lose your bearing." },
|
||||
{ "x": 18, "y": 12, "type": "anti_magic", "text": "The castle's ancient wards suppress magical energy." },
|
||||
{ "x": 7, "y": 15, "type": "silence", "text": "An enchanted silence blankets the throne room antechamber." },
|
||||
{ "x": 14, "y": 17, "type": "trap", "text": "A suit of armor animates and swings a rusty blade!", "damage": "2d6" },
|
||||
{ "x": 9, "y": 19, "type": "message", "text": "A library - most books destroyed. One readable volume describes the Mad God." },
|
||||
{ "x": 20, "y": 15, "type": "special_encounter", "text": "Skeleton warriors guard the stairway down!", "encounter": "skeleton_knights" },
|
||||
{ "x": 3, "y": 18, "type": "trap", "text": "Loose stones underfoot send you tumbling down a short slope!", "damage": "1d6" },
|
||||
{ "x": 17, "y": 19, "type": "darkness", "text": "The dungeons beneath are pitch black. You hear heavy footsteps." }
|
||||
],
|
||||
"connections": [
|
||||
{ "from_x": 21, "from_y": 21, "to": "harkyn_2", "type": "stairs_down" },
|
||||
{ "from_x": 0, "from_y": 0, "to": "skara_brae", "type": "stairs_up" },
|
||||
{ "from_x": 1, "from_y": 0, "to": "sewers_3", "type": "stairs_up" },
|
||||
{ "from_x": 2, "from_y": 0, "to": "catacombs_3", "type": "stairs_up" }
|
||||
]
|
||||
}
|
||||
30
data/dungeons/harkyn_2.json
Normal file
30
data/dungeons/harkyn_2.json
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
{
|
||||
"id": "harkyn_2",
|
||||
"name": "Harkyn's Castle - Level 2",
|
||||
"dungeon": "harkyn",
|
||||
"level": 2,
|
||||
"width": 22,
|
||||
"height": 22,
|
||||
"description": "The middle levels of Harkyn's Castle. The architecture grows more twisted and nightmarish. Harkyn's dark experiments are evident.",
|
||||
"encounter_level": 4,
|
||||
"special_squares": [
|
||||
{ "x": 0, "y": 0, "type": "stairs_up", "destination": "harkyn_1", "label": "Return to Harkyn's Level 1" },
|
||||
{ "x": 21, "y": 21, "type": "stairs_down", "destination": "harkyn_3", "label": "Descend to Harkyn's Level 3" },
|
||||
{ "x": 10, "y": 4, "type": "special_encounter", "text": "One of Harkyn's failed experiments lurches toward you!", "encounter": "harkyn_experiment" },
|
||||
{ "x": 5, "y": 7, "type": "trap", "text": "Alchemical reagents on a shelf explode when disturbed!", "damage": "2d6" },
|
||||
{ "x": 15, "y": 6, "type": "anti_magic", "text": "Harkyn's laboratory equipment creates an anti-magic field." },
|
||||
{ "x": 3, "y": 11, "type": "darkness", "text": "No light penetrates the dungeon cells. You hear moaning from within." },
|
||||
{ "x": 17, "y": 9, "type": "spinner", "text": "A rotating wall segment confuses your sense of direction." },
|
||||
{ "x": 8, "y": 14, "type": "silence", "text": "Soundproofed torture chambers. A profound, unnatural silence." },
|
||||
{ "x": 13, "y": 16, "type": "message", "text": "Notes in Harkyn's hand: 'The Mad God must be freed to reach Mangar.'" },
|
||||
{ "x": 19, "y": 13, "type": "trap", "text": "A magical trap! Lightning arcs from the walls!", "damage": "2d8" },
|
||||
{ "x": 6, "y": 18, "type": "special_encounter", "text": "A bone golem guards Harkyn's inner sanctum!", "encounter": "bone_golem" },
|
||||
{ "x": 20, "y": 18, "type": "message", "text": "A teleportation circle - inactive but humming with residual energy." },
|
||||
{ "x": 11, "y": 10, "type": "trap", "text": "A pit trap lined with spikes!", "damage": "2d6" },
|
||||
{ "x": 4, "y": 4, "type": "darkness", "text": "The walls are covered in scratch marks - made by human fingernails." }
|
||||
],
|
||||
"connections": [
|
||||
{ "from_x": 21, "from_y": 21, "to": "harkyn_3", "type": "stairs_down" },
|
||||
{ "from_x": 0, "from_y": 0, "to": "harkyn_1", "type": "stairs_up" }
|
||||
]
|
||||
}
|
||||
31
data/dungeons/harkyn_3.json
Normal file
31
data/dungeons/harkyn_3.json
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
{
|
||||
"id": "harkyn_3",
|
||||
"name": "Harkyn's Castle - Level 3",
|
||||
"dungeon": "harkyn",
|
||||
"level": 3,
|
||||
"width": 22,
|
||||
"height": 22,
|
||||
"description": "The deepest level of Harkyn's Castle. The Mad God is imprisoned here. The Old Man waits to guide those who prove worthy.",
|
||||
"encounter_level": 5,
|
||||
"special_squares": [
|
||||
{ "x": 0, "y": 0, "type": "stairs_up", "destination": "harkyn_2", "label": "Return to Harkyn's Level 2" },
|
||||
{ "x": 21, "y": 0, "type": "stairs_up", "destination": "skara_brae", "label": "Secret exit to Skara Brae" },
|
||||
{ "x": 11, "y": 11, "type": "special_encounter", "text": "The Mad God! A being of chaotic energy imprisoned by Harkyn long ago!", "encounter": "mad_god" },
|
||||
{ "x": 5, "y": 5, "type": "special_encounter", "text": "A mysterious Old Man sits by a magical fire. He offers guidance.", "encounter": "old_man" },
|
||||
{ "x": 10, "y": 3, "type": "anti_magic", "text": "The Mad God's prison radiates anti-magic energy. Spells are nullified." },
|
||||
{ "x": 15, "y": 7, "type": "trap", "text": "The Mad God's rage manifests! Psychic energy tears at your mind!", "damage": "3d6" },
|
||||
{ "x": 4, "y": 10, "type": "darkness", "text": "Only the Mad God's eerie glow illuminates this chamber." },
|
||||
{ "x": 17, "y": 14, "type": "silence", "text": "The Mad God's presence creates a bubble of unnatural silence." },
|
||||
{ "x": 8, "y": 16, "type": "spinner", "text": "Reality warps near the Mad God's prison. Directions become meaningless." },
|
||||
{ "x": 14, "y": 18, "type": "message", "text": "Inscriptions: 'The Mad God holds the key. Free him, and gain an ally against Mangar.'" },
|
||||
{ "x": 20, "y": 10, "type": "trap", "text": "Magical chains lash out from the walls!", "damage": "2d8" },
|
||||
{ "x": 3, "y": 17, "type": "special_encounter", "text": "A demon guardian summoned by Harkyn blocks your path!", "encounter": "harkyn_demon" },
|
||||
{ "x": 18, "y": 3, "type": "message", "text": "Harkyn's final journal: 'Mangar grows stronger. The Mad God is our last hope.'" },
|
||||
{ "x": 7, "y": 8, "type": "trap", "text": "The floor erupts with spectral energy!", "damage": "2d6" },
|
||||
{ "x": 19, "y": 19, "type": "message", "text": "A magical portal shimmers - it leads to Kylearan's Tower." }
|
||||
],
|
||||
"connections": [
|
||||
{ "from_x": 0, "from_y": 0, "to": "harkyn_2", "type": "stairs_up" },
|
||||
{ "from_x": 21, "from_y": 0, "to": "skara_brae", "type": "stairs_up" }
|
||||
]
|
||||
}
|
||||
31
data/dungeons/kylearan_1.json
Normal file
31
data/dungeons/kylearan_1.json
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
{
|
||||
"id": "kylearan_1",
|
||||
"name": "Kylearan's Tower - Level 1",
|
||||
"dungeon": "kylearan",
|
||||
"level": 1,
|
||||
"width": 22,
|
||||
"height": 22,
|
||||
"description": "The tower of Kylearan the Archmage. A single level filled with magical defenses and the Crystal Golem that guards Kylearan's secrets.",
|
||||
"encounter_level": 5,
|
||||
"special_squares": [
|
||||
{ "x": 0, "y": 0, "type": "stairs_up", "destination": "skara_brae", "label": "Return to Skara Brae" },
|
||||
{ "x": 10, "y": 10, "type": "special_encounter", "text": "The Crystal Golem! A construct of pure magical crystal!", "encounter": "crystal_golem" },
|
||||
{ "x": 5, "y": 3, "type": "anti_magic", "text": "Kylearan's wards suppress all magic near the tower entrance." },
|
||||
{ "x": 16, "y": 5, "type": "spinner", "text": "The tower's magical architecture shifts. You lose your orientation." },
|
||||
{ "x": 8, "y": 8, "type": "trap", "text": "A magical trap! Arcane energy discharges!", "damage": "3d6" },
|
||||
{ "x": 14, "y": 12, "type": "message", "text": "Kylearan's notes: 'Mangar's weakness lies in his own tower. The key is within.'" },
|
||||
{ "x": 4, "y": 15, "type": "darkness", "text": "Magical darkness fills this chamber. Even light spells fail." },
|
||||
{ "x": 18, "y": 14, "type": "silence", "text": "Kylearan's silence spells still active after all these years." },
|
||||
{ "x": 11, "y": 16, "type": "message", "text": "A magical workbench. Kylearan crafted the Crystal Golem here." },
|
||||
{ "x": 3, "y": 10, "type": "trap", "text": "Summoned elementals attack!", "damage": "2d8" },
|
||||
{ "x": 20, "y": 8, "type": "special_encounter", "text": "Kylearan's magical guardians - animated crystal statues!", "encounter": "crystal_guardians" },
|
||||
{ "x": 7, "y": 18, "type": "message", "text": "A teleportation circle activates! It can take you to Mangar's Tower." },
|
||||
{ "x": 17, "y": 18, "type": "anti_magic", "text": "The tower's core generates a powerful anti-magic field." },
|
||||
{ "x": 13, "y": 3, "type": "spinner", "text": "The spiral staircase plays tricks on your sense of up and down." },
|
||||
{ "x": 9, "y": 14, "type": "message", "text": "Kylearan appears in a vision: 'Defeat the Crystal Golem to reach Mangar's Tower.'" }
|
||||
],
|
||||
"connections": [
|
||||
{ "from_x": 0, "from_y": 0, "to": "skara_brae", "type": "stairs_up" },
|
||||
{ "from_x": 7, "from_y": 18, "to": "mangar_1", "type": "teleport" }
|
||||
]
|
||||
}
|
||||
31
data/dungeons/mangar_1.json
Normal file
31
data/dungeons/mangar_1.json
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
{
|
||||
"id": "mangar_1",
|
||||
"name": "Mangar's Tower - Level 1",
|
||||
"dungeon": "mangar",
|
||||
"level": 1,
|
||||
"width": 22,
|
||||
"height": 22,
|
||||
"description": "The ground floor of Mangar's Tower. The evil archmage's fortress is defended by magical constructs and traps at every turn.",
|
||||
"encounter_level": 5,
|
||||
"special_squares": [
|
||||
{ "x": 0, "y": 0, "type": "stairs_up", "destination": "skara_brae", "label": "Return to Skara Brae" },
|
||||
{ "x": 1, "y": 0, "type": "teleport_in", "destination": "kylearan_1", "label": "Arrived from Kylearan's Tower" },
|
||||
{ "x": 21, "y": 21, "type": "stairs_down", "destination": "mangar_2", "label": "Descend to Mangar's Tower Level 2" },
|
||||
{ "x": 11, "y": 5, "type": "special_encounter", "text": "The Maze Master! A cunning creature that warps the dungeon layout!", "encounter": "maze_master" },
|
||||
{ "x": 7, "y": 3, "type": "trap", "text": "Mangar's magical traps! Arcane flames engulf the corridor!", "damage": "3d6" },
|
||||
{ "x": 15, "y": 4, "type": "anti_magic", "text": "Mangar's anti-magic wards are potent here. No spells can be cast." },
|
||||
{ "x": 4, "y": 8, "type": "darkness", "text": "Magical darkness. Mangar does not want visitors to see his defenses." },
|
||||
{ "x": 17, "y": 9, "type": "spinner", "text": "Mangar's maze spell twists the corridors. You are thoroughly lost." },
|
||||
{ "x": 9, "y": 12, "type": "silence", "text": "Mangar's silence spell. Even the air feels dead." },
|
||||
{ "x": 14, "y": 14, "type": "special_encounter", "text": "A Soul Sucker! It feeds on your life force!", "encounter": "soul_sucker" },
|
||||
{ "x": 6, "y": 16, "type": "trap", "text": "A teleportation trap sends you hurtling through space! You arrive disoriented.", "damage": "1d8" },
|
||||
{ "x": 19, "y": 15, "type": "message", "text": "Mangar's propaganda: 'All who enter my tower shall serve me in death.'" },
|
||||
{ "x": 3, "y": 19, "type": "darkness", "text": "The walls pulse with a sickly green light that hurts your eyes." },
|
||||
{ "x": 12, "y": 18, "type": "spinner", "text": "A revolving room. The exits keep changing position." },
|
||||
{ "x": 20, "y": 8, "type": "message", "text": "A barracks for Mangar's summoned creatures. Currently empty." }
|
||||
],
|
||||
"connections": [
|
||||
{ "from_x": 21, "from_y": 21, "to": "mangar_2", "type": "stairs_down" },
|
||||
{ "from_x": 0, "from_y": 0, "to": "skara_brae", "type": "stairs_up" }
|
||||
]
|
||||
}
|
||||
31
data/dungeons/mangar_2.json
Normal file
31
data/dungeons/mangar_2.json
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
{
|
||||
"id": "mangar_2",
|
||||
"name": "Mangar's Tower - Level 2",
|
||||
"dungeon": "mangar",
|
||||
"level": 2,
|
||||
"width": 22,
|
||||
"height": 22,
|
||||
"description": "The second level of Mangar's Tower. More powerful guardians and deadlier traps protect the approach to Mangar's inner sanctum.",
|
||||
"encounter_level": 6,
|
||||
"special_squares": [
|
||||
{ "x": 0, "y": 0, "type": "stairs_up", "destination": "mangar_1", "label": "Return to Mangar's Tower Level 1" },
|
||||
{ "x": 21, "y": 21, "type": "stairs_down", "destination": "mangar_3", "label": "Descend to Mangar's Tower Level 3" },
|
||||
{ "x": 10, "y": 4, "type": "special_encounter", "text": "Another Soul Sucker lurks in the shadows, drawn to your life force!", "encounter": "soul_sucker" },
|
||||
{ "x": 6, "y": 7, "type": "special_encounter", "text": "A mysterious Old Man appears. 'Mangar fears the light of truth.'", "encounter": "old_man" },
|
||||
{ "x": 15, "y": 5, "type": "trap", "text": "Mangar's lightning trap! Bolts of energy arc between the walls!", "damage": "3d8" },
|
||||
{ "x": 3, "y": 10, "type": "anti_magic", "text": "A powerful anti-magic zone. Mangar's wards grow stronger the deeper you go." },
|
||||
{ "x": 18, "y": 8, "type": "darkness", "text": "Supernatural darkness. Your torches sputter and die." },
|
||||
{ "x": 8, "y": 13, "type": "spinner", "text": "Mangar's maze spell is stronger here. The walls seem to breathe." },
|
||||
{ "x": 14, "y": 15, "type": "silence", "text": "Mangar's master silence spell. Even thoughts feel muffled." },
|
||||
{ "x": 5, "y": 17, "type": "trap", "text": "A magical compulsion forces you to walk into a wall!", "damage": "2d6" },
|
||||
{ "x": 20, "y": 12, "type": "message", "text": "Runes on the wall: 'The seven shall be freed when Mangar falls.'" },
|
||||
{ "x": 11, "y": 19, "type": "special_encounter", "text": "Demon servants of Mangar attack! They fight with hellish fury!", "encounter": "mangar_demons" },
|
||||
{ "x": 17, "y": 18, "type": "trap", "text": "The floor tiles rearrange themselves! Some are trapped!", "damage": "2d8" },
|
||||
{ "x": 2, "y": 5, "type": "darkness", "text": "The air here smells of brimstone and decay." },
|
||||
{ "x": 16, "y": 2, "type": "message", "text": "A summoning circle glows faintly. Mangar uses this to call reinforcements." }
|
||||
],
|
||||
"connections": [
|
||||
{ "from_x": 21, "from_y": 21, "to": "mangar_3", "type": "stairs_down" },
|
||||
{ "from_x": 0, "from_y": 0, "to": "mangar_1", "type": "stairs_up" }
|
||||
]
|
||||
}
|
||||
31
data/dungeons/mangar_3.json
Normal file
31
data/dungeons/mangar_3.json
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
{
|
||||
"id": "mangar_3",
|
||||
"name": "Mangar's Tower - Level 3",
|
||||
"dungeon": "mangar",
|
||||
"level": 3,
|
||||
"width": 22,
|
||||
"height": 22,
|
||||
"description": "The third level of Mangar's Tower. The most dangerous summoned creatures roam these halls. Only the strongest parties survive.",
|
||||
"encounter_level": 7,
|
||||
"special_squares": [
|
||||
{ "x": 0, "y": 0, "type": "stairs_up", "destination": "mangar_2", "label": "Return to Mangar's Tower Level 2" },
|
||||
{ "x": 21, "y": 21, "type": "stairs_down", "destination": "mangar_4", "label": "Descend to Mangar's Tower Level 4" },
|
||||
{ "x": 11, "y": 5, "type": "special_encounter", "text": "A Black Dragon! Its breath weapon could annihilate the party!", "encounter": "black_dragon" },
|
||||
{ "x": 5, "y": 3, "type": "special_encounter", "text": "A Demon Lord of Mangar's court stands before you!", "encounter": "demon_lord" },
|
||||
{ "x": 16, "y": 4, "type": "anti_magic", "text": "Mangar's inner wards. Magic is almost completely suppressed." },
|
||||
{ "x": 7, "y": 8, "type": "trap", "text": "Mangar's death trap! Poison, fire, and acid spray simultaneously!", "damage": "4d8" },
|
||||
{ "x": 14, "y": 9, "type": "darkness", "text": "Living darkness that actively resists light sources." },
|
||||
{ "x": 3, "y": 12, "type": "spinner", "text": "The maze spell here is permanent. Even mapping doesn't help." },
|
||||
{ "x": 18, "y": 13, "type": "silence", "text": "Mangar's supreme silence. The absence of sound is suffocating." },
|
||||
{ "x": 9, "y": 16, "type": "special_encounter", "text": "The Ancient Enemy! A being from beyond this world!", "encounter": "ancient_enemy" },
|
||||
{ "x": 20, "y": 17, "type": "trap", "text": "A dimensional rift opens! Chaotic energy tears at reality!", "damage": "3d10" },
|
||||
{ "x": 6, "y": 19, "type": "message", "text": "Mangar's throne room is close. The air crackles with power." },
|
||||
{ "x": 15, "y": 18, "type": "special_encounter", "text": "A Balrog! Whip of fire and shadow!", "encounter": "balrog" },
|
||||
{ "x": 2, "y": 15, "type": "trap", "text": " summoned elementals burst from the walls!", "damage": "3d6" },
|
||||
{ "x": 17, "y": 6, "type": "message", "text": "A treasury room - piles of gold and gems. A distraction or a reward?" }
|
||||
],
|
||||
"connections": [
|
||||
{ "from_x": 21, "from_y": 21, "to": "mangar_4", "type": "stairs_down" },
|
||||
{ "from_x": 0, "from_y": 0, "to": "mangar_2", "type": "stairs_up" }
|
||||
]
|
||||
}
|
||||
32
data/dungeons/mangar_4.json
Normal file
32
data/dungeons/mangar_4.json
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
{
|
||||
"id": "mangar_4",
|
||||
"name": "Mangar's Tower - Level 4",
|
||||
"dungeon": "mangar",
|
||||
"level": 4,
|
||||
"width": 22,
|
||||
"height": 22,
|
||||
"description": "The fourth level of Mangar's Tower. Mangar's most powerful lieutenants stand guard. The final approach to Mangar's sanctum.",
|
||||
"encounter_level": 8,
|
||||
"special_squares": [
|
||||
{ "x": 0, "y": 0, "type": "stairs_up", "destination": "mangar_3", "label": "Return to Mangar's Tower Level 3" },
|
||||
{ "x": 21, "y": 21, "type": "stairs_down", "destination": "mangar_5", "label": "Descend to Mangar's Throne Room" },
|
||||
{ "x": 10, "y": 4, "type": "special_encounter", "text": "An Archmage serves Mangar! A powerful spellcaster!", "encounter": "archmage" },
|
||||
{ "x": 5, "y": 6, "type": "special_encounter", "text": "A Lich! Undead master of necromancy serves Mangar!", "encounter": "lich" },
|
||||
{ "x": 16, "y": 3, "type": "anti_magic", "text": "Mangar's personal wards. Even the strongest spells are negated." },
|
||||
{ "x": 8, "y": 9, "type": "trap", "text": "Mangar's ultimate trap! Every element attacks at once!", "damage": "5d8" },
|
||||
{ "x": 14, "y": 8, "type": "darkness", "text": "Absolute magical darkness. Not even true seeing penetrates it." },
|
||||
{ "x": 3, "y": 12, "type": "spinner", "text": "The tower itself seems to rotate. You have no idea which way is forward." },
|
||||
{ "x": 18, "y": 11, "type": "silence", "text": "Mangar's god-tier silence spell. Reality itself goes quiet." },
|
||||
{ "x": 11, "y": 14, "type": "special_encounter", "text": "A Storm Giant loyal to Mangar hurls lightning bolts!", "encounter": "storm_giant" },
|
||||
{ "x": 6, "y": 17, "type": "trap", "text": "Mangar's personal curse afflicts you! Strength drains away.", "damage": "2d10" },
|
||||
{ "x": 19, "y": 16, "type": "special_encounter", "text": "A Death Denizen! An avatar of death itself!", "encounter": "death_denizen" },
|
||||
{ "x": 15, "y": 19, "type": "message", "text": "You feel Mangar's presence growing stronger with every step." },
|
||||
{ "x": 2, "y": 8, "type": "special_encounter", "text": "Mangar's elite guard - a formation of powerful undead knights!", "encounter": "death_knights" },
|
||||
{ "x": 20, "y": 5, "type": "trap", "text": "Temporal trap! You age 10 years in an instant!", "damage": "3d6" },
|
||||
{ "x": 13, "y": 18, "type": "message", "text": "The door to Mangar's throne room gleams with dark enchantments." }
|
||||
],
|
||||
"connections": [
|
||||
{ "from_x": 21, "from_y": 21, "to": "mangar_5", "type": "stairs_down" },
|
||||
{ "from_x": 0, "from_y": 0, "to": "mangar_3", "type": "stairs_up" }
|
||||
]
|
||||
}
|
||||
31
data/dungeons/mangar_5.json
Normal file
31
data/dungeons/mangar_5.json
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
{
|
||||
"id": "mangar_5",
|
||||
"name": "Mangar's Tower - Level 5 (Throne Room)",
|
||||
"dungeon": "mangar",
|
||||
"level": 5,
|
||||
"width": 22,
|
||||
"height": 22,
|
||||
"description": "Mangar's Throne Room. The final battle. Defeat Mangar the Dark to break the curse on Skara Brae and free the city from eternal winter.",
|
||||
"encounter_level": 8,
|
||||
"special_squares": [
|
||||
{ "x": 0, "y": 0, "type": "stairs_up", "destination": "mangar_4", "label": "Return to Mangar's Tower Level 4" },
|
||||
{ "x": 11, "y": 11, "type": "special_encounter", "text": "MANGAR THE DARK! The archmage who cursed Skara Brae sits upon his throne of bone and shadow!", "encounter": "mangar" },
|
||||
{ "x": 5, "y": 3, "type": "special_encounter", "text": "Mangar summons his Black Dragon to defend the throne!", "encounter": "mangar_black_dragon" },
|
||||
{ "x": 16, "y": 3, "type": "special_encounter", "text": "Mangar's Demon Lord bodyguard attacks!", "encounter": "mangar_demon_lord" },
|
||||
{ "x": 3, "y": 8, "type": "anti_magic", "text": "Mangar's absolute anti-magic field. Only the strongest magic can penetrate." },
|
||||
{ "x": 18, "y": 8, "type": "trap", "text": "Mangar casts Meteor Shower! Explosions rock the throne room!", "damage": "6d8" },
|
||||
{ "x": 9, "y": 6, "type": "darkness", "text": "Mangar plunges the room into supernatural darkness." },
|
||||
{ "x": 14, "y": 6, "type": "silence", "text": "Mangar's Word of Power silences all sound and song." },
|
||||
{ "x": 7, "y": 14, "type": "special_encounter", "text": "Mangar summons undead reinforcements!", "encounter": "mangar_undead" },
|
||||
{ "x": 16, "y": 14, "type": "trap", "text": "Mangar's Disintegrate spell targets the party!", "damage": "4d10" },
|
||||
{ "x": 11, "y": 3, "type": "message", "text": "Mangar's voice echoes: 'Fools! You dare challenge ME? I am eternal!'" },
|
||||
{ "x": 11, "y": 19, "type": "message", "text": "Victory! Mangar falls! The curse on Skara Brae begins to break. The snow melts..." },
|
||||
{ "x": 4, "y": 18, "type": "trap", "text": "Mangar's final spite - a death curse as he falls!", "damage": "5d8" },
|
||||
{ "x": 18, "y": 18, "type": "special_encounter", "text": "Mangar's Lich advisor makes a last stand!", "encounter": "mangar_lich" },
|
||||
{ "x": 8, "y": 11, "type": "message", "text": "Mangar's throne radiates power. Destroying it will break the curse forever." },
|
||||
{ "x": 14, "y": 11, "type": "message", "text": "The walls of the throne room are inscribed with the spell of eternal winter." }
|
||||
],
|
||||
"connections": [
|
||||
{ "from_x": 0, "from_y": 0, "to": "mangar_4", "type": "stairs_up" }
|
||||
]
|
||||
}
|
||||
32
data/dungeons/sewers_1.json
Normal file
32
data/dungeons/sewers_1.json
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
{
|
||||
"id": "sewers_1",
|
||||
"name": "Sewers - Level 1",
|
||||
"dungeon": "sewers",
|
||||
"level": 1,
|
||||
"width": 22,
|
||||
"height": 22,
|
||||
"description": "The upper sewers of Skara Brae. Foul water flows through channels cut into the stone. Goblins have made these tunnels their home.",
|
||||
"encounter_level": 2,
|
||||
"special_squares": [
|
||||
{ "x": 0, "y": 0, "type": "stairs_up", "destination": "skara_brae", "label": "Return to Skara Brae" },
|
||||
{ "x": 1, "y": 0, "type": "stairs_up", "destination": "cellar_1", "label": "Return to Wine Cellar" },
|
||||
{ "x": 0, "y": 21, "type": "stairs_down", "destination": "sewers_2", "label": "Descend to Sewers Level 2" },
|
||||
{ "x": 10, "y": 10, "type": "spinner", "text": "The current spins you around in the knee-deep water." },
|
||||
{ "x": 5, "y": 5, "type": "trap", "text": "You step into a drainage pit! The foul water is freezing.", "damage": "2d4" },
|
||||
{ "x": 15, "y": 5, "type": "trap", "text": "A jet of sewage sprays from a cracked pipe!", "damage": "1d6" },
|
||||
{ "x": 8, "y": 3, "type": "message", "text": "Goblin markings on the walls. 'MINE! GO AWAY!' written in Common." },
|
||||
{ "x": 18, "y": 8, "type": "darkness", "text": "The sewer tunnels here are unlit. You hear skittering in the dark." },
|
||||
{ "x": 3, "y": 12, "type": "special_encounter", "text": "A goblin patrol spots you and raises the alarm!", "encounter": "goblin_patrol" },
|
||||
{ "x": 12, "y": 15, "type": "anti_magic", "text": "A strange fungus grows on the walls. Your spells fizzle and fail." },
|
||||
{ "x": 7, "y": 18, "type": "message", "text": "The water here is deeper and flows faster. You hear a rumbling ahead." },
|
||||
{ "x": 20, "y": 12, "type": "trap", "text": "Rusty grating gives way beneath your feet!", "damage": "1d8" },
|
||||
{ "x": 16, "y": 17, "type": "silence", "text": "A dampening silence falls over this section. Bard songs are quenched." },
|
||||
{ "x": 4, "y": 8, "type": "message", "text": "Crude goblin traps line the corridor - spiked pits covered with leaves." },
|
||||
{ "x": 13, "y": 6, "type": "spinner", "text": "Three tunnels branch off. The acoustics make it impossible to tell direction." }
|
||||
],
|
||||
"connections": [
|
||||
{ "from_x": 0, "from_y": 21, "to": "sewers_2", "type": "stairs_down" },
|
||||
{ "from_x": 0, "from_y": 0, "to": "skara_brae", "type": "stairs_up" },
|
||||
{ "from_x": 1, "from_y": 0, "to": "cellar_1", "type": "stairs_up" }
|
||||
]
|
||||
}
|
||||
31
data/dungeons/sewers_2.json
Normal file
31
data/dungeons/sewers_2.json
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
{
|
||||
"id": "sewers_2",
|
||||
"name": "Sewers - Level 2",
|
||||
"dungeon": "sewers",
|
||||
"level": 2,
|
||||
"width": 22,
|
||||
"height": 22,
|
||||
"description": "The middle sewers. The water is deeper here and the goblins are better organized. Their chieftain lurks somewhere below.",
|
||||
"encounter_level": 2,
|
||||
"special_squares": [
|
||||
{ "x": 0, "y": 0, "type": "stairs_up", "destination": "sewers_1", "label": "Return to Sewers Level 1" },
|
||||
{ "x": 21, "y": 21, "type": "stairs_down", "destination": "sewers_3", "label": "Descend to Sewers Level 3" },
|
||||
{ "x": 10, "y": 2, "type": "trap", "text": "A goblin tripwire! You fall face-first into the muck.", "damage": "1d4" },
|
||||
{ "x": 6, "y": 6, "type": "spinner", "text": "The tunnels curve sharply. You lose your bearings." },
|
||||
{ "x": 15, "y": 4, "type": "darkness", "text": "No torches here. The darkness is absolute." },
|
||||
{ "x": 3, "y": 10, "type": "special_encounter", "text": "A goblin shaman chants in a side chamber!", "encounter": "goblin_shaman" },
|
||||
{ "x": 18, "y": 9, "type": "anti_magic", "text": "Glowing crystals embedded in the walls absorb magical energy." },
|
||||
{ "x": 8, "y": 14, "type": "trap", "text": "A poison gas trap! Green vapors fill the corridor.", "damage": "2d6" },
|
||||
{ "x": 14, "y": 16, "type": "message", "text": "A goblin lookout post. Empty now, but recently abandoned." },
|
||||
{ "x": 5, "y": 18, "type": "silence", "text": "The echoing water sounds suddenly cut off. Unnatural silence." },
|
||||
{ "x": 20, "y": 14, "type": "message", "text": "Graffiti: 'Wraith Lord Below - Turn Back' written in blood." },
|
||||
{ "x": 11, "y": 11, "type": "spinner", "text": "The water current swirls around your legs, disorienting you." },
|
||||
{ "x": 17, "y": 19, "type": "special_encounter", "text": "A goblin chieftain's bodyguard challenges you!", "encounter": "goblin_elite" },
|
||||
{ "x": 2, "y": 15, "type": "trap", "text": "Crossbow bolt fires from a hidden slot in the wall!", "damage": "1d8" },
|
||||
{ "x": 9, "y": 8, "type": "message", "text": "The stench is unbearable here. You retch but press on." }
|
||||
],
|
||||
"connections": [
|
||||
{ "from_x": 21, "from_y": 21, "to": "sewers_3", "type": "stairs_down" },
|
||||
{ "from_x": 0, "from_y": 0, "to": "sewers_1", "type": "stairs_up" }
|
||||
]
|
||||
}
|
||||
34
data/dungeons/sewers_3.json
Normal file
34
data/dungeons/sewers_3.json
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
{
|
||||
"id": "sewers_3",
|
||||
"name": "Sewers - Level 3",
|
||||
"dungeon": "sewers",
|
||||
"level": 3,
|
||||
"width": 22,
|
||||
"height": 22,
|
||||
"description": "The deepest sewers. The goblin chieftain rules from here, and passages branch to the Catacombs and Harkyn's Castle.",
|
||||
"encounter_level": 3,
|
||||
"special_squares": [
|
||||
{ "x": 0, "y": 0, "type": "stairs_up", "destination": "sewers_2", "label": "Return to Sewers Level 2" },
|
||||
{ "x": 21, "y": 0, "type": "stairs_down", "destination": "catacombs_1", "label": "Descend to Catacombs" },
|
||||
{ "x": 0, "y": 21, "type": "stairs_down", "destination": "harkyn_1", "label": "Secret passage to Harkyn's Castle" },
|
||||
{ "x": 11, "y": 11, "type": "special_encounter", "text": "The Goblin Chieftain rises from his throne of bones!", "encounter": "goblin_chieftain" },
|
||||
{ "x": 7, "y": 5, "type": "darkness", "text": "The only light comes from glowing fungal patches on the ceiling." },
|
||||
{ "x": 16, "y": 3, "type": "anti_magic", "text": "Dark energy radiates from a cracked altar. Magic is suppressed." },
|
||||
{ "x": 4, "y": 9, "type": "trap", "text": "A spiked pit opens beneath you!", "damage": "2d8" },
|
||||
{ "x": 14, "y": 8, "type": "spinner", "text": "The passages here form a confusing maze of identical corridors." },
|
||||
{ "x": 9, "y": 15, "type": "silence", "text": "Even the water runs silent here. An eerie, oppressive quiet." },
|
||||
{ "x": 19, "y": 14, "type": "trap", "text": "Poison darts shoot from the walls!", "damage": "2d4" },
|
||||
{ "x": 6, "y": 17, "type": "message", "text": "The goblin chieftain's treasure hoard - mostly worthless trinkets and a few gems." },
|
||||
{ "x": 12, "y": 18, "type": "special_encounter", "text": "Wraiths materialize from the shadows!", "encounter": "sewer_wraiths" },
|
||||
{ "x": 2, "y": 3, "type": "message", "text": "The walls here are older than the rest - smooth stone from the original construction." },
|
||||
{ "x": 17, "y": 6, "type": "darkness", "text": "A section of tunnel has collapsed. You must squeeze through the rubble." },
|
||||
{ "x": 20, "y": 19, "type": "message", "text": "A crude sign reads 'HARKYN'S PASSAGE' with an arrow pointing left." },
|
||||
{ "x": 15, "y": 20, "type": "trap", "text": "Swarm of sewer rats bites at your ankles!", "damage": "1d6" },
|
||||
{ "x": 8, "y": 11, "type": "spinner", "text": "Three-way intersection with identical corridors. You choose at random." }
|
||||
],
|
||||
"connections": [
|
||||
{ "from_x": 21, "from_y": 0, "to": "catacombs_1", "type": "stairs_down" },
|
||||
{ "from_x": 0, "from_y": 21, "to": "harkyn_1", "type": "stairs_down" },
|
||||
{ "from_x": 0, "from_y": 0, "to": "sewers_2", "type": "stairs_up" }
|
||||
]
|
||||
}
|
||||
297
data/dungeons/skara-brae.json
Normal file
297
data/dungeons/skara-brae.json
Normal file
|
|
@ -0,0 +1,297 @@
|
|||
{
|
||||
"id": "skara_brae",
|
||||
"name": "Skara Brae",
|
||||
"width": 30,
|
||||
"height": 30,
|
||||
"type": "overworld",
|
||||
"description": "The frozen city of Skara Brae, sealed by Mangar's curse. Once a thriving port, now buried under unnatural winter.",
|
||||
"locations": [
|
||||
{
|
||||
"id": "adventurers_guild",
|
||||
"name": "Adventurer's Guild",
|
||||
"code": "A",
|
||||
"x": 10,
|
||||
"y": 10,
|
||||
"type": "guild",
|
||||
"description": "Review Board - level up characters, review party status."
|
||||
},
|
||||
{
|
||||
"id": "roscoes_energy_emporium",
|
||||
"name": "Roscoe's Energy Emporium",
|
||||
"code": "R",
|
||||
"x": 14,
|
||||
"y": 8,
|
||||
"type": "spell_shop",
|
||||
"description": "Buy spell levels for 1000-20000 gold. Required to unlock higher tier spells."
|
||||
},
|
||||
{
|
||||
"id": "garths_equipment_shoppe",
|
||||
"name": "Garth's Equipment Shoppe",
|
||||
"code": "G",
|
||||
"x": 8,
|
||||
"y": 6,
|
||||
"type": "equipment_shop",
|
||||
"description": "Buy and sell weapons, armor, and accessories."
|
||||
},
|
||||
{
|
||||
"id": "scarlet_bard",
|
||||
"name": "Scarlet Bard",
|
||||
"code": "I",
|
||||
"x": 16,
|
||||
"y": 14,
|
||||
"type": "tavern",
|
||||
"description": "A tavern with a hidden wine cellar leading to the dungeons below."
|
||||
},
|
||||
{
|
||||
"id": "kylearans_tower",
|
||||
"name": "Kylearan's Amber Tower",
|
||||
"code": "K",
|
||||
"x": 18,
|
||||
"y": 18,
|
||||
"type": "dungeon_entrance",
|
||||
"description": "Entry to Kylearan's Tower dungeon. Blocked by guardians until late game."
|
||||
},
|
||||
{
|
||||
"id": "harkyn_castle",
|
||||
"name": "Harkyn's Castle",
|
||||
"code": "H",
|
||||
"x": 6,
|
||||
"y": 18,
|
||||
"type": "dungeon_entrance",
|
||||
"description": "Entry to Harkyn's Castle dungeon. A ruined castle on the edge of town."
|
||||
},
|
||||
{
|
||||
"id": "mangars_tower",
|
||||
"name": "Mangar's Tower",
|
||||
"code": "M",
|
||||
"x": 22,
|
||||
"y": 22,
|
||||
"type": "dungeon_entrance",
|
||||
"description": "Entry to Mangar's Tower dungeon. The source of the curse."
|
||||
},
|
||||
{
|
||||
"id": "sewers_entrance",
|
||||
"name": "Sewers Entrance",
|
||||
"code": "S",
|
||||
"x": 14,
|
||||
"y": 14,
|
||||
"type": "dungeon_entrance",
|
||||
"description": "Entry to the Sewers dungeon beneath the city streets."
|
||||
},
|
||||
{
|
||||
"id": "gran_plaza",
|
||||
"name": "Gran Plaza",
|
||||
"code": "GP",
|
||||
"x": 12,
|
||||
"y": 10,
|
||||
"type": "plaza",
|
||||
"description": "Central city plaza. A gathering place amid the desolation."
|
||||
},
|
||||
{
|
||||
"id": "temple_mad_god",
|
||||
"name": "Temple of Mad God",
|
||||
"code": "T-M",
|
||||
"x": 10,
|
||||
"y": 16,
|
||||
"type": "temple",
|
||||
"description": "Entry to the Catacombs dungeon. A dark temple to forgotten powers."
|
||||
},
|
||||
{
|
||||
"id": "temple_great_gods",
|
||||
"name": "Temple of Great Gods",
|
||||
"code": "T-1",
|
||||
"x": 4,
|
||||
"y": 12,
|
||||
"type": "temple",
|
||||
"description": "Temple offering basic healing services."
|
||||
},
|
||||
{
|
||||
"id": "temple_greater_gods",
|
||||
"name": "Temple of Greater Gods",
|
||||
"code": "T-2",
|
||||
"x": 4,
|
||||
"y": 14,
|
||||
"type": "temple",
|
||||
"description": "Temple offering healing services."
|
||||
},
|
||||
{
|
||||
"id": "temple_greatest_gods",
|
||||
"name": "Temple of Greatest Gods",
|
||||
"code": "T-3",
|
||||
"x": 4,
|
||||
"y": 16,
|
||||
"type": "temple",
|
||||
"description": "Temple offering more powerful healing services."
|
||||
},
|
||||
{
|
||||
"id": "temple_kiosk",
|
||||
"name": "Temple of Kiosk",
|
||||
"code": "T-4",
|
||||
"x": 20,
|
||||
"y": 20,
|
||||
"type": "temple",
|
||||
"description": "A small temple offering services."
|
||||
},
|
||||
{
|
||||
"id": "temple_thief",
|
||||
"name": "Thief Temple",
|
||||
"code": "T-5",
|
||||
"x": 20,
|
||||
"y": 22,
|
||||
"type": "temple",
|
||||
"description": "Temple offering rogue services - lock picking training and thief tools."
|
||||
},
|
||||
{
|
||||
"id": "temple_100_blessings",
|
||||
"name": "Temple of 100 Blessings",
|
||||
"code": "T-6",
|
||||
"x": 20,
|
||||
"y": 24,
|
||||
"type": "temple",
|
||||
"description": "Temple offering various blessing services."
|
||||
},
|
||||
{
|
||||
"id": "sinister_inn",
|
||||
"name": "Sinister Inn",
|
||||
"code": "I-1",
|
||||
"x": 2,
|
||||
"y": 22,
|
||||
"type": "inn",
|
||||
"description": "A rundown inn. Save your game and rest here."
|
||||
},
|
||||
{
|
||||
"id": "dragons_breath_inn",
|
||||
"name": "Dragon's Breath Inn",
|
||||
"code": "I-2",
|
||||
"x": 4,
|
||||
"y": 22,
|
||||
"type": "inn",
|
||||
"description": "An inn with a dragon motif. Save and rest."
|
||||
},
|
||||
{
|
||||
"id": "drawn_blade_inn",
|
||||
"name": "Drawn Blade Inn",
|
||||
"code": "I-3",
|
||||
"x": 6,
|
||||
"y": 22,
|
||||
"type": "inn",
|
||||
"description": "An inn favored by warriors. Save and rest."
|
||||
},
|
||||
{
|
||||
"id": "ask_y_mother",
|
||||
"name": "Ask Y-Mother",
|
||||
"code": "I-4",
|
||||
"x": 8,
|
||||
"y": 22,
|
||||
"type": "inn",
|
||||
"description": "A peculiar inn. Save and rest."
|
||||
},
|
||||
{
|
||||
"id": "archmage_inn",
|
||||
"name": "Archmage Inn",
|
||||
"code": "I-5",
|
||||
"x": 10,
|
||||
"y": 22,
|
||||
"type": "inn",
|
||||
"description": "An inn catering to magic users. Save and rest."
|
||||
},
|
||||
{
|
||||
"id": "skull_tavern",
|
||||
"name": "Skull Tavern",
|
||||
"code": "I-6",
|
||||
"x": 12,
|
||||
"y": 22,
|
||||
"type": "tavern",
|
||||
"description": "A tavern and drinking establishment."
|
||||
},
|
||||
{
|
||||
"id": "guardian_samurai",
|
||||
"name": "Guardian Samurai",
|
||||
"code": "S1",
|
||||
"x": 24,
|
||||
"y": 8,
|
||||
"type": "guardian",
|
||||
"description": "A fierce samurai guards this passage. Must be defeated to proceed."
|
||||
},
|
||||
{
|
||||
"id": "guardian_stone_giant",
|
||||
"name": "Guardian Stone Giant",
|
||||
"code": "S2",
|
||||
"x": 24,
|
||||
"y": 10,
|
||||
"type": "guardian",
|
||||
"description": "A massive stone giant blocks the way."
|
||||
},
|
||||
{
|
||||
"id": "guardian_stone_golem",
|
||||
"name": "Guardian Stone Golem",
|
||||
"code": "S3",
|
||||
"x": 24,
|
||||
"y": 12,
|
||||
"type": "guardian",
|
||||
"description": "A stone golem stands motionless until approached."
|
||||
},
|
||||
{
|
||||
"id": "guardian_grey_dragon",
|
||||
"name": "Guardian Grey Dragon",
|
||||
"code": "S4",
|
||||
"x": 24,
|
||||
"y": 14,
|
||||
"type": "guardian",
|
||||
"description": "A grey dragon perches atop a mound of treasure."
|
||||
},
|
||||
{
|
||||
"id": "guardian_ogre_lord",
|
||||
"name": "Guardian Ogre Lord",
|
||||
"code": "S5",
|
||||
"x": 24,
|
||||
"y": 16,
|
||||
"type": "guardian",
|
||||
"description": "An ogre lord commands lesser creatures at this checkpoint."
|
||||
},
|
||||
{
|
||||
"id": "guardian_golem",
|
||||
"name": "Guardian Golem",
|
||||
"code": "S6",
|
||||
"x": 24,
|
||||
"y": 18,
|
||||
"type": "guardian",
|
||||
"description": "A powerful golem guards the final approach to Mangar's domain."
|
||||
},
|
||||
{
|
||||
"id": "credits",
|
||||
"name": "Credits",
|
||||
"code": "creds",
|
||||
"x": 28,
|
||||
"y": 2,
|
||||
"type": "easter_egg",
|
||||
"description": "Fun credits easter egg."
|
||||
},
|
||||
{
|
||||
"id": "city_gate",
|
||||
"name": "City Gate",
|
||||
"code": "gate",
|
||||
"x": 0,
|
||||
"y": 14,
|
||||
"type": "exit",
|
||||
"description": "The main gate to Skara Brae, blocked by Mangar's snow drift."
|
||||
},
|
||||
{
|
||||
"id": "stable",
|
||||
"name": "Stable",
|
||||
"code": "stable",
|
||||
"x": 2,
|
||||
"y": 14,
|
||||
"type": "landmark",
|
||||
"description": "The city stable. The horses were eaten by creatures long ago."
|
||||
}
|
||||
],
|
||||
"connections": [
|
||||
{ "from": "scarlet_bard", "to": "cellar_1", "type": "stairs_down" },
|
||||
{ "from": "sewers_entrance", "to": "sewers_1", "type": "stairs_down" },
|
||||
{ "from": "temple_mad_god", "to": "catacombs_1", "type": "stairs_down" },
|
||||
{ "from": "harkyn_castle", "to": "harkyn_1", "type": "stairs_down" },
|
||||
{ "from": "kylearans_tower", "to": "kylearan_1", "type": "stairs_down" },
|
||||
{ "from": "mangars_tower", "to": "mangar_1", "type": "stairs_down" }
|
||||
]
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue