A. Testing with the arena ============================ Crawl's arena mode can be used to pit one set of monsters against another and watch them fight. For example, crawl -arena "3 rat v 2 kobold" pits 3 rats against 2 kobolds. If you put "arena_dump_msgs = true" into your crawl init file, then most messages generated during the fight will be dumped to the file "arena.result". Also adding "arena_dump_msgs_all = true" will additionally cause messages to the diagnostics channel to be dumped. Messages to some channels will be prefixed with the channel name, to make grepping for results easier: MSGCH_ERROR is prefixed with "ERR:" MSGCH_WARN is prefixed with "WARN:" MSGCH_DIAGNOSTICS is prefixed with "DIAG:" MSGCH_SOUND is prefixed with "SOUND: The TALK channels are prefixed with "TALK:" See docs/arena.txt for more details. A.1 Testing specific problems with the arena ============================================= Using the arena to test problems with specific monsters is rather easy: crawl -arena "problem monster v problem monster" For specific ego items, it's not much harder. Say you had a problem with chaos branded melee items. You could do crawl -arena "10 vault guard; long sword ego:chaos v 10 vault guard; long sword ego:chaos" to pit two groups of 10 vault guards against each other, all armed with chaos long swords. Or if you wanted to test ammo of penetration: crawl -arena "10 centaur ; bow . arrow ego:penetration v 10 centaur ; bow . arrow ego:penetration" Note that: 1) You have to specify "bow", since giving monsters any specific items at all strips them of all the standard items they are normally generated with. 2) Different items are separated by "." 3) You don't use plurals in the item specification; for something like arrows an appropriate amount is given automatically. For more on monster and item specifications, look up ITEM and MONS in docs/develop/level/syntax.txt A.2 Testing general problems with the arena ============================================ You can also use the arena to just see if anything unusual is happening, or if you can catch any crashes for unknown issues. crawl -arena "10 random v 10 random" would pit two teams of random monsters against each other, appropriate for D:20. To change the place chosen for choosing random monsters, you can use "arena_place:" crawl -arena "arena_place:D:27 10 random v 10 random" crawl -arena "arena_place:Abyss 10 random v 10 random" crawl -arena "arena_place:Zot:5 10 random v 10 random" etc Note that "arena_place" controls what's generated by the spell Shadow Creatures, in addition to the "random" monster spec used in the command line. You can also pit random uniques against each other (this also affects Shadow Creatures as well): crawl -arena "random_uniques 10 random v 10 random" You might find that certain random monsters overwhelm the arena run, like maybe jellies are eating so many corpses that they fill the whole arena. You can forbid monsters with certain glyphs from being randomly generated: crawl -arena "ban_glyphs:J 10 random v 10 random" A.3 Getting the arena to run for a long time ============================================== By default the arena exits when all the monsters on one team die, ending the round. You can specify that multiple rounds happen by adding "t:num", but that's limited to 99 rounds. A way to make it so that the arena will run forever (or until you press ESC to exit it) is to add the "respawn" tag to the arena specification. You can then leave Crawl running under a debugger waiting for a crash, or simply grep the arena.result file after it's run for long enough. For example: crawl -arena "respawn rat v kobold" Will make it so that whenever the rat dies it's replaced by a new rat, and the same for the kobold. crawl -arena "respawn random v random" Will cause a new, random monster for the same team to be placed whenever one or the other dies. If you do crawl -arena "respawn 10 random v 10 random" then the monsters tend to clump up in the middle in a huge brawl. A way to spread this out is by adding "move_respawns": crawl -arena "respawn move_respawns 10 random v 10 random" This will make it so that when a monster respawns, it's teleported to a random location in the arena, spreading out the fights. Finally, if you're using non-unique random monsters, you can add "cycle_random" so that the random monsters are chosen by linearly cycling through the monsters that can possibly appear in the place chosen by "arena_place:", rather than being chosen with the weights appropriate for that place. This will cause rare monsters to be generated a lot more often. A.4 Speeding up the arena ========================== You can speed up the arena by reducing the delay in milliseconds between turns. You can do this on the command line with "delay:": crawl -arena "delay:0 random v random" This will cause there to be no delay between turns, or when animating beams or explosions. You can also set the option "arena_delay" in your init file to have it apply to all arena runs. A.5 Changing the arena terrain =============================== You can change the terrain used in the arena with the "arena:" tag. For example: crawl -arena "arena:smoke random v random" will cause the monsters to fight in an arena which is filled with smoke. The available terrains are in source/dat/des/builder/arena.des. If an arena you want is tagged with "arena_foo" in the des file, then you put "arena:foo" on the command line.