Now diablo.h is treated in the same way as all other header files of Source, as it only contains the declarations of global variables and functions of diablo.cpp. Besides consistency, this also enables mods to include diablo.h just like any other header file without having to include every header file (and without having to include C++ specific aspects of the now all.h).
192 lines
4.6 KiB
C++
192 lines
4.6 KiB
C++
#include "all.h"
|
|
|
|
// BUGFIX: constant data should be const
|
|
BYTE SkelKingTrans1[8] = {
|
|
19, 47, 26, 55,
|
|
26, 49, 30, 53
|
|
};
|
|
|
|
BYTE SkelKingTrans2[8] = {
|
|
33, 19, 47, 29,
|
|
37, 29, 43, 39
|
|
};
|
|
|
|
BYTE SkelKingTrans3[20] = {
|
|
27, 53, 35, 61,
|
|
27, 35, 34, 42,
|
|
45, 35, 53, 43,
|
|
45, 53, 53, 61,
|
|
31, 39, 49, 57
|
|
};
|
|
|
|
BYTE SkelKingTrans4[28] = {
|
|
49, 45, 58, 51,
|
|
57, 31, 62, 37,
|
|
63, 31, 69, 40,
|
|
59, 41, 73, 55,
|
|
63, 55, 69, 65,
|
|
73, 45, 78, 51,
|
|
79, 43, 89, 53
|
|
};
|
|
|
|
BYTE SkelChamTrans1[20] = {
|
|
43, 19, 50, 26,
|
|
51, 19, 59, 26,
|
|
35, 27, 42, 34,
|
|
43, 27, 49, 34,
|
|
50, 27, 59, 34
|
|
};
|
|
|
|
BYTE SkelChamTrans2[8] = {
|
|
19, 31, 34, 47,
|
|
34, 35, 42, 42
|
|
};
|
|
|
|
BYTE SkelChamTrans3[36] = {
|
|
43, 35, 50, 42,
|
|
51, 35, 62, 42,
|
|
63, 31, 66, 46,
|
|
67, 31, 78, 34,
|
|
67, 35, 78, 42,
|
|
67, 43, 78, 46,
|
|
35, 43, 42, 51,
|
|
43, 43, 49, 51,
|
|
50, 43, 59, 51
|
|
};
|
|
|
|
char *quest_level_names[] = {
|
|
"",
|
|
"Skeleton King's Lair",
|
|
"Bone Chamber",
|
|
"Maze",
|
|
"Poisoned Water Supply",
|
|
"Archbishop Lazarus' Lair"
|
|
};
|
|
|
|
int ObjIndex(int x, int y)
|
|
{
|
|
int i;
|
|
int oi;
|
|
|
|
for (i = 0; i < nobjects; i++) {
|
|
oi = objectactive[i];
|
|
if (object[oi]._ox == x && object[oi]._oy == y)
|
|
return oi;
|
|
}
|
|
app_fatal("ObjIndex: Active object not found at (%d,%d)", x, y);
|
|
return -1;
|
|
}
|
|
|
|
#ifndef SPAWN
|
|
void AddSKingObjs()
|
|
{
|
|
SetObjMapRange(ObjIndex(64, 34), 20, 7, 23, 10, 1);
|
|
SetObjMapRange(ObjIndex(64, 59), 20, 14, 21, 16, 2);
|
|
SetObjMapRange(ObjIndex(27, 37), 8, 1, 15, 11, 3);
|
|
SetObjMapRange(ObjIndex(46, 35), 8, 1, 15, 11, 3);
|
|
SetObjMapRange(ObjIndex(49, 53), 8, 1, 15, 11, 3);
|
|
SetObjMapRange(ObjIndex(27, 53), 8, 1, 15, 11, 3);
|
|
}
|
|
|
|
void AddSChamObjs()
|
|
{
|
|
SetObjMapRange(ObjIndex(37, 30), 17, 0, 21, 5, 1);
|
|
SetObjMapRange(ObjIndex(37, 46), 13, 0, 16, 5, 2);
|
|
}
|
|
|
|
void AddVileObjs()
|
|
{
|
|
SetObjMapRange(ObjIndex(26, 45), 1, 1, 9, 10, 1);
|
|
SetObjMapRange(ObjIndex(45, 46), 11, 1, 20, 10, 2);
|
|
SetObjMapRange(ObjIndex(35, 36), 7, 11, 13, 18, 3);
|
|
}
|
|
|
|
void DRLG_SetMapTrans(char *sFileName)
|
|
{
|
|
int x, y;
|
|
int i, j;
|
|
BYTE *pLevelMap;
|
|
BYTE *d;
|
|
DWORD dwOffset;
|
|
|
|
pLevelMap = LoadFileInMem(sFileName, NULL);
|
|
d = pLevelMap + 2;
|
|
x = pLevelMap[0];
|
|
y = *d;
|
|
dwOffset = (x * y + 1) * 2;
|
|
x <<= 1;
|
|
y <<= 1;
|
|
dwOffset += 3 * x * y * 2;
|
|
d += dwOffset;
|
|
|
|
for (j = 0; j < y; j++) {
|
|
for (i = 0; i < x; i++) {
|
|
dTransVal[16 + i][16 + j] = *d;
|
|
d += 2;
|
|
}
|
|
}
|
|
mem_free_dbg(pLevelMap);
|
|
}
|
|
|
|
void LoadSetMap()
|
|
{
|
|
switch (setlvlnum) {
|
|
case SL_SKELKING:
|
|
if (quests[QTYPE_KING]._qactive == 1) {
|
|
quests[QTYPE_KING]._qactive = 2;
|
|
quests[QTYPE_KING]._qvar1 = 1;
|
|
}
|
|
LoadPreL1Dungeon("Levels\\L1Data\\SklKng1.DUN", 83, 45);
|
|
LoadL1Dungeon("Levels\\L1Data\\SklKng2.DUN", 83, 45);
|
|
LoadPalette("Levels\\L1Data\\L1_2.pal");
|
|
DRLG_AreaTrans(sizeof(SkelKingTrans1) / 4, SkelKingTrans1);
|
|
DRLG_ListTrans(sizeof(SkelKingTrans2) / 4, SkelKingTrans2);
|
|
DRLG_AreaTrans(sizeof(SkelKingTrans3) / 4, SkelKingTrans3);
|
|
DRLG_ListTrans(sizeof(SkelKingTrans4) / 4, SkelKingTrans4);
|
|
AddL1Objs(0, 0, MAXDUNX, MAXDUNY);
|
|
AddSKingObjs();
|
|
InitSKingTriggers();
|
|
break;
|
|
case SL_BONECHAMB:
|
|
LoadPreL2Dungeon("Levels\\L2Data\\Bonecha2.DUN", 69, 39);
|
|
LoadL2Dungeon("Levels\\L2Data\\Bonecha1.DUN", 69, 39);
|
|
LoadPalette("Levels\\L2Data\\L2_2.pal");
|
|
DRLG_ListTrans(sizeof(SkelChamTrans1) / 4, SkelChamTrans1);
|
|
DRLG_AreaTrans(sizeof(SkelChamTrans2) / 4, SkelChamTrans2);
|
|
DRLG_ListTrans(sizeof(SkelChamTrans3) / 4, SkelChamTrans3);
|
|
AddL2Objs(0, 0, MAXDUNX, MAXDUNY);
|
|
AddSChamObjs();
|
|
InitSChambTriggers();
|
|
break;
|
|
case SL_MAZE:
|
|
LoadPreL1Dungeon("Levels\\L1Data\\Lv1MazeA.DUN", 20, 50);
|
|
LoadL1Dungeon("Levels\\L1Data\\Lv1MazeB.DUN", 20, 50);
|
|
LoadPalette("Levels\\L1Data\\L1_5.pal");
|
|
AddL1Objs(0, 0, MAXDUNX, MAXDUNY);
|
|
DRLG_SetMapTrans("Levels\\L1Data\\Lv1MazeA.DUN");
|
|
break;
|
|
case SL_POISONWATER:
|
|
if (quests[QTYPE_PW]._qactive == 1)
|
|
quests[QTYPE_PW]._qactive = 2;
|
|
LoadPreL3Dungeon("Levels\\L3Data\\Foulwatr.DUN", 19, 50);
|
|
LoadL3Dungeon("Levels\\L3Data\\Foulwatr.DUN", 20, 50);
|
|
LoadPalette("Levels\\L3Data\\L3pfoul.pal");
|
|
InitPWaterTriggers();
|
|
break;
|
|
case SL_VILEBETRAYER:
|
|
if (quests[QTYPE_VB]._qactive == 3) {
|
|
quests[QTYPE_VB]._qvar2 = 4;
|
|
} else if (quests[QTYPE_VB]._qactive == 2) {
|
|
quests[QTYPE_VB]._qvar2 = 3;
|
|
}
|
|
LoadPreL1Dungeon("Levels\\L1Data\\Vile1.DUN", 35, 36);
|
|
LoadL1Dungeon("Levels\\L1Data\\Vile2.DUN", 35, 36);
|
|
LoadPalette("Levels\\L1Data\\L1_2.pal");
|
|
AddL1Objs(0, 0, MAXDUNX, MAXDUNY);
|
|
AddVileObjs();
|
|
DRLG_SetMapTrans("Levels\\L1Data\\Vile1.DUN");
|
|
InitNoTriggers();
|
|
break;
|
|
}
|
|
}
|
|
#endif
|