/* * UNPUBLISHED -- Rights reserved under the copyright laws of the * United States. Use of a copyright notice is precautionary only and * does not imply publication or disclosure. * * THIS DOCUMENTATION CONTAINS CONFIDENTIAL AND PROPRIETARY INFORMATION * OF BLIZZARD ENTERTAINMENT. ANY DUPLICATION, MODIFICATION, * DISTRIBUTION, OR DISCLOSURE IS STRICTLY PROHIBITED WITHOUT THE PRIOR * EXPRESS WRITTEN PERMISSION OF BLIZZARD ENTERTAINMENT. */ #include "../types.h" int trigflag[5]; TriggerStruct trigs[5]; 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 }; //----- (004619A7) -------------------------------------------------------- void __cdecl InitNoTriggers() { trigflag[4] = 0; trigflag[3] = 0; } //----- (004619B6) -------------------------------------------------------- void __cdecl InitTownTriggers() { char v0; // bl int v1; // eax int v2; // eax trigs[0]._tx = 25; trigs[0]._ty = 29; trigs[0]._tmsg = 1026; trigflag[4] = 1; if ( gbMaxPlayers == 4 ) { trigs[1]._tx = 49; trigflag[0] = 1; trigflag[1] = 1; trigflag[2] = 1; trigs[1]._ty = 21; trigs[1]._tmsg = 1031; trigs[1]._tlvl = 5; trigs[2]._tx = 17; trigs[2]._ty = 69; trigs[2]._tmsg = 1031; trigs[2]._tlvl = 9; trigs[3]._tx = 41; trigs[3]._ty = 80; trigs[3]._tmsg = 1031; trigs[3]._tlvl = 13; trigflag[4] = 4; } else { trigflag[0] = 0; trigflag[1] = 0; trigflag[2] = 0; v0 = plr[myplr].pTownWarps; if ( v0 & 1 ) { trigs[1]._tx = 49; trigs[1]._ty = 21; trigs[1]._tmsg = 1031; trigs[1]._tlvl = 5; trigflag[4] = 2; trigflag[0] = 1; } if ( v0 & 2 ) { trigflag[1] = 1; v1 = trigflag[4]++; trigs[v1]._tx = 17; trigs[v1]._ty = 69; trigs[v1]._tmsg = 1031; trigs[v1]._tlvl = 9; } if ( v0 & 4 ) { trigflag[2] = 1; v2 = trigflag[4]++; trigs[v2]._tx = 41; trigs[v2]._ty = 80; trigs[v2]._tmsg = 1031; trigs[v2]._tlvl = 13; } } trigflag[3] = 0; } // 679660: using guessed type char gbMaxPlayers; //----- (00461B45) -------------------------------------------------------- void __cdecl InitL1Triggers() { int v0; // edi signed int v1; // esi int *v2; // edx int *v3; // ecx TriggerStruct *v4; // eax int (*v5)[112]; // [esp+Ch] [ebp-8h] int (*v6)[112]; // [esp+10h] [ebp-4h] v0 = 0; trigflag[4] = 0; v5 = dPiece; do { v1 = 0; v6 = v5; v2 = &trigs[trigflag[4]]._tmsg; v3 = &trigs[trigflag[4]]._ty; v4 = &trigs[trigflag[4]]; do { if ( (*v6)[0] == 129 ) { ++trigflag[4]; v4->_tx = v1; *v3 = v0; *v2 = 1027; ++v4; v3 += 4; v2 += 4; } if ( (*v6)[0] == 115 ) { ++trigflag[4]; v4->_tx = v1; *v3 = v0; *v2 = 1026; ++v4; v3 += 4; v2 += 4; } ++v6; ++v1; } while ( v1 < 112 ); v5 = (int (*)[112])((char *)v5 + 4); ++v0; } while ( (signed int)v5 < (signed int)dPiece[1] ); trigflag[3] = 0; } //----- (00461BEE) -------------------------------------------------------- void __cdecl InitL2Triggers() { signed int v0; // edi int *v1; // esi int *v2; // edx TriggerStruct *v3; // ecx int *v4; // eax int (*v5)[112]; // [esp+Ch] [ebp-10h] int (*v6)[112]; // [esp+10h] [ebp-Ch] int v7; // [esp+14h] [ebp-8h] int *v8; // [esp+18h] [ebp-4h] trigflag[4] = 0; v7 = 0; v5 = dPiece; do { v0 = 0; v1 = &trigs[trigflag[4]]._tmsg; v2 = &trigs[trigflag[4]]._ty; v3 = &trigs[trigflag[4]]; v8 = &trigs[trigflag[4]]._tlvl; v6 = v5; do { if ( (*v6)[0] == 267 && (v0 != quests[14]._qtx || v7 != quests[14]._qty) ) { ++trigflag[4]; v8 += 4; v3->_tx = v0; *v2 = v7; *v1 = 1027; ++v3; v2 += 4; v1 += 4; } if ( (*v6)[0] == 559 ) { v3->_tx = v0; *v2 = v7; v4 = v8; v8 += 4; *v1 = 1032; *v4 = 0; ++trigflag[4]; ++v3; v2 += 4; v1 += 4; } if ( (*v6)[0] == 271 ) { ++trigflag[4]; v8 += 4; v3->_tx = v0; *v2 = v7; *v1 = 1026; ++v3; v2 += 4; v1 += 4; } ++v6; ++v0; } while ( v0 < 112 ); v5 = (int (*)[112])((char *)v5 + 4); ++v7; } while ( (signed int)v5 < (signed int)dPiece[1] ); trigflag[3] = 0; } //----- (00461CF6) -------------------------------------------------------- void __cdecl InitL3Triggers() { int v0; // edi signed int v1; // esi int *v2; // edx int *v3; // ecx TriggerStruct *v4; // eax int (*v5)[112]; // [esp+Ch] [ebp-8h] int (*v6)[112]; // [esp+10h] [ebp-4h] v0 = 0; trigflag[4] = 0; v5 = dPiece; do { v1 = 0; v6 = v5; v2 = &trigs[trigflag[4]]._tmsg; v3 = &trigs[trigflag[4]]._ty; v4 = &trigs[trigflag[4]]; do { if ( (*v6)[0] == 171 ) { ++trigflag[4]; v4->_tx = v1; *v3 = v0; *v2 = 1027; ++v4; v3 += 4; v2 += 4; } if ( (*v6)[0] == 168 ) { ++trigflag[4]; v4->_tx = v1; *v3 = v0; *v2 = 1026; ++v4; v3 += 4; v2 += 4; } if ( (*v6)[0] == 549 ) { ++trigflag[4]; v4->_tx = v1; *v3 = v0; *v2 = 1032; ++v4; v3 += 4; v2 += 4; } ++v6; ++v1; } while ( v1 < 112 ); v5 = (int (*)[112])((char *)v5 + 4); ++v0; } while ( (signed int)v5 < (signed int)dPiece[1] ); trigflag[3] = 0; } //----- (00461DC6) -------------------------------------------------------- void __cdecl InitL4Triggers() { signed int v0; // edi int *v1; // esi int *v2; // edx TriggerStruct *v3; // ecx int *v4; // eax int v5; // edx int (*v6)[112]; // edi signed int v7; // ecx int *v8; // eax int (*v9)[112]; // [esp+Ch] [ebp-Ch] int (*v10)[112]; // [esp+Ch] [ebp-Ch] int v11; // [esp+10h] [ebp-8h] int (*v12)[112]; // [esp+14h] [ebp-4h] trigflag[4] = 0; v11 = 0; v9 = dPiece; do { v0 = 0; v12 = v9; v1 = &trigs[trigflag[4]]._tmsg; v2 = &trigs[trigflag[4]]._ty; v3 = &trigs[trigflag[4]]; v4 = &trigs[trigflag[4]]._tlvl; do { if ( (*v12)[0] == 83 ) { ++trigflag[4]; v3->_tx = v0; *v2 = v11; *v1 = 1027; v4 += 4; ++v3; v2 += 4; v1 += 4; } if ( (*v12)[0] == 422 ) { v3->_tx = v0; *v2 = v11; *v1 = 1032; *v4 = 0; ++trigflag[4]; v4 += 4; ++v3; v2 += 4; v1 += 4; } if ( (*v12)[0] == 120 ) { ++trigflag[4]; v3->_tx = v0; *v2 = v11; *v1 = 1026; v4 += 4; ++v3; v2 += 4; v1 += 4; } ++v12; ++v0; } while ( v0 < 112 ); v9 = (int (*)[112])((char *)v9 + 4); ++v11; } while ( (signed int)v9 < (signed int)dPiece[1] ); v5 = 0; v10 = dPiece; do { v6 = v10; v7 = 0; v8 = &trigs[trigflag[4]]._ty; do { if ( (*v6)[0] == 370 && quests[15]._qactive == 3 ) { ++trigflag[4]; *(v8 - 1) = v7; *v8 = v5; v8[1] = 1026; v8 += 4; } ++v7; ++v6; } while ( v7 < 112 ); v10 = (int (*)[112])((char *)v10 + 4); ++v5; } while ( (signed int)v10 < (signed int)dPiece[1] ); trigflag[3] = 0; } //----- (00461F0A) -------------------------------------------------------- void __cdecl InitSKingTriggers() { trigflag[3] = 0; trigflag[4] = 1; trigs[0]._tx = 82; trigs[0]._ty = 42; trigs[0]._tmsg = 1028; } //----- (00461F3A) -------------------------------------------------------- void __cdecl InitSChambTriggers() { trigflag[3] = 0; trigflag[4] = 1; trigs[0]._tx = 70; trigs[0]._ty = 39; trigs[0]._tmsg = 1028; } //----- (00461F6A) -------------------------------------------------------- void __cdecl InitPWaterTriggers() { trigflag[3] = 0; trigflag[4] = 1; trigs[0]._tx = 30; trigs[0]._ty = 83; trigs[0]._tmsg = 1028; } //----- (00461F9A) -------------------------------------------------------- void __cdecl InitVPTriggers() { trigflag[3] = 0; trigflag[4] = 1; trigs[0]._tx = 35; trigs[0]._ty = 32; trigs[0]._tmsg = 1028; } //----- (00461FCA) -------------------------------------------------------- unsigned char __cdecl ForceTownTrig() { int v0; // edx int *v1; // esi int v2; // edx int *v3; // esi signed int v4; // esi signed int v5; // edx v0 = TownDownList[0]; if ( TownDownList[0] != -1 ) { v1 = TownDownList; while ( dPiece[0][cursmy + 112 * cursmx] != v0 ) { ++v1; v0 = *v1; if ( *v1 == -1 ) goto LABEL_5; } strcpy(infostr, "Down to dungeon"); cursmx = 25; cursmy = 29; return 1; } LABEL_5: if ( trigflag[0] ) { v2 = TownWarp1List[0]; if ( TownWarp1List[0] != -1 ) { v3 = TownWarp1List; while ( dPiece[0][cursmy + 112 * cursmx] != v2 ) { ++v3; v2 = *v3; if ( *v3 == -1 ) goto LABEL_13; } strcpy(infostr, "Down to catacombs"); cursmx = 49; cursmy = 21; return 1; } } LABEL_13: if ( trigflag[1] ) { v4 = 1199; while ( dPiece[0][cursmy + 112 * cursmx] != v4 ) { if ( ++v4 > 1220 ) goto LABEL_17; } strcpy(infostr, "Down to caves"); cursmx = 17; cursmy = 69; return 1; } LABEL_17: if ( trigflag[2] ) { v5 = 1240; while ( dPiece[0][cursmy + 112 * cursmx] != v5 ) { if ( ++v5 > 1255 ) return 0; } strcpy(infostr, "Down to hell"); cursmx = 41; cursmy = 80; return 1; } return 0; } //----- (00462130) -------------------------------------------------------- unsigned char __cdecl ForceL1Trig() { int *v0; // eax int *v1; // esi int v2; // eax int *v3; // edx int *v4; // eax int *v5; // esi int *v6; // edx int v8; // eax int v9; // ecx if ( L1UpList[0] == -1 ) { LABEL_12: if ( L1DownList[0] == -1 ) return 0; v4 = L1DownList; v5 = L1DownList; while ( 1 ) { if ( dPiece[0][cursmy + 112 * cursmx] == *v4 ) { sprintf(infostr, "Down to level %i", currlevel + 1); v2 = 0; if ( trigflag[4] > 0 ) break; } LABEL_19: ++v5; v4 = v5; if ( *v5 == -1 ) return 0; } v6 = &trigs[0]._tmsg; while ( *v6 != 1026 ) { ++v2; v6 += 4; if ( v2 >= trigflag[4] ) goto LABEL_19; } } else { v0 = L1UpList; v1 = L1UpList; while ( 1 ) { if ( dPiece[0][cursmy + 112 * cursmx] == *v0 ) { if ( currlevel <= 1u ) strcpy(infostr, "Up to town"); else sprintf(infostr, "Up to level %i", currlevel - 1); v2 = 0; if ( trigflag[4] > 0 ) break; } LABEL_11: ++v1; v0 = v1; if ( *v1 == -1 ) goto LABEL_12; } v3 = &trigs[0]._tmsg; while ( *v3 != 1027 ) { ++v2; v3 += 4; if ( v2 >= trigflag[4] ) goto LABEL_11; } } v8 = v2; v9 = trigs[v8]._tx; cursmy = trigs[v8]._ty; cursmx = v9; return 1; } //----- (0046224C) -------------------------------------------------------- unsigned char __cdecl ForceL2Trig() { int *v0; // eax int *v1; // ebp int v2; // edi TriggerStruct *v3; // esi int v4; // ebx int v5; // eax int *v6; // eax int *v7; // esi int v8; // eax int *v9; // ecx int v10; // eax int v11; // ecx int v12; // eax int *v13; // eax int *v14; // ebp TriggerStruct *v15; // esi int v16; // ebx int v17; // eax int v19; // edi if ( L2UpList[0] == -1 ) { LABEL_11: if ( L2DownList[0] != -1 ) { v6 = L2DownList; v7 = L2DownList; while ( 1 ) { if ( dPiece[0][cursmy + 112 * cursmx] == *v6 ) { sprintf(infostr, "Down to level %i", currlevel + 1); v8 = 0; if ( trigflag[4] > 0 ) break; } LABEL_18: ++v7; v6 = v7; if ( *v7 == -1 ) goto LABEL_22; } v9 = &trigs[0]._tmsg; while ( *v9 != 1026 ) { ++v8; v9 += 4; if ( v8 >= trigflag[4] ) goto LABEL_18; } v10 = v8; v11 = trigs[v10]._tx; v12 = trigs[v10]._ty; cursmx = v11; goto LABEL_37; } LABEL_22: if ( currlevel != 5 || L2TWarpUpList[0] == -1 ) return 0; v13 = L2TWarpUpList; v14 = L2TWarpUpList; while ( 1 ) { if ( dPiece[0][cursmy + 112 * cursmx] == *v13 ) { v2 = 0; if ( trigflag[4] > 0 ) break; } LABEL_32: ++v14; v13 = v14; if ( *v14 == -1 ) return 0; } v15 = trigs; while ( 1 ) { if ( v15->_tmsg == 1032 ) { v16 = abs(v15->_tx - cursmx); v17 = abs(v15->_ty - cursmy); if ( v16 < 4 && v17 < 4 ) break; } ++v2; ++v15; if ( v2 >= trigflag[4] ) goto LABEL_32; } strcpy(infostr, "Up to town"); } else { v0 = L2UpList; v1 = L2UpList; while ( 1 ) { if ( dPiece[0][cursmy + 112 * cursmx] == *v0 ) { v2 = 0; if ( trigflag[4] > 0 ) break; } LABEL_10: ++v1; v0 = v1; if ( *v1 == -1 ) goto LABEL_11; } v3 = trigs; while ( 1 ) { if ( v3->_tmsg == 1027 ) { v4 = abs(v3->_tx - cursmx); v5 = abs(v3->_ty - cursmy); if ( v4 < 4 && v5 < 4 ) break; } ++v2; ++v3; if ( v2 >= trigflag[4] ) goto LABEL_10; } sprintf(infostr, "Up to level %i", currlevel - 1); } v19 = v2; cursmx = trigs[v19]._tx; v12 = trigs[v19]._ty; LABEL_37: cursmy = v12; return 1; } //----- (0046244F) -------------------------------------------------------- unsigned char __cdecl ForceL3Trig() { int *v0; // eax int *v1; // esi int v2; // eax int *v3; // ecx int *v4; // ecx int *v5; // esi int v6; // ecx int v7; // eax int *v8; // ecx int *v9; // eax int *v10; // ebp int v11; // edi TriggerStruct *v12; // esi int v13; // ebx int v14; // eax int v15; // eax int v16; // ecx int v17; // eax int v18; // edi if ( L3UpList[0] != -1 ) { v0 = L3UpList; v1 = L3UpList; while ( 1 ) { if ( dPiece[0][cursmy + 112 * cursmx] == *v0 ) { sprintf(infostr, "Up to level %i", currlevel - 1); v2 = 0; if ( trigflag[4] > 0 ) break; } LABEL_8: ++v1; v0 = v1; if ( *v1 == -1 ) goto LABEL_9; } v3 = &trigs[0]._tmsg; while ( *v3 != 1027 ) { ++v2; v3 += 4; if ( v2 >= trigflag[4] ) goto LABEL_8; } goto LABEL_31; } LABEL_9: if ( L3DownList[0] != -1 ) { v4 = L3DownList; v5 = L3DownList; while ( 1 ) { v6 = *v4; v7 = cursmy + 112 * cursmx; if ( dPiece[0][v7] == v6 || dPiece[1][v7] == v6 || dPiece[2][v7] == v6 ) { sprintf(infostr, "Down to level %i", currlevel + 1); v2 = 0; if ( trigflag[4] > 0 ) break; } LABEL_18: ++v5; v4 = v5; if ( *v5 == -1 ) goto LABEL_19; } v8 = &trigs[0]._tmsg; while ( *v8 != 1026 ) { ++v2; v8 += 4; if ( v2 >= trigflag[4] ) goto LABEL_18; } LABEL_31: v15 = v2; v16 = trigs[v15]._tx; v17 = trigs[v15]._ty; cursmx = v16; LABEL_33: cursmy = v17; return 1; } LABEL_19: if ( currlevel == 9 && L3TWarpUpList[0] != -1 ) { v9 = L3TWarpUpList; v10 = L3TWarpUpList; while ( 1 ) { if ( dPiece[0][cursmy + 112 * cursmx] == *v9 ) { v11 = 0; if ( trigflag[4] > 0 ) break; } LABEL_29: ++v10; v9 = v10; if ( *v10 == -1 ) return 0; } v12 = trigs; while ( 1 ) { if ( v12->_tmsg == 1032 ) { v13 = abs(v12->_tx - cursmx); v14 = abs(v12->_ty - cursmy); if ( v13 < 4 && v14 < 4 ) break; } ++v11; ++v12; if ( v11 >= trigflag[4] ) goto LABEL_29; } strcpy(infostr, "Up to town"); v18 = v11; cursmx = trigs[v18]._tx; v17 = trigs[v18]._ty; goto LABEL_33; } return 0; } //----- (0046262D) -------------------------------------------------------- unsigned char __cdecl ForceL4Trig() { int *v0; // eax int *v1; // esi int v2; // eax int *v3; // ecx int *v4; // eax int *v5; // esi int *v6; // ecx int *v7; // eax int *v8; // ebp int v9; // edi TriggerStruct *v10; // esi int v11; // ebx int v12; // eax int *v13; // eax int *v14; // esi int *v15; // edx int v16; // edi int v17; // eax int v18; // eax int v19; // ecx if ( L4UpList[0] != -1 ) { v0 = L4UpList; v1 = L4UpList; while ( 1 ) { if ( dPiece[0][cursmy + 112 * cursmx] == *v0 ) { sprintf(infostr, "Up to level %i", currlevel - 1); v2 = 0; if ( trigflag[4] > 0 ) break; } LABEL_8: ++v1; v0 = v1; if ( *v1 == -1 ) goto LABEL_9; } v3 = &trigs[0]._tmsg; while ( *v3 != 1027 ) { ++v2; v3 += 4; if ( v2 >= trigflag[4] ) goto LABEL_8; } goto LABEL_39; } LABEL_9: if ( L4DownList[0] != -1 ) { v4 = L4DownList; v5 = L4DownList; while ( 1 ) { if ( dPiece[0][cursmy + 112 * cursmx] == *v4 ) { sprintf(infostr, "Down to level %i", currlevel + 1); v2 = 0; if ( trigflag[4] > 0 ) break; } LABEL_16: ++v5; v4 = v5; if ( *v5 == -1 ) goto LABEL_17; } v6 = &trigs[0]._tmsg; while ( *v6 != 1026 ) { ++v2; v6 += 4; if ( v2 >= trigflag[4] ) goto LABEL_16; } goto LABEL_39; } LABEL_17: if ( currlevel == 13 ) { if ( L4TWarpUpList[0] != -1 ) { v7 = L4TWarpUpList; v8 = L4TWarpUpList; while ( 1 ) { if ( dPiece[0][cursmy + 112 * cursmx] == *v7 ) { v9 = 0; if ( trigflag[4] > 0 ) break; } LABEL_27: ++v8; v7 = v8; if ( *v8 == -1 ) goto LABEL_28; } v10 = trigs; while ( 1 ) { if ( v10->_tmsg == 1032 ) { v11 = abs(v10->_tx - cursmx); v12 = abs(v10->_ty - cursmy); if ( v11 < 4 && v12 < 4 ) break; } ++v9; ++v10; if ( v9 >= trigflag[4] ) goto LABEL_27; } strcpy(infostr, "Up to town"); v16 = v9; cursmx = trigs[v16]._tx; v17 = trigs[v16]._ty; goto LABEL_40; } } else { LABEL_28: if ( currlevel == 15 && L4PentaList[0] != -1 ) { v13 = L4PentaList; v14 = L4PentaList; while ( 1 ) { if ( dPiece[0][cursmy + 112 * cursmx] == *v13 ) { strcpy(infostr, "Down to Diablo"); v2 = 0; if ( trigflag[4] > 0 ) break; } LABEL_36: ++v14; v13 = v14; if ( *v14 == -1 ) return 0; } v15 = &trigs[0]._tmsg; while ( *v15 != 1026 ) { ++v2; v15 += 4; if ( v2 >= trigflag[4] ) goto LABEL_36; } LABEL_39: v18 = v2; v19 = trigs[v18]._tx; v17 = trigs[v18]._ty; cursmx = v19; LABEL_40: cursmy = v17; return 1; } } return 0; } //----- (00462876) -------------------------------------------------------- void __cdecl Freeupstairs() { int *v0; // ecx int v1; // ebx char *v2; // eax signed int v3; // edi char *v4; // edx signed int v5; // esi if ( trigflag[4] > 0 ) { v0 = &trigs[0]._ty; v1 = trigflag[4]; do { v2 = &nBlockTable[112 * *(v0 - 1) + 1830 + *v0]; v3 = 5; do { v4 = v2; v5 = 5; do { *v4 |= 8u; v4 += 112; --v5; } while ( v5 ); ++v2; --v3; } while ( v3 ); v0 += 4; --v1; } while ( v1 ); } } //----- (004628B7) -------------------------------------------------------- unsigned char __cdecl ForceSKingTrig() { int v0; // eax int *v1; // ecx v0 = L1UpList[0]; if ( L1UpList[0] == -1 ) return 0; v1 = L1UpList; while ( dPiece[0][cursmy + 112 * cursmx] != v0 ) { ++v1; v0 = *v1; if ( *v1 == -1 ) return 0; } sprintf(infostr, "Back to Level %i", (unsigned char)quests[12]._qlevel); cursmx = trigs[0]._tx; cursmy = trigs[0]._ty; return 1; } //----- (0046291F) -------------------------------------------------------- unsigned char __cdecl ForceSChambTrig() { int v0; // eax int *v1; // ecx v0 = L2DownList[0]; if ( L2DownList[0] == -1 ) return 0; v1 = L2DownList; while ( dPiece[0][cursmy + 112 * cursmx] != v0 ) { ++v1; v0 = *v1; if ( *v1 == -1 ) return 0; } sprintf(infostr, "Back to Level %i", (unsigned char)quests[14]._qlevel); cursmx = trigs[0]._tx; cursmy = trigs[0]._ty; return 1; } //----- (00462987) -------------------------------------------------------- unsigned char __cdecl ForcePWaterTrig() { int v0; // eax int *v1; // ecx v0 = L3DownList[0]; if ( L3DownList[0] == -1 ) return 0; v1 = L3DownList; while ( dPiece[0][cursmy + 112 * cursmx] != v0 ) { ++v1; v0 = *v1; if ( *v1 == -1 ) return 0; } sprintf(infostr, "Back to Level %i", (unsigned char)quests[13]._qlevel); cursmx = trigs[0]._tx; cursmy = trigs[0]._ty; return 1; } //----- (004629EF) -------------------------------------------------------- void __cdecl CheckTrigForce() { int v0; // eax int v1; // eax trigflag[3] = 0; if ( MouseY <= 351 ) { if ( setlevel ) { switch ( setlvlnum ) { case SL_SKELKING: v1 = ForceSKingTrig(); break; case SL_BONECHAMB: v1 = ForceSChambTrig(); break; case SL_POISONWATER: v1 = ForcePWaterTrig(); break; default: return; } goto LABEL_23; } if ( leveltype ) { switch ( leveltype ) { case DTYPE_CATHEDRAL: v0 = ForceL1Trig(); break; case DTYPE_CATACOMBS: v0 = ForceL2Trig(); break; case DTYPE_CAVES: v0 = ForceL3Trig(); break; case DTYPE_HELL: v0 = ForceL4Trig(); break; default: LABEL_14: if ( !leveltype ) goto LABEL_24; if ( trigflag[3] ) { LABEL_25: ClearPanel(); return; } v1 = ForceQuests(); LABEL_23: trigflag[3] = v1; LABEL_24: if ( !trigflag[3] ) return; goto LABEL_25; } } else { v0 = ForceTownTrig(); } trigflag[3] = v0; goto LABEL_14; } } // 5BB1ED: using guessed type char leveltype; // 5CCB10: using guessed type char setlvlnum; // 5CF31D: using guessed type char setlevel; //----- (00462A9D) -------------------------------------------------------- void __cdecl CheckTriggers() { int *v0; // edi int v1; // esi int v2; // ecx int v3; // eax int v4; // edx signed int v5; // edx int v6; // eax char v7; // al int v8; // ecx int v9; // [esp-4h] [ebp-20h] int x; // [esp+Ch] [ebp-10h] int y; // [esp+10h] [ebp-Ch] int v12; // [esp+14h] [ebp-8h] int error_id; // [esp+1Bh] [ebp-1h] if ( plr[myplr]._pmode ) return; v12 = 0; if ( trigflag[4] <= 0 ) return; v0 = &trigs[0]._tmsg; while ( 1 ) { v1 = myplr; v2 = plr[myplr].WorldX; if ( v2 != *(v0 - 2) ) goto LABEL_34; v3 = plr[v1].WorldY; if ( v3 != *(v0 - 1) ) goto LABEL_34; v4 = *v0; if ( *v0 == WM_DIABNEXTLVL ) { if ( pcurs >= CURSOR_FIRSTITEM && DropItemBeforeTrig() ) return; v6 = currlevel + 1; goto LABEL_32; } if ( *v0 == 1027 ) { if ( pcurs >= CURSOR_FIRSTITEM && DropItemBeforeTrig() ) return; v6 = currlevel - 1; LABEL_32: v9 = v6; goto LABEL_33; } if ( *v0 != 1028 ) break; StartNewLvl(myplr, v4, ReturnLvl); LABEL_34: ++v12; v0 += 4; if ( v12 >= trigflag[4] ) return; } if ( *v0 != 1031 ) { if ( *v0 == 1032 ) { TWarpFrom = currlevel; StartNewLvl(myplr, v4, 0); } else { TermMsg("Unknown trigger msg"); } goto LABEL_34; } if ( gbMaxPlayers == 1 ) goto LABEL_46; v5 = 0; if ( v0[1] == 5 && plr[v1]._pLevel < 8 ) { v5 = 1; x = plr[myplr].WorldX; _LOBYTE(y) = v3 + 1; _LOBYTE(error_id) = 40; } if ( v0[1] == 9 && plr[v1]._pLevel < 13 ) { v5 = 1; _LOBYTE(x) = v2 + 1; y = plr[v1].WorldY; _LOBYTE(error_id) = 41; } if ( v0[1] == 13 && plr[v1]._pLevel < 17 ) { x = plr[myplr].WorldX; v5 = 1; _LOBYTE(y) = v3 + 1; _LOBYTE(error_id) = 42; } if ( !v5 ) { LABEL_46: v9 = v0[1]; LABEL_33: StartNewLvl(myplr, *v0, v9); goto LABEL_34; } v7 = plr[myplr]._pClass; switch ( v7 ) { case UI_WARRIOR: v8 = PS_WARR43; goto LABEL_42; case UI_ROGUE: v8 = PS_ROGUE43; goto LABEL_42; case UI_SORCERER: v8 = PS_MAGE43; LABEL_42: PlaySFX(v8); break; } _LOBYTE(v2) = error_id; InitDiabloMsg(v2); NetSendCmdLoc(1u, 1u, x, y); } // 679660: using guessed type char gbMaxPlayers; // 6ABB30: using guessed type int TWarpFrom;