mirror of
https://github.com/galaxyhaxz/devilution
synced 2025-02-22 12:34:59 +00:00
700 lines
15 KiB
C++
700 lines
15 KiB
C++
|
#include "diablo.h"
|
||
|
|
||
|
BOOL townwarps[3];
|
||
|
BOOL trigflag;
|
||
|
int numtrigs;
|
||
|
TriggerStruct trigs[MAXTRIGGERS];
|
||
|
int TWarpFrom; // weak
|
||
|
|
||
|
int TownDownList[11] = { 716, 715, 719, 720, 721, 723, 724, 725, 726, 727, -1 };
|
||
|
int TownWarp1List[13] = { 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1183, 1185, -1 };
|
||
|
int L1UpList[12] = { 127, 129, 130, 131, 132, 133, 135, 137, 138, 139, 140, -1 };
|
||
|
int L1DownList[10] = { 106, 107, 108, 109, 110, 112, 114, 115, 118, -1 };
|
||
|
int L2UpList[3] = { 266, 267, -1 };
|
||
|
int L2DownList[5] = { 269, 270, 271, 272, -1 };
|
||
|
int L2TWarpUpList[3] = { 558, 559, -1 };
|
||
|
int L3UpList[15] = { 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, -1 };
|
||
|
int L3DownList[9] = { 162, 163, 164, 165, 166, 167, 168, 169, -1 };
|
||
|
int L3TWarpUpList[14] = { 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, -1 };
|
||
|
int L4UpList[4] = { 82, 83, 90, -1 };
|
||
|
int L4DownList[6] = { 120, 130, 131, 132, 133, -1 };
|
||
|
int L4TWarpUpList[4] = { 421, 422, 429, -1 };
|
||
|
int L4PentaList[33] = { 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, -1 };
|
||
|
|
||
|
void InitNoTriggers()
|
||
|
{
|
||
|
numtrigs = 0;
|
||
|
trigflag = FALSE;
|
||
|
}
|
||
|
|
||
|
void InitTownTriggers()
|
||
|
{
|
||
|
int i;
|
||
|
|
||
|
trigs[0]._tx = 25;
|
||
|
trigs[0]._ty = 29;
|
||
|
trigs[0]._tmsg = WM_DIABNEXTLVL;
|
||
|
|
||
|
numtrigs = 1;
|
||
|
|
||
|
if(gbMaxPlayers == 4) {
|
||
|
for(i = 0; i < 3; i++) {
|
||
|
townwarps[i] = TRUE;
|
||
|
}
|
||
|
trigs[1]._tx = 49;
|
||
|
trigs[1]._ty = 21;
|
||
|
trigs[1]._tmsg = WM_DIABTOWNWARP;
|
||
|
trigs[1]._tlvl = 5;
|
||
|
trigs[2]._tx = 17;
|
||
|
trigs[2]._ty = 69;
|
||
|
trigs[2]._tmsg = WM_DIABTOWNWARP;
|
||
|
trigs[2]._tlvl = 9;
|
||
|
trigs[3]._tx = 41;
|
||
|
trigs[3]._ty = 80;
|
||
|
trigs[3]._tmsg = WM_DIABTOWNWARP;
|
||
|
trigs[3]._tlvl = 13;
|
||
|
numtrigs = 4;
|
||
|
} else {
|
||
|
for(i = 0; i < 3; i++) {
|
||
|
townwarps[i] = FALSE;
|
||
|
}
|
||
|
if(plr[myplr].pTownWarps & 1) {
|
||
|
trigs[1]._tx = 49;
|
||
|
trigs[1]._ty = 21;
|
||
|
trigs[1]._tmsg = WM_DIABTOWNWARP;
|
||
|
trigs[1]._tlvl = 5;
|
||
|
numtrigs = 2;
|
||
|
townwarps[0] = TRUE;
|
||
|
}
|
||
|
if(plr[myplr].pTownWarps & 2) {
|
||
|
townwarps[1] = TRUE;
|
||
|
trigs[numtrigs]._tx = 17;
|
||
|
trigs[numtrigs]._ty = 69;
|
||
|
trigs[numtrigs]._tmsg = WM_DIABTOWNWARP;
|
||
|
trigs[numtrigs]._tlvl = 9;
|
||
|
numtrigs++;
|
||
|
}
|
||
|
if(plr[myplr].pTownWarps & 4) {
|
||
|
townwarps[2] = TRUE;
|
||
|
trigs[numtrigs]._tx = 41;
|
||
|
trigs[numtrigs]._ty = 80;
|
||
|
trigs[numtrigs]._tmsg = WM_DIABTOWNWARP;
|
||
|
trigs[numtrigs]._tlvl = 13;
|
||
|
numtrigs++;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
trigflag = FALSE;
|
||
|
}
|
||
|
|
||
|
void InitL1Triggers()
|
||
|
{
|
||
|
int i, j;
|
||
|
|
||
|
numtrigs = 0;
|
||
|
|
||
|
for(j = 0; j < MAXDUNY; j++) {
|
||
|
for(i = 0; i < MAXDUNX; i++) {
|
||
|
if(dPiece[i][j] == 129) {
|
||
|
trigs[numtrigs]._tx = i;
|
||
|
trigs[numtrigs]._ty = j;
|
||
|
trigs[numtrigs]._tmsg = WM_DIABPREVLVL;
|
||
|
numtrigs++;
|
||
|
}
|
||
|
if(dPiece[i][j] == 115) {
|
||
|
trigs[numtrigs]._tx = i;
|
||
|
trigs[numtrigs]._ty = j;
|
||
|
trigs[numtrigs]._tmsg = WM_DIABNEXTLVL;
|
||
|
numtrigs++;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
trigflag = FALSE;
|
||
|
}
|
||
|
|
||
|
void InitL2Triggers()
|
||
|
{
|
||
|
int i, j;
|
||
|
|
||
|
numtrigs = 0;
|
||
|
|
||
|
for(j = 0; j < MAXDUNY; j++) {
|
||
|
for(i = 0; i < MAXDUNX; i++) {
|
||
|
if(dPiece[i][j] == 267 && (i != quests[Q_SCHAMB]._qtx || j != quests[Q_SCHAMB]._qty)) {
|
||
|
trigs[numtrigs]._tx = i;
|
||
|
trigs[numtrigs]._ty = j;
|
||
|
trigs[numtrigs]._tmsg = WM_DIABPREVLVL;
|
||
|
numtrigs++;
|
||
|
}
|
||
|
if(dPiece[i][j] == 559) {
|
||
|
trigs[numtrigs]._tx = i;
|
||
|
trigs[numtrigs]._ty = j;
|
||
|
trigs[numtrigs]._tmsg = WM_DIABTWARPUP;
|
||
|
trigs[numtrigs]._tlvl = 0;
|
||
|
numtrigs++;
|
||
|
}
|
||
|
if(dPiece[i][j] == 271) {
|
||
|
trigs[numtrigs]._tx = i;
|
||
|
trigs[numtrigs]._ty = j;
|
||
|
trigs[numtrigs]._tmsg = WM_DIABNEXTLVL;
|
||
|
numtrigs++;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
trigflag = FALSE;
|
||
|
}
|
||
|
|
||
|
void InitL3Triggers()
|
||
|
{
|
||
|
int i, j;
|
||
|
|
||
|
numtrigs = 0;
|
||
|
|
||
|
for(j = 0; j < MAXDUNY; j++) {
|
||
|
for(i = 0; i < MAXDUNX; i++) {
|
||
|
if(dPiece[i][j] == 171) {
|
||
|
trigs[numtrigs]._tx = i;
|
||
|
trigs[numtrigs]._ty = j;
|
||
|
trigs[numtrigs]._tmsg = WM_DIABPREVLVL;
|
||
|
numtrigs++;
|
||
|
}
|
||
|
if(dPiece[i][j] == 168) {
|
||
|
trigs[numtrigs]._tx = i;
|
||
|
trigs[numtrigs]._ty = j;
|
||
|
trigs[numtrigs]._tmsg = WM_DIABNEXTLVL;
|
||
|
numtrigs++;
|
||
|
}
|
||
|
if(dPiece[i][j] == 549) {
|
||
|
trigs[numtrigs]._tx = i;
|
||
|
trigs[numtrigs]._ty = j;
|
||
|
trigs[numtrigs]._tmsg = WM_DIABTWARPUP;
|
||
|
numtrigs++;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
trigflag = FALSE;
|
||
|
}
|
||
|
|
||
|
void InitL4Triggers()
|
||
|
{
|
||
|
int i, j;
|
||
|
|
||
|
numtrigs = 0;
|
||
|
|
||
|
for(j = 0; j < MAXDUNY; j++) {
|
||
|
for(i = 0; i < MAXDUNX; i++) {
|
||
|
if(dPiece[i][j] == 83) {
|
||
|
trigs[numtrigs]._tx = i;
|
||
|
trigs[numtrigs]._ty = j;
|
||
|
trigs[numtrigs]._tmsg = WM_DIABPREVLVL;
|
||
|
numtrigs++;
|
||
|
}
|
||
|
if(dPiece[i][j] == 422) {
|
||
|
trigs[numtrigs]._tx = i;
|
||
|
trigs[numtrigs]._ty = j;
|
||
|
trigs[numtrigs]._tmsg = WM_DIABTWARPUP;
|
||
|
trigs[numtrigs]._tlvl = 0;
|
||
|
numtrigs++;
|
||
|
}
|
||
|
if(dPiece[i][j] == 120) {
|
||
|
trigs[numtrigs]._tx = i;
|
||
|
trigs[numtrigs]._ty = j;
|
||
|
trigs[numtrigs]._tmsg = WM_DIABNEXTLVL;
|
||
|
numtrigs++;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
for(j = 0; j < MAXDUNY; j++) {
|
||
|
for(i = 0; i < MAXDUNX; i++) {
|
||
|
if(dPiece[i][j] == 370 && quests[Q_BETRAYER]._qactive == 3) {
|
||
|
trigs[numtrigs]._tx = i;
|
||
|
trigs[numtrigs]._ty = j;
|
||
|
trigs[numtrigs]._tmsg = WM_DIABNEXTLVL;
|
||
|
numtrigs++;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
trigflag = FALSE;
|
||
|
}
|
||
|
|
||
|
void InitSKingTriggers()
|
||
|
{
|
||
|
numtrigs = 1;
|
||
|
trigs[0]._tx = 82;
|
||
|
trigs[0]._ty = 42;
|
||
|
trigs[0]._tmsg = WM_DIABRTNLVL;
|
||
|
trigflag = FALSE;
|
||
|
}
|
||
|
|
||
|
void InitSChambTriggers()
|
||
|
{
|
||
|
numtrigs = 1;
|
||
|
trigs[0]._tx = 70;
|
||
|
trigs[0]._ty = 39;
|
||
|
trigs[0]._tmsg = WM_DIABRTNLVL;
|
||
|
trigflag = FALSE;
|
||
|
}
|
||
|
|
||
|
void InitPWaterTriggers()
|
||
|
{
|
||
|
numtrigs = 1;
|
||
|
trigs[0]._tx = 30;
|
||
|
trigs[0]._ty = 83;
|
||
|
trigs[0]._tmsg = WM_DIABRTNLVL;
|
||
|
trigflag = FALSE;
|
||
|
}
|
||
|
|
||
|
void InitVPTriggers()
|
||
|
{
|
||
|
numtrigs = 1;
|
||
|
trigs[0]._tx = 35;
|
||
|
trigs[0]._ty = 32;
|
||
|
trigs[0]._tmsg = WM_DIABRTNLVL;
|
||
|
trigflag = FALSE;
|
||
|
}
|
||
|
|
||
|
BOOL ForceTownTrig()
|
||
|
{
|
||
|
int i;
|
||
|
|
||
|
for(i = 0; TownDownList[i] != -1; i++) {
|
||
|
if(dPiece[cursmx][cursmy] == TownDownList[i]) {
|
||
|
strcpy(infostr, "Down to dungeon");
|
||
|
cursmx = 25;
|
||
|
cursmy = 29;
|
||
|
return TRUE;
|
||
|
}
|
||
|
}
|
||
|
if(townwarps[0]) {
|
||
|
for(i = 0; TownWarp1List[i] != -1; i++) {
|
||
|
if(dPiece[cursmx][cursmy] == TownWarp1List[i]) {
|
||
|
strcpy(infostr, "Down to catacombs");
|
||
|
cursmx = 49;
|
||
|
cursmy = 21;
|
||
|
return TRUE;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if(townwarps[1]) {
|
||
|
for(i = 1199; i <= 1220; i++) {
|
||
|
if(dPiece[cursmx][cursmy] == i) {
|
||
|
strcpy(infostr, "Down to caves");
|
||
|
cursmx = 17;
|
||
|
cursmy = 69;
|
||
|
return TRUE;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if(townwarps[2]) {
|
||
|
for(i = 1240; i <= 1255; i++) {
|
||
|
if(dPiece[cursmx][cursmy] == i) {
|
||
|
strcpy(infostr, "Down to hell");
|
||
|
cursmx = 41;
|
||
|
cursmy = 80;
|
||
|
return TRUE;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
BOOL ForceL1Trig()
|
||
|
{
|
||
|
int i, j;
|
||
|
|
||
|
for(i = 0; L1UpList[i] != -1; i++) {
|
||
|
if(dPiece[cursmx][cursmy] == L1UpList[i]) {
|
||
|
if(currlevel > 1) {
|
||
|
sprintf(infostr, "Up to level %i", currlevel - 1);
|
||
|
} else {
|
||
|
strcpy(infostr, "Up to town");
|
||
|
}
|
||
|
for(j = 0; j < numtrigs; j++) {
|
||
|
if(trigs[j]._tmsg == WM_DIABPREVLVL) {
|
||
|
cursmx = trigs[j]._tx;
|
||
|
cursmy = trigs[j]._ty;
|
||
|
return TRUE;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
for(i = 0; L1DownList[i] != -1; i++) {
|
||
|
if(dPiece[cursmx][cursmy] == L1DownList[i]) {
|
||
|
sprintf(infostr, "Down to level %i", currlevel + 1);
|
||
|
for(j = 0; j < numtrigs; j++) {
|
||
|
if(trigs[j]._tmsg == WM_DIABNEXTLVL) {
|
||
|
cursmx = trigs[j]._tx;
|
||
|
cursmy = trigs[j]._ty;
|
||
|
return TRUE;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
BOOL ForceL2Trig()
|
||
|
{
|
||
|
int i, j, dx, dy;
|
||
|
|
||
|
for(i = 0; L2UpList[i] != -1; i++) {
|
||
|
if(dPiece[cursmx][cursmy] == L2UpList[i]) {
|
||
|
for(j = 0; j < numtrigs; j++) {
|
||
|
if(trigs[j]._tmsg == WM_DIABPREVLVL) {
|
||
|
dx = abs(trigs[j]._tx - cursmx);
|
||
|
dy = abs(trigs[j]._ty - cursmy);
|
||
|
if(dx < 4 && dy < 4) {
|
||
|
sprintf(infostr, "Up to level %i", currlevel - 1);
|
||
|
cursmx = trigs[j]._tx;
|
||
|
cursmy = trigs[j]._ty;
|
||
|
return TRUE;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
for(i = 0; L2DownList[i] != -1; i++) {
|
||
|
if(dPiece[cursmx][cursmy] == L2DownList[i]) {
|
||
|
sprintf(infostr, "Down to level %i", currlevel + 1);
|
||
|
for(j = 0; j < numtrigs; j++) {
|
||
|
if(trigs[j]._tmsg == WM_DIABNEXTLVL) {
|
||
|
cursmx = trigs[j]._tx;
|
||
|
cursmy = trigs[j]._ty;
|
||
|
return TRUE;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if(currlevel == 5) {
|
||
|
for(i = 0; L2TWarpUpList[i] != -1; i++) {
|
||
|
if(dPiece[cursmx][cursmy] == L2TWarpUpList[i]) {
|
||
|
for(j = 0; j < numtrigs; j++) {
|
||
|
if(trigs[j]._tmsg == WM_DIABTWARPUP) {
|
||
|
dx = abs(trigs[j]._tx - cursmx);
|
||
|
dy = abs(trigs[j]._ty - cursmy);
|
||
|
if(dx < 4 && dy < 4) {
|
||
|
strcpy(infostr, "Up to town");
|
||
|
cursmx = trigs[j]._tx;
|
||
|
cursmy = trigs[j]._ty;
|
||
|
return TRUE;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
BOOL ForceL3Trig()
|
||
|
{
|
||
|
int i, j, dx, dy;
|
||
|
|
||
|
for(i = 0; L3UpList[i] != -1; i++) {
|
||
|
if(dPiece[cursmx][cursmy] == L3UpList[i]) {
|
||
|
sprintf(infostr, "Up to level %i", currlevel - 1);
|
||
|
for(j = 0; j < numtrigs; j++) {
|
||
|
if(trigs[j]._tmsg == WM_DIABPREVLVL) {
|
||
|
cursmx = trigs[j]._tx;
|
||
|
cursmy = trigs[j]._ty;
|
||
|
return TRUE;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
for(i = 0; L3DownList[i] != -1; i++) {
|
||
|
if(dPiece[cursmx][cursmy] == L3DownList[i]
|
||
|
|| dPiece[cursmx + 1][cursmy] == L3DownList[i]
|
||
|
|| dPiece[cursmx + 2][cursmy] == L3DownList[i]) {
|
||
|
sprintf(infostr, "Down to level %i", currlevel + 1);
|
||
|
for(j = 0; j < numtrigs; j++) {
|
||
|
if(trigs[j]._tmsg == WM_DIABNEXTLVL) {
|
||
|
cursmx = trigs[j]._tx;
|
||
|
cursmy = trigs[j]._ty;
|
||
|
return TRUE;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if(currlevel == 9) {
|
||
|
for(i = 0; L3TWarpUpList[i] != -1; i++) {
|
||
|
if(dPiece[cursmx][cursmy] == L3TWarpUpList[i]) {
|
||
|
for(j = 0; j < numtrigs; j++) {
|
||
|
if(trigs[j]._tmsg == WM_DIABTWARPUP) {
|
||
|
dx = abs(trigs[j]._tx - cursmx);
|
||
|
dy = abs(trigs[j]._ty - cursmy);
|
||
|
if(dx < 4 && dy < 4) {
|
||
|
strcpy(infostr, "Up to town");
|
||
|
cursmx = trigs[j]._tx;
|
||
|
cursmy = trigs[j]._ty;
|
||
|
return TRUE;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
BOOL ForceL4Trig()
|
||
|
{
|
||
|
int i, j, dx, dy;
|
||
|
|
||
|
for(i = 0; L4UpList[i] != -1; i++) {
|
||
|
if(dPiece[cursmx][cursmy] == L4UpList[i]) {
|
||
|
sprintf(infostr, "Up to level %i", currlevel - 1);
|
||
|
for(j = 0; j < numtrigs; j++) {
|
||
|
if(trigs[j]._tmsg == WM_DIABPREVLVL) {
|
||
|
cursmx = trigs[j]._tx;
|
||
|
cursmy = trigs[j]._ty;
|
||
|
return TRUE;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
for(i = 0; L4DownList[i] != -1; i++) {
|
||
|
if(dPiece[cursmx][cursmy] == L4DownList[i]) {
|
||
|
sprintf(infostr, "Down to level %i", currlevel + 1);
|
||
|
for(j = 0; j < numtrigs; j++) {
|
||
|
if(trigs[j]._tmsg == WM_DIABNEXTLVL) {
|
||
|
cursmx = trigs[j]._tx;
|
||
|
cursmy = trigs[j]._ty;
|
||
|
return TRUE;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if(currlevel == 13) {
|
||
|
for(i = 0; L4TWarpUpList[i] != -1; i++) {
|
||
|
if(dPiece[cursmx][cursmy] == L4TWarpUpList[i]) {
|
||
|
for(j = 0; j < numtrigs; j++) {
|
||
|
if(trigs[j]._tmsg == WM_DIABTWARPUP) {
|
||
|
dx = abs(trigs[j]._tx - cursmx);
|
||
|
dy = abs(trigs[j]._ty - cursmy);
|
||
|
if(dx < 4 && dy < 4) {
|
||
|
strcpy(infostr, "Up to town");
|
||
|
cursmx = trigs[j]._tx;
|
||
|
cursmy = trigs[j]._ty;
|
||
|
return TRUE;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if(currlevel == 15) {
|
||
|
for(i = 0; L4PentaList[i] != -1; i++) {
|
||
|
if(dPiece[cursmx][cursmy] == L4PentaList[i]) {
|
||
|
strcpy(infostr, "Down to Diablo");
|
||
|
for(j = 0; j < numtrigs; j++) {
|
||
|
if(trigs[j]._tmsg == WM_DIABNEXTLVL) {
|
||
|
cursmx = trigs[j]._tx;
|
||
|
cursmy = trigs[j]._ty;
|
||
|
return TRUE;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
void Freeupstairs()
|
||
|
{
|
||
|
int j, tx, ty, xx, yy;
|
||
|
|
||
|
for(j = 0; j < numtrigs; j++) {
|
||
|
tx = trigs[j]._tx;
|
||
|
ty = trigs[j]._ty;
|
||
|
for(yy = -2; yy < 3; yy++) {
|
||
|
for(xx = -2; xx < 3; xx++) {
|
||
|
dFlags[xx + tx][yy + ty] |= 8;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
BOOL ForceSKingTrig()
|
||
|
{
|
||
|
int i;
|
||
|
|
||
|
for(i = 0; L1UpList[i] != -1; i++) {
|
||
|
if(dPiece[cursmx][cursmy] == L1UpList[i]) {
|
||
|
sprintf(infostr, "Back to Level %i", quests[Q_SKELKING]._qlevel);
|
||
|
cursmx = trigs[0]._tx;
|
||
|
cursmy = trigs[0]._ty;
|
||
|
return TRUE;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
BOOL ForceSChambTrig()
|
||
|
{
|
||
|
int i;
|
||
|
|
||
|
for(i = 0; L2DownList[i] != -1; i++) {
|
||
|
if(dPiece[cursmx][cursmy] == L2DownList[i]) {
|
||
|
sprintf(infostr, "Back to Level %i", quests[Q_SCHAMB]._qlevel);
|
||
|
cursmx = trigs[0]._tx;
|
||
|
cursmy = trigs[0]._ty;
|
||
|
return TRUE;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
BOOL ForcePWaterTrig()
|
||
|
{
|
||
|
int i;
|
||
|
|
||
|
for(i = 0; L3DownList[i] != -1; i++) {
|
||
|
if(dPiece[cursmx][cursmy] == L3DownList[i]) {
|
||
|
sprintf(infostr, "Back to Level %i", quests[Q_PWATER]._qlevel);
|
||
|
cursmx = trigs[0]._tx;
|
||
|
cursmy = trigs[0]._ty;
|
||
|
return TRUE;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
void CheckTrigForce()
|
||
|
{
|
||
|
trigflag = FALSE;
|
||
|
|
||
|
if(MouseY > 352 - 1) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if(!setlevel) {
|
||
|
switch(leveltype) {
|
||
|
case DTYPE_TOWN:
|
||
|
trigflag = ForceTownTrig();
|
||
|
break;
|
||
|
case DTYPE_CATHEDRAL:
|
||
|
trigflag = ForceL1Trig();
|
||
|
break;
|
||
|
case DTYPE_CATACOMBS:
|
||
|
trigflag = ForceL2Trig();
|
||
|
break;
|
||
|
case DTYPE_CAVES:
|
||
|
trigflag = ForceL3Trig();
|
||
|
break;
|
||
|
case DTYPE_HELL:
|
||
|
trigflag = ForceL4Trig();
|
||
|
break;
|
||
|
}
|
||
|
if(leveltype != DTYPE_TOWN && !trigflag) {
|
||
|
trigflag = ForceQuests();
|
||
|
}
|
||
|
} else {
|
||
|
switch(setlvlnum) {
|
||
|
case SL_SKELKING:
|
||
|
trigflag = ForceSKingTrig();
|
||
|
break;
|
||
|
case SL_BONECHAMB:
|
||
|
trigflag = ForceSChambTrig();
|
||
|
break;
|
||
|
case SL_POISONWATER:
|
||
|
trigflag = ForcePWaterTrig();
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if(trigflag) {
|
||
|
ClearPanel();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CheckTriggers()
|
||
|
{
|
||
|
int i, dx, dy;
|
||
|
char m;
|
||
|
BOOL abortflag;
|
||
|
|
||
|
if(plr[myplr]._pmode != PM_STAND) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
for(i = 0; i < numtrigs; i++) {
|
||
|
if(plr[myplr].WorldX != trigs[i]._tx || plr[myplr].WorldY != trigs[i]._ty) {
|
||
|
continue;
|
||
|
}
|
||
|
switch(trigs[i]._tmsg) {
|
||
|
case WM_DIABNEXTLVL:
|
||
|
if(pcurs >= CURSOR_FIRSTITEM && DropItemBeforeTrig()) {
|
||
|
return;
|
||
|
}
|
||
|
StartNewLvl(myplr, trigs[i]._tmsg, currlevel + 1);
|
||
|
break;
|
||
|
case WM_DIABPREVLVL:
|
||
|
if(pcurs >= CURSOR_FIRSTITEM && DropItemBeforeTrig()) {
|
||
|
return;
|
||
|
}
|
||
|
StartNewLvl(myplr, trigs[i]._tmsg, currlevel - 1);
|
||
|
break;
|
||
|
case WM_DIABTOWNWARP:
|
||
|
if(gbMaxPlayers != 1) {
|
||
|
abortflag = FALSE;
|
||
|
if(trigs[i]._tlvl == 5 && plr[myplr]._pLevel < 8) {
|
||
|
abortflag = TRUE;
|
||
|
dx = plr[myplr].WorldX;
|
||
|
dy = plr[myplr].WorldY + 1;
|
||
|
m = 40;
|
||
|
}
|
||
|
if(trigs[i]._tlvl == 9 && plr[myplr]._pLevel < 13) {
|
||
|
abortflag = TRUE;
|
||
|
dx = plr[myplr].WorldX + 1;
|
||
|
dy = plr[myplr].WorldY;
|
||
|
m = 41;
|
||
|
}
|
||
|
if(trigs[i]._tlvl == 13 && plr[myplr]._pLevel < 17) {
|
||
|
abortflag = TRUE;
|
||
|
dx = plr[myplr].WorldX;
|
||
|
dy = plr[myplr].WorldY + 1;
|
||
|
m = 42;
|
||
|
}
|
||
|
if(abortflag) {
|
||
|
if(plr[myplr]._pClass == PC_WARRIOR) {
|
||
|
PlaySFX(PS_WARR43);
|
||
|
} else if(plr[myplr]._pClass == PC_ROGUE) {
|
||
|
PlaySFX(PS_ROGUE43);
|
||
|
} else if(plr[myplr]._pClass == PC_SORCERER) {
|
||
|
PlaySFX(PS_MAGE43);
|
||
|
}
|
||
|
InitDiabloMsg(m);
|
||
|
NetSendCmdLoc(TRUE, CMD_WALKXY, dx, dy);
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
StartNewLvl(myplr, trigs[i]._tmsg, trigs[i]._tlvl);
|
||
|
break;
|
||
|
case WM_DIABTWARPUP:
|
||
|
TWarpFrom = currlevel;
|
||
|
StartNewLvl(myplr, trigs[i]._tmsg, 0);
|
||
|
break;
|
||
|
case WM_DIABRTNLVL:
|
||
|
/// ASSERT: assert(gbMaxPlayers == 1);
|
||
|
StartNewLvl(myplr, trigs[i]._tmsg, ReturnLvl);
|
||
|
break;
|
||
|
default:
|
||
|
app_fatal("Unknown trigger msg");
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|