From e16aa21df58c863fe8fed67c6c5fb96540d76e89 Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Wed, 11 Sep 2024 18:31:08 -0500 Subject: [PATCH] Issue #101 unit test (should fail) --- .github/workflows/ci.yml | 4 +- src/fileio/fileio.hpp | 2 +- src/fileio/fileio_scen.cpp | 26 +- test/SConscript | 2 + test/files/town/townrectMac.exs | Bin 0 -> 95680 bytes test/files/town/townrectUniversal/header.exs | Bin 0 -> 12 bytes test/files/town/townrectUniversal/items.xml | 9063 +++++++++++++++++ .../files/town/townrectUniversal/monsters.xml | 4606 +++++++++ .../town/townrectUniversal/out/out0~0.map | 48 + .../town/townrectUniversal/out/out0~0.spec | 0 .../town/townrectUniversal/out/out0~0.xml | 5 + .../town/townrectUniversal/scenario.spec | 0 .../files/town/townrectUniversal/scenario.xml | 61 + test/files/town/townrectUniversal/terrain.xml | 6270 ++++++++++++ .../town/townrectUniversal/towns/talk0.xml | 63 + .../town/townrectUniversal/towns/town0.map | 48 + .../town/townrectUniversal/towns/town0.spec | 0 .../town/townrectUniversal/towns/town0.xml | 12 + test/files/town/townrectWindows.exs | Bin 0 -> 95687 bytes test/town_legacy.cpp | 30 + 20 files changed, 20225 insertions(+), 15 deletions(-) create mode 100644 test/files/town/townrectMac.exs create mode 100644 test/files/town/townrectUniversal/header.exs create mode 100644 test/files/town/townrectUniversal/items.xml create mode 100644 test/files/town/townrectUniversal/monsters.xml create mode 100644 test/files/town/townrectUniversal/out/out0~0.map create mode 100644 test/files/town/townrectUniversal/out/out0~0.spec create mode 100644 test/files/town/townrectUniversal/out/out0~0.xml create mode 100644 test/files/town/townrectUniversal/scenario.spec create mode 100644 test/files/town/townrectUniversal/scenario.xml create mode 100644 test/files/town/townrectUniversal/terrain.xml create mode 100644 test/files/town/townrectUniversal/towns/talk0.xml create mode 100644 test/files/town/townrectUniversal/towns/town0.map create mode 100644 test/files/town/townrectUniversal/towns/town0.spec create mode 100644 test/files/town/townrectUniversal/towns/town0.xml create mode 100644 test/files/town/townrectWindows.exs diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b822bfa58..28a3e7d42 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -58,7 +58,7 @@ }, { name: build and unit test, - run: ./.github/workflows/scripts/mac/scons-build.sh + run: ./.github/workflows/scripts/mac/scons-build.sh test=true } ] }, @@ -153,7 +153,7 @@ }, { name: build and unit test, - run: '.\.github\workflows\scripts\win\scons-build.bat' + run: '.\.github\workflows\scripts\win\scons-build.bat test=true' }, { name: warn about failure to launch tests, diff --git a/src/fileio/fileio.hpp b/src/fileio/fileio.hpp index f6ce69736..2ed4b369f 100644 --- a/src/fileio/fileio.hpp +++ b/src/fileio/fileio.hpp @@ -19,7 +19,7 @@ class cScenario; class cUniverse; fs::path locate_scenario(std::string scen_name); -bool load_scenario(fs::path file_to_load, cScenario& scenario, bool only_header = false); +bool load_scenario(fs::path file_to_load, cScenario& scenario, bool only_header = false, bool pop_paths = true); fs::path nav_get_or_decode_party(); fs::path nav_put_or_temp_party(fs::path def = ""); diff --git a/src/fileio/fileio_scen.cpp b/src/fileio/fileio_scen.cpp index 822bbc976..1bdf3441a 100644 --- a/src/fileio/fileio_scen.cpp +++ b/src/fileio/fileio_scen.cpp @@ -100,20 +100,22 @@ fs::path locate_scenario(std::string scen_name) { return scenPath; } -bool load_scenario(fs::path file_to_load, cScenario& scenario, bool only_header) { +bool load_scenario(fs::path file_to_load, cScenario& scenario, bool only_header, bool pop_paths) { // Before loading a scenario, we may need to pop scenario resource paths. - fs::path graphics_path = ResMgr::graphics.popPath(); - for(auto p : graphics_path) { - if(p.string() == "data") { - ResMgr::graphics.pushPath(graphics_path); - break; + if(pop_paths){ + fs::path graphics_path = ResMgr::graphics.popPath(); + for(auto p : graphics_path) { + if(p.string() == "data") { + ResMgr::graphics.pushPath(graphics_path); + break; + } } - } - fs::path sounds_path = ResMgr::sounds.popPath(); - for(auto p : sounds_path) { - if(p.string() == "data") { - ResMgr::sounds.pushPath(sounds_path); - break; + fs::path sounds_path = ResMgr::sounds.popPath(); + for(auto p : sounds_path) { + if(p.string() == "data") { + ResMgr::sounds.pushPath(sounds_path); + break; + } } } scenario = cScenario(); diff --git a/test/SConscript b/test/SConscript index 4e0b9c16e..42fa52654 100644 --- a/test/SConscript +++ b/test/SConscript @@ -42,6 +42,8 @@ env.AlwaysBuild(env.Install("#build/rsrc/", Dir("#rsrc/strings"))) env.AlwaysBuild(env.Install("#build/rsrc/", Dir("#rsrc/dialogs"))) env.AlwaysBuild(env.Install("#build/rsrc/", Dir("#rsrc/fonts"))) env.AlwaysBuild(env.Install("#build/rsrc/", Dir("#rsrc/graphics"))) +# The town boundaries conversion test requires this: +env.AlwaysBuild(env.Install("#build/rsrc/", Dir("#rsrc/sounds"))) env.Command("#build/test/junk/", '', 'mkdir "' + Dir("#build/test/junk").path + '"') env.Command("#build/test/passed", test, run_tests, chdir=True) diff --git a/test/files/town/townrectMac.exs b/test/files/town/townrectMac.exs new file mode 100644 index 0000000000000000000000000000000000000000..9e7da86608cfb540fd7ab3ccfd68ebdb144bf159 GIT binary patch literal 95680 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 H_V@n-PF>>C literal 0 HcmV?d00001 diff --git a/test/files/town/townrectUniversal/header.exs b/test/files/town/townrectUniversal/header.exs new file mode 100644 index 0000000000000000000000000000000000000000..a1ab32d4ad41cb55b47c42a1c990b12b14222c18 GIT binary patch literal 12 TcmeZw@^@uqIKafjz>oj{5fcJS literal 0 HcmV?d00001 diff --git a/test/files/town/townrectUniversal/items.xml b/test/files/town/townrectUniversal/items.xml new file mode 100644 index 000000000..3aa028a4a --- /dev/null +++ b/test/files/town/townrectUniversal/items.xml @@ -0,0 +1,9063 @@ + + + + gold + 1 + 0 + 0 + 0 + 56 + Gold + Gold + 0 + 0 + 0 + + true + + + + + + + food + 10 + 0 + 0 + 0 + 72 + Food + Bread and Meat + 0 + 5 + 0 + + true + + + + + + + food + 4 + 0 + 0 + 0 + 73 + Food + Good Sandwich + 0 + 2 + 0 + + true + + + + + + + food + 8 + 0 + 0 + 0 + 74 + Food + Tasty Mushrooms + 0 + 3 + 0 + + true + + + + + + + pants + 0 + 0 + 0 + 0 + 23 + Pants + Pants + 0 + 2 + 6 + + true + + + + + + + pants + 0 + 0 + 0 + 0 + 24 + Pants + Pants + 0 + 2 + 7 + + true + + + + + + + armor + 0 + 0 + 0 + 0 + 103 + Shirt + Shirt + 0 + 2 + 5 + + true + + + + + + + armor + 0 + 0 + 0 + 0 + 104 + Shirt + Shirt + 0 + 2 + 6 + + true + + + + + + + armor + 1 + 0 + 0 + 0 + 22 + Robes + Robes + 0 + 3 + 14 + + true + + + + + + + thrown-missile + 3 + 0 + 0 + 0 + 1 + thrown + 12 + 101 + 15 + Rock + Rock + 0 + 0 + 3 + + true + + + + + + + thrown-missile + 3 + 0 + 0 + 0 + 1 + thrown + 12 + 102 + 15 + Rock + Rock + 0 + 0 + 3 + + true + + + + + + + weapon-1hand + 4 + 0 + 0 + 0 + bashing + 99 + Stick + Stick + 0 + 0 + 8 + + true + + + + + + + weapon-1hand + 4 + 0 + 0 + 0 + bashing + 100 + Stick + Stick + 0 + 0 + 8 + + true + + + + + + + object + 0 + 0 + 0 + 0 + 106 + Mug + Mug + 0 + 0 + 4 + + true + + + + + + + object + 0 + 0 + 0 + 0 + 107 + Plate + Plate + 0 + 0 + 5 + + true + + + + + + + object + 0 + 0 + 0 + 0 + 110 + Bottle + Bottle + 0 + 0 + 3 + + true + + + + + + + object + 0 + 0 + 0 + 0 + 111 + Bottle + Bottle + 0 + 0 + 3 + + true + + + + + + + tool + 1 + 0 + 0 + 0 + 1 + 112 + 38 + Candle + Candle + 0 + 1 + 2 + + true + + + use-light + 2 + 0 + help-all + + + + + + + tool + 8 + 0 + 0 + 0 + 1 + 113 + Lamp + Lamp + 0 + 8 + 14 + + true + + + use-light + 7 + 0 + help-all + + + + + + + object + 0 + 0 + 0 + 0 + 19 + Garbage + Garbage + 0 + 0 + 15 + + true + + + + + + + object + 0 + 0 + 0 + 0 + 114 + Garbage + Garbage + 0 + 0 + 10 + + true + + + + + + + object + 0 + 0 + 0 + 0 + 117 + Garbage + Garbage + 0 + 0 + 8 + + true + + + + + + + object + 0 + 0 + 0 + 0 + 118 + Garbage + Garbage + 0 + 0 + 7 + + true + + + + + + + object + 0 + 0 + 0 + 0 + 98 + Bones + Bones + 0 + 0 + 18 + + true + + + + + + + object + 0 + 0 + 0 + 0 + 119 + Skull + Skull + 0 + 0 + 6 + + true + + + + + + + tool + 2 + 0 + 0 + 0 + 6 + 67 + 13 + Torches + Torches + 0 + 2 + 3 + + true + + + use-light + 5 + 0 + help-all + + + + + + + tool + 2 + 0 + 0 + 0 + 3 + 67 + 13 + Torches + Torches + 0 + 2 + 3 + + true + + + use-light + 5 + 0 + help-all + + + + + + + scroll + 0 + 0 + 0 + 0 + 108 + Book + Book + 0 + 2 + 8 + + true + + + + + + + scroll + 0 + 0 + 0 + 0 + 109 + Book + Book + 0 + 2 + 9 + + true + + + + + + + scroll + 0 + 0 + 0 + 0 + 120 + Book + Book + 0 + 2 + 11 + + true + + + + + + + armor + 2 + 0 + 0 + 0 + 18 + Robes + Vahnatai Robes + 0 + 8 + 10 + + true + + + + + + + weapon-1hand + 4 + 0 + 0 + 0 + edged + 55 + Knife + Stone Knife + 0 + 2 + 4 + + true + + + + + + + weapon-1hand + 6 + 0 + 0 + 0 + edged + 0 + Short Sword + Stone Short Sword + 0 + 5 + 15 + + true + + + + + + + weapon-1hand + 5 + 0 + 0 + 0 + bashing + 92 + Club + Stone Club + 0 + 2 + 12 + + true + + + + + + + weapon-1hand + 7 + 0 + 0 + 0 + bashing + 2 + Mace + Stone Mace + 0 + 5 + 18 + + true + + + + + + + weapon-1hand + 7 + 0 + 0 + 0 + edged + 3 + Axe + Stone Axe + 0 + 6 + 20 + + true + + + + + + + weapon-2hand + 9 + 0 + 0 + 0 + pole + 4 + Spear + Stone Spear + 0 + 10 + 30 + + true + + + + + + + weapon-1hand + 4 + 0 + 1 + 0 + edged + 55 + Knife + Bronze Knife + 1 + 16 + 7 + + + + + + + weapon-1hand + 6 + 0 + 1 + 0 + edged + 0 + Short Sword + Bronze Short Sword + 1 + 20 + 15 + + + + + + + weapon-1hand + 5 + 0 + 1 + 0 + bashing + 92 + Club + Bronze Club + 1 + 12 + 12 + + + + + + + weapon-1hand + 7 + 0 + 1 + 0 + bashing + 2 + Mace + Bronze Mace + 1 + 22 + 18 + + + + + + + weapon-1hand + 7 + 0 + 1 + 0 + edged + 3 + Axe + Bronze Axe + 1 + 30 + 20 + + + + + + + weapon-2hand + 9 + 0 + 1 + 0 + pole + 4 + Spear + Bronze Spear + 1 + 40 + 30 + + + + + + + weapon-1hand + 8 + 0 + 1 + 0 + bashing + 31 + Hammer + Bronze Hammer + 1 + 30 + 25 + + + + + + + weapon-1hand + 7 + 0 + 1 + 0 + edged + 0 + Rapier + Bronze Rapier + 1 + 30 + 15 + + + + + + + weapon-1hand + 9 + 0 + 1 + 0 + edged + 1 + Broadsword + Bronze Broadsword + 1 + 50 + 25 + + + + + + + weapon-1hand + 9 + 0 + 1 + 0 + bashing + 9 + Flail + Bronze Flail + 1 + 45 + 30 + + + + + + + weapon-2hand + 12 + 0 + 1 + 0 + pole + 8 + Bardiche + Bronze Bardiche + 2 + 200 + 35 + + + + + + + weapon-2hand + 18 + 0 + 1 + 0 + pole + 5 + Halberd + Bronze Halberd + 2 + 450 + 50 + + + + + + + weapon-2hand + 14 + 0 + 1 + 0 + edged + 54 + Greatsword + Bronze Greatsword + 2 + 400 + 45 + + + + + + + weapon-2hand + 13 + 0 + 1 + 0 + bashing + 52 + Great Mace + Bronze Great Mace + 2 + 375 + 45 + + + + + + + weapon-1hand + 4 + 0 + 2 + 0 + edged + 55 + Knife + Iron Knife + 1 + 35 + 8 + + + + + + + weapon-1hand + 6 + 0 + 2 + 0 + edged + 0 + Short Sword + Iron Short Sword + 1 + 50 + 15 + + + + + + + weapon-1hand + 7 + 0 + 2 + 0 + bashing + 2 + Mace + Iron Mace + 1 + 70 + 20 + + + + + + + weapon-1hand + 7 + 0 + 2 + 0 + edged + 3 + Axe + Iron Axe + 1 + 80 + 20 + + + + + + + weapon-2hand + 9 + 0 + 2 + 0 + pole + 4 + Spear + Iron Spear + 2 + 140 + 30 + + + + + + + weapon-1hand + 8 + 0 + 2 + 0 + bashing + 31 + Hammer + Iron Hammer + 1 + 80 + 25 + + + + + + + weapon-1hand + 7 + 0 + 2 + 0 + edged + 0 + Rapier + Iron Rapier + 1 + 80 + 18 + + + + + + + weapon-1hand + 9 + 0 + 2 + 0 + edged + 1 + Broadsword + Iron Broadsword + 2 + 200 + 25 + + + + + + + weapon-1hand + 9 + 0 + 2 + 0 + bashing + 9 + Flail + Iron Flail + 2 + 200 + 30 + + + + + + + weapon-2hand + 12 + 0 + 2 + 0 + pole + 8 + Bardiche + Iron Bardiche + 2 + 600 + 40 + + + + + + + weapon-2hand + 18 + 0 + 2 + 0 + pole + 5 + Halberd + Iron Halberd + 3 + 1000 + 50 + + + + + + + weapon-2hand + 14 + 0 + 2 + 0 + edged + 54 + Greatsword + Iron Greatsword + 3 + 900 + 50 + + + + + + + weapon-2hand + 13 + 0 + 2 + 0 + bashing + 52 + Great Mace + Iron Great Mace + 2 + 850 + 45 + + + + + + + weapon-1hand + 4 + 0 + 3 + 0 + edged + 55 + Knife + Steel Knife + 1 + 70 + 8 + + + + + + + weapon-1hand + 6 + 0 + 3 + 0 + edged + 0 + Short Sword + Steel Short Sword + 2 + 120 + 15 + + + + + + + weapon-1hand + 7 + 0 + 3 + 0 + bashing + 2 + Mace + Steel Mace + 2 + 170 + 20 + + + + + + + weapon-1hand + 7 + 0 + 3 + 0 + edged + 3 + Axe + Steel Axe + 2 + 200 + 20 + + + + + + + weapon-2hand + 9 + 0 + 3 + 0 + pole + 4 + Spear + Steel Spear + 2 + 340 + 30 + + + + + + + weapon-1hand + 8 + 0 + 3 + 0 + bashing + 31 + Hammer + Steel Hammer + 2 + 200 + 25 + + + + + + + weapon-1hand + 7 + 0 + 3 + 0 + edged + 0 + Rapier + Steel Rapier + 2 + 200 + 18 + + + + + + + weapon-1hand + 9 + 0 + 3 + 0 + edged + 1 + Broadsword + Steel Broadsword + 2 + 500 + 25 + + + + + + + weapon-1hand + 9 + 0 + 3 + 0 + bashing + 9 + Flail + Steel Flail + 2 + 500 + 30 + + + + + + + weapon-2hand + 12 + 0 + 3 + 0 + pole + 8 + Bardiche + Steel Bardiche + 3 + 1500 + 40 + + + + + + + weapon-2hand + 18 + 0 + 3 + 0 + pole + 5 + Halberd + Steel Halberd + 3 + 2000 + 50 + + + + + + + weapon-2hand + 14 + 0 + 3 + 0 + edged + 54 + Greatsword + Steel Greatsword + 3 + 1800 + 50 + + + + + + + weapon-2hand + 13 + 0 + 3 + 0 + bashing + 52 + Great Mace + Steel Great Mace + 3 + 1700 + 50 + + + + + + + weapon-1hand + 4 + 0 + 5 + 0 + edged + 55 + Knife + Magic Knife + 2 + 150 + 8 + + true + + + + + + + weapon-1hand + 6 + 0 + 5 + 0 + edged + 0 + Short Sword + Magic Short Sword + 2 + 250 + 15 + + true + + + + + + + weapon-1hand + 7 + 0 + 5 + 0 + bashing + 2 + Mace + Magic Mace + 2 + 350 + 20 + + true + + + + + + + weapon-1hand + 7 + 0 + 5 + 0 + edged + 3 + Axe + Magic Axe + 2 + 400 + 20 + + true + + + + + + + weapon-2hand + 9 + 0 + 5 + 0 + pole + 4 + Spear + Magic Spear + 2 + 700 + 30 + + true + + + + + + + weapon-1hand + 8 + 0 + 5 + 0 + bashing + 31 + Hammer + Magic Hammer + 2 + 400 + 25 + + true + + + + + + + weapon-1hand + 7 + 0 + 5 + 0 + edged + 0 + Rapier + Magic Rapier + 2 + 400 + 18 + + true + + + + + + + weapon-1hand + 9 + 0 + 5 + 0 + edged + 1 + Broadsword + Magic Broadsword + 3 + 1000 + 25 + + true + + + + + + + weapon-1hand + 9 + 0 + 5 + 0 + bashing + 9 + Flail + Magic Flail + 3 + 1000 + 30 + + true + + + + + + + weapon-2hand + 12 + 0 + 5 + 0 + pole + 8 + Bardiche + Magic Bardiche + 4 + 3000 + 40 + + true + + + + + + + weapon-2hand + 18 + 0 + 5 + 0 + pole + 5 + Halberd + Magic Halberd + 4 + 4000 + 50 + + true + + + + + + + weapon-2hand + 14 + 0 + 5 + 0 + edged + 54 + Greatsword + Magic Greatsword + 4 + 3600 + 45 + + true + + + + + + + weapon-2hand + 13 + 0 + 5 + 0 + bashing + 52 + Great Mace + Magic Great Mace + 4 + 3400 + 45 + + true + + + + + + + weapon-2hand + 12 + 0 + 2 + 0 + pole + 6 + Slith Spear + Iron Slith Spear + 2 + 400 + 40 + + + + + + + weapon-2hand + 12 + 0 + 3 + 0 + pole + 6 + Slith Spear + Steel Slith Spear + 2 + 750 + 40 + + + + + + + weapon-1hand + 10 + 0 + 1 + 0 + edged + 7 + Wave Blade + Bronze Wave Blade + 1 + 50 + 20 + + + + + + + weapon-1hand + 10 + 0 + 2 + 0 + edged + 7 + Wave Blade + Iron Wave Blade + 2 + 200 + 20 + + + + + + + weapon-1hand + 10 + 0 + 3 + 0 + edged + 7 + Wave Blade + Steel Wave Blade + 2 + 500 + 20 + + + + + + + weapon-1hand + 10 + 0 + 5 + 0 + edged + 7 + Wave Blade + Magic Wave Blade + 3 + 1000 + 20 + + true + + + + + + + thrown-missile + 9 + 0 + 1 + 0 + 8 + thrown + 7 + 59 + 9 + Razordisks + Iron Razordisks + 1 + 10 + 1 + + + + + + + thrown-missile + 9 + 0 + 2 + 0 + 8 + thrown + 7 + 59 + 10 + Razordisks + Steel Razordisks + 2 + 22 + 1 + + + + + + + thrown-missile + 6 + 0 + 0 + 0 + 10 + thrown + 1 + 58 + 1 + Darts + Darts + 2 + 1 + 1 + + + + + + + thrown-missile + 6 + 0 + 1 + 0 + 8 + thrown + 1 + 58 + 2 + Darts + Iron Darts + 1 + 3 + 1 + + + + + + + thrown-missile + 6 + 0 + 5 + 0 + 6 + thrown + 1 + 58 + 3 + Darts + Magic Darts + 1 + 15 + 1 + + true + + + + + + + thrown-missile + 9 + 0 + 0 + 0 + 10 + thrown + 10 + 55 + 4 + Throwing Knives + Throwing Knives + 1 + 2 + 2 + + + + + + + thrown-missile + 9 + 0 + 2 + 0 + 10 + thrown + 10 + 55 + 5 + Throwing Knives + Iron Throwing Knives + 1 + 6 + 2 + + + + + + + arrow + 11 + 0 + 0 + 0 + 12 + 3 + 57 + 6 + Arrows + Arrows + 1 + 1 + 1 + + + + + + + arrow + 11 + 0 + 2 + 0 + 10 + 3 + 57 + 7 + Arrows + Iron Arrows + 2 + 7 + 1 + + + + + + + arrow + 11 + 0 + 5 + 0 + 8 + 4 + 57 + 8 + Arrows + Magic Arrows + 2 + 25 + 1 + + true + + + + + + + thrown-missile + 12 + 0 + 0 + 0 + 8 + thrown + 5 + 11 + 11 + Javelins + Javelins + 1 + 2 + 3 + + + + + + + thrown-missile + 12 + 0 + 1 + 0 + 8 + thrown + 5 + 11 + 12 + Javelins + Iron Javelins + 1 + 8 + 3 + + + + + + + bow + 0 + 0 + 0 + 0 + archery + 10 + Bow + Cavewood Bow + 1 + 30 + 20 + + + + + + + bow + 0 + 0 + 1 + 0 + archery + 10 + Bow + Lemonwood Bow + 2 + 120 + 20 + + + + + + + bow + 0 + 0 + 2 + 0 + archery + 10 + Bow + Yew Bow + 2 + 240 + 20 + + + + + + + bow + 0 + 0 + 4 + 0 + archery + 10 + Bow + Magic Bow + 3 + 1000 + 10 + + true + + + + + + + crossbow + 0 + 0 + 0 + 0 + archery + 21 + Crossbow + Crossbow + 1 + 80 + 35 + + + + + + + crossbow + 0 + 0 + 1 + 0 + archery + 21 + Crossbow + Fine Crossbow + 2 + 250 + 35 + + + + + + + crossbow + 0 + 0 + 4 + 0 + archery + 21 + Crossbow + Magic Crossbow + 4 + 3000 + 20 + + true + + + + + + + bolts + 14 + 0 + 0 + 0 + 12 + 3 + 116 + 16 + Bolts + Bolts + 1 + 2 + 1 + + + + + + + bolts + 14 + 0 + 2 + 0 + 10 + 3 + 116 + 17 + Bolts + Iron Bolts + 2 + 12 + 1 + + + + + + + bolts + 14 + 0 + 5 + 0 + 8 + 4 + 116 + 18 + Bolts + Magic Bolts + 2 + 50 + 1 + + true + + + + + + + missile + 8 + 0 + 0 + 0 + archery + 12 + 28 + Sling + Leather Sling + 1 + 20 + 25 + + + + + + + missile + 12 + 0 + 3 + 0 + archery + 12 + 28 + Sling + Magic Sling + 4 + 3000 + 25 + + true + + + + + + + armor + 1 + 0 + 0 + 0 + 14 + Leather Baldri + Leather Baldric + 0 + 4 + 40 + + true + + + + + + + armor + 2 + 0 + 0 + 0 + 14 + Leather Armor + Leather Armor + 0 + 10 + 50 + + true + + + + + + + armor + 3 + 1 + 0 + 1 + 14 + Studded Armor + Bronze Studded Armor + 1 + 30 + 70 + + + + + + + armor + 5 + 2 + 0 + 1 + 15 + Chain Mail + Bronze Chain Mail + 1 + 75 + 90 + + + + + + + armor + 7 + 3 + 0 + 1 + 16 + Breastplate + Bronze Breastplate + 2 + 150 + 110 + + + + + + + armor + 9 + 4 + 0 + 1 + 16 + Plate Armor + Bronze Plate Armor + 2 + 350 + 130 + + + + + + + armor + 3 + 1 + 0 + 2 + 14 + Studded Armor + Iron Studded Armor + 2 + 100 + 80 + + + + + + + armor + 5 + 2 + 0 + 2 + 15 + Chain Mail + Iron Chain Mail + 2 + 250 + 100 + + + + + + + armor + 7 + 3 + 0 + 2 + 16 + Breastplate + Iron Breastplate + 2 + 500 + 120 + + + + + + + armor + 9 + 4 + 0 + 2 + 16 + Plate Armor + Iron Plate Armor + 3 + 1200 + 140 + + + + + + + armor + 3 + 1 + 0 + 3 + 14 + Studded Armor + Steel Studded Armor + 2 + 200 + 80 + + + + + + + armor + 5 + 2 + 0 + 3 + 15 + Chain Mail + Steel Chain Mail + 2 + 400 + 100 + + + + + + + armor + 7 + 3 + 0 + 3 + 16 + Breastplate + Steel Breastplate + 2 + 800 + 120 + + + + + + + armor + 9 + 4 + 0 + 3 + 16 + Plate Armor + Steel Plate Armor + 3 + 2000 + 140 + + + + + + + armor + 3 + 0 + 0 + 5 + 14 + Studded Armor + Magic Studded Armor + 2 + 400 + 80 + + true + + + + + + + armor + 5 + 1 + 0 + 5 + 15 + Chain Mail + Magic Chain Mail + 2 + 800 + 100 + + true + + + + + + + armor + 7 + 2 + 0 + 5 + 16 + Breastplate + Magic Breastplate + 3 + 1600 + 120 + + true + + + + + + + armor + 9 + 3 + 0 + 5 + 16 + Plate + Magic Plate + 4 + 4000 + 140 + + true + + + + + + + armor + 5 + 0 + 0 + 4 + 15 + Chain Mail + Mithral Chain Mail + 3 + 1500 + 50 + + + + + + + shield + 1 + 1 + 0 + 0 + 75 + Buckler + Crude Buckler + 3 + 2 + 20 + + + + + + + shield + 1 + 1 + 0 + 1 + 75 + Buckler + Bronze Buckler + 1 + 15 + 20 + + + + + + + shield + 1 + 0 + 0 + 2 + 75 + Buckler + Iron Buckler + 1 + 40 + 20 + + + + + + + shield + 1 + 0 + 0 + 3 + 75 + Buckler + Steel Buckler + 2 + 200 + 20 + + + + + + + shield + 3 + 0 + 0 + 3 + 75 + Buckler + Magic Buckler + 2 + 500 + 10 + + true + + + + + + + shield + 4 + 2 + 0 + 0 + 13 + Shield + Crude Shield + 2 + 8 + 30 + + + + + + + shield + 4 + 2 + 0 + 1 + 13 + Shield + Bronze Shield + 1 + 40 + 30 + + + + + + + shield + 4 + 1 + 0 + 2 + 13 + Shield + Iron Shield + 2 + 100 + 30 + + + + + + + shield + 4 + 1 + 0 + 3 + 13 + Shield + Steel Shield + 2 + 400 + 30 + + + + + + + shield + 6 + 1 + 0 + 3 + 13 + Shield + Magic Shield + 3 + 1000 + 25 + + true + + + + + + + shield + 7 + 3 + 0 + 0 + 12 + Shield + Crude Large Shield + 1 + 20 + 50 + + + + + + + shield + 7 + 2 + 0 + 1 + 12 + Shield + Bronze Large Shield + 2 + 100 + 50 + + + + + + + shield + 7 + 2 + 0 + 2 + 12 + Shield + Iron Large Shield + 2 + 250 + 50 + + + + + + + shield + 7 + 2 + 0 + 3 + 12 + Shield + Steel Large Shield + 2 + 700 + 50 + + + + + + + shield + 8 + 1 + 0 + 3 + 12 + Shield + Magic Large Shield + 3 + 2000 + 45 + + true + + + + + + + helm + 1 + 0 + 0 + 0 + 76 + Helm + Leather Helm + 3 + 3 + 15 + + + + + + + helm + 2 + 1 + 0 + 0 + 76 + Helm + Bronze Helm + 1 + 20 + 15 + + + + + + + helm + 3 + 1 + 0 + 0 + 76 + Helm + Iron Helm + 1 + 40 + 15 + + + + + + + helm + 4 + 1 + 0 + 0 + 76 + Helm + Steel Helm + 2 + 100 + 15 + + + + + + + helm + 5 + 1 + 0 + 0 + 76 + Helm + Magic Helm + 2 + 250 + 15 + + true + + + + + + + helm + 3 + 1 + 0 + 0 + 77 + Greathelm + Leather Greathelm + 2 + 12 + 25 + + + + + + + helm + 4 + 2 + 0 + 0 + 77 + Greathelm + Bronze Greathelm + 1 + 40 + 25 + + + + + + + helm + 5 + 2 + 0 + 0 + 77 + Greathelm + Iron Greathelm + 1 + 80 + 25 + + + + + + + helm + 6 + 1 + 0 + 0 + 77 + Greathelm + Steel Greathelm + 2 + 250 + 25 + + + + + + + helm + 7 + 1 + 0 + 0 + 77 + Greathelm + Magic Greathelm + 2 + 700 + 25 + + true + + + + + + + gloves + 1 + 0 + 0 + 0 + 78 + Gloves + Leather Gloves + 2 + 10 + 7 + + + + + + + gloves + 2 + 1 + 0 + 0 + 133 + Gauntlets + Bronze Gauntlets + 1 + 25 + 10 + + + + + + + gloves + 3 + 1 + 0 + 0 + 133 + Gauntlets + Iron Gauntlets + 1 + 55 + 12 + + + + + + + gloves + 4 + 1 + 0 + 0 + 133 + Gauntlets + Steel Gauntlets + 2 + 150 + 12 + + + + + + + gloves + 5 + 1 + 0 + 0 + 133 + Gauntlets + Magic Gauntlets + 2 + 400 + 10 + + true + + + + + + + boots + 1 + 0 + 0 + 0 + 121 + Boots + Boots + 2 + 10 + 8 + + + + + + + boots + 2 + 0 + 0 + 0 + 121 + Boots + Steel-Toed Boots + 1 + 50 + 12 + + + + + + + tool + 0 + 0 + 0 + 0 + 4 + 66 + 14 + Lockpicks + Lockpicks + 1 + 8 + 1 + + + lockpick + 3 + 0 + help-one + + + + + + + poison + 2 + 0 + 0 + 0 + 1 + 85 + 31 + Poison + Weak Poison + 1 + 15 + 3 + + + use-poison + 2 + 0 + help-one + + + + + + + poison + 4 + 0 + 0 + 0 + 1 + 85 + 32 + Poison + Medium Poison + 1 + 50 + 3 + + + use-poison + 4 + 0 + help-one + + + + + + + poison + 6 + 0 + 0 + 0 + 1 + 85 + 33 + Poison + Strong Poison + 2 + 150 + 3 + + + use-poison + 6 + 0 + help-one + + + + + + + poison + 8 + 0 + 0 + 0 + 1 + 85 + 34 + Poison + Killer Poison + 2 + 400 + 3 + + + use-poison + 8 + 0 + help-one + + + + + + + object + 0 + 0 + 0 + 0 + 87 + Gem + Ruby + 2 + 350 + 1 + + + + + + + object + 0 + 0 + 0 + 0 + 1 + 86 + 19 + Gem + Sapphire + 2 + 250 + 1 + + + sapphire + 0 + 0 + help-one + + + + + + + tool + 2 + 0 + 0 + 0 + 4 + 66 + 29 + Lockpicks + Fine Lockpicks + 2 + 40 + 1 + + + lockpick + 5 + 0 + help-one + + + + + + + tool + 4 + 0 + 0 + 0 + 4 + 66 + 30 + Lockpicks + Magic Lockpicks + 2 + 90 + 1 + + true + + + lockpick + 8 + 0 + help-one + + + + + + + scroll + 0 + 0 + 0 + 0 + 1 + 88 + Orb + Orb of Sight + 2 + 300 + 1 + + true + + + use-spell + 1 + 33 + help-one + + + + + + + object + 0 + 0 + 0 + 0 + 1 + 87 + 28 + Crystal + Smoky Crystal + 2 + 100 + 2 + + + smoky + 0 + 0 + help-one + + + + + + + potion + 0 + 0 + 0 + 0 + 1 + 87 + Crystal + Piercing Crystal + 2 + 200 + 1 + + true + + + use-spell + 1 + 41 + help-one + + + + + + + scroll + 0 + 0 + 0 + 0 + 1 + 88 + Orb + Mist Globe + 2 + 200 + 1 + + true + true + + + use-xp + 8 + 0 + harm-one + + + + + + + scroll + 0 + 0 + 0 + 0 + 1 + 88 + Orb + Mist Globe + 2 + 200 + 1 + + true + true + + + use-skillpt + 4 + 0 + help-one + + + + + + + scroll + 0 + 0 + 0 + 0 + 1 + 88 + Orb + Mist Globe + 2 + 200 + 1 + + true + true + + + bliss-doom + 9 + 0 + help-all + + + + + + + potion + 0 + 0 + 0 + 0 + 4 + 87 + Crystal + Shielding Crystal + 2 + 200 + 1 + + true + + + use-status + 4 + 4 + help-one + + + + + + + scroll + 0 + 0 + 0 + 0 + 1 + 88 + Orb + Goo Bomb + 2 + 100 + 1 + + true + + + use-spell + 15 + 65 + help-one + + + + + + + scroll + 0 + 0 + 0 + 0 + 1 + 88 + Orb + Orb of Foul Vapors + 2 + 100 + 1 + + true + + + use-spell + 1 + 66 + help-one + + + + + + + potion + 0 + 0 + 0 + 0 + 3 + 93 + Dust + Dust of Hiding + 2 + 100 + 1 + + true + + + use-status + 6 + 8 + help-all + + + + + + + potion + 0 + 0 + 0 + 0 + 6 + 93 + Dust + Dust of Choking + 2 + 1 + 1 + + true + + + use-status + 8 + 2 + harm-one + + + + + + + potion + 0 + 0 + 0 + 0 + 6 + 93 + 36 + Dust + Cleansing Powder + 3 + 150 + 1 + + true + + + use-status + 9 + 7 + help-one + + + + + + + scroll + 0 + 0 + 0 + 0 + 1 + 94 + Figure + Gold Statue + 2 + 750 + 1 + + true + + + use-summon + 50 + 159 + help-one + + + + + + + scroll + 0 + 0 + 0 + 0 + 1 + 94 + Figure + Ivory Bug + 2 + 200 + 1 + + true + + + use-summon + 50 + 130 + help-one + + + + + + + scroll + 0 + 0 + 0 + 0 + 1 + 94 + Figure + Ebony Lizard + 1 + 70 + 1 + + true + + + use-summon + 50 + 72 + help-one + + + + + + + weapon-1hand + 2 + 0 + 0 + 0 + 5 + mage-lore + 95 + Horn + Horn of Warriors + 2 + 100 + 1 + + true + true + + + use-summon-mass + 6 + 13 + help-one + + + + + + + scroll + 0 + 0 + 0 + 0 + 1 + 63 + Scroll + Scroll: Flame + 1 + 50 + 1 + + true + + + use-spell + 15 + 11 + help-one + + + + + + + scroll + 0 + 0 + 0 + 0 + 1 + 63 + Scroll + Scroll: Slow + 1 + 50 + 1 + + true + + + use-spell + 15 + 12 + help-one + + + + + + + scroll + 0 + 0 + 0 + 0 + 1 + 63 + Scroll + Scroll: Poison + 2 + 100 + 1 + + true + + + use-spell + 15 + 30 + help-one + + + + + + + scroll + 0 + 0 + 0 + 0 + 1 + 63 + Scroll + Scroll: Stealth + 2 + 150 + 1 + + true + + + use-party-stat + 7 + 0 + help-all + + + + + + + scroll + 0 + 0 + 0 + 0 + 1 + 63 + Scroll + Scroll: Kill + 2 + 400 + 1 + + true + + + use-spell + 15 + 48 + help-one + + + + + + + scroll + 0 + 0 + 0 + 0 + 1 + 63 + Scroll + Scroll: Ice Bolt + 2 + 200 + 1 + + true + + + use-spell + 15 + 31 + help-one + + + + + + + scroll + 0 + 0 + 0 + 0 + 1 + 63 + Scroll + Scroll: Fireball + 2 + 200 + 1 + + true + + + use-spell + 15 + 22 + help-one + + + + + + + scroll + 0 + 0 + 0 + 0 + 1 + 63 + Scroll + Scroll: Firestorm + 2 + 300 + 1 + + true + + + use-spell + 15 + 40 + help-one + + + + + + + scroll + 0 + 0 + 0 + 0 + 1 + 63 + Scroll + Scroll: Shockstorm + 2 + 500 + 1 + + true + + + use-spell + 15 + 44 + help-one + + + + + + + scroll + 0 + 0 + 0 + 0 + 1 + 63 + Scroll + Scroll: Shockwave + 2 + 600 + 1 + + true + + + use-spell + 15 + 54 + help-one + + + + + + + scroll + 0 + 0 + 0 + 0 + 1 + 63 + Scroll + Scroll: Charm + 2 + 250 + 1 + + true + + + use-spell + 7 + 117 + help-one + + + + + + + scroll + 0 + 0 + 0 + 0 + 1 + 63 + Scroll + Scroll: Magic Res. + 2 + 300 + 1 + + true + + + use-status + 5 + 5 + help-all + + + + + + + scroll + 0 + 0 + 0 + 0 + 1 + 94 + Figure + Alabaster Lizard + 2 + 200 + 1 + + true + + + use-summon + 50 + 73 + help-one + + + + + + + wand + 0 + 0 + 0 + 0 + 6 + 64 + Wand + Prismatic Wand + 3 + 150 + 1 + + true + true + + + use-spell + 1 + 155 + help-one + + + + + + + wand + 0 + 0 + 0 + 0 + 6 + 64 + Wand + Crystal Wand + 2 + 100 + 1 + + true + true + + + use-spell + 1 + 132 + help-one + + + + + + + potion + 0 + 0 + 0 + 0 + 1 + 60 + Potion + Brew of Knowledge + 3 + 2000 + 1 + + true + + + use-skillpt + 2 + 0 + help-one + + + + + + + potion + 1 + 0 + 0 + 0 + 1 + 61 + Potion + Brew of Ironskin + 3 + 1200 + 1 + + true + + + use-status + 4 + 4 + help-one + + + + + + + potion + 0 + 0 + 0 + 0 + 1 + 62 + Potion + Brew of Battle + 3 + 900 + 1 + + true + + + use-status + 8 + 1 + help-one + + + + + + + gold + 1 + 0 + 0 + 0 + 17 + Gold + Pile of Money + 3 + 0 + 0 + + + + + + + object + 0 + 0 + 0 + 0 + 1 + 86 + 39 + Gem + Diamond + 2 + 700 + 1 + + + + + + + object + 0 + 0 + 0 + 0 + 1 + 88 + 40 + Gem + Emerald + 2 + 400 + 1 + + + + + + + helm + 3 + 4 + 0 + 0 + 76 + Helm + Cursed Helm + 2 + 10 + 14 + + true + true + true + + + + + + + helm + 4 + 1 + 0 + 0 + 5 + 76 + Helm + Ruby Helm + 2 + 150 + 14 + + true + true + + + use-spell + 9 + 22 + help-one + + + + + + + helm + 4 + 1 + 0 + 0 + 5 + 76 + Helm + Emerald Helm + 2 + 120 + 14 + + true + true + + + use-spell + 13 + 30 + help-one + + + + + + + helm + 4 + 1 + 0 + 0 + 77 + Helm + Helm of Speed + 3 + 1400 + 14 + + true + + + status + 3 + 3 + help-one + + + + + + + helm + 5 + 0 + 1 + 0 + 76 + Helm + Runed Helm + 3 + 1200 + 14 + + true + + + + + + + object + 0 + 0 + 0 + 0 + 87 + Crystal + Crystal + 3 + 10 + 0 + + + + + + + object + 0 + 0 + 0 + 0 + 97 + Metal Bar + Iron Bar + 3 + 10 + 20 + + + + + + + object + 0 + 0 + 0 + 0 + 97 + Metal Bar + Silver Bar + 2 + 100 + 20 + + + + + + + object + 0 + 0 + 0 + 0 + 97 + Metal Bar + Platinum Bar + 3 + 1000 + 18 + + + + + + + gloves + 1 + 0 + 0 + 0 + 78 + Gloves + Nimble Gloves + 3 + 1000 + 7 + + true + + + thief + 6 + 0 + help-one + + + + + + + gloves + 3 + 1 + 0 + 0 + 133 + Gauntlets + Ogrish Gauntlets + 3 + 1000 + 10 + + true + + + giant + 4 + 0 + help-one + + + + + + + gloves + 3 + 1 + 0 + 0 + 133 + Gauntlets + Giantish Gauntlets + 4 + 3000 + 10 + + true + + + giant + 8 + 0 + help-one + + + + + + + gloves + 0 + 2 + 0 + 0 + 133 + Gauntlets + Glue Gauntlets + 4 + 10 + 10 + + true + true + true + + + + + + + gloves + 1 + 0 + 0 + 0 + 78 + Gloves + Aspskin Gloves + 2 + 800 + 7 + + true + + + poison-aug + 2 + 0 + help-one + + + + + + + gloves + 1 + 0 + 0 + 1 + 78 + Gloves + Micah's Gloves + 4 + 4000 + 7 + + true + + + boost-stat + 1 + 2 + help-one + + + + + + + boots + 2 + 0 + 0 + 1 + 121 + Boots + Magic Boots + 2 + 300 + 8 + + true + + + + + + + boots + 1 + 0 + 0 + 0 + 121 + Boots + Dancing Boots + 1 + 20 + 8 + + true + true + true + true + + + slow + 5 + 0 + help-one + + + + + + + boots + 2 + 0 + 0 + 1 + 10 + 121 + Boots + Boots of Apollo + 3 + 100 + 8 + + true + true + + + use-status + 5 + 3 + help-one + + + + + + + boots + 2 + 0 + 0 + 1 + 121 + Boots + Boots of Speed + 4 + 3000 + 8 + + true + + + speed + 3 + 0 + help-one + + + + + + + boots + 1 + 4 + 0 + 0 + 121 + Boots + Cursed Boots + 4 + 10 + 8 + + true + true + true + + + + + + + shield + 6 + 2 + 2 + 0 + 12 + Shield + Crystal Shield + 3 + 1000 + 30 + + true + + + prot-petrify + 4 + 0 + help-one + + + + + + + shield + 6 + 2 + 2 + 0 + 12 + Shield + Iceshield + 3 + 1500 + 30 + + true + + + prot-dmg + 5 + 5 + help-one + + + + + + + shield + 6 + 2 + 1 + 0 + 6 + 12 + Shield + Shield of Khar + 3 + 200 + 30 + + true + true + + + use-hp + 4 + 0 + help-one + + + + + + + shield + 6 + 2 + 1 + 0 + 6 + 12 + Shield + Shield of Klin + 3 + 200 + 30 + + true + true + + + use-status + 6 + 1 + help-one + + + + + + + shield + 7 + 2 + 2 + 0 + 1 + 12 + Shield + Lifeshield + 4 + 5000 + 30 + + true + + + save-life + 0 + 0 + help-one + + + + + + + shield + 6 + 2 + 1 + 0 + 5 + 12 + Shield + Shield of Klud + 2 + 150 + 30 + + true + true + + + bliss-doom + 3 + 0 + help-one + + + + + + + shield + 5 + 2 + 2 + 0 + 5 + 13 + Shield + Martyr's Shield + 2 + 100 + 30 + + true + true + + + use-status + 4 + 10 + help-one + + + + + + + shield + 6 + 0 + 2 + 0 + 13 + Shield + Runeshield + 3 + 1500 + 30 + + true + + + + + + + shield + 4 + 5 + 0 + 0 + 13 + Shield + Cursed Shield + 3 + 10 + 30 + + true + true + true + + + + + + + potion + 3 + 0 + 0 + 0 + 1 + 60 + Potion + Str. Curing Potion + 2 + 350 + 5 + + true + + + use-status + 8 + 2 + help-one + + + + + + + potion + 3 + 0 + 0 + 0 + 1 + 60 + Potion + Str. Healing Potion + 2 + 350 + 5 + + true + + + use-hp + 8 + 0 + help-one + + + + + + + potion + 3 + 0 + 0 + 0 + 1 + 60 + Potion + Str. Energy Potion + 2 + 600 + 5 + + true + + + use-sp + 8 + 0 + help-one + + + + + + + potion + 3 + 0 + 0 + 0 + 1 + 60 + Potion + Str. Strength Potion + 2 + 160 + 5 + + true + + + use-status + 8 + 1 + help-one + + + + + + + potion + 3 + 0 + 0 + 0 + 1 + 60 + Potion + Str. Speed Potion + 2 + 200 + 5 + + true + + + use-status + 8 + 3 + help-one + + + + + + + potion + 3 + 0 + 0 + 0 + 1 + 60 + Potion + Str. Invuln. Potion + 2 + 600 + 5 + + true + + + use-status + 8 + 4 + help-one + + + + + + + potion + 3 + 0 + 0 + 0 + 1 + 60 + Potion + Str. Skill Potion + 3 + 1600 + 5 + + true + + + use-skillpt + 4 + 0 + help-one + + + + + + + potion + 1 + 0 + 0 + 0 + 1 + 60 + Potion + Med. Curing Potion + 2 + 120 + 5 + + true + + + use-status + 5 + 2 + help-one + + + + + + + potion + 1 + 0 + 0 + 0 + 1 + 60 + Potion + Med. Healing Potion + 2 + 180 + 5 + + true + + + use-hp + 5 + 0 + help-one + + + + + + + potion + 1 + 0 + 0 + 0 + 1 + 60 + Potion + Med. Energy Potion + 2 + 300 + 5 + + true + + + use-sp + 5 + 0 + help-one + + + + + + + potion + 1 + 0 + 0 + 0 + 1 + 60 + Potion + Med. Strength Potion + 1 + 80 + 5 + + true + + + use-status + 5 + 1 + help-one + + + + + + + potion + 1 + 0 + 0 + 0 + 1 + 60 + Potion + Med. Speed Potion + 2 + 100 + 5 + + true + + + use-status + 5 + 3 + help-one + + + + + + + potion + 1 + 0 + 0 + 0 + 1 + 60 + Potion + Med. Invuln. Potion + 2 + 300 + 5 + + true + + + use-status + 5 + 4 + help-one + + + + + + + potion + 1 + 0 + 0 + 0 + 1 + 60 + Potion + Med. Skill Potion + 2 + 800 + 5 + + true + + + use-skillpt + 2 + 0 + help-one + + + + + + + potion + 0 + 0 + 0 + 0 + 1 + 60 + Potion + Weak Curing Potion + 1 + 40 + 5 + + true + + + use-status + 2 + 2 + help-one + + + + + + + potion + 0 + 0 + 0 + 0 + 1 + 60 + Potion + Weak Healing Potion + 1 + 60 + 5 + + true + + + use-hp + 2 + 0 + help-one + + + + + + + potion + 0 + 0 + 0 + 0 + 1 + 60 + Potion + Weak Energy Potion + 2 + 100 + 5 + + true + + + use-sp + 2 + 0 + help-one + + + + + + + potion + 0 + 0 + 0 + 0 + 1 + 60 + Potion + Weak Strength Potion + 1 + 40 + 5 + + true + + + use-status + 2 + 1 + help-one + + + + + + + potion + 0 + 0 + 0 + 0 + 1 + 60 + Potion + Weak Speed Potion + 1 + 50 + 5 + + true + + + use-status + 2 + 3 + help-one + + + + + + + potion + 0 + 0 + 0 + 0 + 1 + 60 + Potion + Weak Invuln. Potion + 2 + 150 + 5 + + true + + + use-status + 2 + 4 + help-one + + + + + + + potion + 0 + 0 + 0 + 0 + 1 + 60 + Potion + Weak Skill Potion + 2 + 400 + 5 + + true + + + use-skillpt + 1 + 0 + help-one + + + + + + + potion + 0 + 0 + 0 + 0 + 1 + 60 + Potion + Ambrosia + 2 + 400 + 5 + + true + + + use-hp + 10 + 0 + help-one + + + + + + + potion + 0 + 0 + 0 + 0 + 1 + 60 + Potion + Potion of Bliss + 2 + 250 + 5 + + true + + + bliss-doom + 7 + 0 + help-one + + + + + + + potion + 0 + 0 + 0 + 0 + 1 + 60 + Potion + Poison Potion + 2 + 10 + 5 + + true + + + use-status + 7 + 2 + harm-one + + + + + + + potion + 0 + 0 + 0 + 0 + 1 + 60 + Potion + Potion of Doom + 1 + 20 + 5 + + true + true + + + bliss-doom + 5 + 0 + harm-one + + + + + + + potion + 0 + 0 + 0 + 0 + 1 + 60 + Potion + Brew of Lethe + 1 + 50 + 5 + + true + true + + + use-xp + 8 + 0 + harm-one + + + + + + + potion + 0 + 0 + 0 + 0 + 1 + 60 + Potion + Potion of Clarity + 2 + 200 + 5 + + true + + + use-status + 8 + 9 + help-one + + + + + + + thrown-missile + 4 + 0 + 2 + 0 + 1 + thrown + 1 + 58 + Darts + Dart of Returning + 2 + 250 + 1 + + true + + + weap-return + 0 + 0 + help-one + + + + + + + thrown-missile + 8 + 0 + 0 + 0 + 4 + thrown + 5 + 11 + 35 + Javelins + Lightning Rods + 2 + 25 + 1 + + true + + + weap-dmg + 5 + 1 + help-one + + + + + + + arrow + 9 + 0 + 1 + 0 + 1 + 4 + 57 + Arrows + Regenerating Arrows + 3 + 1000 + 1 + + true + + + weap-return + 0 + 0 + help-one + + + + + + + arrow + 9 + 0 + 2 + 0 + 5 + 4 + 57 + Arrows + Arrows of Light + 2 + 150 + 1 + + true + + + weap-slay + 8 + 10 + help-one + + + + + + + arrow + 9 + 0 + 2 + 0 + 6 + 4 + 57 + Arrows + Arrows of Life + 2 + 75 + 1 + + true + + + weap-slay + 8 + 11 + help-one + + + + + + + arrow + 9 + 0 + 1 + 0 + 6 + 4 + 57 + Arrows + Burning Arrows + 2 + 30 + 1 + + true + + + weap-dmg + 7 + 1 + help-one + + + + + + + arrow + 9 + 0 + 1 + 0 + 4 + 4 + 57 + Arrows + Exploding Arrows + 2 + 150 + 1 + + true + + + weap-explode + 5 + 1 + help-one + + + + + + + bow + 0 + 0 + 3 + 5 + archery + 10 + Bow + Archer's Bow + 3 + 2000 + 1 + + true + true + + + + + + + bow + 0 + 0 + 0 + 0 + archery + 10 + Bow + Bow of Kag + 2 + 200 + 1 + + true + true + + + missile-drain + 0 + 0 + help-one + + + + + + + thrown-missile + 4 + 0 + 3 + 0 + 6 + thrown + 1 + 58 + Darts + Poison Darts + 2 + 18 + 1 + + true + + + weap-status + 8 + 2 + help-one + + + + + + + wand + 0 + 0 + 0 + 0 + 8 + 64 + Wand + Wand of Venom + 2 + 80 + 8 + + true + true + + + use-spell + 11 + 30 + help-one + + + + + + + wand + 0 + 0 + 0 + 0 + 6 + 64 + Wand + Wand of Fireballs + 2 + 120 + 8 + + true + true + + + use-spell + 11 + 22 + help-one + + + + + + + wand + 0 + 0 + 0 + 0 + 8 + 64 + Wand + Wand of Flame + 2 + 60 + 8 + + true + true + + + use-spell + 11 + 11 + help-one + + + + + + + wand + 0 + 0 + 0 + 0 + 6 + 64 + Wand + Wand of Carrunos + 2 + 40 + 8 + + true + true + true + + + use-spell + 11 + 62 + help-one + + + + + + + wand + 0 + 0 + 0 + 0 + 8 + 64 + Wand + Wand of Slow + 2 + 20 + 8 + + true + true + + + use-spell + 11 + 12 + help-one + + + + + + + wand + 0 + 0 + 0 + 0 + 4 + 64 + Wand + Wand of Death + 3 + 400 + 8 + + true + true + + + use-spell + 11 + 48 + help-one + + + + + + + wand + 0 + 0 + 0 + 0 + 6 + 64 + Wand + Wand of Charming + 2 + 80 + 8 + + true + true + + + use-spell + 5 + 117 + help-one + + + + + + + wand + 0 + 0 + 0 + 0 + 5 + 64 + Wand + Wand of Nullity + 2 + 80 + 8 + + true + true + true + + + use-spell + 11 + 51 + help-one + + + + + + + wand + 0 + 0 + 0 + 0 + 6 + 64 + Wand + Wand of Vorb + 1 + 10 + 8 + + true + true + true + + + use-hp + 10 + 0 + harm-one + + + + + + + wand + 0 + 0 + 0 + 0 + 6 + 64 + Wand + Wand of Rats + 2 + 60 + 8 + + true + true + + + use-summon + 50 + 78 + help-one + + + + + + + ring + 2 + 0 + 0 + 0 + 79 + Ring + Gold Ring of Regen. + 4 + 2500 + 1 + + true + + + regen + 9 + 0 + help-one + + + + + + + ring + 2 + 0 + 0 + 7 + 79 + Ring + Gold Ring of Prot. + 2 + 675 + 1 + + true + + + + + + + ring + 2 + 0 + 0 + 0 + 79 + Ring + Gold Ring of Accuracy + 2 + 540 + 1 + + true + + + accuracy + 8 + 0 + help-one + + + + + + + ring + 2 + 0 + 0 + 0 + 79 + Ring + Gold Ring of Skill + 3 + 1400 + 1 + + true + + + skill + 2 + 8 + help-one + + + + + + + ring + 0 + 4 + 0 + 0 + 79 + Ring + Gold Ring of Weight + 1 + 50 + 1 + + true + true + true + true + + + heavy + 8 + 0 + help-one + + + + + + + ring + 0 + 0 + 0 + 0 + 79 + Ring + Gold Ring + 2 + 270 + 1 + + + + + + + ring + 2 + 0 + 0 + 0 + 3 + 79 + Ring + Gold Serpent Ring + 2 + 180 + 1 + + true + + + use-summon-mass + 6 + 99 + help-one + + + + + + + ring + 1 + 0 + 0 + 0 + 79 + Ring + Silver Ring of Regen. + 3 + 1000 + 1 + + true + + + regen + 5 + 0 + help-one + + + + + + + ring + 1 + 0 + 0 + 5 + 79 + Ring + Silver Ring of Prot. + 2 + 300 + 1 + + true + + + + + + + ring + 1 + 0 + 0 + 0 + 79 + Ring + Silver Ring of Accuracy + 2 + 240 + 1 + + true + + + accuracy + 5 + 0 + help-one + + + + + + + ring + 1 + 0 + 0 + 0 + 79 + Ring + Silver Ring of Skill + 2 + 600 + 1 + + true + + + skill + 1 + 5 + help-one + + + + + + + ring + 0 + 3 + 0 + 0 + 79 + Ring + Silver Ring of Weight + 1 + 20 + 1 + + true + true + true + true + + + heavy + 5 + 0 + help-one + + + + + + + ring + 0 + 0 + 0 + 0 + 79 + Ring + Silver Ring + 2 + 100 + 1 + + + + + + + ring + 1 + 0 + 0 + 0 + 7 + 79 + Ring + Silver Serpent Ring + 2 + 40 + 1 + + true + + + use-summon + 50 + 100 + help-one + + + + + + + ring + 0 + 0 + 0 + 0 + 79 + Ring + Bronze Ring of Regen. + 2 + 500 + 1 + + true + + + regen + 2 + 0 + help-one + + + + + + + ring + 0 + 0 + 0 + 3 + 79 + Ring + Bronze Ring of Prot. + 2 + 150 + 1 + + true + + + + + + + ring + 0 + 0 + 0 + 0 + 79 + Ring + Bronze Ring of Accuracy + 2 + 120 + 1 + + true + + + accuracy + 2 + 0 + help-one + + + + + + + ring + 0 + 0 + 0 + 0 + 79 + Ring + Bronze Ring of Skill + 2 + 300 + 1 + + true + + + skill + 0 + 2 + help-one + + + + + + + ring + 0 + 2 + 0 + 0 + 79 + Ring + Bronze Ring of Weight + 2 + 10 + 1 + + true + true + true + true + + + heavy + 2 + 0 + help-one + + + + + + + ring + 0 + 0 + 0 + 0 + 79 + Ring + Bronze Ring + 1 + 60 + 1 + + + + + + + ring + 0 + 0 + 0 + 0 + 3 + 79 + Ring + Bronze Serpent Ring + 2 + 40 + 1 + + true + + + use-summon + 50 + 99 + help-one + + + + + + + ring + 0 + 0 + 0 + 0 + 79 + Ring + Ring of Warmth + 3 + 1000 + 1 + + true + + + prot-dmg + 4 + 5 + help-one + + + + + + + ring + 0 + 0 + 0 + 0 + 79 + Ring + Ring of Fire Res. + 3 + 1200 + 1 + + true + + + prot-dmg + 4 + 1 + help-one + + + + + + + ring + 0 + 0 + 0 + 0 + 79 + Ring + Ring of Speed + 4 + 3000 + 1 + + true + + + speed + 3 + 0 + help-one + + + + + + + ring + 0 + 0 + 0 + 0 + 79 + Ring + Ring of Will + 2 + 800 + 1 + + true + + + will + 7 + 0 + help-one + + + + + + + ring + 0 + 0 + 0 + 0 + 5 + 79 + Ring + Aescal's Ring + 2 + 750 + 1 + + true + + + major-heal + 2 + 0 + help-one + + + + + + + necklace + 0 + 0 + 0 + 0 + 84 + Necklace + Silver Ankh + 2 + 600 + 1 + + true + + + prot-dmg + 6 + 6 + help-one + + + + + + + necklace + 0 + 0 + 0 + 0 + 83 + Necklace + Amulet of the Cobra + 2 + 500 + 3 + + true + + + poison-aug + 3 + 0 + help-one + + + + + + + necklace + 0 + 0 + 0 + 0 + 84 + Necklace + Ruby Charm + 3 + 1200 + 3 + + true + + + prot-dmg + 5 + 1 + help-one + + + + + + + necklace + 0 + 0 + 0 + 0 + 83 + Necklace + Onyx Charm + 3 + 1000 + 3 + + true + + + prot-dmg + 5 + 3 + help-one + + + + + + + necklace + 0 + 0 + 0 + 0 + 83 + Necklace + Fang Necklace + 2 + 750 + 3 + + true + + + status + 4 + 1 + help-one + + + + + + + necklace + 0 + 0 + 0 + 0 + 6 + 82 + Necklace + Fire Orb Necklace + 3 + 150 + 3 + + true + + + use-spell + 15 + 22 + help-one + + + + + + + necklace + 0 + 0 + 0 + 0 + 84 + Necklace + Diamond Necklace + 3 + 1000 + 3 + + + + + + + necklace + 0 + 0 + 0 + 0 + 82 + Necklace + Gold Necklace + 2 + 400 + 3 + + + + + + + necklace + 0 + 0 + 0 + 0 + 1 + 82 + Necklace + Lifesaver Amulet + 3 + 2000 + 3 + + true + + + save-life + 0 + 0 + help-one + + + + + + + necklace + 0 + 0 + 0 + 0 + 5 + 83 + Necklace + Scale Necklace + 2 + 80 + 3 + + true + + + use-summon-mass + 6 + 72 + help-one + + + + + + + necklace + 0 + 0 + 0 + 0 + 84 + Necklace + Amber Periapt + 2 + 600 + 3 + + true + + + prot-status + 4 + 2 + help-one + + + + + + + necklace + 0 + 4 + 0 + -4 + 83 + Necklace + Feldspar Charm + 2 + 10 + 3 + + true + true + true + + + + + + + necklace + 0 + 0 + 0 + 4 + 82 + Necklace + Ivory Charm + 2 + 700 + 3 + + true + + + + + + + necklace + 0 + 0 + 0 + 0 + 84 + Necklace + Silver Necklace + 2 + 150 + 3 + + + + + + + object + 0 + 0 + 0 + 0 + 97 + Metal Bar + Uranium Bar + 2 + 200 + 20 + + true + + + status + 3 + 7 + harm-all + + + + + + + object + 0 + 0 + 0 + 0 + 122 + Metal Bar + Gold Bar + 2 + 750 + 20 + + + + + + + potion + 0 + 0 + 0 + 0 + 1 + 60 + Salve + Graymold Salve + 2 + 120 + 3 + + true + true + + + use-status + 3 + 7 + help-all + + + + + + + object + 0 + 0 + 0 + 0 + 1 + 61 + Balm + Ressurection Balm + 2 + 200 + 3 + + true + true + + + balm + 0 + 0 + help-one + + + + + + + object + 0 + 0 + 0 + 0 + 101 + Rock + Rough Diamond + 2 + 400 + 5 + + + + + + + scroll + 3 + 0 + 0 + 0 + 5 + 101 + Rock + Power Geode + 2 + 150 + 5 + + true + + + use-sp + 3 + 0 + help-one + + + + + + + scroll + 0 + 0 + 0 + 0 + 9 + 102 + Rock + Firestone + 2 + 80 + 5 + + true + + + use-spell + 7 + 11 + help-one + + + + + + + weapon-1hand + 4 + 0 + 8 + 0 + edged + 55 + Knife + Ravage Knife + 2 + 800 + 5 + + true + + + + + + + weapon-1hand + 6 + 0 + 3 + 0 + edged + 55 + Knife + Assassin's Knife + 3 + 1000 + 5 + + true + + + weap-status + 8 + 2 + help-one + + + + + + + weapon-1hand + 13 + 0 + 3 + 0 + edged + 7 + Waveblade + Alien Blade + 4 + 5000 + 30 + + true + + + weap-status + 3 + 2 + help-one + + + + + + + weapon-2hand + 18 + 0 + 5 + 0 + edged + 54 + Greatsword + Demonslayer + 4 + 8000 + 80 + + true + + + weap-slay + 8 + 10 + help-one + + + + + + + weapon-1hand + 12 + 0 + 2 + 0 + edged + 1 + Broadsword + Wyrmsbane + 4 + 4000 + 30 + + true + + + weap-slay + 6 + 4 + help-one + + + + + + + weapon-1hand + 10 + 0 + 1 + 0 + edged + 33 + Red Sword + Flaming Sword + 3 + 1200 + 30 + + true + + + weap-dmg + 5 + 1 + help-one + + + + + + + weapon-1hand + 10 + 0 + 3 + 0 + bashing + 31 + Hammer + Smite + 4 + 4000 + 30 + + true + + + weap-slay + 8 + 12 + help-one + + + + + + + weapon-1hand + 10 + 0 + 2 + 0 + bashing + 2 + Mace + Mace of Disruption + 3 + 1250 + 40 + + true + + + weap-slay + 7 + 11 + help-one + + + + + + + object + 0 + 0 + 0 + 0 + 102 + Rock + Lodestone + 2 + 100 + 5 + + true + true + true + true + + + heavy + 4 + 0 + help-one + + + + + + + object + 0 + 0 + 0 + 0 + 101 + Rock + Airy Stone + 2 + 400 + 5 + + true + + + light + 4 + 0 + help-one + + + + + + + scroll + 0 + 0 + 0 + 0 + 4 + 93 + 41 + Powder + Basic Powder + 2 + 40 + 2 + + true + + + use-status + 8 + 13 + help-all + + + + + + + scroll + 0 + 0 + 0 + 0 + 2 + 93 + 42 + Powder + Powder of Lethe + 1 + 30 + 2 + + true + + + use-xp + 4 + 0 + harm-all + + + + + + + potion + 0 + 0 + 0 + 0 + 1 + 60 + Potion + Potion of Paralysis + 1 + 30 + 4 + + true + + + use-status + 10 + 12 + harm-one + + + + + + + ring + 0 + 0 + 0 + 0 + 79 + Ring + Ring of Free Action + 3 + 1000 + 2 + + true + + + freedom + 7 + 0 + help-one + + + + + + + ring + 0 + 0 + 0 + 0 + 79 + Ring + Ring of Resistance + 4 + 4000 + 2 + + true + + + prot-full + 6 + 0 + help-one + + + + + + + necklace + 0 + 0 + 0 + 0 + 83 + Necklace + Basic Necklace + 2 + 500 + 4 + + true + + + prot-status + 4 + 13 + help-one + + + + + + + wand + 0 + 0 + 0 + 0 + 5 + 64 + Wand + Wand of Paralysis + 2 + 170 + 6 + + true + true + + + use-spell + 13 + 69 + help-one + + + + + + + wand + 0 + 0 + 0 + 0 + 7 + 65 + Wand + Wand of Acid + 2 + 100 + 7 + + true + true + + + use-spell + 15 + 68 + help-one + + + + + + + helm + 4 + 0 + 0 + 1 + 76 + Helm + Helm of Alertness + 2 + 750 + 20 + + true + + + freedom + 3 + 0 + help-one + + + + + + + shield + 6 + 1 + 0 + 2 + 6 + 13 + Shield + Shield of Kron + 3 + 250 + 40 + + true + true + + + use-spell + 11 + 19 + help-one + + + + + + + weapon-1hand + 8 + 0 + 0 + 0 + 8 + edged + 0 + Short Sword + Boltblade + 2 + 50 + 20 + + true + true + + + use-spell + 7 + 11 + help-one + + + + + + + weapon-1hand + 8 + 0 + 0 + 3 + bashing + 2 + Mace + Shield Mace + 2 + 400 + 30 + + true + + + + + + + ring + 2 + 0 + 0 + 0 + 5 + 79 + Ring + Quicksilver Band + 2 + 120 + 4 + + true + + + use-status + 3 + 3 + help-one + + + + + + + object + 0 + 0 + 0 + 0 + 3 + 70 + 21 + Holly + Holly + 1 + 10 + 1 + + true + + + holly + 0 + 0 + help-one + + + + + + + object + 0 + 0 + 0 + 0 + 3 + 70 + 22 + Comfrey Root + Comfrey Root + 1 + 15 + 1 + + true + + + comfrey + 0 + 0 + help-one + + + + + + + object + 0 + 0 + 0 + 0 + 3 + 71 + 23 + Glowing Nettle + Glowing Nettle + 1 + 30 + 1 + + true + + + nettle + 0 + 0 + help-one + + + + + + + object + 0 + 0 + 0 + 0 + 3 + 74 + 24 + Wormgrass + Wormgrass + 2 + 50 + 1 + + true + + + wormgrass + 0 + 0 + help-one + + + + + + + object + 0 + 0 + 0 + 0 + 3 + 70 + 50 + Asptongue Mold + Asptongue Mold + 2 + 70 + 1 + + true + + + asptongue + 0 + 0 + help-one + + + + + + + object + 0 + 0 + 0 + 0 + 2 + 70 + 25 + Graymold + Graymold + 2 + 90 + 1 + + true + + + graymold + 0 + 0 + help-one + + + + + + + object + 0 + 0 + 0 + 0 + 2 + 71 + 26 + Ember Flowers + Ember Flowers + 2 + 120 + 1 + + true + + + ember + 0 + 0 + help-one + + + + + + + object + 0 + 0 + 0 + 0 + 2 + 70 + 27 + Mandrake Root + Mandrake Root + 2 + 400 + 1 + + true + + + mandrake + 0 + 0 + help-one + + + + + + + object + 0 + 0 + 0 + 0 + 1 + 126 + Asp Fangs + Asp Fangs + 1 + 40 + 1 + + true + + + asptongue + 0 + 0 + help-one + + + + + + + weapon-1hand + 3 + 0 + 0 + 0 + edged + 3 + Axe + Cursed Axe + 1 + 10 + 20 + + true + true + true + + + + + + + weapon-1hand + 6 + 0 + 0 + 0 + edged + 1 + Broadsword + Cursed Broadsword + 1 + 10 + 25 + + true + true + true + + + + + + + weapon-2hand + 8 + 0 + 0 + 0 + edged + 54 + Greatsword + Cursed Greatsword + 1 + 10 + 45 + + true + true + true + + + + + + + weapon-1hand + 1 + 0 + 0 + 0 + edged + 55 + Knife + Cursed Knife + 1 + 10 + 8 + + true + true + true + + + + + + + shield + 1 + 2 + 0 + 0 + 13 + Shield + Cursed Shield + 1 + 10 + 30 + + true + true + true + + + + + + + weapon-1hand + 1 + 0 + 0 + 0 + bashing + 2 + Mace + Cursed Mace + 1 + 10 + 20 + + true + true + true + + + + + + + ring + 0 + 3 + 0 + 0 + 79 + Ring + Cursed Ring + 1 + 10 + 1 + + true + true + true + + + + + + + weapon-2hand + 8 + 0 + 0 + 0 + pole + 5 + Halberd + Cursed Halberd + 1 + 10 + 50 + + true + true + true + + + + + + + object + 0 + 0 + 0 + 0 + 1 + 101 + 46 + Ore + Silver Ore + 1 + 8 + 3 + + true + + + + + + + object + 0 + 0 + 0 + 0 + 1 + 102 + 47 + Ore + Gold Ore + 1 + 15 + 3 + + true + + + + + + + weapon-1hand + 10 + 0 + 6 + 0 + edged + 0 + Broadsword + Mithral Broadsword + 4 + 3000 + 25 + + true + + + + + + + weapon-2hand + 3 + 0 + 0 + 1 + pole + 20 + Staff + Simple Staff + 1 + 30 + 18 + + + + + + + weapon-2hand + 3 + 0 + 1 + 3 + pole + 20 + Staff + Fine Staff + 2 + 700 + 18 + + + + + + + weapon-2hand + 3 + 0 + 1 + 1 + pole + 41 + Staff + Sparking Staff + 4 + 700 + 18 + + true + + + boost-stat + 1 + 9 + help-one + + + + + + + weapon-2hand + 3 + 0 + 1 + 1 + pole + 41 + Staff + Flashing Staff + 4 + 3000 + 18 + + true + + + boost-stat + 3 + 9 + help-one + + + + + + + weapon-2hand + 3 + 0 + 1 + 1 + pole + 42 + Staff + Druidic Staff + 3 + 700 + 18 + + true + + + boost-stat + 1 + 10 + help-one + + + + + + + weapon-2hand + 3 + 0 + 1 + 1 + pole + 42 + Staff + Righteous Staff + 4 + 3000 + 18 + + true + + + boost-stat + 3 + 10 + help-one + + + + + + + weapon-2hand + 3 + 4 + 0 + -3 + pole + 20 + Staff + Beggar's Staff + 1 + 0 + 18 + + true + true + + + + + + + tool + 0 + 0 + 0 + 0 + 108 + Book + Book of Concoction + 2 + 300 + 8 + + + boost-stat + 3 + 12 + help-one + + + + + + + tool + 0 + 0 + 0 + 0 + 108 + Book + Picker's Field Guide + 2 + 300 + 8 + + + boost-stat + 3 + 13 + help-one + + + + + + + tool + 0 + 0 + 0 + 0 + 120 + Book + Book of Magery + 3 + 700 + 11 + + true + + + boost-stat + 1 + 9 + help-one + + + + + + + tool + 0 + 0 + 0 + 0 + 120 + Book + Tome of Sorcery + 4 + 3000 + 11 + + true + + + boost-stat + 3 + 9 + help-one + + + + + + + tool + 0 + 0 + 0 + 0 + 109 + Book + Book of Holy Ritual + 3 + 700 + 11 + + true + + + boost-stat + 1 + 10 + help-one + + + + + + + tool + 0 + 0 + 0 + 0 + 109 + Book + Tome of Divine Power + 4 + 3000 + 11 + + true + + + boost-stat + 3 + 10 + harm-one + + + + + + + tool + 0 + 1 + 0 + 0 + 1 + 108 + Book + Tome of Orange Cat + 1 + 0 + 7 + + true + true + + + boost-stat + 1 + 2 + help-one + + + + + + + helm + 0 + 0 + 0 + 0 + 137 + Hat + Magician's Hat + 2 + 350 + 1 + + true + + + boost-stat + 2 + 11 + help-one + + + + + + + weapon-1hand + 1 + 0 + 0 + 0 + 10 + mage-lore + 95 + Horn + Horn of Jericho + 2 + 50 + 1 + + true + true + + + use-spell + 1 + 144 + help-one + + + + + + + weapon-1hand + 2 + 0 + 0 + 0 + 3 + mage-lore + 134 + Pipes + Panpipes + 3 + 200 + 10 + + true + true + + + use-spell + 5 + 117 + help-one + + + + + + + weapon-1hand + 2 + 0 + 0 + 0 + 10 + mage-lore + 134 + Pipes + Pied Piper's Pipes + 3 + 60 + 2 + + true + true + + + use-summon-mass + 5 + 78 + help-one + + + + + + + weapon-1hand + 4 + 0 + 0 + 0 + mage-lore + 135 + Lyre + Lyre of Lullabies + 4 + 1200 + 10 + + true + + + weap-status + 3 + 11 + help-one + + + + + + + weapon-2hand + 4 + 0 + 0 + 2 + 5 + mage-lore + 47 + Lute + Lute of Lost Souls + 4 + 404 + 20 + + true + true + + + use-summon-mass + 3 + 62 + help-one + + + + + + + weapon-2hand + 5 + 0 + 2 + 0 + mage-lore + 45 + Coronet + Coronet of Chaos + 4 + 3500 + 30 + + true + + + weap-fear + 3 + 0 + help-one + + + + + + + weapon-2hand + 1 + 4 + 0 + 0 + mage-lore + 45 + Coronet + Courteous Coronet + 2 + 0 + 30 + + true + true + + + weap-status + 3 + 1 + help-one + + + + + + + object + 0 + 0 + 0 + 0 + 46 + Fur + Poor Fur + 2 + 50 + 15 + + + + + + + object + 0 + 0 + 0 + 0 + 46 + Fur + Fine Fur + 3 + 500 + 15 + + + + + + diff --git a/test/files/town/townrectUniversal/monsters.xml b/test/files/town/townrectUniversal/monsters.xml new file mode 100644 index 000000000..b03cf2184 --- /dev/null +++ b/test/files/town/townrectUniversal/monsters.xml @@ -0,0 +1,4606 @@ + + + + Townsperson + 0 + human + 1 + 1 + 2 + 6 + 4 + docile + 0 + 0 + + 1d6 + + + + + Townsperson + 8 + 1 + human + 1 + 1 + 2 + 6 + 4 + docile + 0 + 0 + + 1d6 + + + + + Townsperson + 2 + 2 + human + 1 + 1 + 2 + 6 + 4 + docile + 0 + 0 + + 1d6 + + + + + Townsperson + 1 + 3 + human + 1 + 1 + 2 + 6 + 4 + docile + 0 + 0 + + 1d6 + + + + + Townsperson + 4 + 4 + human + 1 + 1 + 2 + 6 + 4 + docile + 0 + 0 + + 1d6 + + + + + Townsperson + 17 + 5 + human + 1 + 1 + 2 + 6 + 4 + docile + 0 + 0 + + 1d6 + + + + + Townsperson + 6 + 6 + human + 1 + 1 + 2 + 6 + 4 + docile + 0 + 0 + + 1d6 + + + + + Townsperson + 56 + 7 + human + 1 + 1 + 2 + 6 + 4 + docile + 0 + 0 + + 1d6 + + + + + Child + 8 + human + 1 + 1 + 1 + 6 + 4 + docile + 0 + 0 + + 1d1 + + + + + Child + 9 + human + 1 + 1 + 1 + 3 + 4 + docile + 0 + 0 + + 1d1 + + + + + Beggar + 38 + 10 + human + 1 + 1 + 2 + 3 + 4 + docile + 0 + 0 + + 1d2 + + + + + Guard + 10 + 11 + human + 30 + 30 + 30 + 140 + 6 + friendly + 0 + 0 + + 3d10 + 3d10 + + + 50 + 50 + 50 + 50 + + + + + spear + 5 + 3d7 + 6 + 8 + 62.5 + + + + + Soldier + 10 + 12 + human + 4 + 8 + 8 + 20 + 4 + friendly + 0 + 2 + + 2d7 + + + + + Captain + 11 + 13 + human + 8 + 12 + 10 + 40 + 4 + friendly + 0 + 2 + + 2d9 + + + + + Champion + 12 + 14 + human + 12 + 18 + 14 + 75 + 5 + friendly + 0 + 2 + + 2d10 + 2d10 + + + + + Bladesman + 12 + 15 + human + 20 + 22 + 20 + 115 + 8 + friendly + 0 + 2 + + 3d8 + 3d8 + + + + + Empire Dervish + 12 + 16 + human + 25 + 25 + 23 + 140 + 8 + friendly + 0 + 2 + + 3d12 + 3d12 + + + + + Brigand + 31 + 17 + human + 3 + 6 + 5 + 14 + 4 + hostile-a + 0 + 1 + + 1d8 + + + + + Archer + 31 + 18 + human + 5 + 6 + 6 + 16 + 4 + friendly + 0 + 1 + + 1d6 + + + + + arrow + 3 + 2d7 + 4 + 8 + 75.0 + + + + + Empire Archer + 19 + 19 + human + 28 + 20 + 28 + 90 + 4 + friendly + 0 + 2 + + 1d10 + + + + + arrow++ + 3 + 8d7 + 16 + 10 + 87.5 + + + + + Acolyte + 41 + 20 + priest + 3 + 8 + 2 + 18 + 4 + friendly + 0 + 1 + 2 + + 1d8 + + + 50 + + + + Priest + 41 + 21 + priest + 8 + 14 + 4 + 40 + 4 + friendly + 0 + 2 + 4 + + 1d8 + + + 50 + + + + High Priest + 14 + 21 + priest + 20 + 20 + 8 + 90 + 4 + friendly + 0 + 3 + 6 + + 3d8 + + + 50 + 50 + 50 + + + + Evil Acolyte + 13 + 22 + priest + 4 + 8 + 2 + 18 + 4 + hostile-a + 0 + 1 + 2 + + 1d8 + + + 50 + + + + Evil Priest + 13 + 23 + priest + 8 + 14 + 4 + 40 + 4 + hostile-a + 0 + 2 + 4 + + 1d8 + + + 50 + + + + Evil High Priest + 58 + 23 + priest + 20 + 20 + 8 + 90 + 4 + hostile-a + 0 + 3 + 6 + + 3d8 + + + 50 + 50 + 50 + + + + Apprentice Mage + 18 + 24 + mage + 5 + 5 + 2 + 16 + 4 + docile + 0 + 1 + 2 + + 1d6 + + + 50 + 50 + + + + Mage + 16 + 25 + mage + 10 + 10 + 4 + 40 + 5 + docile + 0 + 2 + 4 + + 1d8 + + + 50 + 50 + 50 + + + + Wizard + 15 + 26 + mage + 25 + 20 + 5 + 90 + 6 + docile + 0 + 3 + 7 + + 1d10 + + + 50 + 0 + 50 + + + + Order Mage + 15 + 27 + mage + 35 + 30 + 5 + 160 + 7 + docile + 0 + 4 + 7 + + 1d12 + + + 0 + 50 + 0 + 0 + + + + Witch + 26 + 28 + mage + 8 + 4 + 3 + 40 + 4 + hostile-a + 0 + 2 + 5 + + 1d6 + + + 50 + + + + Witch + 54 + 29 + mage + 6 + 4 + 3 + 35 + 4 + docile + 0 + 1 + 3 + + 1d6 + + + 50 + + + + Official + 29 + 30 + human + 2 + 2 + 1 + 6 + 4 + docile + 0 + 1 + + 1d3 + + + + + Official + 30 + 31 + human + 2 + 2 + 1 + 6 + 4 + docile + 0 + 1 + + 1d3 + + + + + Assassin + 32 + 3 + human + 7 + 9 + 12 + 35 + 4 + hostile-a + 0 + 1 + + 1d12 + + + + + touch + 4 + 100.0 + poison + + + + + Monk + 18 + 32 + priest + 6 + 7 + 8 + 30 + 5 + docile + 0 + 1 + + 2d6 + 2d6 + + + 50 + + + + Mad Monk + 58 + 33 + priest + 12 + 15 + 25 + 80 + 8 + hostile-a + 0 + 2 + + 2d8 + 2d8 + 2d8 + + + 50 + 50 + 50 + 50 + + + + Goblin + 23 + 34 + goblin + 2 + 3 + 5 + 10 + 3 + hostile-a + 1 + 1 + + 1d7 + + + + + Goblin Fighter + 23 + 35 + goblin + 5 + 5 + 8 + 22 + 3 + hostile-a + 0 + 1 + + 1d9 + + + + + touch + 2 + 100.0 + poison + + + + + Nephil + 44 + 36 + humanoid + 4 + 4 + 3 + 15 + 4 + hostile-a + 1 + 1 + + 1d8 + + + + + Nephil Warrior + 44 + 37 + humanoid + 6 + 7 + 9 + 25 + 6 + hostile-a + 2 + 2 + + 2d7 + + + + + Nephil Archer + 44 + 38 + humanoid + 5 + 6 + 8 + 18 + 4 + hostile-a + 2 + 1 + + 1d8 + + + + + arrow + 3 + 2d7 + 4 + 8 + 75.0 + + + + + Nephil Shaman + 44 + 39 + humanoid + 6 + 12 + 4 + 30 + 4 + hostile-a + 0 + 2 + 3 + 3 + + 1d8 + + + + + Nephil Chief + 44 + 40 + humanoid + 8 + 18 + 18 + 45 + 6 + hostile-a + 0 + 3 + + 2d10 + 2d10 + + + + + Ogre + 23 + 41 + humanoid + 7 + 9 + 10 + 35 + 4 + hostile-a + 2 + 1 + + 3d6 + + + + + Ogre Mage + 23 + 43 + humanoid + 18 + 15 + 10 + 70 + 4 + hostile-a + 0 + 2 + 6 + + 3d6 + + + 50 + 50 + 50 + + + + Slith + 52 + 44 + humanoid + 7 + 7 + 7 + 30 + 4 + hostile-a + 2 + 1 + + 1d10 + + + + + Slith Warrior + 52 + 45 + humanoid + 10 + 3 + 14 + 50 + 4 + hostile-a + 3 + 2 + + 3d8 + 3d8 + + + + + spear + 5 + 3d7 + 6 + 8 + 62.5 + + + + + Slith Priest + 52 + 46 + humanoid + 8 + 5 + 6 + 40 + 4 + hostile-a + 0 + 2 + 4 + + 1d12 + + + + + Slith Mage + 52 + 47 + humanoid + 8 + 10 + 6 + 40 + 4 + hostile-a + 0 + 2 + 4 + + 1d10 + + + + + Slith High Priest + 52 + 46 + humanoid + 12 + 18 + 6 + 70 + 4 + hostile-a + 0 + 3 + 7 + + 1d10 + + + 50 + 50 + 50 + + + + Slith Archmage + 52 + 47 + humanoid + 12 + 18 + 6 + 70 + 4 + hostile-a + 0 + 3 + 6 + + 1d10 + + + 50 + 50 + 50 + + + + Slith Chief + 52 + 48 + humanoid + 15 + 24 + 28 + 100 + 4 + hostile-a + 0 + 4 + + 4d10 + 4d10 + + + + + Cave Giant + 53 + 49 + giant + 18 + 10 + 12 + 90 + 3 + hostile-a + 0 + 1 + + 5d8 + + + + + boulder + 12 + 4d7 + 8 + 10 + 62.5 + + + + + Giant Shaman + 53 + 50 + giant + 22 + 14 + 10 + 110 + 4 + hostile-a + 0 + 2 + 4 + 4 + + 5d8 + + + + + boulder + 12 + 6d7 + 12 + 10 + 50.0 + + + + + Giant Chief + 53 + 51 + giant + 28 + 24 + 28 + 140 + 4 + hostile-a + 0 + 4 + + 6d10 + + + + + boulder + 12 + 8d7 + 16 + 10 + 50.0 + + + + + Mutant Giant + 53 + 52 + giant + 26 + 25 + 28 + 130 + 4 + hostile-a + 0 + 2 + + 5d10 + + + 0 + + + + boulder + 12 + 6d7 + 12 + 10 + 50.0 + + + + + Skeleton + 53 + skeletal + 3 + 2 + 4 + 15 + 4 + hostile-a + 1 + 0 + + 1d8 + + + 0 + 0 + + + + Ruby Skeleton + 54 + skeletal + 10 + 6 + 10 + 50 + 4 + hostile-a + 3 + 0 + + 2d8 + + + 0 + 0 + 0 + + + + 6 + 625 + 7 + + + + + Zombie + 55 + undead + 4 + 0 + 5 + 20 + 4 + hostile-a + 1 + 0 + + 2d4 + + + 0 + 0 + + + + Ghost + 42 + undead + 3 + 0 + 3 + 15 + 4 + hostile-a + 0 + 0 + + 1d8 + + + 0 + 0 + + + + Ghoul + 57 + undead + 6 + 2 + 9 + 30 + 4 + hostile-a + 2 + 0 + + 2d8 + 1d10 + 1d10 + + + 0 + 0 + + + + touch + 2 + 66.7 + haste-slow + + + + + Ghast + 58 + undead + 8 + 2 + 13 + 40 + 4 + hostile-a + 3 + 0 + + 3d8 + 1d13 + 1d13 + + + 0 + 0 + + + + touch + 2 + 66.7 + haste-slow + + + + + Quickghast + 58 + undead + 12 + 2 + 18 + 60 + 9 + hostile-a + 0 + 0 + + 4d8 + 5d5 + 5d5 + + + 0 + 0 + + + + touch + 2 + 66.7 + haste-slow + + + + + Spirit + 56 + undead + 11 + 7 + 7 + 55 + 4 + hostile-a + 3 + 0 + 3 + + 1d10 + + + 0 + 0 + + + + Wight + 59 + undead + 10 + 8 + 10 + 50 + 4 + hostile-a + 0 + 1 + + 2d8 + + + 0 + 0 + + + + touch + 150 + 0.0 + + + + + Spectre + 60 + undead + 14 + 10 + 17 + 70 + 4 + hostile-a + 0 + 2 + + 0d0 + 4d6 + 4d6 + + + 0 + 0 + + + + touch + 3 + 66.7 + cold + + + touch + 150 + 0.0 + + + + + Vampire + 61 + undead + 18 + 5 + 20 + 90 + 4 + hostile-a + 0 + 3 + 5 + + 2d10 + + + 0 + 0 + + + + touch + 3 + 66.7 + cold + + + touch + 150 + 0.0 + + + + + Lich + 20 + 62 + undead + 35 + 15 + 30 + 170 + 5 + hostile-a + 0 + 4 + 7 + 7 + + 0d0 + 4d8 + 4d8 + + + 50 + 0 + 0 + + + + touch + 3 + 66.7 + cold + + + touch + 150 + 0.0 + + + + + Hraithe + 63 + undead + 14 + 7 + 8 + 70 + 4 + hostile-a + 0 + 0 + 4 + + 3d10 + + + 0 + 0 + + + + touch + 3 + 100.0 + poison + + + + + Vahnavoi + 64 + undead + 10 + 10 + 16 + 50 + 4 + hostile-a + 0 + 0 + + 0d0 + 3d8 + 3d8 + + + 0 + 0 + + + + Giant Lizard + 65 + reptile + 4 + 4 + 7 + 20 + 4 + hostile-a + 2 + 0 + + 2d6 + 1d8 + 1d8 + + + + + Fire Lizard + 66 + reptile + 8 + 7 + 12 + 40 + 4 + hostile-a + 3 + 2 + + 3d6 + 1d10 + 1d10 + + + 0 + + + + breath + 13 + 8 + 4 + 37.5 + fire + + + + + Ice Lizard + 67 + reptile + 8 + 7 + 12 + 40 + 4 + hostile-a + 0 + 2 + + 3d6 + 1d10 + 1d10 + + + 0 + + + + breath + 6 + 8 + 4 + 37.5 + cold + + + + + Cave Slime + 68 + slime + 3 + 0 + 4 + 15 + 3 + hostile-a + 1 + 0 + + 1d8 + 1d8 + 1d8 + + + 0 + + + + Ice Slime + 69 + slime + 7 + 0 + 7 + 35 + 3 + hostile-a + 0 + 0 + + 2d10 + + + 0 + 0 + + + + touch + 3 + 66.7 + cold + + + + + Viscous Goo + 68 + slime + 3 + 0 + 7 + 30 + 3 + hostile-a + 0 + 0 + + 1d12 + + + 0 + true + + + + touch + 2 + 100.0 + poison + + + 1000 + + + + + Giant Rat + 70 + beast + 2 + 2 + 3 + 10 + 4 + hostile-a + 1 + 0 + + 1d6 + + + + + Vapor Rat + 70 + beast + 4 + 2 + 5 + 20 + 4 + hostile-a + 2 + 0 + + 1d10 + + + + + breath + 12 + 6 + 0 + 37.5 + cloud-stink + + + + + Mung Rat + 70 + beast + 3 + 2 + 5 + 15 + 4 + hostile-a + 2 + 0 + + 1d8 + + + 0 + + + + touch + 2 + 100.0 + poison + + + + + Shambler + 71 + beast + 18 + 1 + 15 + 100 + 3 + hostile-a + 0 + 0 + + 0d0 + 4d10 + 4d10 + + + 0 + 50 + + + + touch + 5 + 100.0 + web + + + + + Bat + 72 + beast + 2 + 10 + 4 + 10 + 8 + hostile-a + 1 + 0 + + 1d7 + + + + + Drake + 73 + reptile + 18 + 12 + 18 + 90 + 4 + hostile-a + 0 + 2 + 4 + + 3d15 + 2d10 + 2d10 + + + 0 + 50 + + + + breath + 13 + 8 + 6 + 37.5 + fire + + + + + Imp + 74 + demon + 7 + 8 + 12 + 35 + 4 + hostile-a + 3 + 2 + 2 + 2 + + 0d0 + 1d10 + 1d10 + + + 0 + 0 + + + + Demon + 75 + demon + 20 + 14 + 18 + 70 + 4 + hostile-a + 0 + 2 + 5 + 3 + + 3d8 + 1d15 + 1d15 + + + 0 + 0 + + + + Mung Demon + 76 + demon + 30 + 20 + 24 + 150 + 4 + hostile-a + 0 + 3 + + 0d0 + 4d10 + 4d10 + + + 0 + 0 + 50 + 50 + + + + gaze + 8 + 8 + 50 + 62.5 + + + touch + 6 + 100.0 + poison + + + + + Haakai + 76 + demon + 35 + 20 + 33 + 200 + 4 + hostile-a + 0 + 4 + 7 + 7 + + 6d10 + 4d10 + 4d10 + + + 0 + 0 + 50 + 50 + + + + breath + 13 + 8 + 8 + 37.5 + fire + + + touch + 8 + 100.0 + poison + + + + + Hordling + 77 + demon + 5 + 4 + 5 + 25 + 4 + hostile-a + 2 + 2 + 1 + 1 + + 2d6 + + + 0 + 0 + + + + breath + 13 + 8 + 1 + 37.5 + fire + + + touch + 1 + 100.0 + poison + + + + + Vahnatai + 48 + 78 + humanoid + 3 + 2 + 5 + 20 + 4 + docile + 0 + 1 + + 1d8 + + + + + Vahnatai Child + 48 + 79 + humanoid + 1 + 2 + 3 + 5 + 4 + docile + 0 + 0 + + 1d3 + + + + + Vahnatai Warrior + 48 + 80 + humanoid + 9 + 10 + 12 + 90 + 7 + friendly + 0 + 2 + + 3d12 + + + + + + + + Vahnatai Warrior + 48 + 81 + humanoid + 8 + 10 + 12 + 75 + 6 + friendly + 0 + 2 + + 1d16 + + + + + star + 7 + 7d7 + 14 + 8 + 62.5 + + + + + Vahnatai Shaper + 48 + 82 + humanoid + 7 + 14 + 8 + 70 + 4 + friendly + 0 + 2 + 3 + + 1d18 + + + + + Vahnatai Shaper + 48 + 83 + humanoid + 7 + 14 + 8 + 70 + 4 + friendly + 0 + 2 + 3 + + 1d18 + + + + + Vahnatai Keeper + 46 + 84 + humanoid + 18 + 14 + 8 + 120 + 4 + friendly + 0 + 2 + 6 + + 2d12 + + + 50 + 50 + + + + Vahnatai Keeper + 46 + 85 + humanoid + 18 + 14 + 8 + 120 + 4 + friendly + 0 + 2 + 6 + + 2d12 + + + 50 + 50 + + + + Vahnatai Master + 46 + 86 + humanoid + 25 + 18 + 23 + 190 + 6 + friendly + 0 + 3 + + 5d10 + 4d10 + + + 50 + 50 + 50 + + + + + + + Vahnatai Lord + 46 + 87 + humanoid + 35 + 25 + 35 + 400 + 8 + friendly + 0 + 4 + 7 + 7 + + 6d14 + + + 50 + 50 + 50 + + + + Serpent + 88 + reptile + 3 + 2 + 4 + 15 + 4 + hostile-a + 1 + 0 + + 1d8 + + + + + Asp + 88 + reptile + 5 + 2 + 6 + 25 + 4 + hostile-a + 2 + 0 + + 1d10 + + + + 371 + 60 + + + + touch + 5 + 100.0 + poison + + + + + Gazer + 89 + beast + 24 + 8 + 7 + 120 + 5 + hostile-a + 0 + 2 + 6 + 3 + + 1d10 + + + 50 + 0 + 50 + + + + Eyebeast + 89 + beast + 18 + 8 + 7 + 90 + 6 + hostile-a + 0 + 2 + + 1d10 + + + 50 + 0 + 50 + + + + gaze + 8 + 8 + 50 + 62.5 + + + + + Basilisk + 90 + reptile + 10 + 5 + 5 + 50 + 4 + hostile-a + 0 + 0 + + 2d6 + 1d8 + 1d8 + + + + + gaze + -1 + 6 + 25 + 62.5 + + + + + Ur-Basilisk + 90 + reptile + 25 + 9 + 12 + 120 + 4 + hostile-a + 0 + 0 + + 3d6 + 1d10 + 1d10 + + + + + gaze + -1 + 6 + 25 + 62.5 + + + + + Statue + 91 + stone + 7 + 12 + 0 + 35 + 4 + hostile-a + 0 + 0 + 1 + 1 + + 0d0 + + + 0 + true + + + + Living Statue + 91 + stone + 2 + 12 + 0 + 10 + 4 + docile + 0 + 0 + + 0d0 + + + 0 + true + + + + Crystal Soul + 25 + 92 + stone + 28 + 18 + 0 + 200 + 5 + docile + 0 + 0 + 7 + 7 + + 0d0 + + + 0 + 0 + 0 + 0 + + + + Lizard + 93 + reptile + 1 + 1 + 1 + 3 + 2 + docile + 0 + 0 + + 1d2 + + + + + Cat + 94 + beast + 1 + 1 + 1 + 3 + 3 + docile + 0 + 0 + + 1d2 + + + + + Dog + 95 + beast + 1 + 1 + 1 + 3 + 3 + docile + 0 + 0 + + 1d2 + + + + + Cave Cow + 96 + beast + 1 + 1 + 1 + 7 + 3 + docile + 0 + 0 + + 1d2 + + + + + Cow + 97 + beast + 1 + 1 + 1 + 7 + 3 + docile + 0 + 0 + + 1d2 + + + + + Chicken + 98 + beast + 1 + 1 + 1 + 1 + 2 + docile + 0 + 0 + + 1d2 + + + + + Sheep + 99 + beast + 1 + 1 + 1 + 5 + 2 + docile + 0 + 0 + + 1d2 + + + + + Wolf + 100 + beast + 3 + 1 + 5 + 15 + 4 + hostile-a + 1 + 0 + + 2d6 + + + + + Worg + 106 + beast + 7 + 1 + 9 + 35 + 4 + hostile-a + 2 + 0 + + 3d6 + + + + + Bear + 101 + beast + 8 + 3 + 12 + 40 + 4 + hostile-a + 0 + 0 + + 4d6 + 1d12 + 1d12 + + + + + Giant Spider + 102 + bug + 4 + 1 + 3 + 14 + 4 + hostile-a + 2 + 0 + + 1d8 + + + + + touch + 3 + 100.0 + poison + + + 4 + 375 + + + + + Talking Spider + 45 + 102 + bug + 8 + 1 + 25 + 40 + 4 + docile + 0 + 0 + + 3d6 + + + + + touch + 9 + 100.0 + poison + + + 4 + 375 + + + + + Gremlin + 103 + humanoid + 3 + 1 + 5 + 15 + 7 + hostile-a + 0 + 1 + + 1d8 + + + + + touch + 10 + 66.7 + + + + + Black Shade + 56 + beast + 12 + 6 + 9 + 50 + 4 + hostile-a + 0 + 0 + 3 + 5 + + 2d6 + + + 0 + 0 + + + + + + + Guardian + 149 + beast + 18 + 6 + 20 + 90 + 4 + hostile-a + 0 + 0 + + 0d0 + 3d10 + 3d10 + + + 0 + 0 + + + + + breath + 13 + 8 + 5 + 37.5 + fire + + + + + Doomguard + 104 + important + 4 + 12 + 25 + 150 + 4 + hostile-a + 0 + 0 + + 0d0 + 5d9 + 5d9 + + + 0 + 0 + 0 + 0 + true + + + + 1000 + + + + + Poison Fungi + 71 + beast + 7 + 8 + 10 + 35 + 3 + hostile-a + 0 + 0 + + 1d12 + + + 0 + + + + touch + 7 + 100.0 + poison + + + + + Shade + 56 + undead + 5 + 5 + 5 + 25 + 4 + hostile-a + 0 + 0 + + 1d8 + + + 0 + 0 + + + + Deva + 60 + undead + 8 + 5 + 12 + 40 + 4 + hostile-a + 0 + 0 + 2 + + 1d10 + + + 0 + 0 + + + + Salamander + 66 + reptile + 18 + 7 + 15 + 90 + 4 + hostile-a + 0 + 2 + + 3d6 + 1d8 + 1d8 + + + 0 + + + + breath + 13 + 8 + 4 + 37.5 + fire + + + wall-fire + square + 80 + + + + + Ice Drake + 105 + reptile + 22 + 10 + 24 + 110 + 4 + hostile-a + 0 + 3 + 3 + 3 + + 4d6 + 2d6 + 2d6 + + + 0 + + + + breath + 6 + 8 + 7 + 37.5 + cold + + + wall-ice + square + 90 + + + + + Ice Pudding + 69 + slime + 10 + 0 + 13 + 50 + 3 + hostile-a + 0 + 0 + + 5d9 + + + 0 + + + + wall-ice + square + 90 + + + + + Chitrach + 107 + bug + 12 + 7 + 8 + 60 + 4 + hostile-a + 3 + 0 + + 4d6 + + + 50 + + + + touch + 5 + 100.0 + web + + + + + Chitrach Larva + 108 + bug + 6 + 2 + 3 + 25 + 4 + hostile-a + 2 + 0 + + 2d6 + + + 50 + + + + Null Bug + 109 + bug + 12 + 5 + 12 + 50 + 4 + hostile-a + 0 + 0 + + 5d7 + + + 50 + + + + touch + 4 + 100.0 + poison + + + field-antimagic + square + 90 + + + + + Giant Slug + 110 + bug + 16 + 13 + 18 + 80 + 4 + hostile-a + 0 + 0 + + 5d10 + + + + + spit + 0 + 6 + 6 + 50.0 + acid + + + + + Spore Beast + 71 + beast + 7 + 6 + 10 + 35 + 4 + hostile-a + 3 + 0 + + 2d6 + + + 0 + + + + touch + 6 + 66.7 + disease + + + + + Rakshasa + 111 + humanoid + 25 + 20 + 4 + 125 + 5 + hostile-a + 0 + 3 + 6 + + 1d12 + + + 0 + 50 + 0 + 0 + + + + 1000 + 3 + + + + + Naga + 112 + beast + 28 + 18 + 28 + 140 + 5 + hostile-a + 0 + 3 + 5 + 4 + + 4d10 + + + 50 + 50 + 50 + 50 + + + + touch + 500 + 0.0 + paralysis + + + touch + 7 + 100.0 + poison + + + + + Efreet + 113 + beast + 25 + 25 + 33 + 150 + 5 + hostile-a + 0 + 3 + 4 + + 0d0 + 5d10 + 5d10 + + + 0 + 0 + 50 + + + + breath + 13 + 8 + 7 + 37.5 + fire + + + wall-fire + square + 90 + + + + + Amber Slime + 114 + slime + 3 + 0 + 3 + 8 + 3 + hostile-a + 1 + 0 + + 2d6 + + + 0 + + + + touch + 5 + 100.0 + web + + + + + Ochre Slime + 115 + slime + 3 + 0 + 3 + 8 + 3 + hostile-a + 0 + 0 + + 1d8 + + + 0 + + + + touch + 2 + 100.0 + acid + + + + + Emerald Slime + 116 + slime + 3 + 0 + 3 + 10 + 3 + hostile-a + 0 + 0 + + 1d8 + + + 0 + + + + touch + 6 + 100.0 + sleep + + + + + Mauve Slime + 117 + slime + 4 + 0 + 3 + 10 + 3 + hostile-a + 1 + 0 + 1 + 1 + + 1d7 + + + 0 + + + + Alien Slime + 118 + slime + 14 + 10 + 12 + 140 + 3 + hostile-a + 0 + 0 + + 2d10 + 2d10 + + + 0 + + + + touch + 500 + 0.0 + paralysis + + + + + Cockroach + 47 + 119 + bug + 2 + 2 + 4 + 10 + 3 + hostile-a + 1 + 0 + + 1d8 + + + 50 + + + + touch + 6 + 66.7 + disease + + + + + Large Roach + 47 + 120 + bug + 6 + 3 + 6 + 30 + 3 + hostile-a + 2 + 0 + + 2d8 + + + 50 + + + + touch + 6 + 66.7 + disease + + + + + Giant Roach + 47 + 121 + bug + 8 + 4 + 7 + 40 + 4 + hostile-a + 0 + 0 + + 3d8 + + + 50 + + + + touch + 6 + 66.7 + disease + + + + + Mung Roach + 47 + 120 + bug + 8 + 5 + 7 + 40 + 4 + hostile-a + 3 + 0 + + 2d8 + + + 50 + + + + touch + 4 + 100.0 + poison + + + + + Guardian Roach + 47 + 121 + bug + 10 + 6 + 13 + 60 + 4 + hostile-a + 0 + 0 + + 4d8 + + + + + touch + 6 + 66.7 + disease + + + + + Big Roach + 47 + 119 + bug + 4 + 0 + 30 + 30 + 4 + docile + 0 + 0 + + 2d8 + + + + + touch + 6 + 66.7 + disease + + + + + Troglodyte + 50 + 123 + humanoid + 5 + 6 + 5 + 25 + 4 + hostile-a + 2 + 1 + + 1d10 + + + + + Troglodyte Warrior + 50 + 124 + humanoid + 8 + 10 + 8 + 40 + 4 + hostile-a + 3 + 2 + + 2d12 + + + + + Troglodyte Shaman + 50 + 125 + humanoid + 7 + 10 + 6 + 35 + 4 + hostile-a + 0 + 2 + 4 + 5 + + 1d8 + + + + + Troglodyte Khazi + 51 + 126 + humanoid + 10 + 12 + 8 + 50 + 4 + hostile-a + 0 + 2 + 6 + 6 + + 1d10 + + + + + Troglodyte Defender + 51 + 127 + humanoid + 12 + 20 + 14 + 60 + 4 + hostile-a + 0 + 2 + + 3d10 + + + + + Troglodyte Lord + 51 + 128 + humanoid + 14 + 30 + 22 + 70 + 4 + hostile-a + 0 + 4 + + 4d10 + + + + + Hill Giant + 53 + 49 + giant + 10 + 8 + 12 + 50 + 4 + hostile-a + 0 + 1 + + 3d8 + + + + + boulder + 12 + 4d7 + 8 + 10 + 62.5 + + + + + Hill Giant Fighter + 53 + 51 + giant + 12 + 14 + 18 + 60 + 4 + hostile-a + 0 + 2 + + 4d8 + + + + + boulder + 12 + 6d7 + 12 + 10 + 50.0 + + + + + Hill Giant Shaman + 53 + 50 + giant + 14 + 8 + 10 + 70 + 4 + hostile-a + 0 + 2 + 3 + 3 + + 3d8 + + + + + boulder + 12 + 6d7 + 12 + 10 + 50.0 + + + + + Hill Giant Chief + 53 + 51 + giant + 24 + 18 + 30 + 200 + 4 + hostile-a + 0 + 4 + + 5d10 + + + + + boulder + 12 + 8d7 + 16 + 10 + 50.0 + + + + + Golem of Blades + 129 + stone + 13 + 20 + 20 + 70 + 4 + hostile-a + 0 + 0 + + 0d0 + 3d12 + 3d12 + + + 0 + 50 + + + + Fire Golem + 130 + stone + 18 + 14 + 15 + 70 + 4 + hostile-a + 0 + 0 + + 4d10 + + + 0 + 0 + 50 + + + + breath + 13 + 8 + 7 + 37.5 + fire + + + + + Ice Golem + 131 + stone + 18 + 14 + 15 + 70 + 4 + hostile-a + 0 + 0 + + 4d10 + + + 0 + 50 + 0 + + + + breath + 6 + 8 + 7 + 37.5 + cold + + + + + Jeweled Golem + 132 + stone + 22 + 18 + 13 + 90 + 4 + hostile-a + 0 + 0 + + 1d10 + + + 0 + 50 + + + + spit + 0 + 6 + 6 + 50.0 + acid + + + breath + 8 + 8 + 8 + 37.5 + magic + + + + + Demon Golem + 133 + stone + 22 + 25 + 26 + 120 + 7 + hostile-a + 0 + 0 + 5 + + 5d10 + + + 50 + 50 + 50 + 50 + + + + touch + 6 + 100.0 + sleep + + + breath + 13 + 8 + 9 + 37.5 + fire + + + + + Power Crystal + 134 + stone + 10 + 25 + 0 + 100 + 4 + hostile-a + 0 + 0 + + 0d0 + + + 0 + 0 + 0 + 0 + + + + touch + 2 + 100.0 + dumb-smart + + + breath + 8 + 8 + 9 + 37.5 + magic + + + + + Mind Crystal + 135 + stone + 30 + 25 + 0 + 200 + 4 + hostile-a + 0 + 0 + 7 + 7 + + 0d0 + + + 0 + 0 + 0 + 0 + + + + gaze + 8 + 8 + 50 + 62.5 + + + + + Alien Beast + 136 + beast + 20 + 20 + 30 + 100 + 4 + hostile-a + 0 + 0 + + 9d10 + + + + + Pack Leader + 137 + beast + 27 + 30 + 36 + 150 + 5 + hostile-a + 0 + 0 + + 10d13 + + + + + touch + 6 + 100.0 + poison + + + + + Dark Wyrm + 138 + beast + 30 + 9 + 30 + 200 + 3 + hostile-a + 0 + 3 + + 10d13 + + + 50 + + + + touch + 500 + 0.0 + paralysis + + + touch + 7 + 100.0 + poison + + + + + Dryad + 49 + 139 + humanoid + 7 + 0 + 4 + 40 + 4 + docile + 0 + 2 + + 1d8 + + + 0 + + + + Drake Lord + 22 + 140 + reptile + 30 + 15 + 26 + 500 + 4 + hostile-a + 0 + 3 + 5 + 7 + + 8d10 + 4d10 + 4d10 + + + 0 + 50 + 50 + + + + breath + 13 + 8 + 9 + 37.5 + fire + + + + + Spiny Worm + 141 + bug + 15 + 6 + 18 + 100 + 4 + hostile-a + 0 + 2 + + 6d12 + + + 50 + + + + spine + 5 + 6d7 + 12 + 9 + 62.5 + + + + + Ursag + 142 + beast + 12 + 10 + 15 + 80 + 3 + hostile-a + 0 + 1 + + 3d10 + 2d8 + 2d8 + + + + + Gorgon + 143 + giant + 18 + 14 + 17 + 110 + 4 + hostile-a + 0 + 2 + + 3d12 + 1d12 + 1d12 + + + 50 + + + + breath + 0 + 8 + 4 + 75.0 + cloud-sleep + + + touch + 4 + 100.0 + poison + + + + + Unicorn + 144 + magic + 3 + 3 + 6 + 17 + 4 + hostile-a + 0 + 0 + + 1d12 + + + + + touch + 1 + 100.0 + poison + + + + + Slime Zombie + 55 + undead + 5 + 1 + 5 + 30 + 3 + hostile-a + 0 + 0 + + 0d0 + 2d5 + 2d5 + + + 0 + 0 + + + + Mung Slime + 68 + slime + 7 + 10 + 10 + 30 + 4 + hostile-a + 0 + 0 + + 3d8 + + + 50 + 0 + 50 + + + + touch + 2 + 100.0 + acid + + + + + Dragon + 22 + 140 + dragon + 39 + 40 + 35 + 2500 + 4 + friendly + 0 + 4 + 7 + 7 + + 9d40 + 8d30 + 8d30 + + + 0 + 50 + 0 + 50 + true + + + + breath + 13 + 8 + 35 + 37.5 + fire + + + + + Hydra + 157 + reptile + 20 + 14 + 20 + 100 + 4 + hostile-a + 0 + 2 + + 4d8 + 4d8 + 4d8 + + + + + Pyrohydra + 156 + reptile + 24 + 14 + 20 + 125 + 4 + hostile-a + 0 + 3 + + 4d8 + 4d8 + 4d8 + + + 0 + + + + breath + 13 + 8 + 15 + 37.5 + fire + + + + + Cryohydra + 158 + reptile + 24 + 10 + 17 + 140 + 4 + hostile-a + 0 + 3 + + 4d8 + 4d8 + 4d8 + + + 0 + + + + breath + 6 + 8 + 15 + 37.5 + cold + + + + + Baby Hydra + 159 + reptile + 8 + 6 + 7 + 40 + 4 + hostile-a + 2 + 0 + + 3d9 + 3d9 + + + + + Pixie + 166 + magic + 7 + 30 + 2 + 10 + 9 + hostile-a + 0 + 0 + 3 + + 1d8 + + + 0 + 0 + 0 + 0 + + + + touch + 6 + 100.0 + sleep + + + + + Unicorn + 165 + magic + 25 + 20 + 16 + 80 + 8 + hostile-a + 0 + 0 + 2 + 2 + + 10d12 + + + 50 + 0 + 50 + 50 + + + + touch + 500 + 0.0 + paralysis + + + + + Kobold + 170 + humanoid + 2 + 1 + 2 + 6 + 3 + hostile-a + 1 + 1 + + 1d8 + + + + + Centaur + 155 + humanoid + 10 + 2 + 8 + 30 + 5 + hostile-a + 0 + 2 + + 2d8 + + + + + Centaur Chief + 155 + humanoid + 18 + 4 + 14 + 50 + 5 + hostile-a + 0 + 3 + + 3d10 + + + + + Blood Beast + 171 + demon + 30 + 12 + 18 + 150 + 6 + hostile-a + 0 + 0 + + 4d12 + 3d12 + 3d12 + + + 50 + 0 + 0 + + + + spit + 0 + 6 + 6 + 50.0 + acid + + + + diff --git a/test/files/town/townrectUniversal/out/out0~0.map b/test/files/town/townrectUniversal/out/out0~0.map new file mode 100644 index 000000000..94674a422 --- /dev/null +++ b/test/files/town/townrectUniversal/out/out0~0.map @@ -0,0 +1,48 @@ +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 +5,5,5,21,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,18,5,5,5 +5,5,5,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,5,5,5 +5,5,5,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,5,5,5 +5,5,5,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,5,5,5 +5,5,5,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,5,5,5 +5,5,5,9,0,0,0,0,0*0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*1,0,0,0,0,0,0,0,0,0,0,0,15,5,5,5 +5,5,5,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,5,5,5 +5,5,5,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,5,5,5 +5,5,5,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,5,5,5 +5,5,5,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,5,5,5 +5,5,5,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,5,5,5 +5,5,5,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,5,5,5 +5,5,5,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,5,5,5 +5,5,5,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,5,5,5 +5,5,5,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,5,5,5 +5,5,5,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,5,5,5 +5,5,5,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,5,5,5 +5,5,5,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,5,5,5 +5,5,5,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,5,5,5 +5,5,5,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,5,5,5 +5,5,5,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,5,5,5 +5,5,5,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,247@0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,5,5,5 +5,5,5,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,5,5,5 +5,5,5,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,5,5,5 +5,5,5,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,5,5,5 +5,5,5,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,5,5,5 +5,5,5,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,5,5,5 +5,5,5,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,5,5,5 +5,5,5,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,5,5,5 +5,5,5,9,0,0,0,0,0*2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*3,0,0,0,0,0,0,0,0,0,0,0,15,5,5,5 +5,5,5,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,5,5,5 +5,5,5,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,5,5,5 +5,5,5,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,5,5,5 +5,5,5,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,5,5,5 +5,5,5,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,5,5,5 +5,5,5,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,5,5,5 +5,5,5,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,5,5,5 +5,5,5,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,5,5,5 +5,5,5,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,5,5,5 +5,5,5,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,5,5,5 +5,5,5,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,5,5,5 +5,5,5,20,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,19,5,5,5 +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 diff --git a/test/files/town/townrectUniversal/out/out0~0.spec b/test/files/town/townrectUniversal/out/out0~0.spec new file mode 100644 index 000000000..e69de29bb diff --git a/test/files/town/townrectUniversal/out/out0~0.xml b/test/files/town/townrectUniversal/out/out0~0.xml new file mode 100644 index 000000000..b0549cbcf --- /dev/null +++ b/test/files/town/townrectUniversal/out/out0~0.xml @@ -0,0 +1,5 @@ + + + Area name + Comment + diff --git a/test/files/town/townrectUniversal/scenario.spec b/test/files/town/townrectUniversal/scenario.spec new file mode 100644 index 000000000..e69de29bb diff --git a/test/files/town/townrectUniversal/scenario.xml b/test/files/town/townrectUniversal/scenario.xml new file mode 100644 index 000000000..86e42906c --- /dev/null +++ b/test/files/town/townrectUniversal/scenario.xml @@ -0,0 +1,61 @@ + + + Rect Town Bounds + 0 + + 1.0.192 + en-US + + NQNStudios + Contact info + + + Who wrote 1 + Who wrote 2 + + + G + 1 + + + true + false + true + + + oboe + 2.0.0 + Apple Mac OS X Version 14.5 (Build 23F79) + + + 1 + 1 + 1 + 0 + + + + + Healing + dead + heal + 41 + + 0 + 1 + 2 + 4 + 9 + 5 + 6 + 7 + 8 + + + + + 0 + + 0 + + diff --git a/test/files/town/townrectUniversal/terrain.xml b/test/files/town/townrectUniversal/terrain.xml new file mode 100644 index 000000000..5317f3da2 --- /dev/null +++ b/test/files/town/townrectUniversal/terrain.xml @@ -0,0 +1,6270 @@ + + + + Cave Floor + 0 + 0 + none + 0 + false + false + true + true + 0 + step + none + 0 + -1 + 1 + + none + -1 + 0 + 0 + + + c + + + + Cave Floor + 1 + 1 + none + 0 + false + false + true + false + 0 + step + none + 0 + -1 + 1 + + none + -1 + 0 + 0 + + + c + 0 + + + + Grass + 2 + 2 + none + 0 + false + false + true + true + 0 + step + none + 1 + -1 + 0 + + none + -1 + 0 + 0 + + + g + + + + Grass + 3 + 3 + none + 0 + false + false + true + false + 0 + step + none + 1 + -1 + 0 + + none + -1 + 0 + 0 + + + g + 2 + + + + Grass + 4 + 4 + none + 0 + false + false + true + false + 0 + step + none + 1 + -1 + 0 + + none + -1 + 0 + 0 + + + g + 2 + + + + Cave Wall + 5 + 5 + move-and-sight + 0 + false + false + true + true + 0 + step + none + 2 + 0 + 1 + + none + -1 + 0 + 0 + + + a + + + + Cave Wall + 6 + 6 + move-and-sight + 0 + false + false + true + false + 0 + step + s + 2 + 0 + 1 + + none + -1 + 0 + 0 + + + + + Cave Wall + 6 + 6 + sight + 0 + false + false + true + false + 0 + step + s + 2 + 0 + 1 + + none + 87 + 0 + 0 + + + + + Cave Wall + 7 + 7 + move-and-sight + 0 + false + false + true + false + 0 + step + se + 2 + 0 + 1 + + none + -1 + 0 + 0 + + + + + Cave Wall + 8 + 8 + move-and-sight + 0 + false + false + true + false + 0 + step + e + 2 + 0 + 1 + + none + -1 + 0 + 0 + + + + + Cave Wall + 8 + 8 + sight + 0 + false + false + true + false + 0 + step + e + 2 + 0 + 1 + + none + 87 + 0 + 0 + + + + + Cave Wall + 9 + 9 + move-and-sight + 0 + false + false + true + false + 0 + step + ne + 2 + 0 + 1 + + none + -1 + 0 + 0 + + + + + Cave Wall + 10 + 10 + move-and-sight + 0 + false + false + true + false + 0 + step + n + 2 + 0 + 1 + + none + -1 + 0 + 0 + + + + + Cave Wall + 10 + 10 + sight + 0 + false + false + true + false + 0 + step + n + 2 + 0 + 1 + + none + 87 + 0 + 0 + + + + + Cave Wall + 11 + 11 + move-and-sight + 0 + false + false + true + false + 0 + step + nw + 2 + 0 + 1 + + none + -1 + 0 + 0 + + + + + Cave Wall + 12 + 12 + move-and-sight + 0 + false + false + true + false + 0 + step + w + 2 + 0 + 1 + + none + -1 + 0 + 0 + + + + + Cave Wall + 12 + 12 + sight + 0 + false + false + true + false + 0 + step + w + 2 + 0 + 1 + + none + 87 + 0 + 0 + + + + + Cave Wall + 13 + 13 + move-and-sight + 0 + false + false + true + false + 0 + step + sw + 2 + 0 + 1 + + none + -1 + 0 + 0 + + + + + Cave Wall + 14 + 14 + move-and-sight + 0 + false + false + true + false + 0 + step + ne-inner + 2 + 0 + 1 + + none + -1 + 0 + 0 + + + + + Cave Wall + 15 + 15 + move-and-sight + 0 + false + false + true + false + 0 + step + se-inner + 2 + 0 + 1 + + none + -1 + 0 + 0 + + + + + Cave Wall + 16 + 16 + move-and-sight + 0 + false + false + true + false + 0 + step + sw-inner + 2 + 0 + 1 + + none + -1 + 0 + 0 + + + + + Cave Wall + 17 + 17 + move-and-sight + 0 + false + false + true + false + 0 + step + nw-inner + 2 + 0 + 1 + + none + -1 + 0 + 0 + + + + + Mountains + 18 + 18 + move-and-sight + 0 + true + false + true + true + 0 + step + none + 3 + 4 + 2 + + none + -1 + 0 + 0 + + + m + + + + High Mountains + 19 + 19 + move-and-sight + 0 + false + false + true + false + 0 + step + none + 3 + 4 + 2 + + none + -1 + 0 + 0 + + + + + Mountains + 20 + 20 + move-and-sight + 0 + true + false + true + false + 0 + step + s + 3 + 4 + 2 + + none + -1 + 0 + 0 + + + + + Mountains + 21 + 21 + move-and-sight + 0 + true + false + true + false + 0 + step + se + 3 + 4 + 2 + + none + -1 + 0 + 0 + + + + + Mountains + 22 + 22 + move-and-sight + 0 + true + false + true + false + 0 + step + e + 3 + 4 + 2 + + none + -1 + 0 + 0 + + + + + Mountains + 23 + 23 + move-and-sight + 0 + true + false + true + false + 0 + step + ne + 3 + 4 + 2 + + none + -1 + 0 + 0 + + + + + Mountains + 24 + 24 + move-and-sight + 0 + true + false + true + false + 0 + step + n + 3 + 4 + 2 + + none + -1 + 0 + 0 + + + + + Mountains + 25 + 25 + move-and-sight + 0 + true + false + true + false + 0 + step + nw + 3 + 4 + 2 + + none + -1 + 0 + 0 + + + + + Mountains + 26 + 26 + move-and-sight + 0 + true + false + true + false + 0 + step + w + 3 + 4 + 2 + + none + -1 + 0 + 0 + + + + + Mountains + 27 + 27 + move-and-sight + 0 + true + false + true + false + 0 + step + sw + 3 + 4 + 2 + + none + -1 + 0 + 0 + + + + + Mountains + 28 + 28 + move-and-sight + 0 + true + false + true + false + 0 + step + ne-inner + 3 + 4 + 2 + + none + -1 + 0 + 0 + + + + + Mountains + 29 + 29 + move-and-sight + 0 + true + false + true + false + 0 + step + se-inner + 3 + 4 + 2 + + none + -1 + 0 + 0 + + + + + Mountains + 30 + 30 + move-and-sight + 0 + true + false + true + false + 0 + step + sw-inner + 3 + 4 + 2 + + none + -1 + 0 + 0 + + + + + Mountains + 31 + 31 + move-and-sight + 0 + true + false + true + false + 0 + step + nw-inner + 3 + 4 + 2 + + none + -1 + 0 + 0 + + + + + Hills + 32 + 32 + none + 0 + false + false + true + true + 0 + step + none + 4 + 1 + 2 + + wild-wood + -1 + 0 + 0 + + + h + + + + Hills + 33 + 33 + none + 0 + false + false + true + false + 0 + step + none + 4 + 1 + 2 + + wild-wood + -1 + 0 + 0 + + + 36 + + + + Hills + 34 + 34 + none + 0 + false + false + true + false + 0 + step + s + 4 + 1 + 2 + + none + -1 + 0 + 0 + + + + + Hills + 35 + 35 + none + 0 + false + false + true + false + 0 + step + se + 4 + 1 + 2 + + none + -1 + 0 + 0 + + + + + Hills + 36 + 36 + none + 0 + false + false + true + false + 0 + step + e + 4 + 1 + 2 + + none + -1 + 0 + 0 + + + + + Hills + 37 + 37 + none + 0 + false + false + true + false + 0 + step + ne + 4 + 1 + 2 + + none + -1 + 0 + 0 + + + + + Hills + 38 + 38 + none + 0 + false + false + true + false + 0 + step + n + 4 + 1 + 2 + + none + -1 + 0 + 0 + + + + + Hills + 39 + 39 + none + 0 + false + false + true + false + 0 + step + nw + 4 + 1 + 2 + + none + -1 + 0 + 0 + + + + + Hills + 40 + 40 + none + 0 + false + false + true + false + 0 + step + w + 4 + 1 + 2 + + none + -1 + 0 + 0 + + + + + Hills + 41 + 41 + none + 0 + false + false + true + false + 0 + step + sw + 4 + 1 + 2 + + none + -1 + 0 + 0 + + + + + Hills + 42 + 42 + none + 0 + false + false + true + false + 0 + step + ne-inner + 4 + 1 + 2 + + none + -1 + 0 + 0 + + + + + Hills + 43 + 43 + none + 0 + false + false + true + false + 0 + step + se-inner + 4 + 1 + 2 + + none + -1 + 0 + 0 + + + + + Hills + 44 + 44 + none + 0 + false + false + true + false + 0 + step + sw-inner + 4 + 1 + 2 + + none + -1 + 0 + 0 + + + + + Hills + 45 + 45 + none + 0 + false + false + true + false + 0 + step + nw-inner + 4 + 1 + 2 + + none + -1 + 0 + 0 + + + + + Water + 46 + 46 + move + 0 + true + true + true + true + 0 + step + none + 5 + 1 + 0 + + none + -1 + 0 + 0 + + + l + + + + Water + 47 + 47 + move + 0 + true + true + true + false + 0 + step + s + 5 + 1 + 0 + + none + -1 + 0 + 0 + + + + + Water + 48 + 48 + move + 0 + true + true + true + false + 0 + step + se + 5 + 1 + 0 + + none + -1 + 0 + 0 + + + + + Water + 49 + 49 + move + 0 + true + true + true + false + 0 + step + e + 5 + 1 + 0 + + none + -1 + 0 + 0 + + + + + Water + 50 + 50 + move + 0 + true + true + true + false + 0 + step + ne + 5 + 1 + 0 + + none + -1 + 0 + 0 + + + + + Water + 51 + 51 + move + 0 + true + true + true + false + 0 + step + n + 5 + 1 + 0 + + none + -1 + 0 + 0 + + + + + Water + 52 + 52 + move + 0 + true + true + true + false + 0 + step + nw + 5 + 1 + 0 + + none + -1 + 0 + 0 + + + + + Water + 53 + 53 + move + 0 + true + true + true + false + 0 + step + w + 5 + 1 + 0 + + none + -1 + 0 + 0 + + + + + Water + 54 + 54 + move + 0 + true + true + true + false + 0 + step + sw + 5 + 1 + 0 + + none + -1 + 0 + 0 + + + + + Water + 55 + 55 + move + 0 + true + true + true + false + 0 + step + ne-inner + 5 + 1 + 0 + + none + -1 + 0 + 0 + + + + + Water + 56 + 56 + move + 0 + true + true + true + false + 0 + step + se-inner + 5 + 1 + 0 + + none + -1 + 0 + 0 + + + + + Water + 57 + 57 + move + 0 + true + true + true + false + 0 + step + sw-inner + 5 + 1 + 0 + + none + -1 + 0 + 0 + + + + + Water + 58 + 58 + move + 0 + true + true + true + false + 0 + step + nw-inner + 5 + 1 + 0 + + none + -1 + 0 + 0 + + + + + Small Island + 59 + 59 + none + 0 + false + false + true + false + 0 + step + none + 5 + -1 + 0 + + none + -1 + 0 + 0 + + + + + Rock in Water + 60 + 60 + move + 0 + true + false + true + false + 0 + step + none + 5 + -1 + 0 + + none + -1 + 0 + 0 + + + + + Bridge + 61 + 61 + none + 0 + false + true + true + false + 0 + step + city + 5 + 1 + 3 + + bridge + 0 + 0 + 0 + + + + + Bridge + 62 + 62 + none + 0 + false + true + true + false + 0 + step + none + 5 + -1 + 3 + + bridge + 0 + 0 + 0 + + + + + Bridge + 63 + 63 + none + 0 + false + true + true + false + 0 + step + city + 5 + 1 + 3 + + bridge + 0 + 0 + 0 + + + + + Bridge + 64 + 64 + none + 0 + false + true + true + false + 0 + step + city + 5 + 1 + 3 + + bridge + 0 + 0 + 0 + + + + + Bridge + 65 + 65 + none + 0 + false + true + true + false + 0 + step + none + 5 + -1 + 3 + + bridge + 0 + 0 + 0 + + + + + Bridge + 66 + 66 + none + 0 + false + true + true + false + 0 + step + city + 5 + 1 + 3 + + bridge + 0 + 0 + 0 + + + + + Water + 960 + 960 + move + 0 + true + true + true + true + 0 + step + frills + 6 + -1 + 4 + + none + -1 + 0 + 0 + + + l + + + + Bridge + 961 + 961 + none + 0 + false + true + true + false + 0 + step + frills + 6 + -1 + 4 + + bridge + 0 + 0 + 0 + + + + + Bridge + 962 + 962 + none + 0 + false + true + true + false + 0 + step + frills + 6 + -1 + 4 + + bridge + 0 + 0 + 0 + + + + + Rock in Water + 963 + 963 + move + 0 + true + false + true + false + 0 + step + frills + 6 + -1 + 4 + + none + -1 + 0 + 0 + + + + + Lava + 964 + 964 + monsters + 0 + false + true + false + true + 1 + step + frills + 7 + -1 + 1 + + dmg + 6 + 10 + 1 + + + l + + + + Lava + 964 + 964 + monsters + 0 + false + true + false + false + 1 + step + frills + 7 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Bridge + 977 + 977 + none + 0 + false + true + true + false + 1 + step + frills + 7 + -1 + 0 + + bridge + 0 + 0 + 0 + + + l + + + + Bridge + 978 + 978 + none + 0 + false + true + true + false + 1 + step + frills + 7 + -1 + 0 + + bridge + 0 + 0 + 0 + + + l + + + + Rock in Lava + 979 + 979 + move + 0 + true + false + true + false + 1 + step + frills + 7 + -1 + 4 + + none + -1 + 0 + 0 + + + l + + + + Waterfall + 965 + 965 + move-and-shoot + 0 + false + false + true + false + 0 + step + waterfall + 6 + 2 + 1 + + falls-cave + 4 + 5 + 90 + + + + + Waterfall + 975 + 975 + move-and-shoot + 0 + false + false + true + false + 0 + step + waterfall + 5 + 3 + 1 + + falls-mntn + 4 + 5 + 90 + + + + + Walkway + 216 + 216 + none + 0 + false + false + true + true + 0 + step + walkway + 16 + 0 + 1 + + none + 63 + 0 + 0 + + + + + Walkway + 216 + 216 + none + 0 + false + false + true + true + 0 + step + walkway + 17 + 1 + 0 + + none + 62 + 0 + 0 + + + + + Rubble + 67 + 67 + none + 0 + false + false + true + false + 0 + crunch + none + 0 + -1 + 5 + + none + -1 + 0 + 0 + + + r + + + + Rubble + 68 + 68 + none + 0 + false + false + true + false + 0 + crunch + none + 0 + -1 + 5 + + none + -1 + 0 + 0 + + + r + + 1 + + + + + + + Rubble + 69 + 69 + none + 0 + false + false + true + false + 0 + crunch + none + 0 + -1 + 5 + + none + -1 + 0 + 0 + + + + 1 + + + + + + + Rubble + 85 + 85 + none + 0 + false + false + true + false + 0 + crunch + none + 1 + -1 + 9 + + none + -1 + 0 + 0 + + + r + + + + Rubble + 86 + 86 + none + 0 + false + false + true + false + 0 + crunch + none + 1 + -1 + 9 + + none + -1 + 0 + 0 + + + r + + 2 + + + + + + + Rubble + 87 + 87 + none + 0 + false + false + true + false + 0 + crunch + none + 1 + -1 + 9 + + none + -1 + 0 + 0 + + + + 2 + + + + + + + Pit/barrier + 74 + 74 + move + 0 + true + false + true + true + 0 + step + frills + 9 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Cave Tree + 70 + 70 + move-and-shoot + 0 + false + false + true + false + 0 + step + none + 0 + -1 + 6 + + none + -1 + 0 + 0 + + + t + + + + Cave Tree + 71 + 71 + none + 0 + false + false + true + false + 0 + step + none + 0 + -1 + 6 + + wild-cave + -1 + 0 + 0 + + + t + + + + Mushrooms + 72 + 72 + none + 0 + false + false + true + false + 0 + step + none + 0 + -1 + 7 + + wild-cave + -1 + 0 + 0 + + + s + + + + Mushrooms + 73 + 73 + none + 0 + false + false + true + false + 0 + step + none + 0 + -1 + 7 + + wild-cave + -1 + 0 + 0 + + + s + + + + Small Pool + 75 + 75 + move-and-shoot + 0 + true + false + true + false + 0 + step + none + 0 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Swamp + 76 + 76 + none + 0 + false + false + true + false + 0 + squish + none + 0 + -1 + 8 + + danger + 1 + 25 + 2 + + + + + Stalagmites + 83 + 83 + move-and-shoot + 0 + false + false + true + false + 0 + step + none + 0 + -1 + 13 + + none + -1 + 0 + 0 + + + s + + + + Small Stalagmites + 84 + 84 + none + 0 + false + false + true + false + 0 + step + none + 0 + -1 + 13 + + wild-cave + -1 + 0 + 0 + + + s + + + + Stone Fence + 121 + 121 + move-and-shoot + 0 + true + false + true + false + 0 + step + none + 0 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Stone Fence + 122 + 122 + move-and-shoot + 0 + true + false + true + false + 0 + step + none + 0 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Box + 178 + 178 + move-and-shoot + 0 + false + false + true + false + 0 + step + none + 0 + -1 + 1 + + box + 0 + 0 + 0 + + + + + Body + 179 + 179 + none + 0 + false + false + true + false + 0 + step + none + 0 + -1 + 1 + + box + 0 + 0 + 0 + + + + + Pile of Filth + 180 + 180 + none + 0 + false + false + true + false + 0 + squish + none + 0 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Campfire + 971 + 971 + move-and-shoot + 0 + true + false + true + false + 6 + step + none + 0 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Crude Bed + 182 + 182 + none + 0 + false + false + true + false + 0 + step + none + 0 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Sign + 183 + 183 + move-and-shoot + 0 + true + false + true + false + 0 + step + none + 0 + -1 + 1 + + sign + 0 + 0 + 0 + + + + + Obelisk + 184 + 184 + move-and-shoot + 0 + true + false + true + false + 0 + step + none + 0 + -1 + 1 + + sign + 0 + 0 + 0 + + + + + Totems + 185 + 185 + none + 0 + false + false + true + false + 0 + step + none + 0 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Statue + 186 + 186 + move-and-shoot + 0 + true + false + true + false + 0 + step + none + 0 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Boulder + 77 + 77 + move-and-shoot + 0 + true + false + true + false + 0 + step + none + 1 + -1 + 9 + + none + -1 + 0 + 0 + + + + + Swamp + 78 + 78 + none + 0 + false + false + true + false + 0 + squish + none + 1 + -1 + 10 + + danger + 1 + 20 + 2 + + + + + Tree + 80 + 80 + move-and-sight + 0 + false + false + true + false + 0 + step + none + 1 + -1 + 11 + + none + -1 + 0 + 0 + + + t + + + + Tree + 79 + 79 + move-and-sight + 0 + false + false + true + false + 0 + step + none + 1 + -1 + 11 + + none + -1 + 0 + 0 + + + t + + + + Small Tree + 81 + 81 + none + 0 + false + false + true + false + 0 + step + none + 1 + -1 + 11 + + wild-wood + -1 + 0 + 0 + + + t + + + + Shrubbery + 82 + 82 + none + 0 + false + false + true + false + 0 + step + none + 1 + -1 + 12 + + wild-wood + -1 + 0 + 0 + + + + + Huge Wall + 198 + 198 + move-and-sight + 0 + false + false + true + false + 0 + step + none + 1 + -1 + 0 + + none + -1 + 0 + 0 + + + + + Huge Wall + 199 + 199 + move-and-sight + 0 + false + false + true + false + 0 + step + none + 1 + -1 + 0 + + none + -1 + 0 + 0 + + + + + Crops + 181 + 181 + none + 0 + false + false + true + false + 0 + step + none + 1 + -1 + 0 + + none + -1 + 0 + 0 + + + + + Stone Fence + 205 + 205 + move-and-shoot + 0 + true + false + true + false + 0 + step + none + 1 + -1 + 0 + + none + -1 + 0 + 0 + + + + + Stone Fence + 206 + 206 + move-and-shoot + 0 + true + false + true + false + 0 + step + none + 1 + -1 + 0 + + none + -1 + 0 + 0 + + + + + Sign + 227 + 227 + move-and-shoot + 0 + false + false + true + false + 0 + step + none + 1 + -1 + 0 + + sign + 0 + 0 + 0 + + + + + Wall + 88 + 88 + move-and-sight + 0 + false + false + true + true + 0 + step + wall + 10 + -1 + 1 + + none + -1 + 0 + 0 + + + w + + + + Wall + 88 + 88 + move-and-sight + 0 + false + false + true + false + 0 + none + wall + 10 + -1 + 1 + + step-change + 124 + 58 + 0 + + + + + Wall w. Secret Door + 89 + 89 + sight + 0 + false + false + true + false + 0 + step + wall + 10 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Door + 90 + 90 + move-and-sight + 0 + false + false + true + false + 0 + none + wall + 10 + -1 + 1 + + step-change + 129 + 58 + 0 + + + d + + + + Locked Door + 90 + 90 + move-and-sight + 0 + false + false + true + false + 0 + none + wall + 10 + -1 + 1 + + unlock + 129 + 2 + 1 + + + + + Locked Door + 90 + 90 + move-and-sight + 0 + false + false + true + false + 0 + none + wall + 10 + -1 + 1 + + unlock + 129 + 5 + 1 + + + + + Locked Door + 90 + 90 + move-and-sight + 0 + false + false + true + false + 0 + none + wall + 10 + -1 + 1 + + unlock + 129 + 10 + 1 + + + + + Open Door + 91 + 91 + none + 0 + false + false + true + false + 0 + step + wall + 10 + -1 + 1 + + use-change + 125 + 59 + 0 + + + + + Closed Portcullis + 92 + 92 + move-and-shoot + 0 + false + false + true + false + 0 + step + wall + 10 + -1 + 1 + + unlock + 131 + 10 + 0 + + + + + Open Portcullis + 93 + 93 + none + 0 + false + false + true + false + 0 + step + wall + 10 + -1 + 1 + + lock + 130 + 0 + 0 + + + + + Sign + 94 + 94 + move-and-sight + 0 + false + false + true + false + 0 + step + wall + 10 + -1 + 1 + + sign + 0 + 0 + 0 + + + + + Cracked Wall + 95 + 95 + move-and-shoot + 0 + false + false + true + false + 0 + step + wall + 10 + -1 + 1 + + fragile + 84 + 0 + 0 + + + + + Moldy Wall + 96 + 96 + move-and-sight + 0 + false + false + true + false + 0 + step + wall + 10 + -1 + 1 + + fragile + 84 + 0 + 0 + + + + + Wall + 88 + 88 + move-and-sight + 0 + false + false + true + false + 0 + step + wall + 10 + -1 + 1 + + fragile + 84 + 0 + 0 + + + + + Wall w. Crossed Swords + 97 + 97 + move-and-sight + 0 + false + false + true + false + 0 + step + wall + 10 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Wall w. Painting + 98 + 98 + move-and-sight + 0 + false + false + true + false + 0 + step + wall + 10 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Wall w. Window + 99 + 99 + move-and-shoot + 0 + false + false + true + false + 0 + step + wall + 10 + -1 + 1 + + none + -1 + 0 + 0 + + + x + + + + Basalt Wall + 100 + 100 + move-and-sight + 0 + false + false + true + true + 0 + step + wall + 11 + -1 + 1 + + none + -1 + 0 + 0 + + + w + + + + Basalt Wall + 100 + 100 + move-and-sight + 0 + false + false + true + false + 0 + none + wall + 11 + -1 + 1 + + step-change + 141 + 58 + 0 + + + + + Basalt Wall w. Secret Door + 101 + 101 + sight + 0 + false + false + true + false + 0 + step + wall + 11 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Basalt Wall w. Door + 102 + 102 + move-and-sight + 0 + false + false + true + false + 0 + none + wall + 11 + -1 + 1 + + step-change + 146 + 58 + 0 + + + d + + + + Basalt Wall w. Locked Door + 102 + 102 + move-and-sight + 0 + false + false + true + false + 0 + none + wall + 11 + -1 + 1 + + unlock + 146 + 4 + 1 + + + + + Basalt Wall w. Locked Door + 102 + 102 + move-and-sight + 0 + false + false + true + false + 0 + none + wall + 11 + -1 + 1 + + unlock + 146 + 8 + 1 + + + + + Basalt Wall w. Locked Door + 102 + 102 + move-and-sight + 0 + false + false + true + false + 0 + step + wall + 11 + -1 + 1 + + unlock + 146 + 10 + 1 + + + + + Basalt Wall w. Open Door + 103 + 103 + none + 0 + false + false + true + false + 0 + step + wall + 11 + -1 + 1 + + use-change + 142 + 59 + 0 + + + + + Closed Portcullis + 104 + 104 + move-and-shoot + 0 + false + false + true + false + 0 + step + wall + 11 + -1 + 1 + + unlock + 148 + 10 + 0 + + + + + Open Portcullis + 105 + 105 + none + 0 + false + false + true + false + 0 + step + wall + 11 + -1 + 1 + + lock + 147 + 0 + 0 + + + + + Basalt Wall w. Runes + 106 + 106 + move-and-sight + 0 + false + false + true + false + 0 + step + wall + 11 + -1 + 1 + + sign + 0 + 0 + 0 + + + + + Cracked Basalt Wall + 107 + 107 + move-and-shoot + 0 + false + false + true + false + 0 + step + wall + 11 + -1 + 1 + + fragile + 84 + 0 + 0 + + + + + Moldy Basalt Wall + 108 + 108 + move-and-sight + 0 + false + false + true + false + 0 + step + wall + 11 + -1 + 1 + + fragile + 84 + 0 + 0 + + + + + Basalt Wall + 100 + 100 + move-and-sight + 0 + false + false + true + false + 0 + step + wall + 11 + -1 + 1 + + fragile + 84 + 0 + 0 + + + + + Basalt Wall w. Window + 109 + 109 + move-and-shoot + 0 + false + false + true + false + 0 + step + wall + 11 + -1 + 1 + + none + -1 + 0 + 0 + + + x + + + + Adobe Wall + 110 + 110 + move-and-sight + 0 + false + false + true + true + 0 + step + wall + 12 + -1 + 1 + + none + -1 + 0 + 0 + + + w + + + + Adobe Wall + 110 + 110 + move-and-sight + 0 + false + false + true + false + 0 + none + wall + 12 + -1 + 1 + + step-change + 156 + 58 + 0 + + + + + Adobe Wall w. Secret Door + 111 + 111 + sight + 0 + false + false + true + false + 0 + step + wall + 12 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Adobe Wall w. Door + 112 + 112 + move-and-sight + 0 + false + false + true + false + 0 + none + wall + 12 + -1 + 1 + + step-change + 161 + 58 + 0 + + + d + + + + Adobe Wall w. Locked Door + 112 + 112 + move-and-sight + 0 + false + false + true + false + 0 + step + wall + 12 + -1 + 1 + + unlock + 161 + 1 + 1 + + + + + Adobe Wall w. Locked Door + 112 + 112 + move-and-sight + 0 + false + false + true + false + 0 + step + wall + 12 + -1 + 1 + + unlock + 161 + 5 + 1 + + + + + Adobe Wall w. Locked Door + 112 + 112 + move-and-sight + 0 + false + false + true + false + 0 + step + wall + 12 + -1 + 1 + + unlock + 161 + 10 + 1 + + + + + Adobe Wall w. Open Door + 113 + 113 + none + 0 + false + false + true + false + 0 + step + wall + 12 + -1 + 1 + + use-change + 157 + 59 + 0 + + + + + Closed Portcullis + 114 + 114 + move-and-shoot + 0 + false + false + true + false + 0 + step + wall + 12 + -1 + 1 + + unlock + 163 + 10 + 0 + + + + + Open Portcullis + 115 + 115 + none + 0 + false + false + true + false + 0 + step + wall + 12 + -1 + 1 + + lock + 162 + 0 + 0 + + + + + Adobe Wall w. Sign + 116 + 116 + move-and-sight + 0 + false + false + true + false + 0 + step + wall + 12 + -1 + 1 + + sign + 0 + 0 + 0 + + + + + Cracked Adobe Wall + 117 + 117 + move-and-shoot + 0 + false + false + true + false + 0 + step + wall + 12 + -1 + 1 + + fragile + 84 + 0 + 0 + + + + + Moldy Adobe Wall + 118 + 118 + move-and-sight + 0 + false + false + true + false + 0 + step + wall + 12 + -1 + 1 + + fragile + 84 + 0 + 0 + + + + + Adobe Wall + 110 + 110 + move-and-sight + 0 + false + false + true + false + 0 + step + wall + 12 + -1 + 1 + + fragile + 84 + 0 + 0 + + + + + Adobe Wall w. Trophy + 119 + 119 + move-and-sight + 0 + false + false + true + false + 0 + step + wall + 12 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Adobe Wall w. Window + 120 + 120 + move-and-shoot + 0 + false + false + true + false + 0 + step + wall + 12 + -1 + 1 + + none + -1 + 0 + 0 + + + x + + + + Floor + 123 + 123 + none + 0 + false + false + false + true + 0 + step + none + 13 + -1 + 1 + + none + -1 + 0 + 0 + + + f + + + + Floor + 123 + 123 + monsters + 0 + false + false + false + false + 0 + step + none + 13 + -1 + 1 + + monst-block + 0 + 0 + 0 + + + + + Floor + 123 + 123 + monsters + 0 + false + false + false + false + 0 + step + none + 13 + -1 + 1 + + dmg + 4 + 3 + 3 + + + + + Floor w. Runes + 124 + 124 + none + 0 + false + false + true + false + 0 + step + none + 13 + -1 + 1 + + monst-block + 0 + 0 + 0 + + + + + Pedestal + 125 + 125 + move-and-shoot + 0 + false + false + true + false + 0 + step + none + 13 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Desk + 126 + 126 + move-and-shoot + 0 + false + false + true + false + 0 + step + none + 13 + -1 + 1 + + box + 0 + 0 + 0 + + + + + Counter + 127 + 127 + move-and-shoot + 0 + false + false + true + false + 0 + step + none + 13 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Counter + 128 + 128 + move-and-shoot + 0 + false + false + true + false + 0 + step + none + 13 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Counter + 129 + 129 + move-and-shoot + 0 + false + false + true + false + 0 + step + none + 13 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Counter + 150 + 150 + move-and-shoot + 0 + false + false + true + false + 0 + step + none + 13 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Counter + 151 + 151 + move-and-shoot + 0 + false + false + true + false + 0 + step + none + 13 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Counter + 152 + 152 + move-and-shoot + 0 + false + false + true + false + 0 + step + none + 13 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Table + 146 + 146 + move-and-shoot + 0 + false + false + true + false + 0 + step + none + 13 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Table + 147 + 147 + move-and-shoot + 0 + false + false + true + false + 0 + step + none + 13 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Table + 148 + 148 + move-and-shoot + 0 + false + false + true + false + 0 + step + none + 13 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Table + 149 + 149 + move-and-shoot + 0 + false + false + true + false + 0 + step + none + 13 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Pedestal with Book + 130 + 130 + move-and-shoot + 0 + false + false + true + false + 0 + step + none + 13 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Pillar + 131 + 131 + move-and-shoot + 0 + false + false + true + false + 0 + step + none + 13 + -1 + 1 + + none + -1 + 0 + 0 + + + p + + + + Potted Plant + 132 + 132 + move-and-shoot + 0 + false + false + true + false + 0 + step + none + 13 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Statue + 133 + 133 + move-and-shoot + 0 + false + false + true + false + 0 + step + none + 13 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Statue + 134 + 134 + move-and-shoot + 0 + false + false + true + false + 0 + step + none + 13 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Bookshelf + 135 + 135 + move-and-sight + 0 + false + false + true + false + 0 + step + none + 13 + -1 + 1 + + box + 0 + 0 + 0 + + + + + Brazier + 136 + 136 + move-and-shoot + 0 + false + false + true + false + 7 + step + none + 13 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Good Altar + 137 + 137 + move-and-shoot + 0 + false + false + true + false + 0 + step + none + 13 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Chest + 138 + 138 + move-and-shoot + 0 + false + false + true + false + 0 + step + none + 13 + -1 + 1 + + box + 0 + 0 + 0 + + + + + Chair + 139 + 139 + none + 0 + false + false + false + false + 0 + step + none + 13 + -1 + 1 + + none + -1 + 0 + 0 + + + y + + + + Chair + 140 + 140 + none + 0 + false + false + false + false + 0 + step + none + 13 + -1 + 1 + + none + -1 + 0 + 0 + + + y + + + + Chair + 141 + 141 + none + 0 + false + false + false + false + 0 + step + none + 13 + -1 + 1 + + none + -1 + 0 + 0 + + + y + + + + Chair + 142 + 142 + none + 0 + false + false + false + false + 0 + step + none + 13 + -1 + 1 + + none + -1 + 0 + 0 + + + y + + + + Bed + 143 + 143 + none + 0 + false + false + true + false + 0 + step + none + 13 + -1 + 1 + + bed + 230 + 0 + 0 + + + b + + + + Throne + 144 + 144 + none + 0 + false + false + true + false + 0 + step + none + 13 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Dresser + 145 + 145 + move-and-shoot + 0 + false + false + true + false + 0 + step + none + 13 + -1 + 1 + + box + 0 + 0 + 0 + + + e + + + + Cauldron + 153 + 153 + move-and-shoot + 0 + false + false + true + false + 0 + step + none + 13 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Evil Altar + 154 + 154 + move-and-shoot + 0 + false + false + true + false + 0 + step + none + 13 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Rug + 155 + 155 + none + 0 + false + false + false + false + 0 + step + none + 13 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Anvil + 156 + 156 + move-and-shoot + 0 + false + false + true + false + 0 + step + none + 13 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Torch + 972 + 972 + none + 0 + false + false + true + false + 6 + step + none + 13 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Torch + 973 + 973 + none + 0 + false + false + true + false + 6 + step + none + 13 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Lever + 214 + 214 + monsters + 209 + false + false + true + false + 0 + step + none + 13 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Lever + 215 + 215 + monsters + 208 + false + false + true + false + 0 + step + none + 13 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Marble Floor + 157 + 157 + none + 0 + false + false + false + true + 0 + step + none + 14 + -1 + 1 + + none + -1 + 0 + 0 + + + f + + + + Marble Floor + 157 + 157 + monsters + 0 + false + false + false + false + 0 + step + none + 14 + -1 + 1 + + monst-block + 0 + 0 + 0 + + + + + Good Altar + 158 + 158 + move-and-shoot + 0 + false + false + true + false + 1 + step + none + 14 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Evil Altar + 159 + 159 + move-and-shoot + 0 + false + false + true + false + 0 + step + none + 14 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Brazier + 160 + 160 + move-and-shoot + 0 + false + false + true + false + 6 + step + none + 14 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Throne + 161 + 161 + none + 0 + false + false + true + false + 0 + step + none + 14 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Pillar + 162 + 162 + move-and-shoot + 0 + false + false + true + false + 0 + step + none + 14 + -1 + 1 + + none + -1 + 0 + 0 + + + p + + + + Floor + 163 + 163 + none + 0 + false + false + false + true + 0 + step + none + 15 + -1 + 1 + + none + -1 + 0 + 0 + + + f + + + + Floor + 163 + 163 + monsters + 0 + false + false + false + false + 0 + step + none + 14 + -1 + 1 + + monst-block + 0 + 0 + 0 + + + + + Statue + 164 + 164 + move-and-shoot + 0 + false + false + true + false + 0 + step + none + 15 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Sleeping Pad + 165 + 165 + none + 0 + false + false + true + false + 0 + step + none + 15 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Round Rug + 166 + 166 + none + 0 + false + false + false + false + 0 + step + none + 15 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Floor Box + 167 + 167 + none + 0 + false + false + true + false + 0 + step + none + 15 + -1 + 1 + + box + 0 + 0 + 0 + + + + + Pedestal w. Crystal + 168 + 168 + move-and-shoot + 0 + false + false + true + false + 0 + step + none + 15 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Case + 169 + 169 + move-and-shoot + 0 + false + false + true + false + 0 + step + none + 15 + -1 + 1 + + box + 0 + 0 + 0 + + + + + Runes + 170 + 170 + none + 0 + false + false + true + false + 0 + step + none + 15 + -1 + 1 + + monst-block + 0 + 0 + 0 + + + + + Seat + 171 + 171 + none + 0 + false + false + true + false + 0 + step + none + 15 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Table + 172 + 172 + move-and-shoot + 0 + false + false + true + false + 0 + step + none + 15 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Table + 173 + 173 + move-and-shoot + 0 + false + false + true + false + 0 + step + none + 15 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Table + 174 + 174 + move-and-shoot + 0 + false + false + true + false + 0 + step + none + 15 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Table + 175 + 175 + move-and-shoot + 0 + false + false + true + false + 0 + step + none + 15 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Table + 176 + 176 + move-and-shoot + 0 + false + false + true + false + 0 + step + none + 15 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Fire Pit + 987 + 987 + move-and-shoot + 0 + false + false + true + false + 6 + step + none + 15 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Pillar + 209 + 209 + move-and-shoot + 0 + false + false + true + false + 0 + step + none + 15 + -1 + 0 + + none + -1 + 0 + 0 + + + p + + + + Town + 189 + 189 + none + 0 + false + false + true + false + 0 + step + city + 1 + -1 + 0 + + town + 2 + 0 + 0 + + + + + Hut + 190 + 190 + none + 0 + false + false + true + false + 0 + step + city + 1 + -1 + 0 + + town + 2 + 0 + 0 + + + + + Hidden Town + 2 + 2 + none + 0 + false + false + true + false + 0 + step + none + 1 + -1 + 0 + + town + 2 + 0 + 0 + + + + + Cave + 192 + 192 + sight + 0 + false + false + true + false + 0 + step + city + 3 + 4 + 0 + + town + 28 + 0 + 0 + + + + + Cave + 193 + 193 + sight + 0 + false + false + true + false + 0 + step + city + 3 + 4 + 0 + + town + 26 + 0 + 0 + + + + + Cave + 195 + 195 + sight + 0 + false + false + true + false + 0 + step + city + 3 + 4 + 0 + + town + 30 + 0 + 0 + + + + + Cave + 194 + 194 + sight + 0 + false + false + true + false + 0 + step + city + 3 + 4 + 1 + + town + 24 + 0 + 0 + + + + + Pit + 196 + 196 + none + 0 + false + false + true + false + 0 + step + city + 1 + -1 + 0 + + town + 2 + 0 + 0 + + + + + Tower + 197 + 197 + sight + 0 + false + false + true + false + 0 + step + city + 1 + -1 + 0 + + town + 2 + 0 + 0 + + + + + City + 191 + 191 + sight + 0 + false + false + true + false + 0 + step + city + 1 + -1 + 0 + + town + 2 + 0 + 0 + + + + + City + 200 + 200 + sight + 0 + false + false + true + false + 0 + step + city + 1 + -1 + 0 + + town + 2 + 0 + 0 + + + + + City + 201 + 201 + sight + 0 + false + false + true + false + 0 + step + city + 1 + -1 + 0 + + town + 2 + 0 + 0 + + + + + Hut + 204 + 204 + none + 0 + false + false + true + false + 0 + step + none + 4 + -1 + 2 + + town + 36 + 0 + 0 + + + + + Town + 187 + 187 + none + 0 + false + false + true + false + 0 + step + city + 0 + -1 + 1 + + town + 0 + 0 + 0 + + + + + Tower + 188 + 188 + none + 0 + false + false + true + false + 0 + step + city + 0 + -1 + 1 + + town + 0 + 0 + 0 + + + + + Fort + 232 + 232 + none + 0 + false + false + true + false + 0 + step + city + 0 + -1 + 0 + + town + 0 + 0 + 0 + + + + + Hut + 239 + 239 + none + 0 + false + false + true + false + 0 + step + city + 0 + -1 + 0 + + town + 0 + 0 + 0 + + + + + Portal + 966 + 966 + monsters + 0 + false + false + true + false + 1 + step + city + 0 + -1 + 1 + + none + -1 + 0 + 0 + + + + + Conveyor Belt + 967 + 967 + none + 0 + false + false + true + false + 0 + step + none + 0 + -1 + 1 + + belt + 0 + 0 + 0 + + + + + Conveyor Belt + 968 + 968 + none + 0 + false + false + true + false + 0 + step + none + 0 + -1 + 1 + + belt + 2 + 0 + 0 + + + + + Conveyor Belt + 969 + 969 + none + 0 + false + false + true + false + 0 + step + none + 0 + -1 + 1 + + belt + 4 + 0 + 0 + + + + + Conveyor Belt + 970 + 970 + none + 0 + false + false + true + false + 0 + step + none + 0 + -1 + 1 + + belt + 6 + 0 + 0 + + + + diff --git a/test/files/town/townrectUniversal/towns/talk0.xml b/test/files/town/townrectUniversal/towns/talk0.xml new file mode 100644 index 000000000..acdb8d11b --- /dev/null +++ b/test/files/town/townrectUniversal/towns/talk0.xml @@ -0,0 +1,63 @@ + + + + Unused + + + + + + Unused + + + + + + Unused + + + + + + Unused + + + + + + Unused + + + + + + Unused + + + + + + Unused + + + + + + Unused + + + + + + Unused + + + + + + Unused + + + + + diff --git a/test/files/town/townrectUniversal/towns/town0.map b/test/files/town/townrectUniversal/towns/town0.map new file mode 100644 index 000000000..22bdf9ee4 --- /dev/null +++ b/test/files/town/townrectUniversal/towns/town0.map @@ -0,0 +1,48 @@ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0v,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,170,170,170,170,170,170,170,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,170,0,0,0,0,0,170,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0>,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,170,0,0,0,0,0,170,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0<,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,170,0,0,0,0,0,170,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,170,170,170,170,170,170,170,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0^,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 diff --git a/test/files/town/townrectUniversal/towns/town0.spec b/test/files/town/townrectUniversal/towns/town0.spec new file mode 100644 index 000000000..e69de29bb diff --git a/test/files/town/townrectUniversal/towns/town0.xml b/test/files/town/townrectUniversal/towns/town0.xml new file mode 100644 index 000000000..159b76274 --- /dev/null +++ b/test/files/town/townrectUniversal/towns/town0.xml @@ -0,0 +1,12 @@ + + + 48 + Medium town 1 + Comment 1 + Comment 2 + Comment 3 + + 0 + lit + + diff --git a/test/files/town/townrectWindows.exs b/test/files/town/townrectWindows.exs new file mode 100644 index 0000000000000000000000000000000000000000..984c26176909f92ddb6b59cfc9740ed2afeb4de5 GIT binary patch literal 95687 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 +#include "fileio/resmgr/res_image.hpp" +#include "fileio/resmgr/res_sound.hpp" +#include "fileio/resmgr/res_strings.hpp" + TEST_CASE("Converting legacy town data") { cScenario scen; @@ -244,4 +250,28 @@ TEST_CASE("Converting legacy town data") { CHECK(town.area_desc[0] == rect(12,13,14,15)); CHECK(town.creatures.size() == 30); } + SECTION("Boundaries conversion") { + fs::path test_scenarios_dir = fs::current_path()/"files"/"town"; + std::vector test_scenarios = {"townrectMac.exs", "townrectWindows.exs", fs::path("townrectUniversal")/"header.exs"}; + + ResMgr::strings.pushPath(fs::current_path()/".."/"rsrc"/"strings"); + ResMgr::graphics.pushPath(fs::current_path()/".."/"rsrc"/"graphics"); + ResMgr::sounds.pushPath(fs::current_path()/".."/"rsrc"/"sounds"); + + try{ + for(fs::path test_scenario : test_scenarios){ + cScenario scen; + + load_scenario(test_scenarios_dir / test_scenario, scen, false, false); + + CHECK(scen.towns[0]->in_town_rect.width() == 6); + CHECK(scen.towns[0]->in_town_rect.height() == 4); + } + } catch(...) { + ResMgr::sounds.popPath(); + ResMgr::graphics.popPath(); + throw; + } + + } }