diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml new file mode 100644 index 0000000..d509c2c --- /dev/null +++ b/.gitea/workflows/build.yml @@ -0,0 +1,19 @@ +name: build +on: [push, workflow_dispatch] + +jobs: + build-test: + runs-on: docker + container: rust:1-bookworm + timeout-minutes: 15 + steps: + - name: Checkout + run: git clone --depth 1 ${{ github.server_url }}/${{ github.repository }}.git . + + - name: Build (rust/) + run: cargo build --quiet + working-directory: rust + + - name: Test (rust/) + run: cargo test --quiet + working-directory: rust diff --git a/data/adventures/zones.json b/data/adventures/zones.json new file mode 100644 index 0000000..d06764b --- /dev/null +++ b/data/adventures/zones.json @@ -0,0 +1,134 @@ +[ + { + "id": "skara_brae_streets", + "name": "Skara Brae Streets", + "min_level": 1, + "max_level": 2, + "nerve_cost": 3, + "description": "The darkened streets of Skara Brae are dangerous. Thugs and vermin lurk in every shadow.", + "encounters": [ + { "enemy_id": "thief", "weight": 4 }, + { "enemy_id": "kobold", "weight": 3 }, + { "enemy_id": "orc", "weight": 3 }, + { "enemy_id": "mad_dog", "weight": 2 }, + { "enemy_id": "wolf", "weight": 2 }, + { "enemy_id": "skeleton", "weight": 2 }, + { "enemy_id": "spider", "weight": 3 } + ] + }, + { + "id": "cellar", + "name": "The Cellar", + "min_level": 1, + "max_level": 2, + "nerve_cost": 5, + "description": "Beneath the Scarlet Bard tavern, a cellar teems with rats and creeping things.", + "encounters": [ + { "enemy_id": "kobold", "weight": 4 }, + { "enemy_id": "skeleton", "weight": 3 }, + { "enemy_id": "zombie", "weight": 2 }, + { "enemy_id": "spider", "weight": 3 }, + { "enemy_id": "gnome", "weight": 2 }, + { "enemy_id": "barbarian", "weight": 1 } + ] + }, + { + "id": "sewers_1", + "name": "Sewers — Upper", + "min_level": 2, + "max_level": 3, + "nerve_cost": 7, + "description": "The upper sewers wind beneath Skara Brae. Kobolds and half-orcs have claimed these tunnels.", + "encounters": [ + { "enemy_id": "half_orc", "weight": 4 }, + { "enemy_id": "hobgoblin", "weight": 3 }, + { "enemy_id": "mercenary", "weight": 3 }, + { "enemy_id": "swordsman", "weight": 3 }, + { "enemy_id": "zombie", "weight": 2 }, + { "enemy_id": "kobold", "weight": 2 } + ] + }, + { + "id": "sewers_2", + "name": "Sewers — Deep", + "min_level": 3, + "max_level": 4, + "nerve_cost": 10, + "description": "Deeper in the sewers, the water runs black and dangerous creatures gather.", + "encounters": [ + { "enemy_id": "conjurer_lv1", "weight": 2 }, + { "enemy_id": "magician_lv1", "weight": 2 }, + { "enemy_id": "werewolf", "weight": 3 }, + { "enemy_id": "ogre", "weight": 3 }, + { "enemy_id": "wight", "weight": 2 }, + { "enemy_id": "assassin", "weight": 2 }, + { "enemy_id": "jade_monk", "weight": 1 } + ] + }, + { + "id": "catacombs", + "name": "The Catacombs", + "min_level": 4, + "max_level": 5, + "nerve_cost": 12, + "description": "Ancient burial chambers where the dead stir and dark magic lingers.", + "encounters": [ + { "enemy_id": "wraith", "weight": 3 }, + { "enemy_id": "shadow", "weight": 3 }, + { "enemy_id": "berserker", "weight": 3 }, + { "enemy_id": "ogre_magician", "weight": 2 }, + { "enemy_id": "hydra", "weight": 1 }, + { "enemy_id": "stone_giant", "weight": 1 }, + { "enemy_id": "blue_dragon", "weight": 1 } + ] + }, + { + "id": "harkyns_castle", + "name": "Harkyn's Castle", + "min_level": 5, + "max_level": 7, + "nerve_cost": 15, + "description": "The dread Lord Harkyn's fortress. Powerful undead and elite guards patrol these halls.", + "encounters": [ + { "enemy_id": "vampire", "weight": 3 }, + { "enemy_id": "spectre", "weight": 3 }, + { "enemy_id": "lesser_demon", "weight": 2 }, + { "enemy_id": "red_dragon", "weight": 1 }, + { "enemy_id": "demon", "weight": 2 }, + { "enemy_id": "beholder", "weight": 1 }, + { "enemy_id": "titan", "weight": 1 } + ] + }, + { + "id": "kylearans_tower", + "name": "Kylearan's Tower", + "min_level": 7, + "max_level": 8, + "nerve_cost": 18, + "description": "The mad archmage Kylearan guards the final approach to Mangar. His tower is a gauntlet of summoned horrors.", + "encounters": [ + { "enemy_id": "master_wizard", "weight": 3 }, + { "enemy_id": "greater_demon", "weight": 2 }, + { "enemy_id": "vampire_lord", "weight": 2 }, + { "enemy_id": "jabberwock", "weight": 1 }, + { "enemy_id": "storm_giant", "weight": 2 }, + { "enemy_id": "soul_sucker", "weight": 2 } + ] + }, + { + "id": "mangars_tower", + "name": "Mangar's Tower", + "min_level": 9, + "max_level": 10, + "nerve_cost": 25, + "description": "The seat of Mangar the Dark's power. The most terrifying creatures in all of Skara Brae await within.", + "encounters": [ + { "enemy_id": "balrog", "weight": 3 }, + { "enemy_id": "black_dragon", "weight": 2 }, + { "enemy_id": "lich", "weight": 2 }, + { "enemy_id": "archmage", "weight": 3 }, + { "enemy_id": "demon_lord", "weight": 2 }, + { "enemy_id": "mangar", "weight": 1 } + ] + } +] diff --git a/data/crit-tables/combat.json b/data/crit-tables/combat.json new file mode 100644 index 0000000..57371f8 --- /dev/null +++ b/data/crit-tables/combat.json @@ -0,0 +1,104 @@ +{ + "slash": { + "A": { + "name": "Minor Slash", + "damage_multiplier": 1.5, + "stun_rounds": 0, + "bleed_per_round": 1, + "bleed_rounds": 1, + "effects": [] + }, + "B": { + "name": "Deep Slash", + "damage_multiplier": 2.0, + "stun_rounds": 1, + "bleed_per_round": 2, + "bleed_rounds": 2, + "effects": ["bruised"] + }, + "C": { + "name": "Severing Slash", + "damage_multiplier": 3.0, + "stun_rounds": 2, + "bleed_per_round": 3, + "bleed_rounds": 3, + "effects": ["crippled_arm"] + }, + "D": { + "name": "Lethal Slash", + "damage_multiplier": 5.0, + "stun_rounds": 3, + "bleed_per_round": 5, + "bleed_rounds": 5, + "effects": ["severed_limb", "instant_kill"] + } + }, + "crush": { + "A": { + "name": "Light Crush", + "damage_multiplier": 1.5, + "stun_rounds": 1, + "bleed_per_round": 0, + "bleed_rounds": 0, + "effects": ["bruised"] + }, + "B": { + "name": "Heavy Crush", + "damage_multiplier": 2.0, + "stun_rounds": 2, + "bleed_per_round": 0, + "bleed_rounds": 0, + "effects": ["bruised", "cracked_rib"] + }, + "C": { + "name": "Crushing Blow", + "damage_multiplier": 3.5, + "stun_rounds": 3, + "bleed_per_round": 1, + "bleed_rounds": 2, + "effects": ["broken_bone"] + }, + "D": { + "name": "Devastating Crush", + "damage_multiplier": 5.0, + "stun_rounds": 4, + "bleed_per_round": 2, + "bleed_rounds": 3, + "effects": ["crushed_skull", "instant_kill"] + } + }, + "puncture": { + "A": { + "name": "Light Pierce", + "damage_multiplier": 1.5, + "stun_rounds": 0, + "bleed_per_round": 1, + "bleed_rounds": 2, + "effects": [] + }, + "B": { + "name": "Deep Pierce", + "damage_multiplier": 2.0, + "stun_rounds": 0, + "bleed_per_round": 2, + "bleed_rounds": 3, + "effects": ["punctured_lung"] + }, + "C": { + "name": "Impale", + "damage_multiplier": 3.5, + "stun_rounds": 1, + "bleed_per_round": 4, + "bleed_rounds": 4, + "effects": ["organ_damage"] + }, + "D": { + "name": "Lethal Pierce", + "damage_multiplier": 5.0, + "stun_rounds": 1, + "bleed_per_round": 6, + "bleed_rounds": 5, + "effects": ["heart_pierced", "instant_kill"] + } + } +} diff --git a/data/dungeons/catacombs_1.json b/data/dungeons/catacombs_1.json new file mode 100644 index 0000000..9f928b1 --- /dev/null +++ b/data/dungeons/catacombs_1.json @@ -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" } + ] +} diff --git a/data/dungeons/catacombs_2.json b/data/dungeons/catacombs_2.json new file mode 100644 index 0000000..0629f41 --- /dev/null +++ b/data/dungeons/catacombs_2.json @@ -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" } + ] +} diff --git a/data/dungeons/catacombs_3.json b/data/dungeons/catacombs_3.json new file mode 100644 index 0000000..b82395a --- /dev/null +++ b/data/dungeons/catacombs_3.json @@ -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" } + ] +} diff --git a/data/dungeons/cellar_1.json b/data/dungeons/cellar_1.json new file mode 100644 index 0000000..784cbb2 --- /dev/null +++ b/data/dungeons/cellar_1.json @@ -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" } + ] +} diff --git a/data/dungeons/harkyn_1.json b/data/dungeons/harkyn_1.json new file mode 100644 index 0000000..70fa683 --- /dev/null +++ b/data/dungeons/harkyn_1.json @@ -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" } + ] +} diff --git a/data/dungeons/harkyn_2.json b/data/dungeons/harkyn_2.json new file mode 100644 index 0000000..64de9a3 --- /dev/null +++ b/data/dungeons/harkyn_2.json @@ -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" } + ] +} diff --git a/data/dungeons/harkyn_3.json b/data/dungeons/harkyn_3.json new file mode 100644 index 0000000..b61df02 --- /dev/null +++ b/data/dungeons/harkyn_3.json @@ -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" } + ] +} diff --git a/data/dungeons/kylearan_1.json b/data/dungeons/kylearan_1.json new file mode 100644 index 0000000..66db546 --- /dev/null +++ b/data/dungeons/kylearan_1.json @@ -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" } + ] +} diff --git a/data/dungeons/mangar_1.json b/data/dungeons/mangar_1.json new file mode 100644 index 0000000..df2cc81 --- /dev/null +++ b/data/dungeons/mangar_1.json @@ -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" } + ] +} diff --git a/data/dungeons/mangar_2.json b/data/dungeons/mangar_2.json new file mode 100644 index 0000000..90d8f06 --- /dev/null +++ b/data/dungeons/mangar_2.json @@ -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" } + ] +} diff --git a/data/dungeons/mangar_3.json b/data/dungeons/mangar_3.json new file mode 100644 index 0000000..df3dfc5 --- /dev/null +++ b/data/dungeons/mangar_3.json @@ -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" } + ] +} diff --git a/data/dungeons/mangar_4.json b/data/dungeons/mangar_4.json new file mode 100644 index 0000000..4e86282 --- /dev/null +++ b/data/dungeons/mangar_4.json @@ -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" } + ] +} diff --git a/data/dungeons/mangar_5.json b/data/dungeons/mangar_5.json new file mode 100644 index 0000000..dbc777f --- /dev/null +++ b/data/dungeons/mangar_5.json @@ -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" } + ] +} diff --git a/data/dungeons/sewers_1.json b/data/dungeons/sewers_1.json new file mode 100644 index 0000000..678eccd --- /dev/null +++ b/data/dungeons/sewers_1.json @@ -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" } + ] +} diff --git a/data/dungeons/sewers_2.json b/data/dungeons/sewers_2.json new file mode 100644 index 0000000..e0b715e --- /dev/null +++ b/data/dungeons/sewers_2.json @@ -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" } + ] +} diff --git a/data/dungeons/sewers_3.json b/data/dungeons/sewers_3.json new file mode 100644 index 0000000..353109c --- /dev/null +++ b/data/dungeons/sewers_3.json @@ -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" } + ] +} diff --git a/data/dungeons/skara-brae.json b/data/dungeons/skara-brae.json new file mode 100644 index 0000000..d5f7585 --- /dev/null +++ b/data/dungeons/skara-brae.json @@ -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" } + ] +} diff --git a/data/enemies.json b/data/enemies.json new file mode 100644 index 0000000..186dcb9 --- /dev/null +++ b/data/enemies.json @@ -0,0 +1,2123 @@ +[ + { + "id": "kobold", + "name": "Kobold", + "level": 1, + "stats": { "strength": 11, "intelligence": 3, "dexterity": 6, "constitution": 9, "luck": 4 }, + "hp": 7, + "attack_type": "slash", + "damage": 1, + "defense": 0, + "xp": 5, + "gold_min": 1, + "gold_max": 8, + "loot": [ + { "item_id": "dagger", "chance": 0.10 } + ], + "description": "A small, scaly humanoid that attacks in packs with rusty blades." + }, + { + "id": "hobbit", + "name": "Hobbit", + "level": 1, + "stats": { "strength": 7, "intelligence": 4, "dexterity": 11, "constitution": 4, "luck": 8 }, + "hp": 9, + "attack_type": "slash", + "damage": 1, + "defense": 0, + "xp": 6, + "gold_min": 1, + "gold_max": 8, + "loot": [ + { "item_id": "mandolin", "chance": 0.08 } + ], + "description": "A diminutive halfling driven mad by Mangar's curse, wielding a kitchen knife." + }, + { + "id": "gnome", + "name": "Gnome", + "level": 1, + "stats": { "strength": 11, "intelligence": 3, "dexterity": 6, "constitution": 9, "luck": 4 }, + "hp": 9, + "attack_type": "crush", + "damage": 2, + "defense": 1, + "xp": 7, + "gold_min": 1, + "gold_max": 8, + "loot": [ + { "item_id": "torch", "chance": 0.10 } + ], + "description": "A subterranean gnome with a heavy club and bad intentions." + }, + { + "id": "dwarf", + "name": "Dwarf", + "level": 1, + "stats": { "strength": 11, "intelligence": 4, "dexterity": 7, "constitution": 8, "luck": 4 }, + "hp": 13, + "attack_type": "slash", + "damage": 2, + "defense": 1, + "xp": 8, + "gold_min": 1, + "gold_max": 8, + "loot": [ + { "item_id": "war_axe", "chance": 0.08 }, + { "item_id": "helm", "chance": 0.05 } + ], + "description": "A stocky dwarf warrior, axe in hand, defending territory long since lost." + }, + { + "id": "thief", + "name": "Thief", + "level": 1, + "stats": { "strength": 7, "intelligence": 4, "dexterity": 11, "constitution": 4, "luck": 8 }, + "hp": 9, + "attack_type": "puncture", + "damage": 2, + "defense": 2, + "xp": 8, + "gold_min": 1, + "gold_max": 8, + "loot": [ + { "item_id": "short_sword", "chance": 0.10 }, + { "item_id": "leather_gloves", "chance": 0.08 } + ], + "description": "A cutpurse lurking in the cellar shadows, dagger drawn." + }, + { + "id": "conjurer_lv1", + "name": "Conjurer I", + "level": 1, + "stats": { "strength": 4, "intelligence": 11, "dexterity": 7, "constitution": 7, "luck": 5 }, + "hp": 9, + "attack_type": "crush", + "damage": 1, + "defense": 1, + "xp": 9, + "gold_min": 1, + "gold_max": 8, + "loot": [ + { "item_id": "staff", "chance": 0.10 }, + { "item_id": "robes", "chance": 0.08 } + ], + "description": "A novice conjurer muttering incantations, barely in control of minor magic." + }, + { + "id": "magician_lv1", + "name": "Magician I", + "level": 1, + "stats": { "strength": 4, "intelligence": 11, "dexterity": 7, "constitution": 7, "luck": 5 }, + "hp": 9, + "attack_type": "crush", + "damage": 1, + "defense": 1, + "xp": 10, + "gold_min": 1, + "gold_max": 8, + "loot": [ + { "item_id": "staff", "chance": 0.10 }, + { "item_id": "robes", "chance": 0.08 } + ], + "description": "A weak magician hurling sparks and cantrips from the back rank." + }, + { + "id": "orc", + "name": "Orc", + "level": 1, + "stats": { "strength": 11, "intelligence": 4, "dexterity": 7, "constitution": 8, "luck": 4 }, + "hp": 13, + "attack_type": "slash", + "damage": 3, + "defense": 3, + "xp": 10, + "gold_min": 1, + "gold_max": 8, + "loot": [ + { "item_id": "mace", "chance": 0.08 }, + { "item_id": "leather_armor", "chance": 0.05 } + ], + "description": "A green-skinned orc brandishing a chipped blade with savage glee." + }, + { + "id": "skeleton", + "name": "Skeleton", + "level": 1, + "stats": { "strength": 8, "intelligence": 7, "dexterity": 4, "constitution": 8, "luck": 4 }, + "hp": 15, + "attack_type": "slash", + "damage": 3, + "defense": 4, + "xp": 10, + "gold_min": 1, + "gold_max": 8, + "loot": [ + { "item_id": "short_sword", "chance": 0.08 }, + { "item_id": "buckler", "chance": 0.05 } + ], + "description": "Bones wired together by necromancy, rattling forward with a rusted blade." + }, + { + "id": "spider", + "name": "Spider", + "level": 1, + "stats": { "strength": 11, "intelligence": 3, "dexterity": 6, "constitution": 9, "luck": 4 }, + "hp": 11, + "attack_type": "puncture", + "damage": 3, + "defense": 4, + "xp": 12, + "gold_min": 1, + "gold_max": 8, + "loot": [ + { "item_id": "torch", "chance": 0.10 } + ], + "description": "A giant cellar spider, mandibles dripping with venom." + }, + { + "id": "mad_dog", + "name": "Mad Dog", + "level": 1, + "stats": { "strength": 11, "intelligence": 3, "dexterity": 6, "constitution": 9, "luck": 4 }, + "hp": 11, + "attack_type": "slash", + "damage": 2, + "defense": 3, + "xp": 15, + "gold_min": 1, + "gold_max": 8, + "loot": [], + "description": "A mangy cur driven rabid by the curse upon Skara Brae." + }, + { + "id": "barbarian", + "name": "Barbarian", + "level": 1, + "stats": { "strength": 11, "intelligence": 4, "dexterity": 7, "constitution": 8, "luck": 4 }, + "hp": 17, + "attack_type": "slash", + "damage": 4, + "defense": 4, + "xp": 18, + "gold_min": 1, + "gold_max": 8, + "loot": [ + { "item_id": "broadsword", "chance": 0.05 }, + { "item_id": "helm", "chance": 0.05 } + ], + "description": "A wild northman howling battle cries, greatsword raised high." + }, + { + "id": "nomad", + "name": "Nomad", + "level": 1, + "stats": { "strength": 11, "intelligence": 4, "dexterity": 7, "constitution": 8, "luck": 4 }, + "hp": 15, + "attack_type": "slash", + "damage": 3, + "defense": 4, + "xp": 11, + "gold_min": 1, + "gold_max": 8, + "loot": [ + { "item_id": "short_sword", "chance": 0.08 }, + { "item_id": "leather_armor", "chance": 0.05 } + ], + "description": "A desert wanderer trapped in Skara Brae, fighting for survival." + }, + { + "id": "wolf", + "name": "Wolf", + "level": 1, + "stats": { "strength": 11, "intelligence": 3, "dexterity": 6, "constitution": 9, "luck": 4 }, + "hp": 17, + "attack_type": "puncture", + "damage": 4, + "defense": 4, + "xp": 22, + "gold_min": 1, + "gold_max": 8, + "loot": [], + "description": "A large gray wolf with burning eyes, hunting in the cellar darkness." + }, + { + "id": "half_orc", + "name": "Half-Orc", + "level": 2, + "stats": { "strength": 14, "intelligence": 5, "dexterity": 9, "constitution": 10, "luck": 5 }, + "hp": 19, + "attack_type": "slash", + "damage": 4, + "defense": 5, + "xp": 20, + "gold_min": 2, + "gold_max": 15, + "loot": [ + { "item_id": "broadsword", "chance": 0.08 }, + { "item_id": "chain_mail", "chance": 0.05 } + ], + "description": "A hulking half-breed with tusks and a chip on its shoulder." + }, + { + "id": "swordsman", + "name": "Swordsman", + "level": 2, + "stats": { "strength": 14, "intelligence": 5, "dexterity": 9, "constitution": 10, "luck": 5 }, + "hp": 19, + "attack_type": "slash", + "damage": 4, + "defense": 4, + "xp": 20, + "gold_min": 2, + "gold_max": 15, + "loot": [ + { "item_id": "broadsword", "chance": 0.08 }, + { "item_id": "tower_shield", "chance": 0.05 } + ], + "description": "A trained sellsword plying a deadly trade in the sewers." + }, + { + "id": "mercenary", + "name": "Mercenary", + "level": 2, + "stats": { "strength": 14, "intelligence": 5, "dexterity": 9, "constitution": 10, "luck": 5 }, + "hp": 15, + "attack_type": "slash", + "damage": 3, + "defense": 5, + "xp": 16, + "gold_min": 2, + "gold_max": 15, + "loot": [ + { "item_id": "war_axe", "chance": 0.08 }, + { "item_id": "chain_mail", "chance": 0.05 } + ], + "description": "A battle-scarred fighter who serves anyone with enough coin." + }, + { + "id": "hobgoblin", + "name": "Hobgoblin", + "level": 2, + "stats": { "strength": 14, "intelligence": 4, "dexterity": 8, "constitution": 11, "luck": 4 }, + "hp": 11, + "attack_type": "slash", + "damage": 2, + "defense": 2, + "xp": 9, + "gold_min": 2, + "gold_max": 15, + "loot": [ + { "item_id": "mace", "chance": 0.10 }, + { "item_id": "leather_armor", "chance": 0.08 } + ], + "description": "A larger, meaner cousin of the goblin with rusted armor and a grudge." + }, + { + "id": "zombie", + "name": "Zombie", + "level": 2, + "stats": { "strength": 10, "intelligence": 9, "dexterity": 5, "constitution": 10, "luck": 4 }, + "hp": 19, + "attack_type": "crush", + "damage": 5, + "defense": 5, + "xp": 25, + "gold_min": 2, + "gold_max": 15, + "loot": [], + "description": "A reanimated corpse shambling forward with unnatural strength." + }, + { + "id": "jade_monk", + "name": "Jade Monk", + "level": 2, + "stats": { "strength": 9, "intelligence": 8, "dexterity": 10, "constitution": 9, "luck": 6 }, + "hp": 9, + "attack_type": "crush", + "damage": 5, + "defense": 3, + "xp": 20, + "gold_min": 2, + "gold_max": 15, + "loot": [ + { "item_id": "flute", "chance": 0.05 } + ], + "description": "A martial artist clad in jade-green robes, fists like iron." + }, + { + "id": "conjurer_lv2", + "name": "Conjurer II", + "level": 3, + "stats": { "strength": 6, "intelligence": 17, "dexterity": 11, "constitution": 11, "luck": 7 }, + "hp": 9, + "attack_type": "crush", + "damage": 3, + "defense": 3, + "xp": 25, + "gold_min": 5, + "gold_max": 30, + "loot": [ + { "item_id": "staff", "chance": 0.08 }, + { "item_id": "robes", "chance": 0.05 } + ], + "description": "A journeyman conjurer summoning minor elementals to do its bidding." + }, + { + "id": "magician_lv2", + "name": "Magician II", + "level": 3, + "stats": { "strength": 6, "intelligence": 17, "dexterity": 11, "constitution": 11, "luck": 7 }, + "hp": 9, + "attack_type": "crush", + "damage": 3, + "defense": 3, + "xp": 25, + "gold_min": 5, + "gold_max": 30, + "loot": [ + { "item_id": "staff", "chance": 0.08 }, + { "item_id": "robes", "chance": 0.05 } + ], + "description": "A mid-ranking magician with a repertoire of dangerous spells." + }, + { + "id": "sorcerer_lv1", + "name": "Sorcerer I", + "level": 3, + "stats": { "strength": 6, "intelligence": 17, "dexterity": 11, "constitution": 11, "luck": 7 }, + "hp": 9, + "attack_type": "crush", + "damage": 3, + "defense": 3, + "xp": 25, + "gold_min": 5, + "gold_max": 30, + "loot": [ + { "item_id": "admt_dagger", "chance": 0.05 }, + { "item_id": "shield_ring", "chance": 0.05 } + ], + "description": "A sorcerer delving into dark arts, eyes alight with arcane fire." + }, + { + "id": "wizard_lv1", + "name": "Wizard I", + "level": 3, + "stats": { "strength": 6, "intelligence": 17, "dexterity": 11, "constitution": 11, "luck": 7 }, + "hp": 9, + "attack_type": "crush", + "damage": 3, + "defense": 3, + "xp": 30, + "gold_min": 5, + "gold_max": 30, + "loot": [ + { "item_id": "admt_dagger", "chance": 0.08 }, + { "item_id": "shield_ring", "chance": 0.05 } + ], + "description": "A wizard of some accomplishment, channeling elemental forces." + }, + { + "id": "black_widow", + "name": "Black Widow", + "level": 3, + "stats": { "strength": 17, "intelligence": 5, "dexterity": 10, "constitution": 13, "luck": 5 }, + "hp": 17, + "attack_type": "puncture", + "damage": 5, + "defense": 5, + "xp": 50, + "gold_min": 5, + "gold_max": 30, + "loot": [ + { "item_id": "torch", "chance": 0.05 } + ], + "description": "A massive spider with a glossy black carapace and deadly venom." + }, + { + "id": "assassin", + "name": "Assassin", + "level": 3, + "stats": { "strength": 11, "intelligence": 6, "dexterity": 17, "constitution": 6, "luck": 12 }, + "hp": 17, + "attack_type": "puncture", + "damage": 4, + "defense": 6, + "xp": 50, + "gold_min": 5, + "gold_max": 30, + "loot": [ + { "item_id": "mthr_dagger", "chance": 0.08 }, + { "item_id": "mthr_gloves", "chance": 0.05 } + ], + "description": "A silent killer in dark leather, striking from the shadows." + }, + { + "id": "ogre", + "name": "Ogre", + "level": 3, + "stats": { "strength": 19, "intelligence": 5, "dexterity": 5, "constitution": 14, "luck": 4 }, + "hp": 23, + "attack_type": "crush", + "damage": 6, + "defense": 6, + "xp": 50, + "gold_min": 5, + "gold_max": 30, + "loot": [ + { "item_id": "mthr_axe", "chance": 0.05 }, + { "item_id": "mthr_helm", "chance": 0.05 } + ], + "description": "A hulking brute with tree-trunk arms and a stone club." + }, + { + "id": "samurai", + "name": "Samurai", + "level": 3, + "stats": { "strength": 17, "intelligence": 6, "dexterity": 11, "constitution": 12, "luck": 6 }, + "hp": 19, + "attack_type": "slash", + "damage": 5, + "defense": 6, + "xp": 30, + "gold_min": 5, + "gold_max": 30, + "loot": [ + { "item_id": "mthr_sword", "chance": 0.08 }, + { "item_id": "samurai_fgn", "chance": 0.03 } + ], + "description": "An armored warrior from distant lands, katana gleaming." + }, + { + "id": "werewolf", + "name": "Werewolf", + "level": 3, + "stats": { "strength": 17, "intelligence": 5, "dexterity": 10, "constitution": 13, "luck": 5 }, + "hp": 19, + "attack_type": "slash", + "damage": 5, + "defense": 5, + "xp": 50, + "gold_min": 5, + "gold_max": 30, + "loot": [], + "description": "A humanoid beast mid-transformation, fur matted with blood." + }, + { + "id": "wight", + "name": "Wight", + "level": 3, + "stats": { "strength": 12, "intelligence": 11, "dexterity": 6, "constitution": 12, "luck": 5 }, + "hp": 21, + "attack_type": "crush", + "damage": 5, + "defense": 6, + "xp": 50, + "gold_min": 5, + "gold_max": 30, + "loot": [ + { "item_id": "mthr_mace", "chance": 0.05 } + ], + "description": "An intelligent undead that withers the living with its touch." + }, + { + "id": "statue", + "name": "Statue", + "level": 3, + "stats": { "strength": 14, "intelligence": 8, "dexterity": 3, "constitution": 14, "luck": 2 }, + "hp": 23, + "attack_type": "crush", + "damage": 5, + "defense": 6, + "xp": 50, + "gold_min": 5, + "gold_max": 30, + "loot": [ + { "item_id": "mthr_shield", "chance": 0.05 } + ], + "description": "A stone golem animated by dark magic, fists like sledgehammers." + }, + { + "id": "bladesman", + "name": "Bladesman", + "level": 3, + "stats": { "strength": 17, "intelligence": 6, "dexterity": 11, "constitution": 12, "luck": 6 }, + "hp": 27, + "attack_type": "slash", + "damage": 6, + "defense": 6, + "xp": 50, + "gold_min": 5, + "gold_max": 30, + "loot": [ + { "item_id": "mthr_sword", "chance": 0.08 }, + { "item_id": "mthr_shield", "chance": 0.05 } + ], + "description": "A master swordsman whose blade moves faster than the eye can follow." + }, + { + "id": "goblin_lord", + "name": "Goblin Lord", + "level": 3, + "stats": { "strength": 17, "intelligence": 6, "dexterity": 11, "constitution": 12, "luck": 6 }, + "hp": 27, + "attack_type": "slash", + "damage": 6, + "defense": 7, + "xp": 55, + "gold_min": 5, + "gold_max": 30, + "loot": [ + { "item_id": "mthr_axe", "chance": 0.05 }, + { "item_id": "scale_mail", "chance": 0.05 } + ], + "description": "The chieftain of the goblin horde, armored in stolen plates." + }, + { + "id": "doppleganger", + "name": "Doppelganger", + "level": 3, + "stats": { "strength": 11, "intelligence": 6, "dexterity": 17, "constitution": 6, "luck": 12 }, + "hp": 23, + "attack_type": "slash", + "damage": 7, + "defense": 7, + "xp": 70, + "gold_min": 5, + "gold_max": 30, + "loot": [ + { "item_id": "mthr_sword", "chance": 0.05 }, + { "item_id": "elf_cloak", "chance": 0.05 } + ], + "description": "A shape-shifter that mimics its victims perfectly before striking." + }, + { + "id": "scarlet_monk", + "name": "Scarlet Monk", + "level": 3, + "stats": { "strength": 11, "intelligence": 10, "dexterity": 12, "constitution": 11, "luck": 8 }, + "hp": 19, + "attack_type": "crush", + "damage": 8, + "defense": 6, + "xp": 70, + "gold_min": 5, + "gold_max": 30, + "loot": [ + { "item_id": "fins_flute", "chance": 0.05 }, + { "item_id": "bracers_6", "chance": 0.05 } + ], + "description": "A monk in crimson robes whose martial strikes land with deadly precision." + }, + { + "id": "ninja", + "name": "Ninja", + "level": 3, + "stats": { "strength": 11, "intelligence": 6, "dexterity": 17, "constitution": 6, "luck": 12 }, + "hp": 23, + "attack_type": "slash", + "damage": 7, + "defense": 4, + "xp": 65, + "gold_min": 5, + "gold_max": 30, + "loot": [ + { "item_id": "mthr_dagger", "chance": 0.08 }, + { "item_id": "mthr_gloves", "chance": 0.05 } + ], + "description": "A shadow assassin armed with throwing stars and poisoned blades." + }, + { + "id": "master_thief", + "name": "Master Thief", + "level": 3, + "stats": { "strength": 11, "intelligence": 6, "dexterity": 17, "constitution": 6, "luck": 12 }, + "hp": 25, + "attack_type": "puncture", + "damage": 5, + "defense": 5, + "xp": 55, + "gold_min": 5, + "gold_max": 30, + "loot": [ + { "item_id": "mthr_dagger", "chance": 0.05 }, + { "item_id": "leather_gloves", "chance": 0.08 } + ], + "description": "A legendary burglar whose fingers are faster than thought." + }, + { + "id": "spinner", + "name": "Spinner", + "level": 3, + "stats": { "strength": 17, "intelligence": 5, "dexterity": 10, "constitution": 13, "luck": 5 }, + "hp": 27, + "attack_type": "puncture", + "damage": 7, + "defense": 4, + "xp": 65, + "gold_min": 5, + "gold_max": 30, + "loot": [], + "description": "A massive web-spinning arachnid whose venom paralyzes its prey." + }, + { + "id": "conjurer_lv3", + "name": "Conjurer III", + "level": 4, + "stats": { "strength": 7, "intelligence": 20, "dexterity": 13, "constitution": 13, "luck": 8 }, + "hp": 17, + "attack_type": "crush", + "damage": 5, + "defense": 5, + "xp": 55, + "gold_min": 10, + "gold_max": 50, + "loot": [ + { "item_id": "admt_dagger", "chance": 0.05 }, + { "item_id": "robes", "chance": 0.05 } + ], + "description": "An experienced conjurer commanding powerful summoned creatures." + }, + { + "id": "magician_lv3", + "name": "Magician III", + "level": 4, + "stats": { "strength": 7, "intelligence": 20, "dexterity": 13, "constitution": 13, "luck": 8 }, + "hp": 17, + "attack_type": "crush", + "damage": 5, + "defense": 5, + "xp": 55, + "gold_min": 10, + "gold_max": 50, + "loot": [ + { "item_id": "admt_dagger", "chance": 0.05 }, + { "item_id": "robes", "chance": 0.05 } + ], + "description": "A seasoned magician wielding destructive evocations." + }, + { + "id": "sorcerer_lv2", + "name": "Sorcerer II", + "level": 4, + "stats": { "strength": 7, "intelligence": 20, "dexterity": 13, "constitution": 13, "luck": 8 }, + "hp": 17, + "attack_type": "crush", + "damage": 5, + "defense": 5, + "xp": 65, + "gold_min": 10, + "gold_max": 50, + "loot": [ + { "item_id": "admt_mace", "chance": 0.05 }, + { "item_id": "shield_ring", "chance": 0.05 } + ], + "description": "A sorcerer of growing power, probing the boundaries of dark magic." + }, + { + "id": "wizard_lv2", + "name": "Wizard II", + "level": 4, + "stats": { "strength": 7, "intelligence": 20, "dexterity": 13, "constitution": 13, "luck": 8 }, + "hp": 17, + "attack_type": "crush", + "damage": 5, + "defense": 5, + "xp": 65, + "gold_min": 10, + "gold_max": 50, + "loot": [ + { "item_id": "admt_sword", "chance": 0.05 }, + { "item_id": "admt_shield", "chance": 0.05 } + ], + "description": "A formidable wizard whose spells can level entire corridors." + }, + { + "id": "jackalwere", + "name": "Jackalwere", + "level": 4, + "stats": { "strength": 22, "intelligence": 6, "dexterity": 12, "constitution": 15, "luck": 6 }, + "hp": 29, + "attack_type": "slash", + "damage": 8, + "defense": 8, + "xp": 80, + "gold_min": 10, + "gold_max": 50, + "loot": [], + "description": "A shapeshifting canine horror that lures prey with deceptive appearances." + }, + { + "id": "blue_dragon", + "name": "Blue Dragon", + "level": 4, + "stats": { "strength": 22, "intelligence": 15, "dexterity": 11, "constitution": 16, "luck": 6 }, + "hp": 37, + "attack_type": "crush", + "damage": 9, + "defense": 9, + "xp": 80, + "gold_min": 10, + "gold_max": 50, + "loot": [ + { "item_id": "dragon_fgn", "chance": 0.04 }, + { "item_id": "dragonshield", "chance": 0.03 } + ], + "description": "A wyrm of crackling lightning, scales the color of a thunderhead." + }, + { + "id": "stone_giant", + "name": "Stone Giant", + "level": 4, + "stats": { "strength": 22, "intelligence": 6, "dexterity": 6, "constitution": 16, "luck": 6 }, + "hp": 33, + "attack_type": "crush", + "damage": 9, + "defense": 7, + "xp": 70, + "gold_min": 10, + "gold_max": 50, + "loot": [ + { "item_id": "giant_fgn", "chance": 0.04 } + ], + "description": "A colossal humanoid of living rock, each step shaking the floor." + }, + { + "id": "stone_elemental", + "name": "Stone Elemental", + "level": 4, + "stats": { "strength": 14, "intelligence": 13, "dexterity": 7, "constitution": 14, "luck": 6 }, + "hp": 33, + "attack_type": "crush", + "damage": 8, + "defense": 8, + "xp": 80, + "gold_min": 10, + "gold_max": 50, + "loot": [], + "description": "A sentient mass of stone and earth, summoned to crush intruders." + }, + { + "id": "seeker", + "name": "Seeker", + "level": 4, + "stats": { "strength": 22, "intelligence": 6, "dexterity": 12, "constitution": 15, "luck": 6 }, + "hp": 33, + "attack_type": "slash", + "damage": 8, + "defense": 8, + "xp": 80, + "gold_min": 10, + "gold_max": 50, + "loot": [], + "description": "A spectral hunter that phases through walls to find its prey." + }, + { + "id": "ogre_magician", + "name": "Ogre Magician", + "level": 4, + "stats": { "strength": 7, "intelligence": 20, "dexterity": 13, "constitution": 13, "luck": 8 }, + "hp": 29, + "attack_type": "crush", + "damage": 8, + "defense": 7, + "xp": 70, + "gold_min": 10, + "gold_max": 50, + "loot": [ + { "item_id": "ogre_fgn", "chance": 0.04 } + ], + "description": "An ogre twisted by magical mutation, channeling primal sorcery." + }, + { + "id": "dwarf_king", + "name": "Dwarf King", + "level": 4, + "stats": { "strength": 20, "intelligence": 7, "dexterity": 13, "constitution": 14, "luck": 7 }, + "hp": 35, + "attack_type": "slash", + "damage": 8, + "defense": 8, + "xp": 90, + "gold_min": 10, + "gold_max": 50, + "loot": [ + { "item_id": "admt_sword", "chance": 0.05 }, + { "item_id": "admt_helm", "chance": 0.05 } + ], + "description": "A dwarf monarch in ornate armor, axe inscribed with runes of power." + }, + { + "id": "samurai_lord", + "name": "Samurai Lord", + "level": 4, + "stats": { "strength": 20, "intelligence": 7, "dexterity": 13, "constitution": 14, "luck": 7 }, + "hp": 37, + "attack_type": "slash", + "damage": 9, + "defense": 9, + "xp": 90, + "gold_min": 10, + "gold_max": 50, + "loot": [ + { "item_id": "crystal_sword", "chance": 0.05 }, + { "item_id": "hawkblade", "chance": 0.03 } + ], + "description": "A samurai warlord clad in lacquered armor, blade singing with ki." + }, + { + "id": "berserker", + "name": "Berserker", + "level": 4, + "stats": { "strength": 20, "intelligence": 7, "dexterity": 13, "constitution": 14, "luck": 7 }, + "hp": 41, + "attack_type": "slash", + "damage": 12, + "defense": 10, + "xp": 100, + "gold_min": 10, + "gold_max": 50, + "loot": [ + { "item_id": "broadsword", "chance": 0.08 }, + { "item_id": "chain_mail", "chance": 0.05 } + ], + "description": "A frothing warrior in battle-frenzy, ignoring all wounds." + }, + { + "id": "hydra", + "name": "Hydra", + "level": 4, + "stats": { "strength": 22, "intelligence": 6, "dexterity": 12, "constitution": 15, "luck": 6 }, + "hp": 35, + "attack_type": "slash", + "damage": 10, + "defense": 9, + "xp": 100, + "gold_min": 10, + "gold_max": 50, + "loot": [], + "description": "A multi-headed serpent that grows more dangerous with each wound." + }, + { + "id": "green_dragon", + "name": "Green Dragon", + "level": 4, + "stats": { "strength": 22, "intelligence": 15, "dexterity": 11, "constitution": 16, "luck": 6 }, + "hp": 39, + "attack_type": "crush", + "damage": 11, + "defense": 9, + "xp": 100, + "gold_min": 10, + "gold_max": 50, + "loot": [ + { "item_id": "dragon_fgn", "chance": 0.04 }, + { "item_id": "dragonshield", "chance": 0.03 } + ], + "description": "A venomous wyrm with scales like emeralds and breath like poison." + }, + { + "id": "wraith", + "name": "Wraith", + "level": 4, + "stats": { "strength": 14, "intelligence": 13, "dexterity": 7, "constitution": 14, "luck": 6 }, + "hp": 41, + "attack_type": "crush", + "damage": 11, + "defense": 10, + "xp": 100, + "gold_min": 10, + "gold_max": 50, + "loot": [ + { "item_id": "elf_cloak", "chance": 0.05 } + ], + "description": "A powerful spirit that drives the living to madness with its touch." + }, + { + "id": "lurker", + "name": "Lurker", + "level": 4, + "stats": { "strength": 22, "intelligence": 6, "dexterity": 12, "constitution": 15, "luck": 6 }, + "hp": 35, + "attack_type": "slash", + "damage": 11, + "defense": 9, + "xp": 100, + "gold_min": 10, + "gold_max": 50, + "loot": [], + "description": "An amphibious horror that drags its victims into flooded tunnels." + }, + { + "id": "copper_dragon", + "name": "Copper Dragon", + "level": 4, + "stats": { "strength": 22, "intelligence": 15, "dexterity": 11, "constitution": 16, "luck": 6 }, + "hp": 45, + "attack_type": "crush", + "damage": 12, + "defense": 10, + "xp": 100, + "gold_min": 10, + "gold_max": 50, + "loot": [ + { "item_id": "dragon_fgn", "chance": 0.04 }, + { "item_id": "dragonshield", "chance": 0.03 } + ], + "description": "A young but aggressive dragon with gleaming copper scales." + }, + { + "id": "ivory_monk", + "name": "Ivory Monk", + "level": 4, + "stats": { "strength": 13, "intelligence": 12, "dexterity": 14, "constitution": 13, "luck": 10 }, + "hp": 35, + "attack_type": "crush", + "damage": 14, + "defense": 10, + "xp": 100, + "gold_min": 10, + "gold_max": 50, + "loot": [ + { "item_id": "bracers_6", "chance": 0.05 } + ], + "description": "A monk in bone-white robes, fists capable of shattering steel." + }, + { + "id": "fire_giant", + "name": "Fire Giant", + "level": 4, + "stats": { "strength": 22, "intelligence": 6, "dexterity": 6, "constitution": 16, "luck": 6 }, + "hp": 43, + "attack_type": "crush", + "damage": 12, + "defense": 10, + "xp": 100, + "gold_min": 10, + "gold_max": 50, + "loot": [ + { "item_id": "giant_fgn", "chance": 0.04 }, + { "item_id": "fire_horn", "chance": 0.03 } + ], + "description": "A blazing titan wreathed in smoke, wielding a flaming greatsword." + }, + { + "id": "azure_monk", + "name": "Azure Monk", + "level": 4, + "stats": { "strength": 13, "intelligence": 12, "dexterity": 14, "constitution": 13, "luck": 10 }, + "hp": 39, + "attack_type": "crush", + "damage": 11, + "defense": 8, + "xp": 90, + "gold_min": 10, + "gold_max": 50, + "loot": [ + { "item_id": "bracers_6", "chance": 0.05 } + ], + "description": "A monk draped in deep blue, striking with blinding speed." + }, + { + "id": "ice_giant", + "name": "Ice Giant", + "level": 4, + "stats": { "strength": 22, "intelligence": 6, "dexterity": 6, "constitution": 16, "luck": 6 }, + "hp": 65, + "attack_type": "crush", + "damage": 13, + "defense": 11, + "xp": 100, + "gold_min": 10, + "gold_max": 50, + "loot": [ + { "item_id": "giant_fgn", "chance": 0.04 } + ], + "description": "A frozen colossus from the glacial depths, radiating killing cold." + }, + { + "id": "weretiger", + "name": "Weretiger", + "level": 4, + "stats": { "strength": 22, "intelligence": 6, "dexterity": 12, "constitution": 15, "luck": 6 }, + "hp": 39, + "attack_type": "slash", + "damage": 10, + "defense": 9, + "xp": 100, + "gold_min": 10, + "gold_max": 50, + "loot": [], + "description": "A towering beast with striped fur and claws that rend armor like cloth." + }, + { + "id": "conjurer_lv4", + "name": "Conjurer IV", + "level": 5, + "stats": { "strength": 8, "intelligence": 23, "dexterity": 15, "constitution": 15, "luck": 9 }, + "hp": 33, + "attack_type": "crush", + "damage": 7, + "defense": 7, + "xp": 90, + "gold_min": 15, + "gold_max": 70, + "loot": [ + { "item_id": "conjurstaff", "chance": 0.05 }, + { "item_id": "robes", "chance": 0.05 } + ], + "description": "A veteran conjurer summoning creatures of nightmares." + }, + { + "id": "magician_lv4", + "name": "Magician IV", + "level": 5, + "stats": { "strength": 8, "intelligence": 23, "dexterity": 15, "constitution": 15, "luck": 9 }, + "hp": 33, + "attack_type": "crush", + "damage": 7, + "defense": 7, + "xp": 90, + "gold_min": 15, + "gold_max": 70, + "loot": [ + { "item_id": "mage_staff", "chance": 0.05 }, + { "item_id": "robes", "chance": 0.05 } + ], + "description": "A powerful magician whose spells crackle with raw energy." + }, + { + "id": "sorcerer_lv3", + "name": "Sorcerer III", + "level": 5, + "stats": { "strength": 8, "intelligence": 23, "dexterity": 15, "constitution": 15, "luck": 9 }, + "hp": 33, + "attack_type": "crush", + "damage": 7, + "defense": 7, + "xp": 90, + "gold_min": 15, + "gold_max": 70, + "loot": [ + { "item_id": "sorcerstaff", "chance": 0.05 }, + { "item_id": "shield_ring", "chance": 0.05 } + ], + "description": "A sorcerer plumbing the deepest abysses of forbidden knowledge." + }, + { + "id": "wizard_lv3", + "name": "Wizard III", + "level": 5, + "stats": { "strength": 8, "intelligence": 23, "dexterity": 15, "constitution": 15, "luck": 9 }, + "hp": 37, + "attack_type": "crush", + "damage": 7, + "defense": 7, + "xp": 90, + "gold_min": 15, + "gold_max": 70, + "loot": [ + { "item_id": "war_staff", "chance": 0.05 }, + { "item_id": "dmnd_shield", "chance": 0.03 } + ], + "description": "An archmage's apprentice wielding devastating battle magic." + }, + { + "id": "ogre_lord", + "name": "Ogre Lord", + "level": 5, + "stats": { "strength": 25, "intelligence": 7, "dexterity": 7, "constitution": 18, "luck": 7 }, + "hp": 65, + "attack_type": "crush", + "damage": 13, + "defense": 10, + "xp": 110, + "gold_min": 15, + "gold_max": 70, + "loot": [ + { "item_id": "ogre_fgn", "chance": 0.04 }, + { "item_id": "dmnd_helm", "chance": 0.03 } + ], + "description": "The massive king of the ogres, armored in plates of hammered iron." + }, + { + "id": "shadow", + "name": "Shadow", + "level": 5, + "stats": { "strength": 16, "intelligence": 15, "dexterity": 8, "constitution": 16, "luck": 7 }, + "hp": 37, + "attack_type": "crush", + "damage": 12, + "defense": 11, + "xp": 100, + "gold_min": 15, + "gold_max": 70, + "loot": [], + "description": "A living darkness that drains sanity from those it touches." + }, + { + "id": "body_snatcher", + "name": "Body Snatcher", + "level": 5, + "stats": { "strength": 16, "intelligence": 15, "dexterity": 8, "constitution": 16, "luck": 7 }, + "hp": 69, + "attack_type": "crush", + "damage": 12, + "defense": 10, + "xp": 110, + "gold_min": 15, + "gold_max": 70, + "loot": [], + "description": "A parasitic entity that steals bodies and wears them like suits." + }, + { + "id": "eye_spy", + "name": "Eye Spy", + "level": 5, + "stats": { "strength": 23, "intelligence": 7, "dexterity": 14, "constitution": 17, "luck": 7 }, + "hp": 65, + "attack_type": "puncture", + "damage": 12, + "defense": 10, + "xp": 110, + "gold_min": 15, + "gold_max": 70, + "loot": [], + "description": "A floating eyeball trailing tentacles, leaking venom from its iris." + }, + { + "id": "fred", + "name": "Fred", + "level": 5, + "stats": { "strength": 23, "intelligence": 7, "dexterity": 14, "constitution": 17, "luck": 7 }, + "hp": 67, + "attack_type": "crush", + "damage": 13, + "defense": 10, + "xp": 110, + "gold_min": 15, + "gold_max": 70, + "loot": [], + "description": "A bizarre creature that defies classification, brutal and relentless." + }, + { + "id": "ghoul", + "name": "Ghoul", + "level": 5, + "stats": { "strength": 16, "intelligence": 15, "dexterity": 8, "constitution": 16, "luck": 7 }, + "hp": 33, + "attack_type": "slash", + "damage": 9, + "defense": 9, + "xp": 90, + "gold_min": 15, + "gold_max": 70, + "loot": [], + "description": "A ghoulish undead whose touch withers flesh from bone." + }, + { + "id": "phantom", + "name": "Phantom", + "level": 5, + "stats": { "strength": 16, "intelligence": 15, "dexterity": 8, "constitution": 16, "luck": 7 }, + "hp": 67, + "attack_type": "crush", + "damage": 14, + "defense": 11, + "xp": 110, + "gold_min": 15, + "gold_max": 70, + "loot": [], + "description": "An insubstantial horror that drains the experience from its victims." + }, + { + "id": "xorn", + "name": "Xorn", + "level": 5, + "stats": { "strength": 23, "intelligence": 7, "dexterity": 14, "constitution": 17, "luck": 7 }, + "hp": 67, + "attack_type": "crush", + "damage": 13, + "defense": 11, + "xp": 110, + "gold_min": 15, + "gold_max": 70, + "loot": [], + "description": "A three-armed rock creature from the Plane of Earth, nearly invulnerable." + }, + { + "id": "lesser_demon", + "name": "Lesser Demon", + "level": 5, + "stats": { "strength": 23, "intelligence": 7, "dexterity": 14, "constitution": 17, "luck": 7 }, + "hp": 73, + "attack_type": "slash", + "damage": 15, + "defense": 12, + "xp": 110, + "gold_min": 15, + "gold_max": 70, + "loot": [], + "description": "A minor fiend from the lower planes, withering everything it touches." + }, + { + "id": "vampire", + "name": "Vampire", + "level": 5, + "stats": { "strength": 16, "intelligence": 15, "dexterity": 8, "constitution": 16, "luck": 7 }, + "hp": 71, + "attack_type": "puncture", + "damage": 20, + "defense": 13, + "xp": 130, + "gold_min": 15, + "gold_max": 70, + "loot": [ + { "item_id": "speedboots", "chance": 0.03 } + ], + "description": "An ancient vampire lord that drains levels with every bite." + }, + { + "id": "demon", + "name": "Demon", + "level": 5, + "stats": { "strength": 23, "intelligence": 7, "dexterity": 14, "constitution": 17, "luck": 7 }, + "hp": 129, + "attack_type": "slash", + "damage": 21, + "defense": 14, + "xp": 130, + "gold_min": 15, + "gold_max": 70, + "loot": [], + "description": "A towering demon whose gaze shatters minds." + }, + { + "id": "mimic", + "name": "Mimic", + "level": 5, + "stats": { "strength": 23, "intelligence": 7, "dexterity": 14, "constitution": 17, "luck": 7 }, + "hp": 67, + "attack_type": "crush", + "damage": 17, + "defense": 12, + "xp": 130, + "gold_min": 15, + "gold_max": 70, + "loot": [], + "description": "A treasure chest that springs to life with crushing jaws and adhesive tongue." + }, + { + "id": "golem", + "name": "Golem", + "level": 5, + "stats": { "strength": 16, "intelligence": 8, "dexterity": 4, "constitution": 20, "luck": 2 }, + "hp": 67, + "attack_type": "crush", + "damage": 19, + "defense": 13, + "xp": 130, + "gold_min": 15, + "gold_max": 70, + "loot": [ + { "item_id": "golem_fgn", "chance": 0.04 } + ], + "description": "An animated construct of clay and iron, slow but devastatingly strong." + }, + { + "id": "basilisk", + "name": "Basilisk", + "level": 5, + "stats": { "strength": 23, "intelligence": 7, "dexterity": 14, "constitution": 17, "luck": 7 }, + "hp": 67, + "attack_type": "crush", + "damage": 17, + "defense": 11, + "xp": 130, + "gold_min": 15, + "gold_max": 70, + "loot": [ + { "item_id": "dag_stone", "chance": 0.03 } + ], + "description": "A serpentine horror whose gaze turns flesh to stone." + }, + { + "id": "bone_crusher", + "name": "Bone Crusher", + "level": 5, + "stats": { "strength": 25, "intelligence": 7, "dexterity": 7, "constitution": 18, "luck": 7 }, + "hp": 67, + "attack_type": "crush", + "damage": 15, + "defense": 12, + "xp": 130, + "gold_min": 15, + "gold_max": 70, + "loot": [], + "description": "An enormous undead brute that pulverizes its victims to powder." + }, + { + "id": "ghost", + "name": "Ghost", + "level": 5, + "stats": { "strength": 16, "intelligence": 15, "dexterity": 8, "constitution": 16, "luck": 7 }, + "hp": 69, + "attack_type": "crush", + "damage": 17, + "defense": 12, + "xp": 130, + "gold_min": 15, + "gold_max": 70, + "loot": [], + "description": "A howling spirit that withers the living with its icy grasp." + }, + { + "id": "war_giant", + "name": "War Giant", + "level": 5, + "stats": { "strength": 25, "intelligence": 7, "dexterity": 7, "constitution": 18, "luck": 7 }, + "hp": 69, + "attack_type": "crush", + "damage": 16, + "defense": 13, + "xp": 130, + "gold_min": 15, + "gold_max": 70, + "loot": [ + { "item_id": "giant_fgn", "chance": 0.04 }, + { "item_id": "war_axe", "chance": 0.03 } + ], + "description": "A giant armored for war, swinging a colossal spiked maul." + }, + { + "id": "warrior_elite", + "name": "Warrior Elite", + "level": 5, + "stats": { "strength": 23, "intelligence": 8, "dexterity": 15, "constitution": 16, "luck": 8 }, + "hp": 67, + "attack_type": "slash", + "damage": 16, + "defense": 13, + "xp": 130, + "gold_min": 15, + "gold_max": 70, + "loot": [ + { "item_id": "admt_sword", "chance": 0.05 }, + { "item_id": "plate_armor", "chance": 0.03 } + ], + "description": "A battle-hardened champion in gleaming full plate, a master of war." + }, + { + "id": "master_ninja", + "name": "Master Ninja", + "level": 5, + "stats": { "strength": 15, "intelligence": 8, "dexterity": 23, "constitution": 8, "luck": 16 }, + "hp": 69, + "attack_type": "slash", + "damage": 15, + "defense": 12, + "xp": 110, + "gold_min": 15, + "gold_max": 70, + "loot": [ + { "item_id": "thief_dagger", "chance": 0.05 }, + { "item_id": "dmnd_dagger", "chance": 0.03 } + ], + "description": "The supreme assassin, capable of landing instant-kill critical strikes." + }, + { + "id": "crystal_golem", + "name": "Crystal Golem", + "level": 5, + "stats": { "strength": 20, "intelligence": 10, "dexterity": 5, "constitution": 22, "luck": 3 }, + "hp": 140, + "attack_type": "crush", + "damage": 29, + "defense": 19, + "xp": 160, + "gold_min": 15, + "gold_max": 70, + "loot": [ + { "item_id": "crystal_sword", "chance": 0.05 } + ], + "description": "A construct of enchanted crystal, nearly impervious to mortal weapons." + }, + { + "id": "grey_dragon", + "name": "Grey Dragon", + "level": 5, + "stats": { "strength": 25, "intelligence": 15, "dexterity": 13, "constitution": 18, "luck": 7 }, + "hp": 71, + "attack_type": "crush", + "damage": 18, + "defense": 12, + "xp": 130, + "gold_min": 15, + "gold_max": 70, + "loot": [ + { "item_id": "dragon_fgn", "chance": 0.04 }, + { "item_id": "dragonshield", "chance": 0.03 } + ], + "description": "An ancient wyrm of dull gray scales, deceptively fast and deadly." + }, + { + "id": "white_dragon", + "name": "White Dragon", + "level": 5, + "stats": { "strength": 25, "intelligence": 15, "dexterity": 13, "constitution": 18, "luck": 7 }, + "hp": 45, + "attack_type": "crush", + "damage": 12, + "defense": 11, + "xp": 100, + "gold_min": 15, + "gold_max": 70, + "loot": [ + { "item_id": "dragon_fgn", "chance": 0.04 } + ], + "description": "A frigid wyrm exhaling clouds of killing frost." + }, + { + "id": "master_conjurer", + "name": "Master Conjurer", + "level": 5, + "stats": { "strength": 8, "intelligence": 23, "dexterity": 15, "constitution": 15, "luck": 9 }, + "hp": 77, + "attack_type": "crush", + "damage": 17, + "defense": 13, + "xp": 140, + "gold_min": 15, + "gold_max": 70, + "loot": [ + { "item_id": "conjurstaff", "chance": 0.05 }, + { "item_id": "dmnd_helm", "chance": 0.03 } + ], + "description": "A master of summoning, calling forth beings of pure chaos." + }, + { + "id": "master_magician", + "name": "Master Magician", + "level": 5, + "stats": { "strength": 8, "intelligence": 23, "dexterity": 15, "constitution": 15, "luck": 9 }, + "hp": 77, + "attack_type": "crush", + "damage": 17, + "defense": 13, + "xp": 140, + "gold_min": 15, + "gold_max": 70, + "loot": [ + { "item_id": "mage_staff", "chance": 0.05 }, + { "item_id": "shield_ring", "chance": 0.03 } + ], + "description": "A magician of unsurpassed power, bending reality with a gesture." + }, + { + "id": "master_sorcerer", + "name": "Master Sorcerer", + "level": 5, + "stats": { "strength": 8, "intelligence": 23, "dexterity": 15, "constitution": 15, "luck": 9 }, + "hp": 77, + "attack_type": "crush", + "damage": 17, + "defense": 13, + "xp": 140, + "gold_min": 15, + "gold_max": 70, + "loot": [ + { "item_id": "sorcerstaff", "chance": 0.05 }, + { "item_id": "dmnd_shield", "chance": 0.03 } + ], + "description": "A sorcerer at the pinnacle of the dark arts, corruption incarnate." + }, + { + "id": "mangar_guard", + "name": "Mangar Guard", + "level": 5, + "stats": { "strength": 23, "intelligence": 8, "dexterity": 15, "constitution": 16, "luck": 8 }, + "hp": 132, + "attack_type": "slash", + "damage": 21, + "defense": 16, + "xp": 140, + "gold_min": 15, + "gold_max": 70, + "loot": [ + { "item_id": "admt_plate", "chance": 0.03 }, + { "item_id": "dmnd_helm", "chance": 0.03 } + ], + "description": "An elite soldier in Mangar's personal guard, armed and armored to the teeth." + }, + { + "id": "conjurer_lv5", + "name": "Conjurer V", + "level": 6, + "stats": { "strength": 9, "intelligence": 26, "dexterity": 17, "constitution": 17, "luck": 10 }, + "hp": 41, + "attack_type": "crush", + "damage": 9, + "defense": 9, + "xp": 100, + "gold_min": 25, + "gold_max": 100, + "loot": [ + { "item_id": "conjurstaff", "chance": 0.05 } + ], + "description": "A master conjurer bending the fabric of reality to summon nightmares." + }, + { + "id": "magician_lv5", + "name": "Magician V", + "level": 6, + "stats": { "strength": 9, "intelligence": 26, "dexterity": 17, "constitution": 17, "luck": 10 }, + "hp": 41, + "attack_type": "crush", + "damage": 9, + "defense": 9, + "xp": 100, + "gold_min": 25, + "gold_max": 100, + "loot": [ + { "item_id": "mage_staff", "chance": 0.05 } + ], + "description": "A magician of terrifying power, hurling spells that warp stone and steel." + }, + { + "id": "sorcerer_lv4", + "name": "Sorcerer IV", + "level": 6, + "stats": { "strength": 9, "intelligence": 26, "dexterity": 17, "constitution": 17, "luck": 10 }, + "hp": 43, + "attack_type": "crush", + "damage": 9, + "defense": 9, + "xp": 100, + "gold_min": 25, + "gold_max": 100, + "loot": [ + { "item_id": "sorcerstaff", "chance": 0.05 } + ], + "description": "A sorcerer whose dark rituals have made them nearly immortal." + }, + { + "id": "wizard_lv4", + "name": "Wizard IV", + "level": 6, + "stats": { "strength": 9, "intelligence": 26, "dexterity": 17, "constitution": 17, "luck": 10 }, + "hp": 41, + "attack_type": "crush", + "damage": 9, + "defense": 9, + "xp": 100, + "gold_min": 25, + "gold_max": 100, + "loot": [ + { "item_id": "war_staff", "chance": 0.05 } + ], + "description": "A wizard of vast knowledge, wielding magic that devastates entire rooms." + }, + { + "id": "evil_eye", + "name": "Evil Eye", + "level": 6, + "stats": { "strength": 26, "intelligence": 8, "dexterity": 16, "constitution": 19, "luck": 8 }, + "hp": 65, + "attack_type": "crush", + "damage": 17, + "defense": 11, + "xp": 130, + "gold_min": 25, + "gold_max": 100, + "loot": [], + "description": "A levitating orb of malevolence whose venomous gaze poisons the soul." + }, + { + "id": "red_dragon", + "name": "Red Dragon", + "level": 6, + "stats": { "strength": 28, "intelligence": 17, "dexterity": 15, "constitution": 20, "luck": 8 }, + "hp": 132, + "attack_type": "crush", + "damage": 24, + "defense": 16, + "xp": 140, + "gold_min": 25, + "gold_max": 100, + "loot": [ + { "item_id": "dragon_fgn", "chance": 0.04 }, + { "item_id": "dmnd_plate", "chance": 0.02 } + ], + "description": "The most fearsome chromatic dragon, wreathed in infernal flame." + }, + { + "id": "conjurer_lv6", + "name": "Conjurer VI", + "level": 7, + "stats": { "strength": 10, "intelligence": 29, "dexterity": 19, "constitution": 19, "luck": 11 }, + "hp": 65, + "attack_type": "crush", + "damage": 11, + "defense": 11, + "xp": 110, + "gold_min": 40, + "gold_max": 150, + "loot": [ + { "item_id": "conjurstaff", "chance": 0.05 } + ], + "description": "An arch-conjurer capable of summoning apocalyptic entities." + }, + { + "id": "magician_lv6", + "name": "Magician VI", + "level": 7, + "stats": { "strength": 10, "intelligence": 29, "dexterity": 19, "constitution": 19, "luck": 11 }, + "hp": 65, + "attack_type": "crush", + "damage": 11, + "defense": 11, + "xp": 110, + "gold_min": 40, + "gold_max": 150, + "loot": [ + { "item_id": "mage_staff", "chance": 0.05 } + ], + "description": "A magician whose spells rival the gods in destructive power." + }, + { + "id": "sorcerer_lv5", + "name": "Sorcerer V", + "level": 7, + "stats": { "strength": 10, "intelligence": 29, "dexterity": 19, "constitution": 19, "luck": 11 }, + "hp": 65, + "attack_type": "crush", + "damage": 11, + "defense": 11, + "xp": 110, + "gold_min": 40, + "gold_max": 150, + "loot": [ + { "item_id": "sorcerstaff", "chance": 0.05 } + ], + "description": "The ultimate sorcerer, having mastered every dark ritual and curse." + }, + { + "id": "wizard_lv5", + "name": "Wizard V", + "level": 7, + "stats": { "strength": 10, "intelligence": 29, "dexterity": 19, "constitution": 19, "luck": 11 }, + "hp": 67, + "attack_type": "crush", + "damage": 11, + "defense": 11, + "xp": 110, + "gold_min": 40, + "gold_max": 150, + "loot": [ + { "item_id": "war_staff", "chance": 0.05 } + ], + "description": "A grand wizard of unfathomable arcane might." + }, + { + "id": "beholder", + "name": "Beholder", + "level": 7, + "stats": { "strength": 29, "intelligence": 9, "dexterity": 18, "constitution": 21, "luck": 9 }, + "hp": 130, + "attack_type": "crush", + "damage": 23, + "defense": 16, + "xp": 160, + "gold_min": 40, + "gold_max": 150, + "loot": [ + { "item_id": "arcs_eye", "chance": 0.03 } + ], + "description": "A floating sphere of terror with a central eye and venomous tentacles." + }, + { + "id": "bandersnatch", + "name": "Bandersnatch", + "level": 7, + "stats": { "strength": 29, "intelligence": 9, "dexterity": 18, "constitution": 21, "luck": 9 }, + "hp": 75, + "attack_type": "crush", + "damage": 20, + "defense": 14, + "xp": 130, + "gold_min": 40, + "gold_max": 150, + "loot": [], + "description": "A slavering beast from beyond the margins of sanity." + }, + { + "id": "gimp", + "name": "Gimp", + "level": 7, + "stats": { "strength": 29, "intelligence": 9, "dexterity": 18, "constitution": 21, "luck": 9 }, + "hp": 129, + "attack_type": "slash", + "damage": 17, + "defense": 15, + "xp": 140, + "gold_min": 40, + "gold_max": 150, + "loot": [], + "description": "A grotesque humanoid creature with disproportionate limbs and razor claws." + }, + { + "id": "mind_shadow", + "name": "Mind Shadow", + "level": 7, + "stats": { "strength": 20, "intelligence": 19, "dexterity": 10, "constitution": 20, "luck": 9 }, + "hp": 75, + "attack_type": "crush", + "damage": 20, + "defense": 15, + "xp": 140, + "gold_min": 40, + "gold_max": 150, + "loot": [], + "description": "A telepathic predator that projects nightmares into its victims' minds." + }, + { + "id": "spectre", + "name": "Spectre", + "level": 7, + "stats": { "strength": 20, "intelligence": 19, "dexterity": 10, "constitution": 20, "luck": 9 }, + "hp": 132, + "attack_type": "crush", + "damage": 23, + "defense": 16, + "xp": 140, + "gold_min": 40, + "gold_max": 150, + "loot": [ + { "item_id": "spectre_mace", "chance": 0.03 }, + { "item_id": "spectre_snare", "chance": 0.02 } + ], + "description": "A ghostly horror that drains levels from the living with spectral hands." + }, + { + "id": "cloud_giant", + "name": "Cloud Giant", + "level": 7, + "stats": { "strength": 31, "intelligence": 9, "dexterity": 9, "constitution": 22, "luck": 9 }, + "hp": 134, + "attack_type": "crush", + "damage": 25, + "defense": 17, + "xp": 140, + "gold_min": 40, + "gold_max": 150, + "loot": [ + { "item_id": "giant_fgn", "chance": 0.04 }, + { "item_id": "titan_fgn", "chance": 0.02 } + ], + "description": "A giant dwelling among thunderheads, hurling lightning with each swing." + }, + { + "id": "titan", + "name": "Titan", + "level": 7, + "stats": { "strength": 31, "intelligence": 9, "dexterity": 9, "constitution": 22, "luck": 9 }, + "hp": 134, + "attack_type": "crush", + "damage": 23, + "defense": 16, + "xp": 140, + "gold_min": 40, + "gold_max": 150, + "loot": [ + { "item_id": "titan_fgn", "chance": 0.03 } + ], + "description": "A primordial giant of godlike stature, treading the earth like gravel." + }, + { + "id": "master_wizard", + "name": "Master Wizard", + "level": 7, + "stats": { "strength": 10, "intelligence": 29, "dexterity": 19, "constitution": 19, "luck": 11 }, + "hp": 129, + "attack_type": "crush", + "damage": 19, + "defense": 15, + "xp": 160, + "gold_min": 40, + "gold_max": 150, + "loot": [ + { "item_id": "wizwand", "chance": 0.05 }, + { "item_id": "powerstaff", "chance": 0.03 } + ], + "description": "A wizard of legendary repute, wielding artifacts of immense power." + }, + { + "id": "mongo", + "name": "Mongo", + "level": 7, + "stats": { "strength": 29, "intelligence": 13, "dexterity": 20, "constitution": 22, "luck": 13 }, + "hp": 77, + "attack_type": "slash", + "damage": 21, + "defense": 15, + "xp": 140, + "gold_min": 40, + "gold_max": 150, + "loot": [ + { "item_id": "mongo_fgn", "chance": 0.03 }, + { "item_id": "dmnd_sword", "chance": 0.02 } + ], + "description": "A legendary warrior of unmatched skill, blade singing a song of death." + }, + { + "id": "soul_sucker", + "name": "Soul Sucker", + "level": 8, + "stats": { "strength": 22, "intelligence": 21, "dexterity": 11, "constitution": 22, "luck": 10 }, + "hp": 138, + "attack_type": "crush", + "damage": 29, + "defense": 18, + "xp": 160, + "gold_min": 60, + "gold_max": 300, + "loot": [], + "description": "A vampiric entity that devours souls, leaving empty husks behind." + }, + { + "id": "jabberwock", + "name": "Jabberwock", + "level": 8, + "stats": { "strength": 32, "intelligence": 10, "dexterity": 20, "constitution": 23, "luck": 10 }, + "hp": 136, + "attack_type": "slash", + "damage": 25, + "defense": 17, + "xp": 160, + "gold_min": 60, + "gold_max": 300, + "loot": [], + "description": "A creature of nonsensical horror with jaws that bite and claws that catch." + }, + { + "id": "mad_god", + "name": "Mad God", + "level": 8, + "stats": { "strength": 32, "intelligence": 22, "dexterity": 22, "constitution": 32, "luck": 22 }, + "hp": 134, + "attack_type": "crush", + "damage": 22, + "defense": 16, + "xp": 160, + "gold_min": 60, + "gold_max": 300, + "loot": [ + { "item_id": "ring_of_power", "chance": 0.03 } + ], + "description": "A fallen deity whose mind shattered eons ago, radiating pure chaos." + }, + { + "id": "maze_master", + "name": "Maze Master", + "level": 8, + "stats": { "strength": 11, "intelligence": 32, "dexterity": 21, "constitution": 21, "luck": 12 }, + "hp": 138, + "attack_type": "crush", + "damage": 22, + "defense": 18, + "xp": 160, + "gold_min": 60, + "gold_max": 300, + "loot": [ + { "item_id": "staff_of_lor", "chance": 0.03 } + ], + "description": "An architect of labyrinths, bending space to trap intruders forever." + }, + { + "id": "vampire_lord", + "name": "Vampire Lord", + "level": 8, + "stats": { "strength": 22, "intelligence": 21, "dexterity": 11, "constitution": 22, "luck": 10 }, + "hp": 134, + "attack_type": "puncture", + "damage": 26, + "defense": 18, + "xp": 160, + "gold_min": 60, + "gold_max": 300, + "loot": [ + { "item_id": "death_dagger", "chance": 0.03 } + ], + "description": "The lord of all vampires, draining levels with each sanguine bite." + }, + { + "id": "greater_demon", + "name": "Greater Demon", + "level": 8, + "stats": { "strength": 32, "intelligence": 10, "dexterity": 20, "constitution": 23, "luck": 10 }, + "hp": 140, + "attack_type": "slash", + "damage": 28, + "defense": 19, + "xp": 160, + "gold_min": 60, + "gold_max": 300, + "loot": [], + "description": "A pit fiend of tremendous power, capable of possessing mortals." + }, + { + "id": "ancient_enemy", + "name": "Ancient Enemy", + "level": 9, + "stats": { "strength": 35, "intelligence": 24, "dexterity": 24, "constitution": 35, "luck": 24 }, + "hp": 142, + "attack_type": "crush", + "damage": 30, + "defense": 19, + "xp": 160, + "gold_min": 60, + "gold_max": 300, + "loot": [ + { "item_id": "arcs_hammer", "chance": 0.03 } + ], + "description": "A primordial evil from the dawn of time, withering all who approach." + }, + { + "id": "archmage", + "name": "Archmage", + "level": 10, + "stats": { "strength": 38, "intelligence": 38, "dexterity": 26, "constitution": 38, "luck": 26 }, + "hp": 260, + "attack_type": "crush", + "damage": 22, + "defense": 25, + "xp": 180, + "gold_min": 60, + "gold_max": 300, + "loot": [ + { "item_id": "powerstaff", "chance": 0.05 }, + { "item_id": "wizwand", "chance": 0.03 } + ], + "description": "A spellcaster of near-divine power, master of all schools of magic." + }, + { + "id": "balrog", + "name": "Balrog", + "level": 9, + "stats": { "strength": 32, "intelligence": 10, "dexterity": 20, "constitution": 23, "luck": 10 }, + "hp": 140, + "attack_type": "slash", + "damage": 22, + "defense": 19, + "xp": 160, + "gold_min": 60, + "gold_max": 300, + "loot": [], + "description": "A demon of fire and shadow whose presence drives mortals insane." + }, + { + "id": "black_dragon", + "name": "Black Dragon", + "level": 9, + "stats": { "strength": 37, "intelligence": 25, "dexterity": 21, "constitution": 28, "luck": 10 }, + "hp": 138, + "attack_type": "crush", + "damage": 27, + "defense": 19, + "xp": 160, + "gold_min": 60, + "gold_max": 300, + "loot": [ + { "item_id": "dragon_fgn", "chance": 0.05 }, + { "item_id": "dmnd_plate", "chance": 0.02 } + ], + "description": "The eldest and most terrible of dragons, spewing acid and despair." + }, + { + "id": "demon_lord", + "name": "Demon Lord", + "level": 10, + "stats": { "strength": 38, "intelligence": 38, "dexterity": 26, "constitution": 38, "luck": 26 }, + "hp": 270, + "attack_type": "crush", + "damage": 32, + "defense": 25, + "xp": 180, + "gold_min": 60, + "gold_max": 300, + "loot": [ + { "item_id": "deathring", "chance": 0.03 }, + { "item_id": "spectre_mace", "chance": 0.02 } + ], + "description": "The supreme fiend, whose gaze turns flesh to stone." + }, + { + "id": "lich", + "name": "Lich", + "level": 10, + "stats": { "strength": 38, "intelligence": 38, "dexterity": 26, "constitution": 38, "luck": 26 }, + "hp": 270, + "attack_type": "crush", + "damage": 24, + "defense": 25, + "xp": 160, + "gold_min": 60, + "gold_max": 300, + "loot": [ + { "item_id": "lich_fgn", "chance": 0.03 }, + { "item_id": "wizwand", "chance": 0.02 } + ], + "description": "An undead sorcerer of godlike power, capable of possessing the living." + }, + { + "id": "mangar", + "name": "Mangar the Dark", + "level": 10, + "stats": { "strength": 38, "intelligence": 38, "dexterity": 26, "constitution": 38, "luck": 26 }, + "hp": 270, + "attack_type": "slash", + "damage": 25, + "defense": 25, + "xp": 160, + "gold_min": 60, + "gold_max": 300, + "loot": [ + { "item_id": "sword_of_pak", "chance": 0.03 }, + { "item_id": "mage_fgn", "chance": 0.02 } + ], + "description": "The evil archmage who imprisoned Skara Brae in eternal winter. The final foe." + }, + { + "id": "storm_giant", + "name": "Storm Giant", + "level": 9, + "stats": { "strength": 37, "intelligence": 11, "dexterity": 11, "constitution": 26, "luck": 11 }, + "hp": 142, + "attack_type": "crush", + "damage": 31, + "defense": 25, + "xp": 160, + "gold_min": 60, + "gold_max": 300, + "loot": [ + { "item_id": "thor_fgn", "chance": 0.03 }, + { "item_id": "titan_fgn", "chance": 0.03 } + ], + "description": "A giant that commands the storm itself, each blow striking like lightning." + }, + { + "id": "death_denizen", + "name": "Death Denizen", + "level": 9, + "stats": { "strength": 32, "intelligence": 10, "dexterity": 20, "constitution": 23, "luck": 10 }, + "hp": 14, + "attack_type": "crush", + "damage": 22, + "defense": 16, + "xp": 160, + "gold_min": 60, + "gold_max": 300, + "loot": [], + "description": "A fragile but lethally dangerous entity from the void between worlds." + } +] diff --git a/data/items/accessories.json b/data/items/accessories.json new file mode 100644 index 0000000..c8ed2fc --- /dev/null +++ b/data/items/accessories.json @@ -0,0 +1,737 @@ +[ + { + "id": "buckler", + "name": "Buckler", + "type": "armor", + "quality": "common", + "slot": "off_hand", + "stats": { "defense": 1 }, + "description": "A small fist-held shield for parrying.", + "value": 40, + "always_in_shop": true + }, + { + "id": "tower_shield", + "name": "Tower Shield", + "type": "armor", + "quality": "common", + "slot": "off_hand", + "stats": { "defense": 2 }, + "description": "A large shield that covers most of the body.", + "value": 100, + "always_in_shop": true + }, + { + "id": "mthr_shield", + "name": "Mythril Shield", + "type": "armor", + "quality": "uncommon", + "slot": "off_hand", + "stats": { "defense": 3 }, + "description": "A shield forged from mythril, strong yet light.", + "value": 400 + }, + { + "id": "admt_shield", + "name": "Adamant Shield", + "type": "armor", + "quality": "uncommon", + "slot": "off_hand", + "stats": { "defense": 4 }, + "description": "A shield of indestructible adamant.", + "value": 500 + }, + { + "id": "luckshield", + "name": "Luckshield", + "type": "armor", + "quality": "uncommon", + "slot": "off_hand", + "stats": { "defense": 2 }, + "description": "A shield that boosts the wearer's luck when equipped.", + "value": 800 + }, + { + "id": "dmnd_shield", + "name": "Diamond Shield", + "type": "armor", + "quality": "rare", + "slot": "off_hand", + "stats": { "defense": 5 }, + "description": "A shield set with diamonds. Deflects all manner of attacks.", + "value": 1000 + }, + { + "id": "arcshield", + "name": "Arcshield", + "type": "armor", + "quality": "uncommon", + "slot": "off_hand", + "stats": { "defense": 3 }, + "description": "A shield that casts Stone Flesh on use.", + "value": 2000 + }, + { + "id": "pure_shield", + "name": "Pure Shield", + "type": "armor", + "quality": "rare", + "slot": "off_hand", + "stats": { "defense": 5 }, + "description": "A shield of pure magical energy.", + "value": 2000 + }, + { + "id": "ybarrashield", + "name": "Ybarrashield", + "type": "armor", + "quality": "rare", + "slot": "off_hand", + "stats": { "defense": 3 }, + "description": "A legendary shield that casts YMCA on use.", + "value": 10000 + }, + { + "id": "dragonshield", + "name": "Dragon Shield", + "type": "armor", + "quality": "rare", + "slot": "off_hand", + "stats": { "defense": 3 }, + "description": "A shield made from dragon scales. Freezes groups for 24-96 damage in combat.", + "value": 15000 + }, + { + "id": "bracers_6", + "name": "Bracers [6]", + "type": "armor", + "quality": "uncommon", + "slot": "off_hand", + "stats": { "defense": 4 }, + "description": "Magical bracers that provide excellent protection.", + "value": 600 + }, + { + "id": "bracers_4", + "name": "Bracers [4]", + "type": "armor", + "quality": "rare", + "slot": "off_hand", + "stats": { "defense": 6 }, + "description": "Powerful bracers that ward off all weapons.", + "value": 1000 + }, + { + "id": "helm", + "name": "Helm", + "type": "armor", + "quality": "common", + "slot": "head", + "stats": { "defense": 1 }, + "description": "A simple iron helmet.", + "value": 50, + "always_in_shop": true + }, + { + "id": "mthr_helm", + "name": "Mythril Helm", + "type": "armor", + "quality": "uncommon", + "slot": "head", + "stats": { "defense": 2 }, + "description": "A lightweight mythril helmet.", + "value": 300 + }, + { + "id": "admt_helm", + "name": "Adamant Helm", + "type": "armor", + "quality": "uncommon", + "slot": "head", + "stats": { "defense": 3 }, + "description": "A helm forged from adamant.", + "value": 400 + }, + { + "id": "dmnd_helm", + "name": "Diamond Helm", + "type": "armor", + "quality": "rare", + "slot": "head", + "stats": { "defense": 4 }, + "description": "A helm set with diamonds. Protects against all damage.", + "value": 1100 + }, + { + "id": "lorehelm", + "name": "Lorehelm", + "type": "armor", + "quality": "rare", + "slot": "head", + "stats": { "defense": 2 }, + "description": "A helm that casts Locate True on use.", + "value": 8000 + }, + { + "id": "travelhelm", + "name": "Travelhelm", + "type": "armor", + "quality": "rare", + "slot": "head", + "stats": { "defense": 3 }, + "description": "A helm that casts Apport Arcane on use.", + "value": 10000 + }, + { + "id": "spirithelm", + "name": "Spirithelm", + "type": "armor", + "quality": "epic", + "slot": "head", + "stats": { "defense": 3 }, + "description": "A helm of pure spirit. Casts Levitate on use.", + "value": 50000 + }, + { + "id": "gauntlets", + "name": "Gauntlets", + "type": "armor", + "quality": "common", + "slot": "hands", + "stats": { "defense": 1 }, + "description": "Heavy gloves of boiled leather.", + "value": 40, + "always_in_shop": true + }, + { + "id": "leather_gloves", + "name": "Leather Gloves", + "type": "armor", + "quality": "common", + "slot": "hands", + "stats": { "defense": 1 }, + "description": "Simple gloves that keep a grip on weapons.", + "value": 80, + "always_in_shop": true + }, + { + "id": "mthr_gloves", + "name": "Mythril Gloves", + "type": "armor", + "quality": "uncommon", + "slot": "hands", + "stats": { "defense": 2 }, + "description": "Gloves forged from mythril. Light and protective.", + "value": 400 + }, + { + "id": "admt_gloves", + "name": "Adamant Gloves", + "type": "armor", + "quality": "uncommon", + "slot": "hands", + "stats": { "defense": 3 }, + "description": "Gauntlets of adamant. Crush bone as easily as they protect.", + "value": 500 + }, + { + "id": "wargloves", + "name": "Wargloves", + "type": "armor", + "quality": "rare", + "slot": "hands", + "stats": { "defense": 5 }, + "description": "Magical gloves of tremendous power.", + "value": 3000 + }, + { + "id": "dork_ring", + "name": "Dork Ring", + "type": "accessory", + "quality": "common", + "slot": "ring", + "stats": {}, + "description": "A worthless ring. Perhaps good for trading.", + "value": 100 + }, + { + "id": "shield_ring", + "name": "Shield Ring", + "type": "accessory", + "quality": "uncommon", + "slot": "ring", + "stats": { "defense": 2 }, + "description": "A ring that projects a magical shield around the wearer.", + "value": 700 + }, + { + "id": "ring_of_power", + "name": "Ring of Power", + "type": "accessory", + "quality": "epic", + "slot": "ring", + "stats": {}, + "description": "A ring that casts Mind Blade in combat.", + "value": 40000 + }, + { + "id": "deathring", + "name": "Death Ring", + "type": "accessory", + "quality": "epic", + "slot": "ring", + "stats": { "defense": 1 }, + "description": "A cursed ring. Casts AND Gate on use.", + "value": 60000 + }, + { + "id": "troll_ring", + "name": "Troll Ring", + "type": "accessory", + "quality": "epic", + "slot": "ring", + "stats": {}, + "description": "A ring that regenerates HP when equipped.", + "value": 80000 + }, + { + "id": "elf_cloak", + "name": "Elf Cloak", + "type": "accessory", + "quality": "uncommon", + "slot": "back", + "stats": { "defense": 2 }, + "description": "A cloak woven by elves. Light and protective.", + "value": 500 + }, + { + "id": "alis_carpet", + "name": "Ali's Carpet", + "type": "accessory", + "quality": "uncommon", + "slot": "back", + "stats": { "defense": 2 }, + "description": "A flying carpet. Casts Phase Door on use.", + "value": 800 + }, + { + "id": "magic_mouth", + "name": "Magic Mouth", + "type": "accessory", + "quality": "uncommon", + "slot": "trinket", + "stats": {}, + "description": "A magical mouth that casts Arena on use.", + "value": 1200 + }, + { + "id": "speedboots", + "name": "Speed Boots", + "type": "accessory", + "quality": "uncommon", + "slot": "feet", + "stats": { "defense": 1 }, + "description": "Boots that increase the wearer's chance to run from combat.", + "value": 2000 + }, + { + "id": "kiels_compass", + "name": "Kiel's Compass", + "type": "accessory", + "quality": "rare", + "slot": "trinket", + "stats": {}, + "description": "A compass that casts Sorcerer's Sight on use.", + "value": 6000 + }, + { + "id": "dag_stone", + "name": "Dag Stone", + "type": "accessory", + "quality": "rare", + "slot": "trinket", + "stats": {}, + "description": "A mysterious stone that casts Great Gate on use.", + "value": 10000 + }, + { + "id": "arcs_eye", + "name": "Arc's Eye", + "type": "accessory", + "quality": "rare", + "slot": "trinket", + "stats": {}, + "description": "A gemstone eye that casts Locate True on use.", + "value": 10000 + }, + { + "id": "silvr_square", + "name": "Silver Square", + "type": "accessory", + "quality": "uncommon", + "slot": "trinket", + "stats": { "defense": 1 }, + "description": "A silver square artifact. Use in Mangar's Tower.", + "value": 1000 + }, + { + "id": "silvr_circle", + "name": "Silver Circle", + "type": "accessory", + "quality": "uncommon", + "slot": "trinket", + "stats": { "defense": 1 }, + "description": "A silver circle artifact. Use in Mangar's Tower.", + "value": 1000 + }, + { + "id": "silvr_triang", + "name": "Silver Triangle", + "type": "accessory", + "quality": "uncommon", + "slot": "trinket", + "stats": { "defense": 1 }, + "description": "A silver triangle artifact. Use in Mangar's Tower.", + "value": 1000 + }, + { + "id": "mandolin", + "name": "Mandolin", + "type": "accessory", + "quality": "common", + "slot": "instrument", + "stats": {}, + "description": "A simple mandolin for bards.", + "value": 130 + }, + { + "id": "harp", + "name": "Harp", + "type": "accessory", + "quality": "common", + "slot": "instrument", + "stats": {}, + "description": "A simple harp for bards.", + "value": 130 + }, + { + "id": "flute", + "name": "Flute", + "type": "accessory", + "quality": "common", + "slot": "instrument", + "stats": {}, + "description": "A simple flute for bards.", + "value": 130 + }, + { + "id": "laks_lyre", + "name": "Lak's Lyre", + "type": "accessory", + "quality": "uncommon", + "slot": "instrument", + "stats": {}, + "description": "A legendary lyre that grants unlimited Bard songs when equipped.", + "value": 1000 + }, + { + "id": "fire_horn", + "name": "Fire Horn", + "type": "accessory", + "quality": "uncommon", + "slot": "instrument", + "stats": { "damage": 40 }, + "description": "A horn that burns groups for 16-64 damage in combat.", + "value": 1200 + }, + { + "id": "fins_flute", + "name": "Fin's Flute", + "type": "accessory", + "quality": "uncommon", + "slot": "instrument", + "stats": { "defense": 2 }, + "description": "An enchanted flute with protective properties.", + "value": 1300 + }, + { + "id": "heal_harp", + "name": "Heal Harp", + "type": "accessory", + "quality": "rare", + "slot": "instrument", + "stats": {}, + "description": "A harp that casts Word of Healing on use.", + "value": 7000 + }, + { + "id": "galts_flute", + "name": "Galt's Flute", + "type": "accessory", + "quality": "rare", + "slot": "instrument", + "stats": {}, + "description": "A flute that casts Word of Recall on use.", + "value": 10000 + }, + { + "id": "frost_horn", + "name": "Frost Horn", + "type": "accessory", + "quality": "rare", + "slot": "instrument", + "stats": { "damage": 60 }, + "description": "A horn that freezes groups for 24-96 damage in combat.", + "value": 12000 + }, + { + "id": "flame_horn", + "name": "Flame Horn", + "type": "accessory", + "quality": "epic", + "slot": "instrument", + "stats": { "damage": 100 }, + "description": "A horn that burns groups for 40-160 damage in combat.", + "value": 20000 + }, + { + "id": "truthdrum", + "name": "Truth Drum", + "type": "accessory", + "quality": "epic", + "slot": "instrument", + "stats": {}, + "description": "A drum that casts Disintegrate in combat.", + "value": 20000 + }, + { + "id": "spiritdrum", + "name": "Spirit Drum", + "type": "accessory", + "quality": "epic", + "slot": "instrument", + "stats": {}, + "description": "A drum that casts Levitate on use.", + "value": 30000 + }, + { + "id": "pipes_of_pan", + "name": "Pipes of Pan", + "type": "accessory", + "quality": "epic", + "slot": "instrument", + "stats": { "defense": 2 }, + "description": "A set of enchanted pipes with protective magic.", + "value": 30000 + }, + { + "id": "lightwand", + "name": "Lightwand", + "type": "accessory", + "quality": "uncommon", + "slot": "trinket", + "stats": {}, + "description": "A wand that casts Mage Flame on use.", + "value": 1000 + }, + { + "id": "exorwand", + "name": "Exorwand", + "type": "accessory", + "quality": "uncommon", + "slot": "trinket", + "stats": {}, + "description": "A wand that casts Dispel on use.", + "value": 1000 + }, + { + "id": "dragonwand", + "name": "Dragon Wand", + "type": "accessory", + "quality": "rare", + "slot": "trinket", + "stats": { "defense": 1, "damage": 50 }, + "description": "A wand that steams groups for 20-80 damage in combat.", + "value": 14000 + }, + { + "id": "ogrewand", + "name": "Ogre Wand", + "type": "accessory", + "quality": "epic", + "slot": "trinket", + "stats": { "defense": 1 }, + "description": "A wand that casts Invisible Ogre on use.", + "value": 30000 + }, + { + "id": "wizwand", + "name": "Wizard's Wand", + "type": "accessory", + "quality": "legendary", + "slot": "trinket", + "stats": { "defense": 2 }, + "description": "A wand of immense power. Casts Wizard Walk on use.", + "value": 120000 + }, + { + "id": "ogre_fgn", + "name": "Ogre Figurine", + "type": "accessory", + "quality": "uncommon", + "slot": "trinket", + "stats": {}, + "description": "A figurine that summons an Ogre when used.", + "value": 300 + }, + { + "id": "golem_fgn", + "name": "Golem Figurine", + "type": "accessory", + "quality": "uncommon", + "slot": "trinket", + "stats": {}, + "description": "A figurine that summons a Golem when used.", + "value": 300 + }, + { + "id": "giant_fgn", + "name": "Giant Figurine", + "type": "accessory", + "quality": "uncommon", + "slot": "trinket", + "stats": {}, + "description": "A figurine that summons a War Giant when used.", + "value": 400 + }, + { + "id": "samurai_fgn", + "name": "Samurai Figurine", + "type": "accessory", + "quality": "uncommon", + "slot": "trinket", + "stats": {}, + "description": "A figurine that summons a Samurai when used.", + "value": 500 + }, + { + "id": "titan_fgn", + "name": "Titan Figurine", + "type": "accessory", + "quality": "uncommon", + "slot": "trinket", + "stats": {}, + "description": "A figurine that summons a Titan when used.", + "value": 600 + }, + { + "id": "dragon_fgn", + "name": "Dragon Figurine", + "type": "accessory", + "quality": "rare", + "slot": "trinket", + "stats": {}, + "description": "A figurine that summons a Green Dragon when used.", + "value": 800 + }, + { + "id": "mage_fgn", + "name": "Mage Figurine", + "type": "accessory", + "quality": "rare", + "slot": "trinket", + "stats": {}, + "description": "A figurine that summons a Master Wizard when used.", + "value": 1000 + }, + { + "id": "mongo_fgn", + "name": "Mongo Figurine", + "type": "accessory", + "quality": "rare", + "slot": "trinket", + "stats": {}, + "description": "A figurine that summons Mongo when used.", + "value": 1000 + }, + { + "id": "lich_fgn", + "name": "Lich Figurine", + "type": "accessory", + "quality": "rare", + "slot": "trinket", + "stats": {}, + "description": "A figurine that summons a Lich when used.", + "value": 1200 + }, + { + "id": "old_man_fgn", + "name": "Old Man Figurine", + "type": "accessory", + "quality": "rare", + "slot": "trinket", + "stats": {}, + "description": "A figurine that summons an Old Man when used.", + "value": 1500 + }, + { + "id": "thor_fgn", + "name": "Thor Figurine", + "type": "accessory", + "quality": "epic", + "slot": "trinket", + "stats": {}, + "description": "A figurine that summons Thor when used.", + "value": 2000 + }, + { + "id": "torch", + "name": "Torch", + "type": "accessory", + "quality": "common", + "slot": "trinket", + "stats": {}, + "description": "A simple torch. Provides short-duration light.", + "value": 5 + }, + { + "id": "lamp", + "name": "Lamp", + "type": "accessory", + "quality": "common", + "slot": "trinket", + "stats": {}, + "description": "An oil lamp. Provides long-duration light.", + "value": 15 + }, + { + "id": "master_key", + "name": "Master Key", + "type": "accessory", + "quality": "rare", + "slot": "trinket", + "stats": {}, + "description": "A key that opens all gates when equipped.", + "value": 1200 + }, + { + "id": "onyx_key", + "name": "Onyx Key", + "type": "accessory", + "quality": "legendary", + "slot": "trinket", + "stats": {}, + "description": "A legendary key that opens Mangar's Tower gate.", + "value": 100000 + }, + { + "id": "eye", + "name": "Eye", + "type": "accessory", + "quality": "epic", + "slot": "trinket", + "stats": {}, + "description": "A mysterious eye artifact. Brings the Mad God to life.", + "value": 50000 + } +] diff --git a/data/items/armor.json b/data/items/armor.json new file mode 100644 index 0000000..5fa8c2e --- /dev/null +++ b/data/items/armor.json @@ -0,0 +1,125 @@ +[ + { + "id": "robes", + "name": "Robes", + "type": "armor", + "quality": "common", + "slot": "body", + "stats": { "defense": 1 }, + "description": "Simple robes worn by spellcasters.", + "value": 40, + "always_in_shop": true + }, + { + "id": "leather_armor", + "name": "Leather Armor", + "type": "armor", + "quality": "common", + "slot": "body", + "stats": { "defense": 2 }, + "description": "Boiled leather cuirass. Standard issue for militia.", + "value": 70, + "always_in_shop": true + }, + { + "id": "chain_mail", + "name": "Chain Mail", + "type": "armor", + "quality": "common", + "slot": "body", + "stats": { "defense": 3 }, + "description": "Interlocking metal rings provide solid protection.", + "value": 150, + "always_in_shop": true + }, + { + "id": "scale_mail", + "name": "Scale Armor", + "type": "armor", + "quality": "uncommon", + "slot": "body", + "stats": { "defense": 4 }, + "description": "Overlapping metal scales deflect slashes effectively.", + "value": 300 + }, + { + "id": "mthr_chain", + "name": "Mythril Chain", + "type": "armor", + "quality": "uncommon", + "slot": "body", + "stats": { "defense": 4 }, + "description": "Chain mail forged from lightweight mythril.", + "value": 500 + }, + { + "id": "plate_armor", + "name": "Plate Armor", + "type": "armor", + "quality": "uncommon", + "slot": "body", + "stats": { "defense": 5 }, + "description": "Full plate armor forged from fine steel.", + "value": 700 + }, + { + "id": "admt_chain", + "name": "Adamant Chain", + "type": "armor", + "quality": "rare", + "slot": "body", + "stats": { "defense": 5 }, + "description": "Chain mail forged from indestructible adamant.", + "value": 800 + }, + { + "id": "mthr_scale", + "name": "Mythril Scale", + "type": "armor", + "quality": "uncommon", + "slot": "body", + "stats": { "defense": 5 }, + "description": "Scale armor of gleaming mythril.", + "value": 900 + }, + { + "id": "admt_scale", + "name": "Adamant Scale", + "type": "armor", + "quality": "rare", + "slot": "body", + "stats": { "defense": 6 }, + "description": "Scale armor forged from adamant. Exceptionally strong.", + "value": 1200 + }, + { + "id": "admt_plate", + "name": "Adamant Plate", + "type": "armor", + "quality": "rare", + "slot": "body", + "stats": { "defense": 7 }, + "description": "Full plate armor of adamant. Nearly impervious.", + "value": 1600 + }, + { + "id": "mthr_plate", + "name": "Mythril Plate", + "type": "armor", + "quality": "uncommon", + "slot": "body", + "stats": { "defense": 6 }, + "description": "Plate armor of lightweight mythril. Strong yet maneuverable.", + "value": 2000 + }, + { + "id": "dmnd_plate", + "name": "Diamond Plate", + "type": "armor", + "quality": "epic", + "slot": "body", + "stats": { "defense": 8 }, + "description": "Armor encrusted with diamonds. The pinnacle of protection.", + "value": 4000 + } +] diff --git a/data/items/weapons.json b/data/items/weapons.json index 342a7c4..335c426 100644 --- a/data/items/weapons.json +++ b/data/items/weapons.json @@ -1,13 +1,471 @@ [ { - "id": "wooden_sword", - "name": "Wooden Sword", + "id": "dagger", + "name": "Dagger", "type": "weapon", "quality": "common", "slot": "main_hand", - "stats": { - "damage": 5 - }, - "description": "A simple wooden training sword." + "attack_type": "puncture", + "stats": { "damage": 3 }, + "description": "A short-bladed knife. Basic but reliable.", + "value": 20, + "always_in_shop": true + }, + { + "id": "staff", + "name": "Staff", + "type": "weapon", + "quality": "common", + "slot": "main_hand", + "attack_type": "crush", + "stats": { "damage": 5 }, + "description": "A simple wooden staff, serviceable but humble.", + "value": 20, + "always_in_shop": true + }, + { + "id": "short_sword", + "name": "Short Sword", + "type": "weapon", + "quality": "common", + "slot": "main_hand", + "attack_type": "slash", + "stats": { "damage": 5 }, + "description": "A standard-issue blade for city guards.", + "value": 30, + "always_in_shop": true + }, + { + "id": "mace", + "name": "Mace", + "type": "weapon", + "quality": "common", + "slot": "main_hand", + "attack_type": "crush", + "stats": { "damage": 5 }, + "description": "A simple bludgeoning weapon favored by clerics.", + "value": 60, + "always_in_shop": true + }, + { + "id": "war_axe", + "name": "War Axe", + "type": "weapon", + "quality": "common", + "slot": "main_hand", + "attack_type": "slash", + "stats": { "damage": 5 }, + "description": "A single-bladed axe swung with brutal force.", + "value": 70, + "always_in_shop": true + }, + { + "id": "broadsword", + "name": "Broadsword", + "type": "weapon", + "quality": "common", + "slot": "main_hand", + "attack_type": "slash", + "stats": { "damage": 5 }, + "description": "A wide blade that delivers heavy cuts.", + "value": 80, + "always_in_shop": true + }, + { + "id": "halbard", + "name": "Halbard", + "type": "weapon", + "quality": "common", + "slot": "main_hand", + "attack_type": "slash", + "stats": { "damage": 9 }, + "description": "A poleaxe with a broad cutting head.", + "value": 200, + "always_in_shop": true + }, + { + "id": "mthr_dagger", + "name": "Mythril Dagger", + "type": "weapon", + "quality": "uncommon", + "slot": "main_hand", + "attack_type": "puncture", + "stats": { "damage": 3 }, + "description": "A lightweight dagger forged from mythril. Enchanted +1.", + "value": 200 + }, + { + "id": "mthr_sword", + "name": "Mythril Sword", + "type": "weapon", + "quality": "uncommon", + "slot": "main_hand", + "attack_type": "slash", + "stats": { "damage": 5 }, + "description": "A mythril blade of fine craftsmanship. Enchanted +1.", + "value": 300 + }, + { + "id": "mthr_axe", + "name": "Mythril Axe", + "type": "weapon", + "quality": "uncommon", + "slot": "main_hand", + "attack_type": "slash", + "stats": { "damage": 5 }, + "description": "A mythril axe with a razor edge. Enchanted +1.", + "value": 300 + }, + { + "id": "mthr_mace", + "name": "Mythril Mace", + "type": "weapon", + "quality": "uncommon", + "slot": "main_hand", + "attack_type": "crush", + "stats": { "damage": 5 }, + "description": "A mythril mace that crushes armor with ease.", + "value": 300 + }, + { + "id": "admt_dagger", + "name": "Adamant Dagger", + "type": "weapon", + "quality": "uncommon", + "slot": "main_hand", + "attack_type": "puncture", + "stats": { "damage": 4 }, + "description": "An adamant dagger of deadly precision. Enchanted +2.", + "value": 300 + }, + { + "id": "dayblade", + "name": "Dayblade", + "type": "weapon", + "quality": "uncommon", + "slot": "main_hand", + "attack_type": "slash", + "stats": { "damage": 13 }, + "description": "A sword that blazes with light. Casts Mage Flame on use. Enchanted +1.", + "value": 400 + }, + { + "id": "admt_mace", + "name": "Adamant Mace", + "type": "weapon", + "quality": "uncommon", + "slot": "main_hand", + "attack_type": "crush", + "stats": { "damage": 6 }, + "description": "An adamant mace of tremendous crushing power. Enchanted +2.", + "value": 400 + }, + { + "id": "admt_sword", + "name": "Adamant Sword", + "type": "weapon", + "quality": "uncommon", + "slot": "main_hand", + "attack_type": "slash", + "stats": { "damage": 6 }, + "description": "An adamant blade that cleaves through armor. Enchanted +2.", + "value": 500 + }, + { + "id": "crystal_sword", + "name": "Crystal Sword", + "type": "weapon", + "quality": "uncommon", + "slot": "main_hand", + "attack_type": "slash", + "stats": { "damage": 17 }, + "description": "A crystalline sword that permanently destroys Crystal Golems. Enchanted +1.", + "value": 500 + }, + { + "id": "kaels_axe", + "name": "Kael's Axe", + "type": "weapon", + "quality": "uncommon", + "slot": "main_hand", + "attack_type": "slash", + "stats": { "damage": 12 }, + "description": "A cursed axe that poisons those it strikes. Enchanted +2.", + "value": 600 + }, + { + "id": "hawkblade", + "name": "Hawkblade", + "type": "weapon", + "quality": "uncommon", + "slot": "main_hand", + "attack_type": "slash", + "stats": { "damage": 14 }, + "description": "A swift blade that strikes with hawk-like precision.", + "value": 600 + }, + { + "id": "broom", + "name": "Broom", + "type": "weapon", + "quality": "uncommon", + "slot": "main_hand", + "attack_type": "crush", + "stats": { "damage": 4 }, + "description": "A magically animated broom. Casts Phase Door on use. Enchanted +2.", + "value": 600 + }, + { + "id": "pureblade", + "name": "Pureblade", + "type": "weapon", + "quality": "uncommon", + "slot": "main_hand", + "attack_type": "slash", + "stats": { "damage": 17 }, + "description": "A blade of pure energy. Casts Flame Flask on use.", + "value": 600 + }, + { + "id": "bardsword", + "name": "Bardsword", + "type": "weapon", + "quality": "uncommon", + "slot": "main_hand", + "attack_type": "slash", + "stats": { "damage": 9 }, + "description": "A sword that grants unlimited Bard songs when equipped. Enchanted +1.", + "value": 700 + }, + { + "id": "blood_axe", + "name": "Blood Axe", + "type": "weapon", + "quality": "uncommon", + "slot": "main_hand", + "attack_type": "slash", + "stats": { "damage": 15 }, + "description": "An axe that thirsts for blood. Enchanted +2.", + "value": 700 + }, + { + "id": "dmnd_dagger", + "name": "Diamond Dagger", + "type": "weapon", + "quality": "rare", + "slot": "main_hand", + "attack_type": "puncture", + "stats": { "damage": 5 }, + "description": "A dagger with a diamond edge. Enchanted +3.", + "value": 800 + }, + { + "id": "shield_staff", + "name": "Shield Staff", + "type": "weapon", + "quality": "uncommon", + "slot": "main_hand", + "attack_type": "crush", + "stats": { "damage": 9, "defense": 2 }, + "description": "A staff that also provides protection. Enchanted +1.", + "value": 1000 + }, + { + "id": "thief_dagger", + "name": "Thief Dagger", + "type": "weapon", + "quality": "uncommon", + "slot": "main_hand", + "attack_type": "puncture", + "stats": { "damage": 13 }, + "description": "A dagger that improves the wearer's chance to hide in combat.", + "value": 1100 + }, + { + "id": "dmnd_sword", + "name": "Diamond Sword", + "type": "weapon", + "quality": "rare", + "slot": "main_hand", + "attack_type": "slash", + "stats": { "damage": 7 }, + "description": "A sword with a diamond blade of incredible sharpness. Enchanted +3.", + "value": 1200 + }, + { + "id": "soul_mace", + "name": "Soul Mace", + "type": "weapon", + "quality": "uncommon", + "slot": "main_hand", + "attack_type": "crush", + "stats": { "damage": 9 }, + "description": "A mace that can possess the souls of those it strikes. Enchanted +1.", + "value": 1500 + }, + { + "id": "sword_of_pak", + "name": "Sword of Pak", + "type": "weapon", + "quality": "rare", + "slot": "main_hand", + "attack_type": "slash", + "stats": { "damage": 14 }, + "description": "A legendary sword that casts Levitate on use. Enchanted +2.", + "value": 3000 + }, + { + "id": "wither_staff", + "name": "Wither Staff", + "type": "weapon", + "quality": "rare", + "slot": "main_hand", + "attack_type": "crush", + "stats": { "damage": 8 }, + "description": "A staff that ages those it strikes. Enchanted +2.", + "value": 4000 + }, + { + "id": "arcs_hammer", + "name": "Arc's Hammer", + "type": "weapon", + "quality": "rare", + "slot": "main_hand", + "attack_type": "crush", + "stats": { "damage": 18 }, + "description": "A warhammer that casts Recharge Item on use. Enchanted +1.", + "value": 4000 + }, + { + "id": "mournblade", + "name": "Mournblade", + "type": "weapon", + "quality": "rare", + "slot": "main_hand", + "attack_type": "slash", + "stats": { "damage": 17 }, + "description": "A dark sword that drains levels from its victims. Enchanted +1.", + "value": 4000 + }, + { + "id": "mage_staff", + "name": "Mage Staff", + "type": "weapon", + "quality": "rare", + "slot": "main_hand", + "attack_type": "crush", + "stats": { "damage": 14, "defense": 2 }, + "description": "A staff that regenerates spell points when equipped.", + "value": 5000 + }, + { + "id": "war_staff", + "name": "War Staff", + "type": "weapon", + "quality": "rare", + "slot": "main_hand", + "attack_type": "crush", + "stats": { "damage": 18 }, + "description": "A heavy staff of great destructive power.", + "value": 6000 + }, + { + "id": "sorcerstaff", + "name": "Sorcerstaff", + "type": "weapon", + "quality": "rare", + "slot": "main_hand", + "attack_type": "crush", + "stats": { "damage": 8, "defense": 2 }, + "description": "A staff that casts Disintegrate in combat. Enchanted +3.", + "value": 8000 + }, + { + "id": "conjurstaff", + "name": "Conjurstaff", + "type": "weapon", + "quality": "rare", + "slot": "main_hand", + "attack_type": "crush", + "stats": { "damage": 8 }, + "description": "A staff that halves spell costs when equipped. Enchanted +2.", + "value": 8000 + }, + { + "id": "staff_of_lor", + "name": "Staff of Lor", + "type": "weapon", + "quality": "rare", + "slot": "main_hand", + "attack_type": "crush", + "stats": { "damage": 12 }, + "description": "A staff that drives enemies insane and casts Restore on use. Enchanted +1.", + "value": 9000 + }, + { + "id": "powerstaff", + "name": "Powerstaff", + "type": "weapon", + "quality": "rare", + "slot": "main_hand", + "attack_type": "crush", + "stats": { "damage": 14 }, + "description": "A staff that burns groups for 4-16 damage in combat. Enchanted +1.", + "value": 12000 + }, + { + "id": "spectre_mace", + "name": "Spectre Mace", + "type": "weapon", + "quality": "epic", + "slot": "main_hand", + "attack_type": "crush", + "stats": { "damage": 16 }, + "description": "A ghostly mace that drains levels from its victims. Enchanted +5.", + "value": 20000 + }, + { + "id": "death_dagger", + "name": "Death Dagger", + "type": "weapon", + "quality": "epic", + "slot": "main_hand", + "attack_type": "puncture", + "stats": { "damage": 9 }, + "description": "A dagger that delivers critical strikes. Enchanted +3.", + "value": 60000 + }, + { + "id": "stoneblade", + "name": "Stone Blade", + "type": "weapon", + "quality": "epic", + "slot": "main_hand", + "attack_type": "crush", + "stats": { "damage": 14 }, + "description": "A blade that turns those it strikes to stone.", + "value": 70000 + }, + { + "id": "troll_staff", + "name": "Troll Staff", + "type": "weapon", + "quality": "epic", + "slot": "main_hand", + "attack_type": "crush", + "stats": { "damage": 12 }, + "description": "A staff that regenerates HP when equipped. Enchanted +4.", + "value": 100000 + }, + { + "id": "spectre_snare", + "name": "Spectre Snare", + "type": "weapon", + "quality": "legendary", + "slot": "main_hand", + "attack_type": "puncture", + "stats": { "damage": 33, "defense": 8 }, + "description": "The ultimate weapon. Critical strikes, devastating damage, and casts Spark in combat. Enchanted +1.", + "value": 200000 } ] diff --git a/data/spells/spells.json b/data/spells/spells.json new file mode 100644 index 0000000..882ef86 --- /dev/null +++ b/data/spells/spells.json @@ -0,0 +1,1266 @@ +[ + { + "id": "mafl", + "code": "MAFL", + "name": "Mage Flame", + "caster_class": "conjurer", + "spell_level": 1, + "spell_points": 2, + "range": "view", + "duration": "medium", + "description": "A small mobile torch will appear and float above the spell caster as they travel.", + "combat_effect": "light", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "arfi", + "code": "ARFI", + "name": "Arc Fire", + "caster_class": "conjurer", + "spell_level": 1, + "spell_points": 3, + "range": "1_foe", + "duration": "instant", + "description": "1-4 hits damage multiplied by caster level.", + "combat_effect": "damage", + "combat_damage_min": 1, + "combat_damage_max": 4, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "sosh", + "code": "SOSH", + "name": "Sorcerer Shield", + "caster_class": "conjurer", + "spell_level": 1, + "spell_points": 3, + "range": "self", + "duration": "combat", + "description": "Protects mage, turning aside blows.", + "combat_effect": "buff_defense", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "trzp", + "code": "TRZP", + "name": "Trap Zap", + "caster_class": "conjurer", + "spell_level": 1, + "spell_points": 2, + "range": "30_feet", + "duration": "instant", + "description": "Disarms traps within 30 feet.", + "combat_effect": "trap_disarm", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "frfo", + "code": "FRFO", + "name": "Freeze Foes", + "caster_class": "conjurer", + "spell_level": 2, + "spell_points": 3, + "range": "group", + "duration": "combat", + "description": "Binds enemies with magical force, making them easier to hit.", + "combat_effect": "debuff", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "maco", + "code": "MACO", + "name": "Kiel's Magic Compass", + "caster_class": "conjurer", + "spell_level": 2, + "spell_points": 3, + "range": "self", + "duration": "medium", + "description": "Shows the direction currently faced.", + "combat_effect": "utility", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "bask", + "code": "BASK", + "name": "Battleskill", + "caster_class": "conjurer", + "spell_level": 2, + "spell_points": 4, + "range": "char", + "duration": "combat", + "description": "Increases one party member's weapon accuracy and ferocity.", + "combat_effect": "buff_attack", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "wohl", + "code": "WOHL", + "name": "Word of Healing", + "caster_class": "conjurer", + "spell_level": 2, + "spell_points": 4, + "range": "char", + "duration": "instant", + "description": "Heals 2-8 HP.", + "combat_effect": "heal", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 2, + "heal_max": 8 + }, + { + "id": "mast", + "code": "MAST", + "name": "Arcyne's Magestar", + "caster_class": "conjurer", + "spell_level": 3, + "spell_points": 5, + "range": "group", + "duration": "instant", + "description": "A blinding flare that causes a group of enemies to miss their next attack round.", + "combat_effect": "debuff", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "lere", + "code": "LERE", + "name": "Lesser Revelation", + "caster_class": "conjurer", + "spell_level": 3, + "spell_points": 5, + "range": "view", + "duration": "long", + "description": "Extended Mage Flame that also reveals secret doors.", + "combat_effect": "reveal", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "levi", + "code": "LEVI", + "name": "Levitation", + "caster_class": "conjurer", + "spell_level": 3, + "spell_points": 4, + "range": "party", + "duration": "short", + "description": "Float over traps and portals.", + "combat_effect": "utility", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "wast", + "code": "WAST", + "name": "Warstrike", + "caster_class": "conjurer", + "spell_level": 3, + "spell_points": 5, + "range": "group", + "duration": "instant", + "description": "An energy spray that deals 4-16 damage per foe.", + "combat_effect": "damage", + "combat_damage_min": 4, + "combat_damage_max": 16, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "inwo", + "code": "INWO", + "name": "Elik's Instant Wolf", + "caster_class": "conjurer", + "spell_level": 4, + "spell_points": 6, + "range": "special", + "duration": "combat", + "description": "Summons a wolf to fight for the party.", + "combat_effect": "summon", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "flre", + "code": "FLRE", + "name": "Flesh Restore", + "caster_class": "conjurer", + "spell_level": 4, + "spell_points": 6, + "range": "char", + "duration": "instant", + "description": "Heals 6-24 HP and cures poison and insanity.", + "combat_effect": "heal", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 6, + "heal_max": 24 + }, + { + "id": "post", + "code": "POST", + "name": "Poison Strike", + "caster_class": "conjurer", + "spell_level": 4, + "spell_points": 6, + "range": "foe", + "duration": "instant", + "description": "Poisons a selected monster with needles.", + "combat_effect": "debuff", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "grre", + "code": "GRRE", + "name": "Greater Revelation", + "caster_class": "conjurer", + "spell_level": 5, + "spell_points": 7, + "range": "view", + "duration": "long", + "description": "Wider area light that reveals secret doors.", + "combat_effect": "reveal", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "wrov", + "code": "WROV", + "name": "Wrath of Valhalla", + "caster_class": "conjurer", + "spell_level": 5, + "spell_points": 7, + "range": "char", + "duration": "combat", + "description": "Party member fights with the strength of a Norse hero.", + "combat_effect": "buff_attack", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "shsp", + "code": "SHSP", + "name": "Shock Sphere", + "caster_class": "conjurer", + "spell_level": 5, + "spell_points": 7, + "range": "group", + "duration": "instant", + "description": "Electrical energy that deals 8-32 damage to a group.", + "combat_effect": "damage", + "combat_damage_min": 8, + "combat_damage_max": 32, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "inog", + "code": "INOG", + "name": "Elik's Instant Ogre", + "caster_class": "conjurer", + "spell_level": 6, + "spell_points": 9, + "range": "special", + "duration": "combat", + "description": "Summons an ogre to fight for the party.", + "combat_effect": "summon", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "male", + "code": "MALE", + "name": "Major Levitation", + "caster_class": "conjurer", + "spell_level": 6, + "spell_points": 8, + "range": "party", + "duration": "indefinite", + "description": "Levitation that lasts until dispelled.", + "combat_effect": "utility", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "flan", + "code": "FLAN", + "name": "Flesh Anew", + "caster_class": "conjurer", + "spell_level": 7, + "spell_points": 12, + "range": "party", + "duration": "instant", + "description": "Full party heal like Flesh Restore, cures poison and insanity.", + "combat_effect": "heal", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 6, + "heal_max": 24 + }, + { + "id": "apar", + "code": "APAR", + "name": "Apport Arcane", + "caster_class": "conjurer", + "spell_level": 7, + "spell_points": 15, + "range": "party", + "duration": "instant", + "description": "Teleport anywhere within the dungeon.", + "combat_effect": "teleport", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "vopl", + "code": "VOPL", + "name": "Vorpal Plating", + "caster_class": "magician", + "spell_level": 1, + "spell_points": 3, + "range": "char", + "duration": "combat", + "description": "Weapon gains +2-8 damage.", + "combat_effect": "buff_attack", + "combat_damage_min": 2, + "combat_damage_max": 8, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "aiar", + "code": "AIAR", + "name": "Air Armor", + "caster_class": "magician", + "spell_level": 1, + "spell_points": 3, + "range": "self", + "duration": "combat", + "description": "Weightless air armor protection.", + "combat_effect": "buff_defense", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "stli", + "code": "STLI", + "name": "Sabhar's Steelight Spell", + "caster_class": "magician", + "spell_level": 1, + "spell_points": 2, + "range": "view", + "duration": "short", + "description": "Metal glows, illuminating the area.", + "combat_effect": "light", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "scsi", + "code": "SCSI", + "name": "Scry Site", + "caster_class": "magician", + "spell_level": 1, + "spell_points": 2, + "range": "party", + "duration": "instant", + "description": "Walls reveal the party's location in the labyrinth.", + "combat_effect": "scout", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "howa", + "code": "HOWA", + "name": "Holy Water", + "caster_class": "magician", + "spell_level": 2, + "spell_points": 4, + "range": "1_foe", + "duration": "instant", + "description": "6-24 damage to undead.", + "combat_effect": "damage", + "combat_damage_min": 6, + "combat_damage_max": 24, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "wist", + "code": "WIST", + "name": "Wither Strike", + "caster_class": "magician", + "spell_level": 2, + "spell_points": 5, + "range": "1_foe", + "duration": "instant", + "description": "Ages the foe, reducing attack and defense.", + "combat_effect": "debuff", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "maga", + "code": "MAGA", + "name": "Mage Gauntlets", + "caster_class": "magician", + "spell_level": 2, + "spell_points": 5, + "range": "char", + "duration": "combat", + "description": "Adds +4-16 damage per wound.", + "combat_effect": "buff_attack", + "combat_damage_min": 4, + "combat_damage_max": 16, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "aren", + "code": "AREN", + "name": "Area Enchant", + "caster_class": "magician", + "spell_level": 2, + "spell_points": 5, + "range": "30_feet", + "duration": "short", + "description": "Walls call out near stairways.", + "combat_effect": "scout", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "mysh", + "code": "MYSH", + "name": "Ybarra's Mystic Shield", + "caster_class": "magician", + "spell_level": 3, + "spell_points": 6, + "range": "party", + "duration": "medium", + "description": "Invisible shield protecting the entire party.", + "combat_effect": "buff_defense", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "ogst", + "code": "OGST", + "name": "Oscon's Ogrestrength", + "caster_class": "magician", + "spell_level": 3, + "spell_points": 6, + "range": "char", + "duration": "combat", + "description": "Damage as if the character were incredibly strong.", + "combat_effect": "buff_attack", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "mimi", + "code": "MIMI", + "name": "Mithril Might", + "caster_class": "magician", + "spell_level": 3, + "spell_points": 7, + "range": "party", + "duration": "combat", + "description": "Enhances armor protection for the entire party.", + "combat_effect": "buff_defense", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "stfl", + "code": "STFL", + "name": "Starflare", + "caster_class": "magician", + "spell_level": 3, + "spell_points": 6, + "range": "group", + "duration": "instant", + "description": "Burns a group for 6-24 damage.", + "combat_effect": "damage", + "combat_damage_min": 6, + "combat_damage_max": 24, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "spto", + "code": "SPTO", + "name": "Spectre Touch", + "caster_class": "magician", + "spell_level": 4, + "spell_points": 8, + "range": "1_foe", + "duration": "instant", + "description": "Drains 12-48 damage like a spectre.", + "combat_effect": "damage", + "combat_damage_min": 12, + "combat_damage_max": 48, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "drbr", + "code": "DRBR", + "name": "Dragon Breath", + "caster_class": "magician", + "spell_level": 4, + "spell_points": 7, + "range": "group", + "duration": "instant", + "description": "Fire breath dealing 8-32 damage to a group.", + "combat_effect": "damage", + "combat_damage_min": 8, + "combat_damage_max": 32, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "stsi", + "code": "STSI", + "name": "Sabhar's Stonelight Spell", + "caster_class": "magician", + "spell_level": 4, + "spell_points": 7, + "range": "view", + "duration": "medium", + "description": "Stone glows, revealing secrets.", + "combat_effect": "reveal", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "anma", + "code": "ANMA", + "name": "Anti-magic", + "caster_class": "magician", + "spell_level": 5, + "spell_points": 8, + "range": "party", + "duration": "combat", + "description": "Absorbs magical energies cast at the party.", + "combat_effect": "dispel", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "answ", + "code": "ANSW", + "name": "Aker's Animated Sword", + "caster_class": "magician", + "spell_level": 5, + "spell_points": 8, + "range": "special", + "duration": "combat", + "description": "A sword that fights for the party.", + "combat_effect": "summon", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "stto", + "code": "STTO", + "name": "Stone Touch", + "caster_class": "magician", + "spell_level": 5, + "spell_points": 8, + "range": "1_foe", + "duration": "instant", + "description": "Turns an enemy to stone.", + "combat_effect": "debuff", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "phdo", + "code": "PHDO", + "name": "Phase Door", + "caster_class": "magician", + "spell_level": 6, + "spell_points": 9, + "range": "1_wall", + "duration": "1_move", + "description": "Turns a wall to air for one move.", + "combat_effect": "utility", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "ymca", + "code": "YMCA", + "name": "Ybarra's Mystical Coat of Armor", + "caster_class": "magician", + "spell_level": 6, + "spell_points": 10, + "range": "party", + "duration": "indefinite", + "description": "Air armor protection for the entire party.", + "combat_effect": "buff_defense", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "rest", + "code": "REST", + "name": "Restoration", + "caster_class": "magician", + "spell_level": 7, + "spell_points": 12, + "range": "party", + "duration": "instant", + "description": "Full heal for the party, cures poison and insanity.", + "combat_effect": "heal", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "dest", + "code": "DEST", + "name": "Deathstrike", + "caster_class": "magician", + "spell_level": 7, + "spell_points": 14, + "range": "1_foe", + "duration": "instant", + "description": "Very likely to kill one enemy.", + "combat_effect": "damage", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "mija", + "code": "MIJA", + "name": "Mind Jab", + "caster_class": "sorcerer", + "spell_level": 1, + "spell_points": 3, + "range": "1_foe", + "duration": "instant", + "description": "2-8 damage multiplied by caster level.", + "combat_effect": "damage", + "combat_damage_min": 2, + "combat_damage_max": 8, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "phbl", + "code": "PHBL", + "name": "Phase Blur", + "caster_class": "sorcerer", + "spell_level": 1, + "spell_points": 2, + "range": "party", + "duration": "combat", + "description": "Makes the party difficult to strike.", + "combat_effect": "buff_defense", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "lotr", + "code": "LOTR", + "name": "Locate Traps", + "caster_class": "sorcerer", + "spell_level": 1, + "spell_points": 2, + "range": "30_feet", + "duration": "short", + "description": "Sense traps within 30 feet.", + "combat_effect": "trap_disarm", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "hyim", + "code": "HYIM", + "name": "Hypnotic Image", + "caster_class": "sorcerer", + "spell_level": 1, + "spell_points": 3, + "range": "group", + "duration": "instant", + "description": "A group of enemies misses their next attack round.", + "combat_effect": "debuff", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "disb", + "code": "DISB", + "name": "Disbelieve", + "caster_class": "sorcerer", + "spell_level": 2, + "spell_points": 4, + "range": "party", + "duration": "instant", + "description": "Reveals illusions, causing them to vanish.", + "combat_effect": "dispel", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "tadu", + "code": "TADU", + "name": "Target Dummy", + "caster_class": "sorcerer", + "spell_level": 2, + "spell_points": 4, + "range": "special", + "duration": "combat", + "description": "An illusion that draws enemy attacks away from the party.", + "combat_effect": "control", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "mifi", + "code": "MIFI", + "name": "Mind Fist", + "caster_class": "sorcerer", + "spell_level": 2, + "spell_points": 4, + "range": "1_foe", + "duration": "instant", + "description": "3-12 damage multiplied by caster level.", + "combat_effect": "damage", + "combat_damage_min": 3, + "combat_damage_max": 12, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "fear", + "code": "FEAR", + "name": "Word of Fear", + "caster_class": "sorcerer", + "spell_level": 2, + "spell_points": 4, + "range": "group", + "duration": "combat", + "description": "A group shakes in fear with reduced ability.", + "combat_effect": "debuff", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "wiwo", + "code": "WIWO", + "name": "Wind Wolf", + "caster_class": "sorcerer", + "spell_level": 3, + "spell_points": 5, + "range": "special", + "duration": "combat", + "description": "An illusionary wolf that fights for the party.", + "combat_effect": "summon", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "vani", + "code": "VANI", + "name": "Kylearan's Vanishing Spell", + "caster_class": "sorcerer", + "spell_level": 3, + "spell_points": 6, + "range": "self", + "duration": "combat", + "description": "Makes the caster nearly invisible.", + "combat_effect": "buff_defense", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "sesi", + "code": "SESI", + "name": "Second Sight", + "caster_class": "sorcerer", + "spell_level": 3, + "spell_points": 6, + "range": "30_feet", + "duration": "medium", + "description": "Sense stairs, specials, and anti-magic zones within 30 feet.", + "combat_effect": "scout", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "curs", + "code": "CURS", + "name": "Curse", + "caster_class": "sorcerer", + "spell_level": 3, + "spell_points": 5, + "range": "group", + "duration": "combat", + "description": "Fears enemies, lessening their morale and ability.", + "combat_effect": "debuff", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "caey", + "code": "CAEY", + "name": "Cat Eyes", + "caster_class": "sorcerer", + "spell_level": 4, + "spell_points": 7, + "range": "view", + "duration": "indefinite", + "description": "Perfect night vision for the party.", + "combat_effect": "utility", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "wiwa", + "code": "WIWA", + "name": "Wind Warrior", + "caster_class": "sorcerer", + "spell_level": 4, + "spell_points": 6, + "range": "special", + "duration": "combat", + "description": "An illusionary warrior that fights for the party.", + "combat_effect": "summon", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "invi", + "code": "INVI", + "name": "Kylearan's Invisibility Spell", + "caster_class": "sorcerer", + "spell_level": 4, + "spell_points": 7, + "range": "party", + "duration": "combat", + "description": "Vanishing spell applied to the entire party.", + "combat_effect": "buff_defense", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "wiog", + "code": "WIOG", + "name": "Wind Ogre", + "caster_class": "sorcerer", + "spell_level": 5, + "spell_points": 7, + "range": "special", + "duration": "combat", + "description": "An illusionary ogre that fights for the party.", + "combat_effect": "summon", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "diil", + "code": "DIIL", + "name": "Disrupt Illusion", + "caster_class": "sorcerer", + "spell_level": 5, + "spell_points": 8, + "range": "party", + "duration": "combat", + "description": "Destroys all illusions and reveals dopplegangers.", + "combat_effect": "dispel", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "mibl", + "code": "MIBL", + "name": "Mind Blade", + "caster_class": "sorcerer", + "spell_level": 5, + "spell_points": 8, + "range": "all", + "duration": "instant", + "description": "10-40 damage to each enemy faced.", + "combat_effect": "damage", + "combat_damage_min": 10, + "combat_damage_max": 40, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "widr", + "code": "WIDR", + "name": "Wind Dragon", + "caster_class": "sorcerer", + "spell_level": 6, + "spell_points": 10, + "range": "special", + "duration": "combat", + "description": "An illusionary red dragon that fights for the party.", + "combat_effect": "summon", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "miwp", + "code": "MIWP", + "name": "Mind Warp", + "caster_class": "sorcerer", + "spell_level": 6, + "spell_points": 9, + "range": "char", + "duration": "instant", + "description": "Makes a party member go insane. Useful for possessions.", + "combat_effect": "control", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "wigi", + "code": "WIGI", + "name": "Wind Giant", + "caster_class": "sorcerer", + "spell_level": 7, + "spell_points": 12, + "range": "special", + "duration": "combat", + "description": "An illusionary storm giant that fights for the party.", + "combat_effect": "summon", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "sosi", + "code": "SOSI", + "name": "Sorcerer Sight", + "caster_class": "sorcerer", + "spell_level": 7, + "spell_points": 11, + "range": "30_feet", + "duration": "indefinite", + "description": "Second Sight that lasts indefinitely.", + "combat_effect": "scout", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "sude", + "code": "SUDE", + "name": "Summon Dead", + "caster_class": "wizard", + "spell_level": 1, + "spell_points": 6, + "range": "special", + "duration": "combat", + "description": "Gates in a zombie or skeleton to fight for the party.", + "combat_effect": "summon", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "rede", + "code": "REDE", + "name": "Repel Dead", + "caster_class": "wizard", + "spell_level": 1, + "spell_points": 4, + "range": "group", + "duration": "instant", + "description": "16-80 damage to a group of undead.", + "combat_effect": "damage", + "combat_damage_min": 16, + "combat_damage_max": 80, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "lesu", + "code": "LESU", + "name": "Lesser Summoning", + "caster_class": "wizard", + "spell_level": 2, + "spell_points": 8, + "range": "special", + "duration": "combat", + "description": "Gates in a lower power elemental or demon.", + "combat_effect": "summon", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "deba", + "code": "DEBA", + "name": "Demon Bane", + "caster_class": "wizard", + "spell_level": 2, + "spell_points": 8, + "range": "1_foe", + "duration": "instant", + "description": "32-128 damage to a demon.", + "combat_effect": "damage", + "combat_damage_min": 32, + "combat_damage_max": 128, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "suph", + "code": "SUPH", + "name": "Summon Phantom", + "caster_class": "wizard", + "spell_level": 3, + "spell_points": 10, + "range": "special", + "duration": "combat", + "description": "Brings a medium level undead to fight for the party.", + "combat_effect": "summon", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "disp", + "code": "DISP", + "name": "Dispossess", + "caster_class": "wizard", + "spell_level": 3, + "spell_points": 10, + "range": "char", + "duration": "instant", + "description": "Cures possession on a party member.", + "combat_effect": "dispel", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "prsu", + "code": "PRSU", + "name": "Prime Summoning", + "caster_class": "wizard", + "spell_level": 4, + "spell_points": 12, + "range": "special", + "duration": "combat", + "description": "Gates in a medium elemental or demon.", + "combat_effect": "summon", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "ande", + "code": "ANDE", + "name": "Animate Dead", + "caster_class": "wizard", + "spell_level": 4, + "spell_points": 11, + "range": "char", + "duration": "combat", + "description": "A dead character attacks as undead.", + "combat_effect": "summon", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "spbi", + "code": "SPBI", + "name": "Baylor's Spell Bind", + "caster_class": "wizard", + "spell_level": 5, + "spell_points": 14, + "range": "1_foe", + "duration": "instant", + "description": "Possesses an enemy mind, forcing them to join the party.", + "combat_effect": "control", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "dmst", + "code": "DMST", + "name": "Demon Strike", + "caster_class": "wizard", + "spell_level": 5, + "spell_points": 14, + "range": "group", + "duration": "instant", + "description": "Like Demon Bane but affects an entire group of demons.", + "combat_effect": "damage", + "combat_damage_min": 32, + "combat_damage_max": 128, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "spsp", + "code": "SPSP", + "name": "Spell Spirit", + "caster_class": "wizard", + "spell_level": 6, + "spell_points": 15, + "range": "special", + "duration": "combat", + "description": "Gates in a higher-level undead.", + "combat_effect": "summon", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + }, + { + "id": "bede", + "code": "BEDE", + "name": "Beyond Death", + "caster_class": "wizard", + "spell_level": 6, + "spell_points": 18, + "range": "char", + "duration": "instant", + "description": "Restores life and 1 HP to a dead character.", + "combat_effect": "revive", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 1, + "heal_max": 1 + }, + { + "id": "grsu", + "code": "GRSU", + "name": "Greater Summoning", + "caster_class": "wizard", + "spell_level": 7, + "spell_points": 22, + "range": "special", + "duration": "combat", + "description": "Gates in a greater demon.", + "combat_effect": "summon", + "combat_damage_min": 0, + "combat_damage_max": 0, + "heal_min": 0, + "heal_max": 0 + } +] diff --git a/rust/src/lib.rs b/rust/src/lib.rs index 417bf57..46aeea9 100644 --- a/rust/src/lib.rs +++ b/rust/src/lib.rs @@ -1 +1 @@ -pub const PROJECT_NAME: &str = "skara-brae"; +pub const PROJECT_NAME: &str = "Skara Brae"; diff --git a/ts/src/index.ts b/ts/src/index.ts index abe78aa..ce5b97e 100644 --- a/ts/src/index.ts +++ b/ts/src/index.ts @@ -1 +1 @@ -export const PROJECT_NAME = "skara-brae" as const; +export const PROJECT_NAME = "Skara Brae" as const;