30 const BYTE
L4ConvTbl[16] = { 30, 6, 1, 6, 2, 6, 6, 6, 9, 6, 1, 6, 2, 6, 3, 6 };
282 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
283 10, 11, 12, 13, 14, 15, 16, 17, 0, 0,
284 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
285 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
286 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,
287 6, 6, 0, 0, 0, 0, 0, 0, 0, 0,
288 0, 1, 2, 1, 2, 1, 2, 1, 1, 2,
289 2, 0, 0, 0, 0, 0, 0, 15, 16, 9,
290 12, 4, 5, 7, 0, 0, 0, 0, 0, 0,
291 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
292 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
293 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
294 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
295 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
303 for (y = 1; y <
DMAXY; y++) {
304 for (x = 1; x <
DMAXY; x++) {
324 if (
dungeon[x - 1][y - 1] == 6) {
338 for (j = 0; j <
DMAXY; j++) {
339 for (i = 0; i <
DMAXX; i++) {
379 for (j = 0; j < rh; j++) {
380 for (i = 0; i < rw; i++) {
382 dungeon[i + rx1][j + ry1] = *sp;
394 int i, j, idx, val, dmtx, dmty;
396 for (j = 0, dmty = 1; dmty <= 77; j++, dmty += 2) {
397 for (i = 0, dmtx = 1; dmtx <= 77; i++, dmtx += 2) {
413 for (x = 1;
dungeon[i + x][j] == 6; x++) {
414 if (
dflags[i + x][j] != 0) {
417 if (
dungeon[i + x][j - 1] != 6) {
420 if (
dungeon[i + x][j + 1] != 6) {
464 for (y = 1;
dungeon[i][j + y] == 6; y++) {
465 if (
dflags[i][j + y] != 0) {
468 if (
dungeon[i - 1][j + y] != 6) {
471 if (
dungeon[i + 1][j + y] != 6) {
527 for (xx = 1; xx < dx; xx++) {
531 if (
dungeon[i + dx][j] == 15) {
534 if (
dungeon[i + dx][j] == 10) {
537 if (
dungeon[i + dx][j] == 21) {
540 if (
dungeon[i + dx][j] == 22) {
549 if (
dungeon[i + xx][j - 1] == 6) {
552 if (
dungeon[i + xx + 1][j - 1] == 6) {
553 dungeon[i + xx + 1][j - 1] = 59;
571 for (yy = 1; yy < dy; yy++) {
575 if (
dungeon[i][j + dy] == 11) {
581 if (
dungeon[i][j + dy] == 16) {
584 if (
dungeon[i][j + dy] == 21) {
587 if (
dungeon[i][j + dy] == 23) {
596 if (
dungeon[i - 1][j + yy] == 6) {
599 if (
dungeon[i - 1][j + yy - 1] == 6) {
600 dungeon[i - 1][j + yy - 1] = 55;
608 for (j = 0; j <
DMAXY; j++) {
609 for (i = 0; i <
DMAXX; i++) {
711 for (j = 0; j <
DMAXY; j++) {
712 for (i = 0; i <
DMAXX; i++) {
721 for (j = 0; j <
DMAXY; j++) {
722 for (i = 0; i <
DMAXX; i++) {
741 for (j = 0; j <
DMAXY; j++) {
742 for (i = 0; i <
DMAXX; i++) {
929 for (j = 0; j <
DMAXY; j++) {
930 for (i = 0; i <
DMAXX; i++) {
1001 for (j = 0; j <
DMAXY; j++) {
1002 for (i = 0; i <
DMAXX; i++) {
1041 for (j = 0; j <
DMAXY; j++) {
1042 for (i = 0; i <
DMAXX; i++) {
1058 for (y = 0; y <
DMAXY; y++) {
1059 for (x = 0; x <
DMAXX; x++) {
1062 if (c != 0 &&
dflags[x][y] == 0) {
1079 for (y = 0; y <
DMAXY; y++) {
1080 for (x = 0; x <
DMAXX; x++) {
1094 for (j = 0; j < 20; j++) {
1095 for (i = 0; i < 20; i++) {
1104 for (j = 0; j < 20; j++) {
1105 for (i = 0; i < 20; i++) {
1114 for (j = 0; j < 20; j++) {
1115 for (i = 0; i < 20; i++) {
1124 for (j = 0; j < 20; j++) {
1125 for (i = 0; i < 20; i++) {
1140 for (j = 19; j >= 0; j--) {
1141 for (i = 19; i >= 0; i--) {
1142 if (
dung[i][j] != 1) {
1145 if (
dung[i][j] == 1) {
1147 if (i + 1 < 20 && j + 1 < 20 &&
1148 dung[i][j + 1] == 1 &&
dung[i + 1][j + 1] == 0) {
1161 for (i = 19; i >= 0; i--) {
1162 if (
dung[i][rv] == 1) {
1167 dung[i][rv + 1] = 1;
1178 for (i = 19; i >= 0; i--) {
1179 for (j = 19; j >= 0; j--) {
1180 if (
dung[i][j] != 1) {
1183 if (
dung[i][j] == 1) {
1185 if (i + 1 < 20 && j + 1 < 20 &&
1186 dung[i + 1][j] == 1 &&
dung[i + 1][j + 1] == 0) {
1199 for (j = 19; j >= 0; j--) {
1200 if (
dung[rv][j] == 1) {
1205 dung[rv + 1][j] = 1;
1224 for (j = 0; j < 20; j++) {
1225 for (i = 0; i < 20; i++) {
1226 if (
dung[i][j] == 1) {
1239 for (j = 0; j < height; j++) {
1240 for (i = 0; i < width; i++) {
1241 dung[i + x][j + y] = 1;
1250 if (x <= 0 || y <= 0) {
1254 for (j = 0; j < height; j++) {
1255 for (i = 0; i < width; i++) {
1256 if (i + x < 0 || i + x >= 20 || j + y < 0 || j + y >= 20) {
1259 if (
dung[i + x][j + y] != 0) {
1272 int width, height, rx, ry, ry2;
1273 int cw, ch, cx1, cy1, cx2;
1277 switch (dir == 1 ? dirProb != 0 : dirProb == 0) {
1281 cw = (
random_(0, 5) + 2) & ~1;
1282 ch = (
random_(0, 5) + 2) & ~1;
1283 cy1 = h / 2 + y - ch / 2;
1285 ran =
L4checkRoom(cx1 - 1, cy1 - 1, ch + 2, cw + 1);
1287 }
while (ran == FALSE && num < 20);
1303 width = (
random_(0, 5) + 2) & ~1;
1304 height = (
random_(0, 5) + 2) & ~1;
1305 rx = w / 2 + x - width / 2;
1307 ran =
L4checkRoom(rx - 1, ry - 1, width + 2, height + 1);
1309 }
while (ran == FALSE && num < 20);
1314 ran2 =
L4checkRoom(rx - 1, ry2, width + 2, height + 1);
1327 int x, y, w, h, rndx, rndy, xmin, xmax, ymin, ymax, tx, ty;
1346 xmin = (20 - w) >> 1;
1348 rndx =
random_(0, xmax - xmin + 1) + xmin;
1349 if (rndx + w > 19) {
1355 ymin = (20 - h) >> 1;
1357 rndy =
random_(0, ymax - ymin + 1) + ymin;
1358 if (rndy + h > 19) {
1392 for (j = 0; j < 14; j++) {
1393 for (i = 0; i < 14; i++) {
1394 dflags[i + x][j + y] = 1;
1411 for (j = 0; j < rh; j++) {
1412 for (i = 0; i < rw; i++) {
1414 dungeon[i + rx1][j + ry1] = *sp;
1417 dungeon[i + rx1][j + ry1] = 6;
1428 lpSetPiece =
LoadFileInMem(
"Levels\\L4Data\\diab1.DUN", NULL);
1435 lpSetPiece =
LoadFileInMem(
"Levels\\L4Data\\diab2b.DUN", NULL);
1437 lpSetPiece =
LoadFileInMem(
"Levels\\L4Data\\diab2a.DUN", NULL);
1445 lpSetPiece =
LoadFileInMem(
"Levels\\L4Data\\diab3b.DUN", NULL);
1447 lpSetPiece =
LoadFileInMem(
"Levels\\L4Data\\diab3a.DUN", NULL);
1455 lpSetPiece =
LoadFileInMem(
"Levels\\L4Data\\diab4b.DUN", NULL);
1457 lpSetPiece =
LoadFileInMem(
"Levels\\L4Data\\diab4a.DUN", NULL);
1465 static BOOL
DRLG_L4PlaceMiniSet(
const BYTE *miniset,
int tmin,
int tmax,
int cx,
int cy, BOOL setview,
int ldir)
1467 int sx, sy, sw, sh, xx, yy, i, ii, numt, bailcnt;
1473 if (tmax - tmin == 0) {
1476 numt =
random_(0, tmax - tmin) + tmin;
1479 for (i = 0; i < numt; i++) {
1483 for (bailcnt = 0; !found && bailcnt < 200; bailcnt++) {
1488 if (cx != -1 && sx >= cx - sw && sx <= cx + 12) {
1493 if (cy != -1 && sy >= cy - sh && sy <= cy + 12) {
1499 for (yy = 0; yy < sh && found == TRUE; yy++) {
1500 for (xx = 0; xx < sw && found == TRUE; xx++) {
1501 if (miniset[ii] != 0 &&
dungeon[xx + sx][yy + sy] != miniset[ii]) {
1504 if (
dflags[xx + sx][yy + sy] != 0) {
1512 if (sx ==
DMAXX - sw) {
1515 if (sy ==
DMAXY - sh) {
1521 if (bailcnt >= 200) {
1525 for (yy = 0; yy < sh; yy++) {
1526 for (xx = 0; xx < sw; xx++) {
1527 if (miniset[ii] != 0) {
1528 dungeon[xx + sx][yy + sy] = miniset[ii];
1529 dflags[xx + sx][yy + sy] |= 8;
1540 if (setview == TRUE) {
1541 ViewX = 2 * sx + 21;
1542 ViewY = 2 * sy + 22;
1604 for (j = 0; j <
DMAXY; j++) {
1606 for (i = 0; i <
DMAXX; i++) {
1652 for (j = 0; j <
DMAXY; j++) {
1654 for (i = 0; i <
DMAXX; i++) {
1694 for (j = 1; j <
DMAXY - 1; j++) {
1695 for (i = 1; i <
DMAXX - 1; i++) {
1699 }
else if (
dungeon[i][j + 1] < 18) {
1711 for (i = 0; i < 20; i++) {
1714 for (j = 0; j < 20; j++) {
1723 for (j = 0; j <
DMAXY - 1; j++) {
1724 for (i = 0; i <
DMAXX - 1; i++) {
1734 int i, j, spi, spj, ar;
1777 }
else if (entry == 1) {
1801 }
else if (entry == 1) {
1843 }
while (!doneflag);
1857 for (j = 0; j <
DMAXY; j++) {
1858 for (i = 0; i <
DMAXX; i++) {
1867 for (j = 0; j <
DMAXY; j++) {
1868 for (i = 0; i <
DMAXX; i++) {
1879 for (j = 0; j <
DMAXY; j++) {
1880 for (i = 0; i <
DMAXX; i++) {
1891 long v1, v2, v3, v4, lv;
1897 v1 = SDL_SwapLE16(*(MegaTiles + 0)) + 1;
1898 v2 = SDL_SwapLE16(*(MegaTiles + 1)) + 1;
1899 v3 = SDL_SwapLE16(*(MegaTiles + 2)) + 1;
1900 v4 = SDL_SwapLE16(*(MegaTiles + 3)) + 1;
1902 for (j = 0; j <
MAXDUNY; j += 2)
1904 for (i = 0; i <
MAXDUNX; i += 2) {
1908 dPiece[i + 1][j + 1] = v4;
1913 for (j = 0; j <
DMAXY; j++) {
1915 for (i = 0; i <
DMAXX; i++) {
1919 v1 = SDL_SwapLE16(*(MegaTiles + 0)) + 1;
1920 v2 = SDL_SwapLE16(*(MegaTiles + 1)) + 1;
1921 v3 = SDL_SwapLE16(*(MegaTiles + 2)) + 1;
1922 v4 = SDL_SwapLE16(*(MegaTiles + 3)) + 1;
1932 dPiece[xx + 1][yy + 1] = v4;