Devilution
Diablo devolved - magic behind the 1996 computer game
|
Go to the documentation of this file.
17 int bxadd[8] = { -1, 0, 1, -1, 1, -1, 0, 1 };
18 int byadd[8] = { -1, -1, -1, 0, 0, 1, 1, 1 };
48 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
49 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
53 16, 16, 16, 16, 16, 16, 16, 8, 16, 16,
54 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
55 16, 16, 16, 16, 16, 16
59 0, 0, 1, 1, 0, 0, 0, 0, 1, 0,
60 0, 0, 0, 0, 0, 0, 0, 0, 2, 0,
65 "The Wages of Sin are War",
66 "The Tale of the Horadrim",
69 "The Binding of the Three",
86 memset(fileload, FALSE,
sizeof(fileload));
107 for (i = 0; i < 56; i++) {
146 int i, xp, yp, numobjs;
148 numobjs =
random_(139, max - min) + min;
150 for (i = 0; i < numobjs; i++) {
172 int i, xp, yp, numobjs;
174 numobjs =
random_(140, max - min) + min;
175 for (i = 0; i < numobjs; i++) {
201 int xp, yp, numobjs, i, k, m, n;
203 numobjs = min +
random_(139, max - min);
204 for (i = 0; i < numobjs; i++) {
210 for (n = -2; n <= 2; n++) {
211 for (m = -2; m <= 2; m++) {
233 object[i]._oAnimData = 0;
234 object[i]._oAnimDelay = 0;
235 object[i]._oAnimCnt = 0;
236 object[i]._oAnimLen = 0;
237 object[i]._oAnimFrame = 0;
238 object[i]._oDelFlag = FALSE;
239 object[i]._oVar1 = 0;
240 object[i]._oVar2 = 0;
241 object[i]._oVar3 = 0;
242 object[i]._oVar4 = 0;
258 for (oy = 0; oy <
MAXDUNY; oy++) {
259 for (ox = 0; ox <
MAXDUNX; ox++) {
260 if (
dPiece[ox][oy] == 367) {
289 void AddBookLever(
int lx1,
int ly1,
int lx2,
int ly2,
int x1,
int y1,
int x2,
int y2,
int msg)
292 int xp, yp, ob, k, m, n;
299 for (n = -2; n <= 2; n++) {
300 for (m = -2; m <= 2; m++) {
325 object[ob]._oVar6 =
object[ob]._oAnimFrame + 1;
341 for (i = 0; i < numobjs; i++) {
351 while (
random_(143, p) == 0 && found) {
379 for (j = y1; j < y2; j++) {
380 for (i = x1; i < x2; i++) {
384 if (pn == 44 || pn == 51 || pn == 214)
386 if (pn == 46 || pn == 56)
396 for (j = y1; j < y2; j++) {
397 for (i = x1; i < x2; i++) {
399 if (pn == 13 || pn == 541)
401 if (pn == 17 || pn == 542)
411 for (j = y1; j < y2; j++) {
412 for (i = x1; i < x2; i++) {
433 for (j = 0; j <
MAXDUNY; j++) {
434 for (i = 0; i <
MAXDUNX; i++) {
439 if (pn == 1 &&
random_(145, 3) == 0)
442 if (pn == 5 &&
random_(145, 3) == 0)
480 for (j = 0; j <
MAXDUNY; j++) {
481 for (i = 0; i <
MAXDUNX; i++) {
499 object[oi_trap]._oVar1 = i;
500 object[oi_trap]._oVar2 = j;
501 object[oi]._oTrapFlag = TRUE;
512 object[oi_trap]._oVar1 = i;
513 object[oi_trap]._oVar2 = j;
514 object[oi]._oTrapFlag = TRUE;
525 for (j = 0; j <
MAXDUNY; j++) {
526 for (i = 0; i <
MAXDUNX; i++) {
531 object[oi]._oTrapFlag = TRUE;
533 object[oi]._oVar4 =
random_(0, 2);
535 object[oi]._oVar4 =
random_(0, 3);
543 void LoadMapObjects(BYTE *pMap,
int startx,
int starty,
int x1,
int y1,
int w,
int h,
int leveridx)
545 int rw, rh, i, j, oi;
554 mapoff = (rw * rh + 1) * 2;
557 mapoff += rw * 2 * rh * 2;
560 for (j = 0; j < rh; j++) {
561 for (i = 0; i < rw; i++) {
564 oi =
ObjIndex(startx + 16 + i, starty + 16 + j);
585 mapoff = (rw * rh + 1) * 2;
588 mapoff += 2 * rw * rh * 2;
591 for (j = 0; j < rh; j++) {
592 for (i = 0; i < rw; i++) {
606 lpSetPiece =
LoadFileInMem(
"Levels\\L4Data\\diab1.DUN", NULL);
609 lpSetPiece =
LoadFileInMem(
"Levels\\L4Data\\diab2a.DUN", NULL);
612 lpSetPiece =
LoadFileInMem(
"Levels\\L4Data\\diab3a.DUN", NULL);
628 for (yy = -2; yy <= 2; yy++) {
629 for (xx = -3; xx <= 3; xx++) {
653 for (j = 0; j < 40; j++) {
655 for (i = 0; i < 40; i++) {
716 for (yy = -3; yy <= 3; yy++) {
717 for (xx = -2; xx <= 3; xx++) {
856 for (i = 0; i < 56; i++)
869 mapoff = (rw * rh + 1) * 2;
872 mapoff += 2 * rw * rh * 2;
876 for (j = 0; j < rh; j++) {
877 for (i = 0; i < rw; i++) {
885 for (i = 0; i < 56; i++) {
896 for (j = 0; j < rh; j++) {
897 for (i = 0; i < rw; i++) {
925 object[i]._otype = ot;
941 object[i]._oAnimDelay = 1000;
942 object[i]._oAnimCnt = 0;
950 object[i]._oDelFlag = FALSE;
953 object[i]._oPreFlag = FALSE;
954 object[i]._oTrapFlag = FALSE;
955 object[i]._oDoorFlag = FALSE;
960 object[i]._oVar1 = x1;
961 object[i]._oVar2 = y1;
962 object[i]._oVar3 = x2;
963 object[i]._oVar4 = y2;
964 object[i]._oVar8 = v;
969 object[i]._oVar7 = msg;
974 object[i]._oDoorFlag = TRUE;
976 object[i]._oVar1 =
dPiece[x][y];
977 object[i]._oVar2 =
dPiece[x][y - 1];
979 object[i]._oVar1 =
dPiece[x][y];
980 object[i]._oVar2 =
dPiece[x - 1][y];
982 object[i]._oVar4 = 0;
991 object[i]._oVar6 =
object[i]._oAnimFrame + 1;
997 object[i]._oAnimFrame += 3;
1003 object[i]._oVar1 = 1;
1006 object[i]._oVar1 =
random_(147, 2);
1011 object[i]._oVar1 = 2;
1014 object[i]._oVar1 =
random_(147, 3);
1019 object[i]._oVar1 = 3;
1022 object[i]._oVar1 =
random_(147, 4);
1025 object[i]._oVar2 =
random_(147, 8);
1030 object[i]._oDoorFlag = TRUE;
1035 object[i]._oVar4 = 0;
1040 object[i]._oDoorFlag = TRUE;
1045 object[i]._oVar4 = 0;
1050 dObject[
object[i]._ox][
object[i]._oy - 1] = -(i + 1);
1051 object[i]._oVar1 =
random_(153, 10);
1053 if (
object[i]._oVar1 >= 8)
1059 object[i]._oVar1 =
trapid;
1060 object[i]._oVar2 = 0;
1062 object[i]._oVar4 = 0;
1067 object[i]._oVar1 =
trapid;
1083 object[i]._oVar4 = 0;
1089 DoLighting(
object[i]._ox,
object[i]._oy, r, -1);
1090 object[i]._oVar1 = -1;
1092 object[i]._oVar1 = 0;
1098 object[i]._oVar1 = 0;
1100 object[i]._oVar2 =
random_(149, 10);
1101 object[i]._oVar3 =
random_(149, 3);
1103 if (
object[i]._oVar2 >= 8)
1111 object[i]._oPreFlag = TRUE;
1135 object[i]._oVar1 = val;
1137 object[i]._oAnimFrame = 12;
1138 object[i]._oAnimLen = 22;
1145 object[i]._oPreFlag = TRUE;
1166 dObject[ox - 1][oy - 1] = -1 - i;
1173 object[i]._oAnimFlag = 2;
1174 object[i]._oSelFlag = 0;
1198 dObject[ox - 1][oy - 1] = -1 - i;
1210 object[i]._oAnimFrame =
random_(151, 8) + 1;
1211 object[i]._oPreFlag = TRUE;
1217 object[i]._oAnimFrame = 4;
1224 object[i]._oPreFlag = TRUE;
1225 object[i]._oVar6 = 0;
1226 object[i]._oVar5 = 1;
1249 object[i]._oVar1 = bookframe;
1251 object[i]._oVar2 =
StoryText[bookframe][0];
1253 object[i]._oVar2 =
StoryText[bookframe][1];
1255 object[i]._oVar2 =
StoryText[bookframe][2];
1256 object[i]._oVar3 = (
currlevel >> 2) + 3 * bookframe - 1;
1257 object[i]._oAnimFrame = 5 - 2 * bookframe;
1258 object[i]._oVar4 =
object[i]._oAnimFrame + 1;
1264 object[i]._oAnimFlag = 2;
1265 object[i]._oSelFlag = 0;
1273 object[i]._oAnimFrame =
random_(0, 4) + 1;
1274 object[i]._oPreFlag = TRUE;
1288 if (tries > 1000 && randarea > 1)
1293 for (i = 0; i < randarea && !failed; i++) {
1294 for (j = 0; j < randarea && !failed; j++) {
1295 failed = !
RndLocOk(i + *xx, j + *yy);
1311 dObject[x + 1][y + 1] = -1 - i;
1312 dObject[x + 2][y + 1] = -1 - i;
1313 dObject[x + 1][y + 2] = -1 - i;
1390 object[oi]._oAnimFrame = 1;
1463 object[oi]._oAnimWidth2 = (
object[oi]._oAnimWidth - 64) >> 1;
1469 int ox, oy, dx, dy, p, tr;
1472 if (
object[i]._oVar1 != -1) {
1478 for (p = 0; p <
MAX_PLRS && !turnon; p++) {
1479 if (
plr[p].plractive) {
1481 dx = abs(
plr[p].WorldX - ox);
1482 dy = abs(
plr[p].WorldY - oy);
1483 if (dx < tr && dy < tr)
1490 if (!
object[i]._oVar1)
1491 object[i]._olid =
AddLight(ox, oy, lr);
1492 object[i]._oVar1 = 1;
1494 if (
object[i]._oVar1 == 1)
1496 object[i]._oVar1 = 0;
1509 if (wx == ox && wy == oy) {
1511 object[i]._oAnimFrame = 2;
1513 object[i]._oAnimFrame = 4;
1514 if (ox == 45 && oy == 47) {
1515 object[i]._oVar6 = 2;
1516 }
else if (ox == 26 && oy == 46) {
1517 object[i]._oVar6 = 1;
1519 object[i]._oVar6 = 0;
1521 if (ox == 35 && oy == 36 &&
object[i]._oVar5 == 3) {
1522 object[i]._oVar6 = 4;
1523 ObjChangeMapResync(
object[i]._oVar1,
object[i]._oVar2,
object[i]._oVar3,
object[i]._oVar4);
1534 object[i]._oAnimFrame = 1;
1536 object[i]._oAnimFrame = 3;
1537 object[i]._oVar6 = 0;
1543 if (
object[i]._oAnimFrame ==
object[i]._oAnimLen) {
1544 object[i]._oAnimCnt = 0;
1545 object[i]._oAnimDelay = 1000;
1553 if (!
object[i]._oVar4) {
1554 object[i]._oMissFlag = FALSE;
1555 object[i]._oSelFlag = 3;
1559 object[i]._oSelFlag = 2;
1560 object[i]._oMissFlag = TRUE;
1561 object[i]._oVar4 = (((
dItem[dx][dy] == 0 ? 1 : 0)
1562 & (
dDead[dx][dy] == 0 ? 1 : 0)
1563 & (
dPlayer[dx][dy] == 0 ? 1 : 0)
1572 if (
object[i]._oAnimFrame ==
object[i]._oAnimLen)
1573 object[i]._oAnimFlag = 0;
1582 if (
object[oi]._otype == ttype &&
object[oi]._oVar1 == tid) {
1583 object[oi]._oVar4 = 1;
1584 object[oi]._oAnimFlag = 1;
1585 object[oi]._oAnimDelay = 1;
1586 object[oi]._olid =
AddLight(
object[oi]._ox,
object[oi]._oy, 1);
1596 if (
object[i]._oVar2) {
1597 if (
object[i]._oVar4) {
1598 object[i]._oAnimFrame--;
1599 if (
object[i]._oAnimFrame == 1) {
1600 object[i]._oVar4 = 0;
1602 }
else if (
object[i]._oAnimFrame <= 4) {
1606 }
else if (!
object[i]._oVar4) {
1607 if (
object[i]._oVar3 == 2) {
1608 x =
object[i]._ox - 2;
1610 for (j = 0; j < 5; j++) {
1612 object[i]._oVar4 = 1;
1617 y =
object[i]._oy - 2;
1618 for (k = 0; k < 5; k++) {
1620 object[i]._oVar4 = 1;
1624 if (
object[i]._oVar4)
1627 if (
object[i]._oAnimFrame ==
object[i]._oAnimLen)
1628 object[i]._oAnimFrame = 11;
1629 if (
object[i]._oAnimFrame <= 5)
1638 int sx, sy, dx, dy, x, y;
1641 if (!
object[i]._oVar4) {
1642 oti =
dObject[
object[i]._oVar1][
object[i]._oVar2] - 1;
1643 switch (
object[oti]._otype) {
1650 if (
object[oti]._oVar4)
1659 if (
object[oti]._oSelFlag == 0)
1664 object[i]._oVar4 = 1;
1667 dx =
object[oti]._ox;
1668 dy =
object[oti]._oy;
1669 for (y = dy - 1; y <=
object[oti]._oy + 1; y++) {
1670 for (x =
object[oti]._ox - 1; x <=
object[oti]._ox + 1; x++) {
1679 AddMissile(sx, sy, dx, dy, dir,
object[i]._oVar3, 1, -1, 0, 0);
1682 object[oti]._oTrapFlag = FALSE;
1690 int damage[4] = { 6, 8, 10, 12 };
1696 if (fire_resist > 0)
1699 if (
plr[
myplr].WorldX !=
object[i]._ox ||
plr[
myplr].WorldY !=
object[i]._oy - 1)
1704 if (
plr[
myplr]._pHitPoints >> 6 <= 0) {
1727 switch (
object[oi]._otype) {
1782 if (
object[oi]._oAnimFlag == 0)
1785 object[oi]._oAnimCnt++;
1787 if (
object[oi]._oAnimCnt <
object[oi]._oAnimDelay)
1790 object[oi]._oAnimCnt = 0;
1791 object[oi]._oAnimFrame++;
1792 if (
object[oi]._oAnimFrame >
object[oi]._oAnimLen)
1793 object[oi]._oAnimFrame = 1;
1798 if (
object[oi]._oDelFlag) {
1818 for (i = 0; i < 10; i++) {
1819 defs->
mt[i] = SDL_SwapLE16(v[(i & 1) - (i & 0xE) + 8]);
1823 for (i = 0; i < 16; i++) {
1824 defs->
mt[i] = SDL_SwapLE16(v[(i & 1) - (i & 0xE) + 14]);
1845 long v1, v2, v3, v4;
1848 MegaTiles = (WORD *)&
pMegaTiles[((WORD)v - 1) * 8];
1849 v1 = SDL_SwapLE16(*(MegaTiles + 0)) + 1;
1850 v2 = SDL_SwapLE16(*(MegaTiles + 1)) + 1;
1851 v3 = SDL_SwapLE16(*(MegaTiles + 2)) + 1;
1852 v4 = SDL_SwapLE16(*(MegaTiles + 3)) + 1;
1866 for (i = y1; i <= y2; ++i) {
1867 for (j = x1; j <= x2; ++j) {
1905 for (j = y1; j <= y2; j++) {
1906 for (i = x1; i <= x2; i++) {
1924 for (j = y1; j <= y2; j++) {
1925 for (i = x1; i <= x2; i++) {
1926 if (
dPiece[i][j] == 132) {
1994 if (
object[oi]._oVar4 == 2) {
2000 xp =
object[oi]._ox;
2001 yp =
object[oi]._oy;
2002 if (
object[oi]._oVar4 == 0) {
2003 if (pnum ==
myplr && sendflag)
2010 object[oi]._oAnimFrame += 2;
2011 object[oi]._oPreFlag = TRUE;
2013 object[oi]._oVar4 = 1;
2014 object[oi]._oSelFlag = 2;
2021 if (((
dDead[xp][yp] != 0 ? 0 : 1) & (
dMonster[xp][yp] != 0 ? 0 : 1) & (
dItem[xp][yp] != 0 ? 0 : 1)) != 0) {
2022 if (pnum ==
myplr && sendflag)
2024 object[oi]._oVar4 = 0;
2025 object[oi]._oSelFlag = 3;
2027 if (
object[oi]._oVar2 != 50) {
2030 if (
dPiece[xp - 1][yp] == 396)
2035 object[oi]._oAnimFrame -= 2;
2036 object[oi]._oPreFlag = FALSE;
2039 object[oi]._oVar4 = 2;
2047 if (
object[oi]._oVar4 == 2) {
2053 xp =
object[oi]._ox;
2054 yp =
object[oi]._oy;
2055 if (
object[oi]._oVar4 == 0) {
2056 if (pnum ==
myplr && sendflag)
2060 if (
object[oi]._oVar1 == 214)
2066 object[oi]._oAnimFrame += 2;
2067 object[oi]._oPreFlag = TRUE;
2069 object[oi]._oVar4 = 1;
2070 object[oi]._oSelFlag = 2;
2077 if (((
dDead[xp][yp] != 0 ? 0 : 1) & (
dMonster[xp][yp] != 0 ? 0 : 1) & (
dItem[xp][yp] != 0 ? 0 : 1)) != 0) {
2078 if (pnum ==
myplr && sendflag)
2080 object[oi]._oVar4 = 0;
2081 object[oi]._oSelFlag = 3;
2083 if (
object[oi]._oVar2 != 50) {
2086 if (
dPiece[xp][yp - 1] == 396)
2091 object[oi]._oAnimFrame -= 2;
2092 object[oi]._oPreFlag = FALSE;
2095 object[oi]._oVar4 = 2;
2103 if (
object[oi]._oVar4 == 2) {
2108 xp =
object[oi]._ox;
2109 yp =
object[oi]._oy;
2110 if (
object[oi]._oVar4 == 0) {
2111 if (pnum ==
myplr && sendflag)
2116 object[oi]._oAnimFrame += 2;
2117 object[oi]._oPreFlag = TRUE;
2118 object[oi]._oVar4 = 1;
2119 object[oi]._oSelFlag = 2;
2126 if (((
dDead[xp][yp] != 0 ? 0 : 1) & (
dMonster[xp][yp] != 0 ? 0 : 1) & (
dItem[xp][yp] != 0 ? 0 : 1)) != 0) {
2127 if (pnum ==
myplr && sendflag)
2129 object[oi]._oVar4 = 0;
2130 object[oi]._oSelFlag = 3;
2132 object[oi]._oAnimFrame -= 2;
2133 object[oi]._oPreFlag = FALSE;
2136 object[oi]._oVar4 = 2;
2144 if (
object[oi]._oVar4 == 2) {
2149 xp =
object[oi]._ox;
2150 yp =
object[oi]._oy;
2151 if (
object[oi]._oVar4 == 0) {
2152 if (pnum ==
myplr && sendflag)
2157 object[oi]._oAnimFrame += 2;
2158 object[oi]._oPreFlag = TRUE;
2159 object[oi]._oVar4 = 1;
2160 object[oi]._oSelFlag = 2;
2167 if (((
dDead[xp][yp] != 0 ? 0 : 1) & (
dMonster[xp][yp] != 0 ? 0 : 1) & (
dItem[xp][yp] != 0 ? 0 : 1)) != 0) {
2168 if (pnum ==
myplr && sendflag)
2170 object[oi]._oVar4 = 0;
2171 object[oi]._oSelFlag = 3;
2173 object[oi]._oAnimFrame -= 2;
2174 object[oi]._oPreFlag = FALSE;
2177 object[oi]._oVar4 = 2;
2185 if (
object[oi]._oVar4 == 2) {
2191 xp =
object[oi]._ox;
2192 yp =
object[oi]._oy;
2193 if (
object[oi]._oVar4 == 0) {
2194 if (pnum ==
myplr && sendflag)
2199 object[oi]._oAnimFrame += 2;
2200 object[oi]._oPreFlag = TRUE;
2201 object[oi]._oVar4 = 1;
2202 object[oi]._oSelFlag = 2;
2209 if (((
dDead[xp][yp] != 0 ? 0 : 1) & (
dMonster[xp][yp] != 0 ? 0 : 1) & (
dItem[xp][yp] != 0 ? 0 : 1)) != 0) {
2210 if (pnum ==
myplr && sendflag)
2212 object[oi]._oVar4 = 0;
2213 object[oi]._oSelFlag = 3;
2215 object[oi]._oAnimFrame -= 2;
2216 object[oi]._oPreFlag = FALSE;
2219 object[oi]._oVar4 = 2;
2227 if (
object[oi]._oVar4 == 2) {
2233 xp =
object[oi]._ox;
2234 yp =
object[oi]._oy;
2235 if (
object[oi]._oVar4 == 0) {
2236 if (pnum ==
myplr && sendflag)
2241 object[oi]._oAnimFrame += 2;
2242 object[oi]._oPreFlag = TRUE;
2243 object[oi]._oVar4 = 1;
2244 object[oi]._oSelFlag = 2;
2251 if (((
dDead[xp][yp] != 0 ? 0 : 1) & (
dMonster[xp][yp] != 0 ? 0 : 1) & (
dItem[xp][yp] != 0 ? 0 : 1)) != 0) {
2252 if (pnum ==
myplr && sendflag)
2254 object[oi]._oVar4 = 0;
2255 object[oi]._oSelFlag = 3;
2257 object[oi]._oAnimFrame -= 2;
2258 object[oi]._oPreFlag = FALSE;
2261 object[oi]._oVar4 = 2;
2268 int dpx, dpy, mx, my;
2283 dpx = abs(
object[oi]._ox - mx);
2284 dpy = abs(
object[oi]._oy - my);
2285 if (dpx == 1 && dpy <= 1 &&
object[oi]._otype ==
OBJ_L1LDOOR)
2287 if (dpx <= 1 && dpy == 1 &&
object[oi]._otype ==
OBJ_L1RDOOR)
2291 dpx = abs(
object[oi]._ox - mx);
2292 dpy = abs(
object[oi]._oy - my);
2293 if (dpx == 1 && dpy <= 1 &&
object[oi]._otype ==
OBJ_L2LDOOR)
2295 if (dpx <= 1 && dpy == 1 &&
object[oi]._otype ==
OBJ_L2RDOOR)
2299 dpx = abs(
object[oi]._ox - mx);
2300 dpy = abs(
object[oi]._oy - my);
2301 if (dpx == 1 && dpy <= 1 &&
object[oi]._otype ==
OBJ_L3RDOOR)
2303 if (dpx <= 1 && dpy == 1 &&
object[oi]._otype ==
OBJ_L3LDOOR)
2314 for (j = y1; j <= y2; j++) {
2315 for (i = x1; i <= x2; i++) {
2321 ObjL1Special(2 * x1 + 16, 2 * y1 + 16, 2 * x2 + 17, 2 * y2 + 17);
2322 AddL1Objs(2 * x1 + 16, 2 * y1 + 16, 2 * x2 + 17, 2 * y2 + 17);
2325 ObjL2Special(2 * x1 + 16, 2 * y1 + 16, 2 * x2 + 17, 2 * y2 + 17);
2326 AddL2Objs(2 * x1 + 16, 2 * y1 + 16, 2 * x2 + 17, 2 * y2 + 17);
2334 for (j = y1; j <= y2; j++) {
2335 for (i = x1; i <= x2; i++) {
2341 ObjL1Special(2 * x1 + 16, 2 * y1 + 16, 2 * x2 + 17, 2 * y2 + 17);
2344 ObjL2Special(2 * x1 + 16, 2 * y1 + 16, 2 * x2 + 17, 2 * y2 + 17);
2352 dpx = abs(
object[i]._ox -
plr[pnum].WorldX);
2353 dpy = abs(
object[i]._oy -
plr[pnum].WorldY);
2354 if (dpx == 1 && dpy <= 1 &&
object[i]._otype ==
OBJ_L1LDOOR)
2356 if (dpx <= 1 && dpy == 1 &&
object[i]._otype ==
OBJ_L1RDOOR)
2365 if (
object[i]._oSelFlag != 0) {
2368 object[i]._oSelFlag = 0;
2369 object[i]._oAnimFrame++;
2375 &&
object[i]._oVar8 ==
object[oi]._oVar8
2376 &&
object[oi]._oSelFlag != 0) {
2382 ObjChangeMap(
object[i]._oVar1,
object[i]._oVar2,
object[i]._oVar3,
object[i]._oVar4);
2392 BOOL do_add_missile, missile_added;
2394 if (
object[i]._oSelFlag == 0)
2397 do_add_missile = FALSE;
2398 missile_added = FALSE;
2402 if (
object[oi]._oVar6 == 1) {
2405 object[oi]._oVar6 = 4;
2406 do_add_missile = TRUE;
2408 if (
object[oi]._oVar6 == 2) {
2411 object[oi]._oVar6 = 4;
2412 do_add_missile = TRUE;
2415 if (do_add_missile) {
2416 object[
dObject[35][36] - 1]._oVar5++;
2418 missile_added = TRUE;
2419 do_add_missile = FALSE;
2425 object[i]._oAnimFrame++;
2426 object[i]._oSelFlag = 0;
2467 if (
object[i]._oSelFlag != 0 && !
qtextflag) {
2481 object[i]._otype =
object[i]._otype;
2487 if (
object[i]._oAnimFrame !=
object[i]._oVar6) {
2489 ObjChangeMap(
object[i]._oVar1,
object[i]._oVar2,
object[i]._oVar3,
object[i]._oVar4);
2494 DRLG_MRectTrans(
object[i]._oVar1,
object[i]._oVar2,
object[i]._oVar3,
object[i]._oVar4);
2498 object[i]._oAnimFrame =
object[i]._oVar6;
2509 if (
object[i]._oSelFlag != 0 && !
qtextflag) {
2510 if (
object[i]._oAnimFrame !=
object[i]._oVar6) {
2511 ObjChangeMapResync(
object[i]._oVar1,
object[i]._oVar2,
object[i]._oVar3,
object[i]._oVar4);
2515 object[i]._oAnimFrame =
object[i]._oVar6;
2536 if (
object[i]._oSelFlag != 0) {
2539 object[i]._oAnimFrame += 2;
2540 object[i]._oSelFlag = 0;
2544 for (j = 0; j <
object[i]._oVar1; j++) {
2545 CreateRndItem(
object[i]._ox,
object[i]._oy, TRUE, sendmsg, FALSE);
2548 for (j = 0; j <
object[i]._oVar1; j++) {
2549 if (
object[i]._oVar2)
2550 CreateRndItem(
object[i]._ox,
object[i]._oy, FALSE, sendmsg, FALSE);
2556 mdir =
GetDirection(
object[i]._ox,
object[i]._oy,
plr[pnum].WorldX,
plr[pnum].WorldY);
2557 switch (
object[i]._oVar4) {
2568 AddMissile(
object[i]._ox,
object[i]._oy,
plr[pnum].WorldX,
plr[pnum].WorldY, mdir, mtype, 1, -1, 0, 0);
2569 object[i]._oTrapFlag = FALSE;
2595 if (
object[i]._oSelFlag != 0) {
2598 object[i]._oSelFlag = 0;
2599 object[i]._oAnimFrame++;
2626 if (
object[i]._oSelFlag != 0) {
2629 object[i]._oAnimFrame += 2;
2630 object[i]._oSelFlag = 0;
2641 if (
object[i]._oSelFlag != 0) {
2642 object[i]._oSelFlag = 0;
2670 frame =
object[i]._oAnimFrame;
2674 object[i]._oAnimFrame = 2;
2677 if (
object[oi]._otype ==
object[i]._oVar2 &&
object[oi]._oVar1 ==
object[i]._oVar1) {
2678 object[oi]._oVar2 = 1;
2679 object[oi]._oAnimFlag = 0;
2685 object[i]._oAnimFrame = frame - 1;
2688 if (
object[oi]._otype ==
object[i]._oVar2 &&
object[oi]._oVar1 ==
object[i]._oVar1) {
2689 object[oi]._oVar2 = 0;
2690 if (
object[oi]._oVar4 != 0)
2691 object[oi]._oAnimFlag = 1;
2698 if (
object[i]._oSelFlag != 0) {
2701 object[i]._oSelFlag = 0;
2703 object[i]._oAnimFrame =
object[i]._oAnimLen;
2705 object[i]._oAnimFlag = 1;
2706 object[i]._oAnimDelay = 3;
2708 if (
object[i]._oVar1 <= 2)
2709 CreateRndItem(
object[i]._ox,
object[i]._oy, FALSE, sendmsg, FALSE);
2710 if (
object[i]._oVar1 >= 8)
2711 SpawnSkeleton(
object[i]._oVar2,
object[i]._ox,
object[i]._oy);
2722 dpx = abs(
object[i]._ox -
plr[pnum].WorldX);
2723 dpy = abs(
object[i]._oy -
plr[pnum].WorldY);
2724 if (dpx == 1 && dpy <= 1 &&
object[i]._otype ==
OBJ_L2LDOOR)
2726 if (dpx <= 1 && dpy == 1 &&
object[i]._otype ==
OBJ_L2RDOOR)
2734 dpx = abs(
object[i]._ox -
plr[pnum].WorldX);
2735 dpy = abs(
object[i]._oy -
plr[pnum].WorldY);
2736 if (dpx == 1 && dpy <= 1 &&
object[i]._otype ==
OBJ_L3RDOOR)
2738 if (dpx <= 1 && dpy == 1 &&
object[i]._otype ==
OBJ_L3LDOOR)
2747 if (
object[i]._oVar6 != 3) {
2750 object[i]._oAnimFrame++;
2753 if (
object[i]._oVar6 == 1) {
2758 if (
object[i]._oVar6 == 2) {
2763 if (
object[i]._oVar6 == 3) {
2766 ObjChangeMap(
object[i]._oVar1,
object[i]._oVar2,
object[i]._oVar3,
object[i]._oVar4);
2771 object[i]._oSelFlag = 0;
2778 int j, oi, oti, trapdisper;
2783 if (
object[i]._oTrapFlag) {
2785 if (
random_(154, 100) <= trapdisper) {
2789 oti =
object[oi]._otype;
2794 if (checkflag &&
dObject[
object[oi]._oVar1][
object[oi]._oVar2] - 1 == i) {
2795 object[oi]._oVar4 = 1;
2796 object[i]._oTrapFlag = FALSE;
2799 oti =
object[i]._otype;
2801 object[i]._oTrapFlag = FALSE;
2825 unsigned __int64 spell, spells;
2834 if (
object[i]._oSelFlag == 0)
2838 object[i]._oSelFlag = 0;
2841 PlaySfxLoc(sType,
object[i]._ox,
object[i]._oy);
2842 object[i]._oAnimFlag = 1;
2843 object[i]._oAnimDelay = 1;
2845 object[i]._oAnimFlag = 0;
2846 object[i]._oAnimFrame =
object[i]._oAnimLen;
2848 switch (
object[i]._oVar1) {
2889 &&
plr[pnum].InvBody[j]._iMaxDur != 0) {
2892 if (
plr[pnum].InvBody[j]._iDurability >
plr[pnum].InvBody[j]._iMaxDur)
2901 &&
plr[pnum].InvBody[j]._iMaxDur != 0)
2912 if (
plr[pnum].InvBody[r]._iDurability <= 0)
2914 if (
plr[pnum].InvBody[r]._iMaxDur <= 0)
2949 switch (
plr[pnum].InvList[j]._itype) {
2956 if (
plr[pnum].InvList[j]._iMaxDam <
plr[pnum].InvList[j]._iMinDam)
2981 switch (
plr[pnum].InvList[j]._itype) {
3040 plr[pnum].InvBody[j]._iDurability =
plr[pnum].InvBody[j]._iMaxDur;
3042 plr[pnum].InvList[j]._iDurability =
plr[pnum].InvList[j]._iMaxDur;
3044 plr[pnum].SpdList[j]._iDurability =
plr[pnum].SpdList[j]._iMaxDur;
3063 if (
plr[pnum]._pMemSpells & spell) {
3064 if (
plr[pnum]._pSplLvl[j] < 15)
3071 }
while (!(
plr[pnum]._pMemSpells & ((__int64)1 << r)));
3072 if (
plr[pnum]._pSplLvl[r] >= 2)
3086 &&
object[v1]._oSelFlag == 0) {
3088 object[v1]._oAnimFrame -= 2;
3089 object[v1]._oSelFlag = 1;
3115 if (
plr[pnum]._pMana >> 6 <= 0) {
3119 if (
plr[pnum]._pMaxMana >> 6 <= 0) {
3247 if (
plr[pnum]._pMana >> 6 <= 0) {
3251 if (
plr[pnum]._pMaxMana >> 6 <= 0) {
3263 if (!
plr[pnum].InvGrid[j]) {
3280 if (pnum ==
myplr) {
3326 for (yy = 0; yy <
DMAXY; yy++) {
3327 for (xx = 0; xx <
DMAXX; xx++) {
3350 if (
plr[pnum]._pMana >> 6 <= 0) {
3354 if (
plr[pnum]._pMaxMana >> 6 <= 0) {
3366 if (
plr[pnum].InvBody[j]._iMagical && !
plr[pnum].InvBody[j]._iIdentified)
3370 if (
plr[pnum].InvList[j]._iMagical && !
plr[pnum].InvList[j]._iIdentified)
3373 for (j = 0; j < 8; j++) {
3374 if (
plr[pnum].SpdList[j]._iMagical && !
plr[pnum].SpdList[j]._iIdentified)
3382 if (pnum ==
myplr) {
3424 if (
object[i]._oSelFlag != 0) {
3427 object[i]._oAnimFrame += 2;
3428 object[i]._oSelFlag = 0;
3443 if (
object[i]._oSelFlag != 0) {
3446 object[i]._oAnimFrame -= 2;
3447 object[i]._oSelFlag = 0;
3468 if (
object[i]._oSelFlag != 0) {
3469 object[i]._oSelFlag = 0;
3472 CreateRndItem(
object[i]._ox,
object[i]._oy, FALSE, sendmsg, FALSE);
3483 if (
object[i]._oSelFlag != 0) {
3484 object[i]._oAnimFrame++;
3485 object[i]._oSelFlag = 0;
3537 object[i]._oAnimDelay = 2;
3546 object[i]._oAnimFrame = 3;
3547 object[i]._oAnimFlag = 0;
3553 int prev, add, rnd, cnt;
3558 switch (
object[i]._otype) {
3565 if (
plr[pnum]._pHitPoints <
plr[pnum]._pMaxHP) {
3569 if (
plr[pnum]._pHitPoints >
plr[pnum]._pMaxHP) {
3583 if (
plr[pnum]._pMana <
plr[pnum]._pMaxMana) {
3588 if (
plr[pnum]._pMana >
plr[pnum]._pMaxMana) {
3598 if (
object[i]._oSelFlag == 0)
3602 object[i]._oSelFlag = 0;
3621 if (
object[i]._oSelFlag == 0)
3629 object[i]._oSelFlag = 0;
3674 if (
object[i]._oSelFlag == 0)
3693 object[i]._oAnimFrame++;
3694 object[i]._oSelFlag = 0;
3709 object[i]._oAnimFrame =
object[i]._oVar4;
3721 object[i]._oAnimFrame++;
3722 object[i]._oSelFlag = 0;
3732 sendmsg = (pnum ==
myplr);
3733 switch (
object[i]._otype) {
3864 if (
object[i]._oVar4 != 0)
3887 if (
object[i]._oVar4 != 0)
3910 if (
object[i]._oVar4 != 0)
3926 switch (
object[i]._otype) {
4015 object[i]._oAnimFlag = 1;
4016 object[i]._oAnimFrame = 1;
4017 object[i]._oAnimDelay = 1;
4018 object[i]._oSolidFlag = TRUE;
4019 object[i]._oMissFlag = TRUE;
4020 object[i]._oBreak = -1;
4021 object[i]._oSelFlag = 0;
4027 if (
object[i]._oVar8 !=
object[oi]._oVar8 ||
object[oi]._oBreak == -1)
4035 ObjChangeMap(
object[i]._oVar1,
object[i]._oVar2,
object[i]._oVar3,
object[i]._oVar4);
4038 void BreakBarrel(
int pnum,
int i,
int dam, BOOL forcebreak, BOOL sendmsg)
4043 if (
object[i]._oSelFlag == 0)
4046 object[i]._oVar1 = 0;
4048 object[i]._oVar1 -= dam;
4049 if (pnum !=
myplr &&
object[i]._oVar1 <= 0)
4050 object[i]._oVar1 = 1;
4052 if (
object[i]._oVar1 > 0) {
4060 object[i]._oBreak = -1;
4061 object[i]._oVar1 = 0;
4062 object[i]._oAnimFlag = 1;
4063 object[i]._oAnimFrame = 1;
4064 object[i]._oAnimDelay = 1;
4065 object[i]._oSolidFlag = FALSE;
4066 object[i]._oMissFlag = TRUE;
4067 object[i]._oSelFlag = 0;
4068 object[i]._oPreFlag = TRUE;
4070 object[i]._oAnimCnt = 0;
4071 object[i]._oAnimFrame =
object[i]._oAnimLen;
4072 object[i]._oAnimDelay = 1000;
4078 for (yp =
object[i]._oy - 1; yp <=
object[i]._oy + 1; yp++) {
4079 for (xp =
object[i]._ox - 1; xp <=
object[i]._ox + 1; xp++) {
4086 if (
object[oi]._otype ==
OBJ_BARRELEX &&
object[oi]._oBreak != -1)
4094 if (
object[i]._oVar2 <= 1) {
4095 if (!
object[i]._oVar3)
4098 CreateRndItem(
object[i]._ox,
object[i]._oy, FALSE, sendmsg, FALSE);
4100 if (
object[i]._oVar2 >= 8)
4101 SpawnSkeleton(
object[i]._oVar4,
object[i]._ox,
object[i]._oy);
4109 int objdam, mind, maxd;
4113 maxd =
random_(163,
plr[pnum]._pIMaxDam - mind + 1);
4114 objdam = maxd + mind;
4119 switch (
object[oi]._otype) {
4142 if (
object[i]._oVar4 == 0) {
4143 object[i]._oMissFlag = FALSE;
4149 object[i]._oMissFlag = TRUE;
4150 object[i]._oSelFlag = 2;
4152 if (
object[i]._oVar1 == 214)
4176 type =
object[oi]._otype;
4179 if (
object[i]._oVar8 !=
object[oi]._oVar8 ||
object[oi]._oBreak == -1)
4184 ObjChangeMap(
object[i]._oVar1,
object[i]._oVar2,
object[i]._oVar3,
object[i]._oVar4);
4189 if (
object[i]._oSelFlag == 0)
4190 ObjChangeMap(
object[i]._oVar1,
object[i]._oVar2,
object[i]._oVar3,
object[i]._oVar4);
4197 if (
object[i]._oAnimFrame ==
object[i]._oVar6) {
4198 ObjChangeMapResync(
object[i]._oVar1,
object[i]._oVar2,
object[i]._oVar3,
object[i]._oVar4);
4202 DRLG_MRectTrans(
object[i]._oVar1,
object[i]._oVar2,
object[i]._oVar3,
object[i]._oVar4);
4212 if (
object[i]._oVar6 == 1)
4214 if (
object[i]._oVar6 == 2) {
4218 if (
object[i]._oVar6 == 3) {
4219 ObjChangeMapResync(
object[i]._oVar1,
object[i]._oVar2,
object[i]._oVar3,
object[i]._oVar4);
4230 if (
object[i]._oVar4 == 0)
4231 object[i]._oMissFlag = FALSE;
4233 object[i]._oMissFlag = TRUE;
4236 object[i]._oSelFlag = 2;
4237 if (
object[i]._otype ==
OBJ_L2LDOOR &&
object[i]._oVar4 == 0) {
4239 }
else if (
object[i]._otype ==
OBJ_L2LDOOR && (
object[i]._oVar4 == 1 ||
object[i]._oVar4 == 2)) {
4241 }
else if (
object[i]._otype ==
OBJ_L2RDOOR &&
object[i]._oVar4 == 0) {
4243 }
else if (
object[i]._otype ==
OBJ_L2RDOOR && (
object[i]._oVar4 == 1 ||
object[i]._oVar4 == 2)) {
4252 object[i]._oMissFlag = TRUE;
4255 object[i]._oSelFlag = 2;
4256 if (
object[i]._otype ==
OBJ_L3LDOOR &&
object[i]._oVar4 == 0) {
4258 }
else if (
object[i]._otype ==
OBJ_L3LDOOR && (
object[i]._oVar4 == 1 ||
object[i]._oVar4 == 2)) {
4260 }
else if (
object[i]._otype ==
OBJ_L3RDOOR &&
object[i]._oVar4 == 0) {
4262 }
else if (
object[i]._otype ==
OBJ_L3RDOOR && (
object[i]._oVar4 == 1 ||
object[i]._oVar4 == 2)) {
4276 while (file != ofindex) {
4280 object[o]._oAnimData =
pObjCels[i];
4281 switch (
object[o]._otype) {
4319 switch (
object[i]._otype) {
4326 strcpy(
infostr,
"Small Chest");
4334 if (
object[i]._oVar4 == 1)
4336 if (
object[i]._oVar4 == 0)
4337 strcpy(
infostr,
"Closed Door");
4338 if (
object[i]._oVar4 == 2)
4339 strcpy(
infostr,
"Blocked Door");
4344 strcpy(
infostr,
"Ancient Tome");
4346 strcpy(
infostr,
"Book of Vileness");
4351 strcpy(
infostr,
"Skull Lever");
4354 strcpy(
infostr,
"Mythical Book");
4364 strcpy(
infostr,
"Large Chest");
4369 strcpy(
infostr,
"Crucified Skeleton");
4372 strcpy(
infostr,
"Sarcophagus");
4382 strcpy(
infostr,
"Skeleton Tome");
4394 strcpy(
infostr,
"Library Book");
4397 strcpy(
infostr,
"Blood Fountain");
4400 strcpy(
infostr,
"Decapitated Body");
4403 strcpy(
infostr,
"Book of the Blind");
4406 strcpy(
infostr,
"Book of Blood");
4409 strcpy(
infostr,
"Pedestal of Blood");
4412 strcpy(
infostr,
"Purifying Spring");
4419 strcpy(
infostr,
"Goat Shrine");
4425 strcpy(
infostr,
"Murky Pool");
4428 strcpy(
infostr,
"Fountain of Tears");
4431 strcpy(
infostr,
"Steel Tome");
4438 strcpy(
infostr,
"Weapon Rack");
4441 strcpy(
infostr,
"Mushroom Patch");
4444 strcpy(
infostr,
"Vile Stand");
4447 strcpy(
infostr,
"Slain Hero");
4451 if (
object[i]._oTrapFlag) {
@ EMSG_SHRINE_THAUMATURGIC
void SyncObjectAnim(int o)
void AddL2Door(int i, int x, int y, int ot)
void AddL3Door(int i, int x, int y, int ot)
int AddLight(int x, int y, int r)
void ObjL2Special(int x1, int y1, int x2, int y2)
void OperateObject(int pnum, int i, BOOL TeleFlag)
QuestStruct quests[MAXQUESTS]
ObjDataStruct AllObjects[99]
Contains the data related to each object ID.
UniqMonstStruct UniqMonst[]
void OperateSarc(int pnum, int i, BOOL sendmsg)
void InitRndLocObj5x5(int min, int max, int objtype)
char InvGrid[NUM_INV_GRID_ELEM]
void AddGoatShrine(int i)
void OperateSlainHero(int pnum, int i, BOOL sendmsg)
void DeleteObject_(int oi, int i)
void SetGoldCurs(int pnum, int i)
void AddL3Objs(int x1, int y1, int x2, int y2)
void LoadMapObjs(BYTE *pMap, int startx, int starty)
void OperateL1LDoor(int pnum, int oi, BOOL sendflag)
void ObjSetMicro(int dx, int dy, int pn)
void SetRndSeed(int s)
Set the RNG seed.
void DoLighting(int nXPos, int nYPos, int nRadius, int Lnum)
void MonstCheckDoors(int m)
void CreateMagicWeapon(int x, int y, int imisc, int icurs, BOOL sendmsg, BOOL delta)
BYTE dungeon[DMAXX][DMAXY]
BYTE pdungeon[DMAXX][DMAXY]
void SyncOpL1Door(int pnum, int cmd, int i)
void BreakObject(int pnum, int oi)
void AddObjLight(int i, int r)
void OperateL3Door(int pnum, int i, BOOL sendflag)
BOOL PlayerMHit(int pnum, int m, int dist, int mind, int maxd, int mtype, BOOLEAN shift, int earflag)
void AddL1Objs(int x1, int y1, int x2, int y2)
char shrinemin[NUM_SHRINETYPE]
void AddTorturedBody(int i)
void OperateArmorStand(int pnum, int i, BOOL sendmsg)
void GetPlrHandSeed(ItemStruct *h)
int GetDirection(int x1, int y1, int x2, int y2)
Calculate the best fit direction between two points.
void OperateGoatShrine(int pnum, int i, int sType)
DEVILUTION_BEGIN_NAMESPACE ItemDataStruct AllItemsList[]
Contains the data related to each item ID.
void CreateMagicArmor(int x, int y, int imisc, int icurs, BOOL sendmsg, BOOL delta)
#define DUR_INDESTRUCTIBLE
ItemStruct InvList[NUM_INV_GRID_ELEM]
int ObjIndex(int x, int y)
void ClrPlrPath(int pnum)
void SyncOpL2Door(int pnum, int cmd, int i)
void AddL2Objs(int x1, int y1, int x2, int y2)
void SpawnQuestItem(int itemid, int x, int y, int randarea, int selflag)
void Obj_BCrossDamage(int i)
void CalcPlrInv(int p, BOOL Loadgfx)
void SyncPlrKill(int pnum, int earflag)
void OperateCauldron(int pnum, int i, int sType)
void OperateChest(int pnum, int i, BOOL sendmsg)
BOOL MonsterTrapHit(int m, int mindam, int maxdam, int dist, int t, BOOLEAN shift)
void AddBookLever(int lx1, int ly1, int lx2, int ly2, int x1, int y1, int x2, int y2, int msg)
DEVILUTION_BEGIN_NAMESPACE int numthemes
void InitRndLocObj(int min, int max, int objtype)
ItemStruct SpdList[MAXBELTITEMS]
int objectavail[MAXOBJECTS]
void SetupObject(int i, int x, int y, int ot)
char dObject[MAXDUNX][MAXDUNY]
void ModifyPlrDex(int p, int l)
ThemeStruct themes[MAXTHEMES]
BOOL OperateFountains(int pnum, int i)
BYTE gbMaxPlayers
Specifies the maximum number of players in a game, where 1 represents a single player game and 4 repr...
void OperateSChambBk(int pnum, int i)
int AddMissile(int sx, int sy, int dx, int dy, int midir, int mitype, char micaster, int id, int midam, int spllvl)
void OperateL3LDoor(int pnum, int oi, BOOL sendflag)
BYTE shrineavail[NUM_SHRINETYPE]
0 - sp+mp, 1 - sp only, 2 - mp only
void ChangeVisionXY(int id, int x, int y)
void AddPurifyingFountain(int i)
void SetObjMapRange(int i, int x1, int y1, int x2, int y2, int v)
int dPiece[MAXDUNX][MAXDUNY]
BOOLEAN nSolidTable[2049]
List of path blocking dPieces.
void DRLG_MRectTrans(int x1, int y1, int x2, int y2)
void NetSendCmdParam1(BOOL bHiPri, BYTE bCmd, WORD wParam1)
void BreakBarrel(int pnum, int i, int dam, BOOL forcebreak, BOOL sendmsg)
void AddChest(int i, int t)
void ModifyPlrMag(int p, int l)
void SyncOpL3Door(int pnum, int cmd, int i)
void ObjChangeMapResync(int x1, int y1, int x2, int y2)
void OperateMushPatch(int pnum, int i)
void OperateL1Door(int pnum, int i, BOOL sendflag)
void AddTearFountain(int i)
#define DEVILUTION_END_NAMESPACE
void ObjL1Special(int x1, int y1, int x2, int y2)
MonsterStruct monster[MAXMONSTERS]
void SetPlrHandItem(ItemStruct *h, int idata)
void OperateBookLever(int pnum, int i)
void AddArmorStand(int i)
DEVILUTION_BEGIN_NAMESPACE int trapid
void SetMapObjects(BYTE *pMap, int startx, int starty)
BYTE * LoadFileInMem(char *pszName, DWORD *pdwFileLen)
Load a file in to a buffer.
void StartStand(int pnum, int dir)
void RemoveInvItem(int pnum, int iv)
BOOL SkipThemeRoom(int x, int y)
void ModifyPlrStr(int p, int l)
BOOL TorchLocOK(int xp, int yp)
void CreateRndUseful(int pnum, int x, int y, BOOL sendmsg)
@ EMSG_SHRINE_FASCINATING
void OperateInnSignChest(int pnum, int i)
char dItem[MAXDUNX][MAXDUNY]
void AddMagicCircle(int i)
char * ObjMasterLoadList[56]
Maps from object_graphic_id to object CEL name.
void M_StartStand(int i, int md)
int objectactive[MAXOBJECTS]
void AddBarrel(int i, int t)
void CreateTypeItem(int x, int y, BOOL onlygood, int itype, int imisc, BOOL sendmsg, BOOL delta)
int GetRndSeed()
Get the current RNG seed.
void ChangeLightRadius(int i, int r)
char shrinemax[NUM_SHRINETYPE]
BOOL RndLocOk(int xp, int yp)
void objects_set_door_piece(int x, int y)
void Obj_FlameTrap(int i)
MICROS dpiece_defs_map_2[MAXDUNX][MAXDUNY]
void SyncOpObject(int pnum, int cmd, int i)
BOOLEAN automapview[DMAXX][DMAXY]
Tracks the explored areas of the map.
void CreateSpellBook(int x, int y, int ispell, BOOL sendmsg, BOOL delta)
char * shrinestrs[NUM_SHRINETYPE]
void AddWeaponRack(int i)
DWORD glSeedTbl[NUMLEVELS]
void DoorSet(int oi, int dx, int dy)
void OperateShrine(int pnum, int i, int sType)
ItemStruct InvBody[NUM_INVLOC]
void OperateL2RDoor(int pnum, int oi, BOOL sendflag)
void OperateBook(int pnum, int i)
void Obj_Light(int i, int lr)
void CreateRndItem(int x, int y, BOOL onlygood, BOOL sendmsg, BOOL delta)
void GetRndObjLoc(int randarea, int *xx, int *yy)
ItemStruct * PlrHasItem(int pnum, int item, int *i)
void AddTrap(int i, int ot)
BOOL WallTrapLocOk(int xp, int yp)
int FindValidShrine(int i)
void OperateWeaponRack(int pnum, int i, BOOL sendmsg)
void OperateTrapLvr(int i)
char dSpecial[MAXDUNX][MAXDUNY]
void InitRndLocBigObj(int min, int max, int objtype)
void track_repeat_walk(BOOL rep)
int random_(BYTE idx, int v)
Main RNG function.
void mem_free_dbg(void *p)
Multithreaded safe memfree.
void GetSuperItemLoc(int x, int y, int *xx, int *yy)
void AddL1Door(int i, int x, int y, int ot)
BOOL SpawnSkeleton(int ii, int x, int y)
void OperatePedistal(int pnum, int i)
void LoadMapObjects(BYTE *pMap, int startx, int starty, int x1, int y1, int w, int h, int leveridx)
int dMonster[MAXDUNX][MAXDUNY]
void InitDiabloMsg(char e)
void PlaySfxLoc(int psfx, int x, int y)
void NetSendCmdParam2(BOOL bHiPri, BYTE bCmd, WORD wParam1, WORD wParam2)
void OperateBookCase(int pnum, int i, BOOL sendmsg)
void AddMurkyFountain(int i)
void TryDisarm(int pnum, int i)
void ObjChangeMap(int x1, int y1, int x2, int y2)
void ObjSetMini(int x, int y, int v)
void OperateL3RDoor(int pnum, int oi, BOOL sendflag)
void SetBookMsg(int i, int msg)
void OperateL1RDoor(int pnum, int oi, BOOL sendflag)
void AddObject(int ot, int ox, int oy)
char dPlayer[MAXDUNX][MAXDUNY]
void OperateDecap(int pnum, int i, BOOL sendmsg)
DEVILUTION_BEGIN_NAMESPACE int diabquad1x
void OperateL2LDoor(int pnum, int oi, BOOL sendflag)
char dFlags[MAXDUNX][MAXDUNY]
void OperateLever(int pnum, int i)
void OperateLazStand(int pnum, int i)
#define NUM_INV_GRID_ELEM
void OperateSkelBook(int pnum, int i, BOOL sendmsg)
void OperateL2Door(int pnum, int i, BOOL sendflag)
DEVILUTION_BEGIN_NAMESPACE int ObjTypeConv[113]
Maps from dun_object_id to object_id.
void CreateItem(int uid, int x, int y)
void OperateStoryBook(int pnum, int i)
void AddHookedBodies(int freq)
char dDead[MAXDUNX][MAXDUNY]
PlayerStruct plr[MAX_PLRS]
void SyncBreakObj(int pnum, int oi)
void ModifyPlrVit(int p, int l)
int ItemMiscIdIdx(int imiscid)
void ActivateTrapLine(int ttype, int tid)