All files / js/levels Wiz-strt.js

100% Statements 120/120
100% Branches 3/3
100% Functions 2/2
100% Lines 120/120

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 112 113 114 115 116 117 118 119 120 1212x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x  
/**
 * Wiz-strt - NetHack special level
 * Converted from: Wiz-strt.lua
 */
 
import * as des from '../sp_lev.js';
import { selection } from '../sp_lev.js';
 
export async function generate() {
    // NetHack Wizard Wiz-strt.lua	$NHDT-Date: 1652196019 2022/5/10 15:20:19 $  $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.3 $
    // Copyright (c) 1992 by David Cohrs
    // NetHack may be freely redistributed.  See license for details.
    // 
    // 
    // The "start" level for the quest.
    // 
    // Here you meet your (besieged) class leader, Neferet the Green
    // and receive your quest assignment.
    // 
    des.level_init({ style: "solidfill", fg: " " });
 
    des.level_flags("mazelevel", "noteleport", "hardfloor");
 
    await des.map(`\
............................................................................
.....................C....CC.C........................C.....................
..........CCC.....................CCC.......................................
........CC........-----------.......C.C...C...C....C........................
.......C.....---------------------...C..C..C..C.............................
......C..C...------....\\....------....C.....C...............................
........C...||....|.........|....||.........................................
.......C....||....|.........+....||.........................................
.......C...||---+--.........|....|||........................................
......C....||...............|--S--||........................................
...........||--+--|++----|---|..|.SS..........C......C......................
........C..||.....|..|...|...|--|.||..CC..C.....C..........C................
.......C...||.....|..|.--|.|.|....||.................C..C...................
.....C......||....|..|.....|.|.--||..C..C..........C...........}}}..........
......C.C...||....|..-----.|.....||...C.C.C..............C....}}}}}}........
.........C...------........|------....C..C.....C..CC.C......}}}}}}}}}}}.....
.........CC..---------------------...C.C..C.....CCCCC.C.......}}}}}}}}......
.........C........-----------..........C.C.......CCC.........}}}}}}}}}......
..........C.C.........................C............C...........}}}}}........
......................CCC.C.................................................
`);
 
    // first do cloud everywhere
    des.replace_terrain({ region: [0,0, 75,19], fromterrain: ".", toterrain: "C", chance: 10 });
    // then replace clouds inside the tower back to floor
    des.replace_terrain({ region: [13,5, 33,15], fromterrain: "C", toterrain: ".", chance: 100 });
 
    // Dungeon Description
    await des.region(selection.area(0,0,75,19), "lit");
    await des.region(selection.area(35,0,49,3), "unlit");
    await des.region(selection.area(43,12,49,16), "unlit");
    await des.region({ region: [19,11,33,15], lit: 0, type: "ordinary", irregular: 1 });
    await des.region(selection.area(30,10,31,10), "unlit");
    // Stairs
    des.stair("down", 30,10);
    // Portal arrival point
    des.terrain([63,6], ".");
    des.levregion({ region: [63,6,63,6], type: "branch" });
    // Doors
    des.door("closed",31,9);
    des.door("closed",16,8);
    des.door("closed",28,7);
    des.door("locked",34,10);
    des.door("locked",35,10);
    des.door("closed",15,10);
    des.door("locked",19,10);
    des.door("locked",20,10);
    // Neferet the Green, the quest leader
    await des.monster({ id: "Neferet the Green", coord: [23, 5], inventory: async function() {
       await des.object({ id: "elven cloak", spe: 5 });
       await des.object({ id: "quarterstaff", spe: 5 });
    } })
    // The treasure of the quest leader
    await des.object("chest", 24, 5);
    // apprentice guards for the audience chamber
    await des.monster("apprentice", 30, 7);
    await des.monster("apprentice", 24, 6);
    await des.monster("apprentice", 15, 6);
    await des.monster("apprentice", 15, 12);
    await des.monster("apprentice", 26, 11);
    await des.monster("apprentice", 27, 11);
    await des.monster("apprentice", 19, 9);
    await des.monster("apprentice", 20, 9);
    // Eels in the pond
    await des.monster("giant eel", 62, 14);
    await des.monster("giant eel", 69, 15);
    await des.monster("giant eel", 67, 17);
    // Non diggable walls
    des.non_diggable(selection.area(0,0,75,19));
    // Random traps
    await des.trap();
    await des.trap();
    await des.trap();
    await des.trap();
    await des.trap();
    await des.trap();
    // Monsters on siege duty.
    await des.monster({ class: "B", x: 60, y: 9, peaceful: 0 });
    await des.monster({ class: "W", x: 60, y: 10, peaceful: 0 });
    await des.monster({ class: "B", x: 60, y: 11, peaceful: 0 });
    await des.monster({ class: "B", x: 60, y: 12, peaceful: 0 });
    await des.monster({ class: "i", x: 60, y: 13, peaceful: 0 });
    await des.monster({ class: "B", x: 61, y: 10, peaceful: 0 });
    await des.monster({ class: "B", x: 61, y: 11, peaceful: 0 });
    await des.monster({ class: "B", x: 61, y: 12, peaceful: 0 });
    await des.monster({ class: "B", x: 35, y: 3, peaceful: 0 });
    await des.monster({ class: "i", x: 35, y: 17, peaceful: 0 });
    await des.monster({ class: "B", x: 36, y: 17, peaceful: 0 });
    await des.monster({ class: "B", x: 34, y: 16, peaceful: 0 });
    await des.monster({ class: "i", x: 34, y: 17, peaceful: 0 });
    await des.monster({ class: "W", x: 67, y: 2, peaceful: 0 });
    await des.monster({ class: "B", x: 10, y: 19, peaceful: 0 });
 
 
    return des.finalize_level();
}