[crossfire] Automatic map checking

Raphaël Quinet quinet at gamers.org
Mon May 22 16:11:39 CDT 2006


In my previous message discussing the alchemy code, I mentioned the script
that I am currently writing for performing automatic checks of all
crossfire maps.  I tested this script on the bigworld maps (latest tarball
as well as CVS) and it reported a bunch of errors.  Some of them are
simple warnings and others are real errors.  I am planning to improve the
output of the script so that it reports different severity levels, but in
the meantime I thought that it could be useful to post some excerpts from
the output of that script in case someone feels like fixing some of these
errors.

Some notes:
- Non-existing maps: these are maps that have an exit pointing to them,
  but there is no corresponding file.  Two notable sources of such
  errors are the player shops in Brest (missing floor2) and many broken
  "mlab" maps.
- Unreachable maps: these are maps that exist but cannot be reached by
  following an exit (starting from (/HallOfSelection).  Some of these
  unreachable maps are still connected to each other, but the group of
  maps is not reachable.  The /HallOfDMs map is unreachable by design.
  Some other unreachable maps are just test maps that should probably
  be moved elsewhere (in /unlinked, for example).  The other ones are
  probably errors that should be fixed.
- The blocked exits are exits that point to an area that contains an
  object that blocks MOVE_WALK (or more, such as MOVE_ALL).  Exits that
  are blocked by a check_inv trigger are probably fine.  Exits that
  point ot a wall are almost certainly wrong and should be fixed.
  Exits that are blocked by a connected object or by a door with a
  keycode (slaying) may be dangerous: they are usually the return path
  from a dungeon and they work fine as long as the player goes through
  the levels fast enough.  But if the map is reset while the player is
  inside the dungeon, then the player could be stuck on the way back
  because the entrance map has been reset and the exit is now blocked.
  These maps should probably be redesigned for extra safety, although
  this is probably not a critical issue.
- The blocked exit from /scorn/apartment/Apartments1 should not be
  reported because the floor has the "unique" flag.  This is one of
  the things that I still have to improve in the script.

So here is an excert from the output of the script:

Checking for non-existing maps...
	no /brest/pshops/pshop1/floor2
		(12, 7) from /brest/pshops/pshop1/floor1 (12, 7)
	no /brest/pshops/pshop10/floor2
		(12, 7) from /brest/pshops/pshop10/floor1 (12, 7)
	no /brest/pshops/pshop11/floor2
		(12, 7) from /brest/pshops/pshop11/floor1 (12, 7)
	no /brest/pshops/pshop12/floor2
		(12, 7) from /brest/pshops/pshop12/floor1 (12, 7)
	no /brest/pshops/pshop13/floor2
		(12, 7) from /brest/pshops/pshop13/floor1 (12, 7)
	no /brest/pshops/pshop14/floor2
		(12, 7) from /brest/pshops/pshop14/floor1 (12, 7)
	no /brest/pshops/pshop15/floor2
		(12, 7) from /brest/pshops/pshop15/floor1 (12, 7)
	no /brest/pshops/pshop16/floor2
		(12, 7) from /brest/pshops/pshop16/floor1 (12, 7)
	no /brest/pshops/pshop17/floor2
		(12, 7) from /brest/pshops/pshop17/floor1 (12, 7)
	no /brest/pshops/pshop18/floor2
		(12, 7) from /brest/pshops/pshop18/floor1 (12, 7)
	no /brest/pshops/pshop19/floor2
		(12, 7) from /brest/pshops/pshop19/floor1 (12, 7)
	no /brest/pshops/pshop2/floor2
		(12, 7) from /brest/pshops/pshop2/floor1 (12, 7)
	no /brest/pshops/pshop20/floor2
		(12, 7) from /brest/pshops/pshop20/floor1 (12, 7)
	no /brest/pshops/pshop21/floor2
		(12, 7) from /brest/pshops/pshop21/floor1 (12, 7)
	no /brest/pshops/pshop22/floor2
		(12, 7) from /brest/pshops/pshop22/floor1 (12, 7)
	no /brest/pshops/pshop23/floor2
		(12, 7) from /brest/pshops/pshop23/floor1 (12, 7)
	no /brest/pshops/pshop24/floor2
		(12, 7) from /brest/pshops/pshop24/floor1 (12, 7)
	no /brest/pshops/pshop25/floor2
		(12, 7) from /brest/pshops/pshop25/floor1 (12, 7)
	no /brest/pshops/pshop26/floor2
		(12, 7) from /brest/pshops/pshop26/floor1 (12, 7)
	no /brest/pshops/pshop27/floor2
		(12, 7) from /brest/pshops/pshop27/floor1 (12, 7)
	no /brest/pshops/pshop3/floor2
		(12, 7) from /brest/pshops/pshop3/floor1 (12, 7)
	no /brest/pshops/pshop4/floor2
		(12, 7) from /brest/pshops/pshop4/floor1 (12, 7)
	no /brest/pshops/pshop5/floor2
		(12, 7) from /brest/pshops/pshop5/floor1 (12, 7)
	no /brest/pshops/pshop6/floor2
		(12, 7) from /brest/pshops/pshop6/floor1 (12, 7)
	no /brest/pshops/pshop7/floor2
		(12, 7) from /brest/pshops/pshop7/floor1 (12, 7)
	no /brest/pshops/pshop8/floor2
		(12, 7) from /brest/pshops/pshop8/floor1 (12, 7)
	no /brest/pshops/pshop9/floor2
		(12, 7) from /brest/pshops/pshop9/floor1 (12, 7)
	no /inn_and_outpost/downthewell
		(1, 1) from /world/world_111_116 (46, 31)
	no /lake_country/pup_land/nurnberg/city
		(25, 15) from /lake_country/dragon_hangar/hangar (34, 2)
	no /mlab/citydeclouds/IPO_citydeclouds
		(11, 8) from /mlab/citydeclouds/citydeclouds2H (6, 48)
		(10, 20) from /mlab/citydeclouds/citydeclouds2I (5, 10)
	no /mlab/citydeclouds/cdcapart/cdcapart1
		(13, 12) from /mlab/citydeclouds/citydeclouds2G (7, 48)
	no /mlab/citydeclouds/cdcapart1
		(23, 50) from /mlab/citydeclouds/citydeclouds2H (17, 36)
	no /mlab/citydeclouds/cdcbigstore/cdccotgf1
		(11, 22) from /mlab/citydeclouds/cdcbigstore/cdcbigstore3f (4, 46)
	no /mlab/citydeclouds/cdccloudre1
		(17, 3) from /mlab/citydeclouds/citydeclouds2E (45, 37)
		(17, 5) from /mlab/citydeclouds/citydeclouds2E (45, 39)
	no /mlab/citydeclouds/cdccotgf1
		(18, 67) from /mlab/citydeclouds/citydeclouds2C (49, 25)
		(42, 22) from /mlab/citydeclouds/citydeclouds2E (23, 30)
		(19, 60) from /mlab/citydeclouds/citydeclouds2F (0, 18)
		(34, 80) from /mlab/citydeclouds/citydeclouds2F (15, 38)
		(55, 67) from /mlab/citydeclouds/citydeclouds2F (36, 25)
		(63, 57) from /mlab/citydeclouds/citydeclouds2F (44, 15)
		(115, 48) from /mlab/citydeclouds/citydeclouds2I (46, 6)
	no /mlab/citydeclouds/cdccourthsuplvl1
		(3, 4) from /mlab/citydeclouds/citydeclouds2A (3, 41)
		(3, 10) from /mlab/citydeclouds/citydeclouds2A (3, 47)
		(8, 7) from /mlab/citydeclouds/citydeclouds2A (5, 42)
		(8, 7) from /mlab/citydeclouds/citydeclouds2A (5, 43)
		(8, 7) from /mlab/citydeclouds/citydeclouds2A (5, 44)
		(8, 7) from /mlab/citydeclouds/citydeclouds2A (5, 45)
		(8, 7) from /mlab/citydeclouds/citydeclouds2A (5, 46)
		(8, 7) from /mlab/citydeclouds/citydeclouds2A (6, 42)
		(8, 7) from /mlab/citydeclouds/citydeclouds2A (6, 43)
		(8, 7) from /mlab/citydeclouds/citydeclouds2A (6, 44)
		(8, 7) from /mlab/citydeclouds/citydeclouds2A (6, 45)
		(8, 7) from /mlab/citydeclouds/citydeclouds2A (6, 46)
		(8, 7) from /mlab/citydeclouds/citydeclouds2A (7, 42)
		(8, 7) from /mlab/citydeclouds/citydeclouds2A (7, 43)
		(8, 7) from /mlab/citydeclouds/citydeclouds2A (7, 44)
		(8, 7) from /mlab/citydeclouds/citydeclouds2A (7, 45)
		(8, 7) from /mlab/citydeclouds/citydeclouds2A (7, 46)
		(8, 7) from /mlab/citydeclouds/citydeclouds2A (8, 42)
		(8, 7) from /mlab/citydeclouds/citydeclouds2A (8, 43)
		(8, 7) from /mlab/citydeclouds/citydeclouds2A (8, 44)
		(8, 7) from /mlab/citydeclouds/citydeclouds2A (8, 45)
		(8, 7) from /mlab/citydeclouds/citydeclouds2A (8, 46)
	no /mlab/citydeclouds/cdcgatea2
		(13, 15) from /mlab/citydeclouds/citydeclouds2D (49, 31)
	no /mlab/citydeclouds/cdcjjbuild/cdcjjbuild1
		(11, 5) from /mlab/citydeclouds/citydeclouds2E (43, 20)
	no /mlab/citydeclouds/cdcmesshluper1
		(1, 6) from /mlab/citydeclouds/citydeclouds2C (3, 16)
	no /mlab/citydeclouds/cdcnrkpdevtmp1
		(1, 1) from /mlab/citydeclouds/citydeclouds2B (3, 1)
	no /mlab/citydeclouds/cdcnwgateuprlv1
		(10, 12) from /mlab/citydeclouds/citydeclouds2A (10, 30)
	no /mlab/citydeclouds/cdcscasino
		(7, 11) from /mlab/citydeclouds/citydeclouds2H (2, 29)
		(7, 12) from /mlab/citydeclouds/citydeclouds2H (2, 30)
	no /mlab/citydeclouds/cdcunderbigstre1
		(9, 76) from /mlab/citydeclouds/citydeclouds2B (40, 45)
		(50, 42) from /mlab/citydeclouds/citydeclouds2E (31, 10)
		(50, 43) from /mlab/citydeclouds/citydeclouds2E (31, 11)
		(50, 44) from /mlab/citydeclouds/citydeclouds2E (31, 12)
		(19, 98) from /mlab/citydeclouds/citydeclouds2F (0, 17)
		(66, 93) from /mlab/citydeclouds/citydeclouds2F (47, 12)
		(70, 53) from /mlab/citydeclouds/citydeclouds2H (1, 21)
		(75, 62) from /mlab/citydeclouds/citydeclouds2H (6, 30)
		(86, 74) from /mlab/citydeclouds/citydeclouds2H (17, 42)
		(101, 94) from /mlab/citydeclouds/citydeclouds2I (32, 12)
		(102, 94) from /mlab/citydeclouds/citydeclouds2I (33, 12)
	no /mlab/citydeclouds/cdcvillaarC1
		(22, 7) from /mlab/citydeclouds/citydeclouds2G (29, 23)
	no /mlab/citydeclouds/cdcwgrotto1
		(28, 55) from /mlab/citydeclouds/citydeclouds2F (49, 26)
	no /mlab/citydeclouds/citydeclouds
		(26, 144) from /mlab/citydeclouds/citydeclouds2G (0, 4)
	no /mlab/citydeclouds/citydecloudsvilla/citydecloudsvillaC1
		(6, 6) from /mlab/citydeclouds/citydeclouds2G (20, 29)
	no /mlab/citydeclouds/citydecloudsvilla/citydecloudsvillab1
		(1, 41) from /mlab/citydeclouds/citydeclouds2G (6, 48)
		(23, 31) from /mlab/citydeclouds/citydeclouds2G (28, 38)
	no /mlab/citydeclouds/cloudworlddecity
		(45, 76) from /mlab/citydeclouds/citydeclouds2A (0, 26)
	no /mlab/citydeclouds/tavernb3
		(41, 7) from /mlab/citydeclouds/citydeclouds2G (22, 31)
	no /mlab/citydeclouds2
		(122, 31) from /navar_city/mlab/tavernb3 (41, 7)
	no /mlab/cloudworlddecity
		(45, 76) from /mlab/citydeclouds/citydeclouds2A (0, 25)
		(62, 106) from /mlab/citydeclouds/citydeclouds2F (13, 46)
		(62, 106) from /mlab/citydeclouds/citydeclouds2F (14, 46)
		(62, 106) from /mlab/citydeclouds/citydeclouds2F (15, 46)
		(62, 106) from /mlab/citydeclouds/citydeclouds2F (16, 46)
		(29, 112) from /mlab/mlabscrntrd2 (24, 9)
	no /morok_dun/mines1
		(18, 27) from /world/world_120_109 (27, 41)
	no /navar_city/mlab/tadobebuild2
		(10, 18) from /navar_city/mlab/tavern (73, 19)
	no /navar_city/mlab/zealothouse2
		(16, 15) from /navar_city/mlab/tavern (19, 70)
	no /navar_city/mlab/zealothouseb1
		(6, 12) from /navar_city/mlab/tavern (9, 67)
	no /navar_city/pup_land/nurnberg/city
		(25, 15) from /navar_city/dragon_hangar/hangar (34, 2)
	no /navar_city/smugglers_cove/sc_cave1
		(26, 38) from /world/world_124_119 (25, 17)
	no /navar_city/smugglers_cove/sc_lair1
		(5, 29) from /world/world_124_119 (13, 26)
		(12, 24) from /world/world_124_119 (20, 21)
	no /navar_city/smugglers_cove/smugglers_ship2
		(8, 7) from /world/world_124_119 (18, 38)
	no /pup_land/ancient/mountain/0
		(0, 0) from /pup_land/ancient/mountain/tower.1 (25, 24)
		(0, 0) from /pup_land/ancient/mountain/tower.2 (0, 17)
	no /pup_land/lone_town/pup_land/nurnberg/city
		(25, 15) from /pup_land/lone_town/dragonhangar/hangar (34, 2)
	no /pup_land/nurnberg/pup_land/nurnberg/city
		(25, 15) from /pup_land/nurnberg/dragonhangar/hangar (34, 2)
	no /scorn/houses/rolandos_house
		(3, 1) from /world/world_105_116 (7, 4)
	no /scorn/houses/yolandas_house
		(2, 1) from /world/world_105_116 (6, 4)
	no /wolfsburg/hut/hut
		(2, 17) from /world/world_128_109 (26, 37)
	no /world/goei mezon
		(0, 0) from /world/world_127_102 (27, 3)
		(0, 0) from /world/world_128_101 (6, 19)

Checking for existing but unreachable maps...
	unreachable /HallOfDMs
		(11, 24) to /world/world_105_116 (4, 4)
		(14, 24) to /world/world_122_117 (3, 10)
	unreachable /azumauindo/suno-yamatoshi/tou/tou1
		(5, 14) to /azumauindo/suno-yamatoshi/tou/tou2 (5, 14)
		(5, 14) from /azumauindo/suno-yamatoshi/tou/tou2 (5, 14)
	unreachable /azumauindo/suno-yamatoshi/tou/tou2
		(5, 14) to /azumauindo/suno-yamatoshi/tou/tou1 (5, 14)
		(3, 10) to /azumauindo/suno-yamatoshi/tou/tou3 (3, 10)
		(5, 14) from /azumauindo/suno-yamatoshi/tou/tou1 (5, 14)
		(3, 10) from /azumauindo/suno-yamatoshi/tou/tou3 (3, 10)
	unreachable /azumauindo/suno-yamatoshi/tou/tou3
		(3, 10) to /azumauindo/suno-yamatoshi/tou/tou2 (3, 10)
		(4, 7) to /azumauindo/suno-yamatoshi/tou/tou4 (4, 7)
		(3, 10) from /azumauindo/suno-yamatoshi/tou/tou2 (3, 10)
		(4, 7) from /azumauindo/suno-yamatoshi/tou/tou4 (4, 7)
	unreachable /azumauindo/suno-yamatoshi/tou/tou4
		(4, 7) to /azumauindo/suno-yamatoshi/tou/tou3 (4, 7)
		(8, 8) to /azumauindo/suno-yamatoshi/tou/tou5 (8, 8)
		(4, 7) from /azumauindo/suno-yamatoshi/tou/tou3 (4, 7)
		(8, 8) from /azumauindo/suno-yamatoshi/tou/tou5 (8, 8)
	unreachable /azumauindo/suno-yamatoshi/tou/tou5
		(8, 8) to /azumauindo/suno-yamatoshi/tou/tou4 (8, 8)
		(8, 8) from /azumauindo/suno-yamatoshi/tou/tou4 (8, 8)
	unreachable /brest/sport.jess
		(0, 9) to /brest/sport.jess (23, 22)
		(0, 10) to /brest/sport.jess (27, 23)
		(38, 34) to /world/world_107_123 (27, 29)
		(23, 22) from /brest/sport.jess (0, 9)
		(27, 23) from /brest/sport.jess (0, 10)
	unreachable /darcap/darcap/circus/movers
	unreachable /darcap/darcap/circus/walls
	unreachable /dungeons/train/train-old
		(1, 16) to /dungeons/train/goblin (19, 3)
		(1, 12) to /dungeons/train/ogre (19, 12)
		(8, 12) to /dungeons/train/skeleton (19, 12)
		(8, 16) to /dungeons/train/zombie (19, 3)
		(1, 5) to /world/world_104_115 (48, 24)
		(1, 9) to /world/world_104_115 (48, 24)
		(4, 18) to /world/world_104_115 (48, 25)
		(5, 18) to /world/world_104_115 (49, 25)
		(8, 5) to /world/world_104_115 (49, 24)
		(8, 9) to /world/world_104_115 (49, 24)
	unreachable /planes/IPO_storage
	unreachable /pup_land/ancient/castle/ghoswolte
		(0, 0) to /pup_land/castle_eureca/castle_eureca5 (9, 31)
	unreachable /pup_land/ancient/castle/gothwolte.1
		(12, 2) to /pup_land/ancient/castle/gothwolte.3 (9, 20)
		(12, 2) from /pup_land/ancient/castle/gothwolte.3 (9, 20)
	unreachable /pup_land/ancient/castle/gothwolte.2
	unreachable /pup_land/ancient/castle/gothwolte.3
		(9, 20) to /pup_land/ancient/castle/gothwolte.1 (12, 2)
		(0, 0) to /pup_land/castle_eureca/castle_eureca5 (9, 31)
		(9, 20) from /pup_land/ancient/castle/gothwolte.1 (12, 2)
	unreachable /pup_land/ancient/ruin/tower
		(14, 31) to /pup_land/ancient/ruin/path (17, 2)
	unreachable /pup_land/ancient/village/siegfried/lever
		(0, 15) to /pup_land/ancient/village/siegfried/siegfried.1 (22, 29)
		(8, 11) to /pup_land/ancient/village/siegfried/siegfried.1 (35, 13)
	unreachable /pup_land/castle_eureca/castle_eurecaB2
		(1, 19) to /pup_land/castle_eureca/castle_eurecaB1 (8, 12)
		(2, 23) to /pup_land/castle_eureca/castle_eurecaB2 (2, 19)
		(2, 19) from /pup_land/castle_eureca/castle_eurecaB2 (2, 23)
	unreachable /pup_land/cave_weapon/cave51
		(15, 15) to /pup_land/cave_weapon/cave4 (16, 14)
		(10, 22) to /pup_land/cave_weapon/cave5 (15, 16)
		(15, 16) to /pup_land/cave_weapon/cave5 (10, 22)
	unreachable /pup_land/jk/heads
		(15, 0) to /pup_land/rainbow/islands (28, 24)
		(3, 26) to /pup_land/s_f/cave2 (15, 3)
	unreachable /pup_land/kurte/eureca_road31
		(4, 31) to /pup_land/kurte/eureca_road3 (6, 8)
		(37, 4) to /pup_land/kurte/eureca_road3 (6, 8)
	unreachable /pup_land/lone_town/guild_freedom_ud
		(1, 1) to /pup_land/lone_town/guild_freedom (13, 14)
	unreachable /pup_land/lone_town/guild_law_ud
		(5, 1) to /pup_land/lone_town/guild_law (4, 14)
	unreachable /pup_land/lone_town/nf_bar
	unreachable /pup_land/nurnberg/agito
		(1, 13) to /pup_land/nurnberg/hotel (13, 2)
	unreachable /pup_land/nurnberg/dick/bomb
		(7, 15) to /pup_land/nurnberg/city (4, 9)
		(16, 24) to /pup_land/nurnberg/city (4, 9)
	unreachable /pup_land/rainbow/Lv1/Bizuzu
		(6, 8) to /pup_land/rainbow/Lv1/b_pass (1, 4)
		(6, 4) to /pup_land/rainbow/river (1, 1)
		(6, 8) from /pup_land/rainbow/Lv1/b_pass (1, 4)
		(6, 4) from /pup_land/rainbow/river (1, 1)
	unreachable /pup_land/rainbow/Lv1/b_pass
		(1, 4) to /pup_land/rainbow/Lv1/Bizuzu (6, 8)
		(13, 1) to /pup_land/rainbow/Lv1/orc_f (2, 1)
		(1, 4) from /pup_land/rainbow/Lv1/Bizuzu (6, 8)
		(12, 1) from /pup_land/rainbow/Lv1/orc_f (1, 1)
	unreachable /pup_land/rainbow/Lv1/orc_f
		(1, 1) to /pup_land/rainbow/Lv1/b_pass (12, 1)
		(7, 5) to /pup_land/rainbow/Lv1/orc_f (20, 3)
		(8, 13) to /pup_land/rainbow/Lv1/orc_f (20, 12)
		(20, 3) to /pup_land/rainbow/Lv1/orc_f (7, 5)
		(20, 12) to /pup_land/rainbow/Lv1/orc_f (7, 11)
		(14, 14) to /pup_land/rainbow/Lv1/prison (4, 1)
		(2, 1) from /pup_land/rainbow/Lv1/b_pass (13, 1)
		(20, 3) from /pup_land/rainbow/Lv1/orc_f (7, 5)
		(20, 12) from /pup_land/rainbow/Lv1/orc_f (8, 13)
		(7, 5) from /pup_land/rainbow/Lv1/orc_f (20, 3)
		(7, 11) from /pup_land/rainbow/Lv1/orc_f (20, 12)
	unreachable /pup_land/rainbow/Lv5/romm88
	unreachable /pup_land/rainbow/river
		(1, 1) to /pup_land/rainbow/Lv1/Bizuzu (6, 4)
		(42, 5) to /pup_land/rainbow/islands (24, 18)
		(1, 1) from /pup_land/rainbow/Lv1/Bizuzu (6, 4)
	unreachable /quests/mak/chaos/monsters.pick
	unreachable /quests/mak/dragons/chaos.orig
		(6, 34) to /quests/mak/MainFloor (6, 14)
		(6, 30) to /quests/mak/dragons/chaos (15, 29)
		(15, 30) to /quests/mak/dragons/chaos (6, 30)
	unreachable /quests/peterm/quests/dragon_quest
		(4, 3) to /quests/peterm/quests/dragonquest2 (3, 2)
		(3, 2) to /world/world_111_117 (39, 42)
	unreachable /quests/todd/aljwaf/ruins
		(21, 8) to /quests/todd/aljwaf/crypt (1, 1)
		(6, 19) to /quests/todd/aljwaf/crypt2 (2, 2)
		(18, 17) to /quests/todd/aljwaf/crypt3 (1, 1)
		(6, 3) to /quests/todd/aljwaf/crypt4 (8, 1)
		(16, 9) to /quests/todd/aljwaf/crypt5 (8, 3)
		(23, 23) to /world/world_122_111 (11, 26)
		(24, 23) to /world/world_122_111 (11, 26)
	unreachable /scorn/misc/testing_area
		(1, 1) to /scorn/misc/castle2 (17, 7)
	unreachable /scorn/oldcity/oldcity4
		(19, 20) to /scorn/oldcity/oldcity2 (1, 20)
		(0, 33) to /scorn/oldcity/oldcity5 (19, 33)
		(13, 0) to /scorn/oldcity/oldcity9 (33, 19)
		(0, 33) from /scorn/oldcity/oldcity5 (19, 33)
	unreachable /scorn/oldcity/oldcity5
		(19, 33) to /scorn/oldcity/oldcity4 (0, 33)
		(12, 39) to /scorn/oldcity/oldcity6 (12, 0)
		(0, 5) to /scorn/oldcity/oldcity7 (19, 5)
		(10, 0) to /scorn/oldcity/oldcity9 (10, 19)
		(19, 33) from /scorn/oldcity/oldcity4 (0, 33)

Checking for blocked exits...
	blocked exit from /brest/Castle/Finale
		(1, 58) to /brest/Castle/LargeRoom (27, 56) blocked by door
	blocked exits from /darcap/darcap/circus/illusions
		(9, 6) to /darcap/darcap/circus/illusions (34, 6) blocked by grate (connected 1)
		(9, 7) to /darcap/darcap/circus/illusions (34, 7) blocked by grate (connected 1)
		(9, 11) to /darcap/darcap/circus/illusions (34, 11) blocked by grate (connected 2)
		(9, 12) to /darcap/darcap/circus/illusions (34, 12) blocked by grate (connected 2)
		(9, 16) to /darcap/darcap/circus/illusions (34, 16) blocked by grate (connected 3)
		(9, 17) to /darcap/darcap/circus/illusions (34, 17) blocked by grate (connected 3)
	blocked exit from /darcap/darcap/gshop
		(15, 6) to /world/world_116_102 (23, 25) blocked by shop
	blocked exit from /inn_and_outpost/hermes_inn2
		(20, 8) to /inn_and_outpost/hermes_inn (20, 8) blocked by check inv trigger (slaying hermes_inn_pass)
	blocked exit from /lake_country/Butakis/prison_s
		(5, 6) to /scorn/shops/bowshop (5, 6) blocked by wall
	blocked exit from /lake_country/small_buildings/burial_ground
		(1, 1) to /world/world_109_126 (18, 22) blocked by river
	blocked exit from /marksel/grumms_inn2
		(20, 3) to /marksel/grumms_inn (20, 3) blocked by check inv trigger (slaying grumms_inn_pass)
	blocked exits from /navar_city/city1houses
		(3, 12) to /world/world_122_116 (2, 42) blocked by grass
		(33, 3) to /world/world_122_116 (2, 41) blocked by grass
	blocked exit from /navar_city/magara/houses/large_house
		(24, 1) to /navar_city/magara/houses/large_house (19, 19) blocked by iron gate (connected 2)
	blocked exit from /navar_city/misc/aliswell
		(11, 34) to /navar_city/misc/aliswell (10, 9) blocked by clay well plug (slaying rodofalitheaterb4)
	blocked exit from /navar_city/misc/theaterb1
		(2, 29) to /navar_city/misc/theater (2, 29) blocked by spikes (connected 100)
	blocked exits from /navar_city/mlab/tavern3
		(0, 18) to /navar_city/mlab/tavern (3, 18) blocked by wall
		(0, 26) to /navar_city/mlab/tavern (3, 26) blocked by wall
		(0, 27) to /navar_city/mlab/tavern (3, 27) blocked by wall
		(0, 29) to /navar_city/mlab/tavern (3, 29) blocked by wall
		(1, 18) to /navar_city/mlab/tavern (3, 18) blocked by wall
		(1, 26) to /navar_city/mlab/tavern (3, 26) blocked by wall
		(1, 27) to /navar_city/mlab/tavern (3, 27) blocked by wall
		(1, 29) to /navar_city/mlab/tavern (3, 29) blocked by wall
		(2, 18) to /navar_city/mlab/tavern (3, 18) blocked by wall
		(2, 26) to /navar_city/mlab/tavern (3, 26) blocked by wall
		(3, 18) to /navar_city/mlab/tavern (3, 18) blocked by wall
		(9, 0) to /navar_city/mlab/tavern (14, 2) blocked by wall
		(9, 1) to /navar_city/mlab/tavern (14, 2) blocked by wall
		(10, 0) to /navar_city/mlab/tavern (14, 2) blocked by wall
		(10, 1) to /navar_city/mlab/tavern (14, 2) blocked by wall
		(11, 0) to /navar_city/mlab/tavern (14, 2) blocked by wall
		(11, 1) to /navar_city/mlab/tavern (14, 2) blocked by wall
		(11, 2) to /navar_city/mlab/tavern (14, 2) blocked by wall
		(12, 0) to /navar_city/mlab/tavern (14, 2) blocked by wall
		(12, 1) to /navar_city/mlab/tavern (14, 2) blocked by wall
		(12, 2) to /navar_city/mlab/tavern (14, 2) blocked by wall
		(13, 0) to /navar_city/mlab/tavern (14, 2) blocked by wall
		(13, 1) to /navar_city/mlab/tavern (14, 2) blocked by wall
		(13, 2) to /navar_city/mlab/tavern (14, 2) blocked by wall
		(14, 0) to /navar_city/mlab/tavern (14, 2) blocked by wall
		(14, 1) to /navar_city/mlab/tavern (14, 2) blocked by wall
		(14, 1) to /navar_city/mlab/tavern (14, 2) blocked by wall
		(14, 2) to /navar_city/mlab/tavern (14, 2) blocked by wall
		(14, 6) to /navar_city/mlab/tavern (14, 6) blocked by wall
		(14, 9) to /navar_city/mlab/tavern (14, 9) blocked by wall
	blocked exits from /navar_city/mlab/ttower15
		(6, 5) to /navar_city/mlab/ttower14 (6, 5) blocked by wall
		(12, 11) to /navar_city/mlab/ttower14 (12, 11) blocked by wall
	blocked exit from /navar_city/mlab/ttower16
		(7, 13) to /navar_city/mlab/ttower15 (7, 13) blocked by spikes
	blocked exit from /navar_city/mlab/ttower32
		(12, 12) to /navar_city/mlab/ttower31 (12, 12) blocked by spikes (connected 3)
	blocked exit from /navar_city/mlab/ttower33
		(14, 8) to /navar_city/mlab/ttower32 (14, 8) blocked by grate (connected 2)
	blocked exit from /port_joseph/pirates/tortship2
		(9, 11) to /port_joseph/pirates/tortship (9, 6) blocked by mast
	blocked exit from /pup_land/ancient/ruin/tower
		(14, 31) to /pup_land/ancient/ruin/path (17, 2) blocked by wall
	blocked exits from /pup_land/ancient/village/siegfried/siegfried.B4
		(23, 26) to /pup_land/ancient/village/siegfried/siegfried.B5a (1, 1) blocked by firewall
		(5, 17) to /pup_land/ancient/village/siegfried/siegfried.B5b (1, 14) blocked by lightningwall
	blocked exit from /pup_land/cave_weapon/cave1
		(31, 18) to /pup_land/cave_weapon/cave2 (1, 6) blocked by mine2
	blocked exit from /pup_land/jk/heads
		(3, 26) to /pup_land/s_f/cave2 (15, 3) blocked by wall
	blocked exits from /pup_land/kurte/to_past
		(6, 7) to /pup_land/kurte/kurte (15, 3) blocked by wall (connected 100)
		(6, 25) to /pup_land/kurte/kurte (15, 3) blocked by wall (connected 100)
		(7, 6) to /pup_land/kurte/kurte (15, 3) blocked by wall (connected 100)
		(7, 8) to /pup_land/kurte/kurte (15, 3) blocked by wall (connected 100)
		(7, 24) to /pup_land/kurte/kurte (15, 3) blocked by wall (connected 100)
		(7, 26) to /pup_land/kurte/kurte (15, 3) blocked by wall (connected 100)
		(8, 7) to /pup_land/kurte/kurte (15, 3) blocked by wall (connected 100)
		(8, 25) to /pup_land/kurte/kurte (15, 3) blocked by wall (connected 100)
	blocked exit from /pup_land/nurnberg/aqueduct
		(24, 24) to /pup_land/nurnberg/city (14, 16) blocked by biglake_3_1
	blocked exit from /pup_land/raffle/raffle1_u2
		(2, 16) to /pup_land/raffle/raffle1_u3 (2, 16) blocked by boulder
	blocked exits from /quests/peterm/Demonology/HighTower1
		(3, 4) to /quests/peterm/Demonology/Demon3 (6, 7) blocked by stone (slaying Earth_up), locked door (slaying Air_up), locked door (slaying Water_up), locked door (slaying Fire_up)
		(4, 3) to /quests/peterm/Demonology/Demon3 (7, 6) blocked by stone (slaying Earth_up), locked door (slaying Air_up), locked door (slaying Water_up), locked door (slaying Fire_up)
		(4, 5) to /quests/peterm/Demonology/Demon3 (7, 8) blocked by stone (slaying Earth_up), locked door (slaying Air_up), locked door (slaying Water_up), locked door (slaying Fire_up)
		(5, 4) to /quests/peterm/Demonology/Demon3 (8, 7) blocked by stone (slaying Earth_up), locked door (slaying Air_up), locked door (slaying Water_up), locked door (slaying Fire_up)
	blocked exits from /quests/peterm/Demonology/HighTower2
		(6, 5) to /quests/peterm/Demonology/HighTower1 (4, 4) blocked by spikes (connected 4), spikes (connected 3), spikes (connected 2), spikes (connected 1)
	blocked exit from /quests/peterm/Demonology/HighTowerTop
		(1, 1) to /quests/peterm/Demonology/HighTower2 (1, 1) blocked by locked door (slaying Bkey)
	blocked exit from /quests/peterm/DragonQuest/FireHatchery
		(3, 3) to /quests/peterm/DragonQuest/FireAnte (2, 4) blocked by wall
	blocked exit from /quests/skud/court
		(20, 0) to /quests/skud/north_1 (16, 39) blocked by wall
	blocked exits from /quests/todd/aljwaf/hall1
		(0, 9) to /quests/todd/aljwaf/crypt (6, 9) blocked by garden gate (connected 1)
		(0, 10) to /quests/todd/aljwaf/crypt (6, 9) blocked by garden gate (connected 1)
		(0, 11) to /quests/todd/aljwaf/crypt (6, 9) blocked by garden gate (connected 1)
		(0, 12) to /quests/todd/aljwaf/crypt (6, 9) blocked by garden gate (connected 1)
	blocked exit from /santo_dominion/lord_byron/1st_floor
		(1, 1) to /santo_dominion/lord_byron/2nd_floor (5, 5) blocked by wall
	blocked exit from /scorn/apartment/Apartments1
		(0, 0) to /scorn/apartment/apartments (1, 8) blocked by locked door (slaying ExtendedApartmentKey)
	blocked exits from /scorn/misc/prison
		(0, 51) to /scorn/anthony/prison (17, 20) blocked by spikes (connected 100)
		(0, 52) to /scorn/anthony/prison (17, 21) blocked by spikes (connected 100)
	blocked exit from /whalingoutpost/misc/frostcavern1
		(62, 40) to /whalingoutpost/misc/polarbearcave3 (34, 42) blocked by ice
	blocked exit from /whalingoutpost/taverns/fishershallb1
		(19, 9) to /whalingoutpost/taverns/fishershall1 (19, 9) blocked by barrel
	blocked exit from /wolfsburg/dungeons/treas_room
		(3, 2) to /world/world_129_109 (20, 42) blocked by rocks (slaying shovel)
	blocked exits from /wolfsburg/volcano/vvmansion
		(16, 0) to /world/world_129_108 (6, 30) blocked by Mansion
		(17, 0) to /world/world_129_108 (6, 30) blocked by Mansion
	blocked exit from /world/world_127_109
		(18, 17) to /world/world_127_109 (46, 43) blocked by shallow_sea
[...]

The other parts of the script are reporting locked doors without keys,
altars without matching object or keycode, unused keys, etc.  But I am
still working on that part and the list is a bit long anyway so I will
not post it.  The script also reports a full list of archetypes used
in all maps, and full list of named objects (which is much longer if
treasure lists and flesh items are included).  I will try to publish
the script as soon as it is reasonably usable.

-Raphaël



More information about the crossfire mailing list