Devilution
Diablo devolved - magic behind the 1996 computer game
setmaps.cpp
Go to the documentation of this file.
1 #include "all.h"
2 
4 
5 // BUGFIX: constant data should be const
6 BYTE SkelKingTrans1[8] = {
7  19, 47, 26, 55,
8  26, 49, 30, 53
9 };
10 
11 BYTE SkelKingTrans2[8] = {
12  33, 19, 47, 29,
13  37, 29, 43, 39
14 };
15 
16 BYTE SkelKingTrans3[20] = {
17  27, 53, 35, 61,
18  27, 35, 34, 42,
19  45, 35, 53, 43,
20  45, 53, 53, 61,
21  31, 39, 49, 57
22 };
23 
24 BYTE SkelKingTrans4[28] = {
25  49, 45, 58, 51,
26  57, 31, 62, 37,
27  63, 31, 69, 40,
28  59, 41, 73, 55,
29  63, 55, 69, 65,
30  73, 45, 78, 51,
31  79, 43, 89, 53
32 };
33 
34 BYTE SkelChamTrans1[20] = {
35  43, 19, 50, 26,
36  51, 19, 59, 26,
37  35, 27, 42, 34,
38  43, 27, 49, 34,
39  50, 27, 59, 34
40 };
41 
42 BYTE SkelChamTrans2[8] = {
43  19, 31, 34, 47,
44  34, 35, 42, 42
45 };
46 
47 BYTE SkelChamTrans3[36] = {
48  43, 35, 50, 42,
49  51, 35, 62, 42,
50  63, 31, 66, 46,
51  67, 31, 78, 34,
52  67, 35, 78, 42,
53  67, 43, 78, 46,
54  35, 43, 42, 51,
55  43, 43, 49, 51,
56  50, 43, 59, 51
57 };
58 
60 char *quest_level_names[] = {
61  "",
62  "Skeleton King's Lair",
63  "Bone Chamber",
64  "Maze",
65  "Poisoned Water Supply",
66  "Archbishop Lazarus' Lair"
67 };
68 
69 int ObjIndex(int x, int y)
70 {
71  int i;
72  int oi;
73 
74  for (i = 0; i < nobjects; i++) {
75  oi = objectactive[i];
76  if (object[oi]._ox == x && object[oi]._oy == y)
77  return oi;
78  }
79  app_fatal("ObjIndex: Active object not found at (%d,%d)", x, y);
80  return -1;
81 }
82 
83 #ifndef SPAWN
85 {
86  SetObjMapRange(ObjIndex(64, 34), 20, 7, 23, 10, 1);
87  SetObjMapRange(ObjIndex(64, 59), 20, 14, 21, 16, 2);
88  SetObjMapRange(ObjIndex(27, 37), 8, 1, 15, 11, 3);
89  SetObjMapRange(ObjIndex(46, 35), 8, 1, 15, 11, 3);
90  SetObjMapRange(ObjIndex(49, 53), 8, 1, 15, 11, 3);
91  SetObjMapRange(ObjIndex(27, 53), 8, 1, 15, 11, 3);
92 }
93 
95 {
96  SetObjMapRange(ObjIndex(37, 30), 17, 0, 21, 5, 1);
97  SetObjMapRange(ObjIndex(37, 46), 13, 0, 16, 5, 2);
98 }
99 
101 {
102  SetObjMapRange(ObjIndex(26, 45), 1, 1, 9, 10, 1);
103  SetObjMapRange(ObjIndex(45, 46), 11, 1, 20, 10, 2);
104  SetObjMapRange(ObjIndex(35, 36), 7, 11, 13, 18, 3);
105 }
106 
107 void DRLG_SetMapTrans(char *sFileName)
108 {
109  int x, y;
110  int i, j;
111  BYTE *pLevelMap;
112  BYTE *d;
113  DWORD dwOffset;
114 
115  pLevelMap = LoadFileInMem(sFileName, NULL);
116  d = pLevelMap + 2;
117  x = pLevelMap[0];
118  y = *d;
119  dwOffset = (x * y + 1) * 2;
120  x <<= 1;
121  y <<= 1;
122  dwOffset += 3 * x * y * 2;
123  d += dwOffset;
124 
125  for (j = 0; j < y; j++) {
126  for (i = 0; i < x; i++) {
127  dTransVal[16 + i][16 + j] = *d;
128  d += 2;
129  }
130  }
131  mem_free_dbg(pLevelMap);
132 }
133 
135 {
136  switch (setlvlnum) {
137  case SL_SKELKING:
138  if (quests[Q_SKELKING]._qactive == QUEST_INIT) {
140  quests[Q_SKELKING]._qvar1 = 1;
141  }
142  LoadPreL1Dungeon("Levels\\L1Data\\SklKng1.DUN", 83, 45);
143  LoadL1Dungeon("Levels\\L1Data\\SklKng2.DUN", 83, 45);
144  LoadPalette("Levels\\L1Data\\L1_2.pal");
149  AddL1Objs(0, 0, MAXDUNX, MAXDUNY);
150  AddSKingObjs();
152  break;
153  case SL_BONECHAMB:
154  LoadPreL2Dungeon("Levels\\L2Data\\Bonecha2.DUN", 69, 39);
155  LoadL2Dungeon("Levels\\L2Data\\Bonecha1.DUN", 69, 39);
156  LoadPalette("Levels\\L2Data\\L2_2.pal");
160  AddL2Objs(0, 0, MAXDUNX, MAXDUNY);
161  AddSChamObjs();
163  break;
164  case SL_MAZE:
165  LoadPreL1Dungeon("Levels\\L1Data\\Lv1MazeA.DUN", 20, 50);
166  LoadL1Dungeon("Levels\\L1Data\\Lv1MazeB.DUN", 20, 50);
167  LoadPalette("Levels\\L1Data\\L1_5.pal");
168  AddL1Objs(0, 0, MAXDUNX, MAXDUNY);
169  DRLG_SetMapTrans("Levels\\L1Data\\Lv1MazeA.DUN");
170  break;
171  case SL_POISONWATER:
172  if (quests[Q_PWATER]._qactive == QUEST_INIT)
174  LoadPreL3Dungeon("Levels\\L3Data\\Foulwatr.DUN", 19, 50);
175  LoadL3Dungeon("Levels\\L3Data\\Foulwatr.DUN", 20, 50);
176  LoadPalette("Levels\\L3Data\\L3pfoul.pal");
178  break;
179  case SL_VILEBETRAYER:
180  if (quests[Q_BETRAYER]._qactive == QUEST_DONE) {
181  quests[Q_BETRAYER]._qvar2 = 4;
182  } else if (quests[Q_BETRAYER]._qactive == QUEST_ACTIVE) {
183  quests[Q_BETRAYER]._qvar2 = 3;
184  }
185  LoadPreL1Dungeon("Levels\\L1Data\\Vile1.DUN", 35, 36);
186  LoadL1Dungeon("Levels\\L1Data\\Vile2.DUN", 35, 36);
187  LoadPalette("Levels\\L1Data\\L1_2.pal");
188  AddL1Objs(0, 0, MAXDUNX, MAXDUNY);
189  AddVileObjs();
190  DRLG_SetMapTrans("Levels\\L1Data\\Vile1.DUN");
191  InitNoTriggers();
192  break;
193  }
194 }
195 #endif
196 
SkelKingTrans1
DEVILUTION_BEGIN_NAMESPACE BYTE SkelKingTrans1[8]
Definition: setmaps.cpp:6
quests
QuestStruct quests[MAXQUESTS]
Definition: quests.cpp:8
SkelChamTrans3
BYTE SkelChamTrans3[36]
Definition: setmaps.cpp:47
DRLG_SetMapTrans
void DRLG_SetMapTrans(char *sFileName)
Definition: setmaps.cpp:107
nobjects
int nobjects
Definition: objects.cpp:10
SL_VILEBETRAYER
@ SL_VILEBETRAYER
Definition: enums.h:2544
AddL1Objs
void AddL1Objs(int x1, int y1, int x2, int y2)
Definition: objects.cpp:375
MAXDUNX
#define MAXDUNX
Definition: defs.h:25
LoadPreL3Dungeon
void LoadPreL3Dungeon(char *sFileName, int vx, int vy)
Definition: drlg_l3.cpp:1776
InitPWaterTriggers
void InitPWaterTriggers()
Definition: trigs.cpp:250
InitSKingTriggers
void InitSKingTriggers()
Definition: trigs.cpp:232
ObjIndex
int ObjIndex(int x, int y)
Definition: setmaps.cpp:69
SkelKingTrans2
BYTE SkelKingTrans2[8]
Definition: setmaps.cpp:11
AddL2Objs
void AddL2Objs(int x1, int y1, int x2, int y2)
Definition: objects.cpp:392
all.h
QuestStruct::_qactive
unsigned char _qactive
Definition: structs.h:973
DRLG_ListTrans
void DRLG_ListTrans(int num, BYTE *List)
Definition: gendung.cpp:214
SL_BONECHAMB
@ SL_BONECHAMB
Definition: enums.h:2541
Q_PWATER
@ Q_PWATER
Definition: enums.h:2561
AddVileObjs
void AddVileObjs()
Definition: setmaps.cpp:100
SL_POISONWATER
@ SL_POISONWATER
Definition: enums.h:2543
MAXDUNY
#define MAXDUNY
Definition: defs.h:26
SkelKingTrans3
BYTE SkelKingTrans3[20]
Definition: setmaps.cpp:16
AddSKingObjs
void AddSKingObjs()
Definition: setmaps.cpp:84
SetObjMapRange
void SetObjMapRange(int i, int x1, int y1, int x2, int y2, int v)
Definition: objects.cpp:958
Q_BETRAYER
@ Q_BETRAYER
Definition: enums.h:2563
app_fatal
void app_fatal(const char *pszFmt,...)
Definition: appfat.cpp:18
InitSChambTriggers
void InitSChambTriggers()
Definition: trigs.cpp:241
DEVILUTION_END_NAMESPACE
#define DEVILUTION_END_NAMESPACE
Definition: types.h:10
SL_SKELKING
@ SL_SKELKING
Definition: enums.h:2540
SkelKingTrans4
BYTE SkelKingTrans4[28]
Definition: setmaps.cpp:24
LoadL2Dungeon
void LoadL2Dungeon(char *sFileName, int vx, int vy)
Definition: drlg_l2.cpp:1948
LoadFileInMem
BYTE * LoadFileInMem(char *pszName, DWORD *pdwFileLen)
Load a file in to a buffer.
Definition: engine.cpp:801
objectactive
int objectactive[MAXOBJECTS]
Definition: objects.cpp:9
LoadL1Dungeon
void LoadL1Dungeon(char *sFileName, int vx, int vy)
Definition: drlg_l1.cpp:536
QUEST_DONE
@ QUEST_DONE
Definition: enums.h:2570
SkelChamTrans2
BYTE SkelChamTrans2[8]
Definition: setmaps.cpp:42
SL_MAZE
@ SL_MAZE
Definition: enums.h:2542
LoadPalette
void LoadPalette(char *pszFileName)
Definition: palette.cpp:76
quest_level_names
char * quest_level_names[]
Maps from quest level to quest level names.
Definition: setmaps.cpp:60
LoadPreL1Dungeon
void LoadPreL1Dungeon(char *sFileName, int vx, int vy)
Definition: drlg_l1.cpp:585
dTransVal
char dTransVal[MAXDUNX][MAXDUNY]
Definition: gendung.cpp:37
AddSChamObjs
void AddSChamObjs()
Definition: setmaps.cpp:94
setlvlnum
BYTE setlvlnum
Definition: gendung.cpp:58
LoadSetMap
void LoadSetMap()
Definition: setmaps.cpp:134
Q_SKELKING
@ Q_SKELKING
Definition: enums.h:2560
mem_free_dbg
void mem_free_dbg(void *p)
Multithreaded safe memfree.
Definition: engine.cpp:786
QUEST_ACTIVE
@ QUEST_ACTIVE
Definition: enums.h:2569
QuestStruct::_qvar1
unsigned char _qvar1
Definition: structs.h:980
DEVILUTION_BEGIN_NAMESPACE
Definition: sha.cpp:10
SkelChamTrans1
BYTE SkelChamTrans1[20]
Definition: setmaps.cpp:34
QUEST_INIT
@ QUEST_INIT
Definition: enums.h:2568
DRLG_AreaTrans
void DRLG_AreaTrans(int num, BYTE *List)
Definition: gendung.cpp:228
LoadL3Dungeon
void LoadL3Dungeon(char *sFileName, int vx, int vy)
Definition: drlg_l3.cpp:1714
InitNoTriggers
void InitNoTriggers()
Definition: trigs.cpp:27
QuestStruct::_qvar2
unsigned char _qvar2
Definition: structs.h:981
LoadPreL2Dungeon
void LoadPreL2Dungeon(char *sFileName, int vx, int vy)
Definition: drlg_l2.cpp:2038