#include "vars.h" #include "dice.h" #include "structs.h" #include "digdoors.h" #include "digdungeon.h" #include "digvaults.h" static void digavault(void) { static int d[4][2] = { { -1, 0 }, { 0, -1 }, { 1, 0 }, { 0, 1 } }; int nt; int x; int y; LEVEL *lv; for (nt=30;nt>0;nt--) { int o[4]; int i; lv = &levels[4+rnd(DUNGEON_LEVELS-4)]; x = 1 + rnd(LEV_X-2-3); y = 1 + rnd(LEV_Y-2-3); if (solidrock(lv,3,3,x,y)) { for (i=0;i<4;i++) o[i] = i; for (i=4;i>0;i--) { int j; int dx; int dy; int xx; int yy; j = rnd(i); dx = d[o[j]][0]; dy = d[o[j]][1]; xx = x + 1 + (4 * dx); yy = y + 1 + (4 * dy); if ( (xx >= 0) && (yy >= 0) && (xx < LEV_X) && (yy < LEV_Y) && solidrock(lv,1,1,x+1+(2*dx),y+1+(2*dy)) && solidrock(lv,1,1,x+1+(3*dx),y+1+(3*dy)) ) { for (xx=0;xx<3;xx++) for (yy=0;yy<3;yy++) digcell(lv,x+xx,y+yy); for (xx=-1;xx<4;xx++) for (yy=-1;yy<4;yy++) lv->cells[x+xx][y+yy].flags |= LF_VAULT; digcell(lv,x+1+(2*dx),y+1+(2*dy)); digcell(lv,x+1+(3*dx),y+1+(3*dy)); lv->cells[x+1+(3*dx) ][y+1+(3*dy) ].flags |= LF_VAULT; lv->cells[x+1+(3*dx)+dy][y+1+(3*dy)+dx].flags |= LF_VAULT; lv->cells[x+1+(3*dx)-dy][y+1+(3*dy)-dx].flags |= LF_VAULT; lv->cells[x+1+(4*dx) ][y+1+(4*dy) ].flags |= LF_VAULT; lv->cells[x+1+(4*dx)+dy][y+1+(4*dy)+dx].flags |= LF_VAULT; lv->cells[x+1+(4*dx)-dy][y+1+(4*dy)-dx].flags |= LF_VAULT; digdoor(lv,x+1+(2*dx),y+1+(2*dy),0,0); return; } else { if (j < i-1) o[j] = o[i-1]; } } } } } void makevaults(void) { int l; for (l=0;l<2;l++) digavault(); }