1: /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
   2: /* hack.mkmaze.c - version 1.0.2 */
   3: 
   4: #include "hack.h"
   5: #include "def.mkroom.h"     /* not really used */
   6: extern struct monst *makemon();
   7: extern struct permonst pm_wizard;
   8: extern struct obj *mkobj_at();
   9: extern coord mazexy();
  10: struct permonst hell_hound =
  11:     { "hell hound", 'd', 12, 14, 2, 3, 6, 0 };
  12: 
  13: makemaz()
  14: {
  15:     int x,y;
  16:     register zx,zy;
  17:     coord mm;
  18:     boolean al = (dlevel >= 30 && !flags.made_amulet);
  19: 
  20:     for(x = 2; x < COLNO-1; x++)
  21:         for(y = 2; y < ROWNO-1; y++)
  22:             levl[x][y].typ = (x%2 && y%2) ? 0 : HWALL;
  23:     if(al) {
  24:         register struct monst *mtmp;
  25: 
  26:         zx = 2*(COLNO/4) - 1;
  27:         zy = 2*(ROWNO/4) - 1;
  28:         for(x = zx-2; x < zx+4; x++) for(y = zy-2; y <= zy+2; y++) {
  29:         levl[x][y].typ =
  30:             (y == zy-2 || y == zy+2 || x == zx-2 || x == zx+3) ? POOL :
  31:             (y == zy-1 || y == zy+1 || x == zx-1 || x == zx+2) ? HWALL:
  32:             ROOM;
  33:         }
  34:         (void) mkobj_at(AMULET_SYM, zx, zy);
  35:         flags.made_amulet = 1;
  36:         walkfrom(zx+4, zy);
  37:         if(mtmp = makemon(&hell_hound, zx, zy))
  38:         mtmp->msleep = 1;
  39:         if(mtmp = makemon(PM_WIZARD, zx+1, zy)) {
  40:         mtmp->msleep = 1;
  41:         flags.no_of_wizards = 1;
  42:         }
  43:     } else {
  44:         mm = mazexy();
  45:         zx = mm.x;
  46:         zy = mm.y;
  47:         walkfrom(zx,zy);
  48:         (void) mksobj_at(WAN_WISHING, zx, zy);
  49:         (void) mkobj_at(ROCK_SYM, zx, zy);  /* put a rock on top of it */
  50:     }
  51: 
  52:     for(x = 2; x < COLNO-1; x++)
  53:         for(y = 2; y < ROWNO-1; y++) {
  54:             switch(levl[x][y].typ) {
  55:             case HWALL:
  56:                 levl[x][y].scrsym = '-';
  57:                 break;
  58:             case ROOM:
  59:                 levl[x][y].scrsym = '.';
  60:                 break;
  61:             }
  62:         }
  63:     for(x = rn1(8,11); x; x--) {
  64:         mm = mazexy();
  65:         (void) mkobj_at(rn2(2) ? GEM_SYM : 0, mm.x, mm.y);
  66:     }
  67:     for(x = rn1(10,2); x; x--) {
  68:         mm = mazexy();
  69:         (void) mkobj_at(ROCK_SYM, mm.x, mm.y);
  70:     }
  71:     mm = mazexy();
  72:     (void) makemon(PM_MINOTAUR, mm.x, mm.y);
  73:     for(x = rn1(5,7); x; x--) {
  74:         mm = mazexy();
  75:         (void) makemon((struct permonst *) 0, mm.x, mm.y);
  76:     }
  77:     for(x = rn1(6,7); x; x--) {
  78:         mm = mazexy();
  79:         mkgold(0L,mm.x,mm.y);
  80:     }
  81:     for(x = rn1(6,7); x; x--)
  82:         mktrap(0,1,(struct mkroom *) 0);
  83:     mm = mazexy();
  84:     levl[(xupstair = mm.x)][(yupstair = mm.y)].scrsym = '<';
  85:     levl[xupstair][yupstair].typ = STAIRS;
  86:     xdnstair = ydnstair = 0;
  87: }
  88: 
  89: walkfrom(x,y) int x,y; {
  90: register int q,a,dir;
  91: int dirs[4];
  92:     levl[x][y].typ = ROOM;
  93:     while(1) {
  94:         q = 0;
  95:         for(a = 0; a < 4; a++)
  96:             if(okay(x,y,a)) dirs[q++]= a;
  97:         if(!q) return;
  98:         dir = dirs[rn2(q)];
  99:         move(&x,&y,dir);
 100:         levl[x][y].typ = ROOM;
 101:         move(&x,&y,dir);
 102:         walkfrom(x,y);
 103:     }
 104: }
 105: 
 106: move(x,y,dir)
 107: register int *x, *y;
 108: register int dir;
 109: {
 110:     switch(dir){
 111:         case 0: --(*y); break;
 112:         case 1: (*x)++; break;
 113:         case 2: (*y)++; break;
 114:         case 3: --(*x); break;
 115:     }
 116: }
 117: 
 118: okay(x,y,dir)
 119: int x,y;
 120: register int dir;
 121: {
 122:     move(&x,&y,dir);
 123:     move(&x,&y,dir);
 124:     if(x<3 || y<3 || x>COLNO-3 || y>ROWNO-3 || levl[x][y].typ != 0)
 125:         return(0);
 126:     else
 127:         return(1);
 128: }
 129: 
 130: coord
 131: mazexy(){
 132:     coord mm;
 133:     mm.x = 3 + 2*rn2(COLNO/2 - 2);
 134:     mm.y = 3 + 2*rn2(ROWNO/2 - 2);
 135:     return mm;
 136: }

Defined functions

makemaz defined in line 13; used 1 times
mazexy defined in line 130; used 12 times
move defined in line 106; used 4 times
okay defined in line 118; used 1 times
  • in line 96
walkfrom defined in line 89; used 3 times

Defined variables

hell_hound defined in line 10; used 1 times
  • in line 37
Last modified: 1985-10-01
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 2146
Valid CSS Valid XHTML 1.0 Strict