All files / js/levels Mon-loca.js

100% Statements 111/111
100% Branches 2/2
100% Functions 1/1
100% Lines 111/111

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 1121x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x  
/**
 * Mon-loca - NetHack special level
 * Converted from: Mon-loca.lua
 */
 
import * as des from '../sp_lev.js';
import { selection } from '../sp_lev.js';
 
export async function generate() {
    // NetHack Monk Mon-loca.lua	$NHDT-Date: 1652196007 2022/5/10 15:20:7 $  $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1 $
    // Copyright (c) 1989 by Jean-Christophe Collet
    // Copyright (c) 1991-2 by M. Stephenson
    // NetHack may be freely redistributed.  See license for details.
    // 
    des.level_init({ style: "solidfill", fg: " " });
 
    des.level_flags("mazelevel");
 
    // 1         2         3         4         5         6         7 
    // 123456789012345678901234567890123456789012345678901234567890123456789012345
    await des.map(`\
             ----------------------------------------------------   --------
           ---.................................................-    --.....|
         ---...--------........------........................---     ---...|
       ---.....-      --.......-    ----..................----         --.--
     ---.....----      ---------       --..................--         --..| 
   ---...-----                       ----.----.....----.....---      --..|| 
----..----                       -----..---  |...---  |.......---   --...|  
|...---                       ----....---    |.---    |.........-- --...||  
|...-                      ----.....---     ----      |..........---....|   
|...----                ----......---       |         |...|.......-....||   
|......-----          ---.........-         |     -----...|............|    
|..........-----   ----...........---       -------......||...........||    
|..............-----................---     |............|||..........|     
|-S----...............................---   |...........|| |.........||     
|.....|..............------.............-----..........||  ||........|      
|.....|.............--    ---.........................||    |.......||      
|.....|.............-       ---.....................--|     ||......|       
|---S--------.......----      --.................----        |.....||       
|...........|..........--------..............-----           ||....|        
|...........|............................-----                |....|        
------------------------------------------                    ------        
`);
    // Random Monsters
 
    // Dungeon Description
    await des.region(selection.area(0,0,75,20), "lit");
    // Stairs
    des.stair("up");
    des.stair("down");
    // Non diggable walls
    des.non_diggable(selection.area(0,0,75,20));
    // Objects
    await des.object();
    await des.object();
    await des.object();
    await des.object();
    await des.object();
    await des.object();
    await des.object();
    await des.object();
    await des.object();
    await des.object();
    await des.object();
    await des.object();
    await des.object();
    await des.object();
    await des.object();
    // since vegetarian monks shouldn't eat giant corpses, give a chance for
    // Str boost that isn't throttled by exercise restrictions;
    // make a modest effort (Elbereth only) to prevent xorns from eating the tins
    let tinplace = selection.negate().filter_mapchar('.')
    let tinloc = tinplace.rndcoord(0)
    await des.object({ id: "tin", coord: tinloc, quantity: 2, buc: "blessed",
                 montype: "spinach" })
    des.engraving({ coord: tinloc, type: "burn", text: "Elbereth" });
    // Random traps
    await des.trap();
    await des.trap();
    await des.trap();
    await des.trap();
    await des.trap();
    await des.trap();
    // Random monsters.
    await des.monster("earth elemental");
    await des.monster("earth elemental");
    await des.monster("earth elemental");
    await des.monster("earth elemental");
    await des.monster("earth elemental");
    await des.monster("earth elemental");
    await des.monster("earth elemental");
    await des.monster("earth elemental");
    await des.monster("earth elemental");
    await des.monster("earth elemental");
    await des.monster("earth elemental");
    await des.monster("earth elemental");
    await des.monster("earth elemental");
    await des.monster("earth elemental");
    await des.monster("xorn");
    await des.monster("xorn");
    await des.monster("xorn");
    await des.monster("xorn");
    await des.monster("xorn");
    await des.monster("xorn");
    await des.monster("xorn");
    await des.monster("xorn");
    await des.monster("xorn");
 
 
    return des.finalize_level();
}