Devilution
Diablo devolved - magic behind the 1996 computer game
debug.cpp
Go to the documentation of this file.
1 
6 #include "all.h"
7 
9 
10 #ifdef _DEBUG
11 BOOL update_seed_check = FALSE;
12 #endif
13 
14 #define DEBUGSEEDS 4096
18 
19 BYTE *pSquareCel;
22 
24 {
25  if (visiondebug)
26  pSquareCel = LoadFileInMem("Data\\Square.CEL", NULL);
27 }
28 
30 {
32 }
33 
35 {
36  int i, j;
37 
38  for (j = 0; j < MAXDUNY; j++) {
39  for (i = 0; i < MAXDUNX; i++) {
40  if (dMonster[i][j] != 0)
41  app_fatal("Monsters not cleared");
42  if (dPlayer[i][j] != 0)
43  app_fatal("Players not cleared");
44 
45  dMonsDbg[currlevel][i][j] = dFlags[i][j] & BFLAG_VISIBLE;
46  dFlagDbg[currlevel][i][j] = dFlags[i][j] & BFLAG_POPULATED;
47  }
48  }
49 }
50 
51 #ifdef _DEBUG
52 void GiveGoldCheat()
53 {
54  int i, ni;
55 
56  for (i = 0; i < NUM_INV_GRID_ELEM; i++) {
57  if (!plr[myplr].InvGrid[i]) {
58  ni = plr[myplr]._pNumInv++;
59  SetPlrHandItem(&plr[myplr].InvList[ni], IDI_GOLD);
60  GetPlrHandSeed(&plr[myplr].InvList[ni]);
65  }
66  }
67 }
68 
69 void StoresCheat()
70 {
71  int i;
72 
73  numpremium = 0;
74 
75  for (i = 0; i < SMITH_PREMIUM_ITEMS; i++)
76  premiumitem[i]._itype = ITYPE_NONE;
77 
78  SpawnPremium(30);
79 
80  for (i = 0; i < 20; i++)
81  witchitem[i]._itype = ITYPE_NONE;
82 
83  SpawnWitch(30);
84 }
85 
86 void TakeGoldCheat()
87 {
88  int i;
89  char ig;
90 
91  for (i = 0; i < NUM_INV_GRID_ELEM; i++) {
92  ig = plr[myplr].InvGrid[i];
93  if (ig > 0 && plr[myplr].InvList[ig - 1]._itype == ITYPE_GOLD)
94  RemoveInvItem(myplr, ig - 1);
95  }
96 
97  for (i = 0; i < MAXBELTITEMS; i++) {
98  if (plr[myplr].SpdList[i]._itype == ITYPE_GOLD)
100  }
101 
102  plr[myplr]._pGold = 0;
103 }
104 
105 void MaxSpellsCheat()
106 {
107  int i;
108 
109  for (i = 1; i < MAX_SPELLS; i++) {
110  if (spelldata[i].sBookLvl != -1) {
111  plr[myplr]._pMemSpells |= (__int64)1 << (i - 1);
112  plr[myplr]._pSplLvl[i] = 10;
113  }
114  }
115 }
116 
117 void SetSpellLevelCheat(char spl, int spllvl)
118 {
119  plr[myplr]._pMemSpells |= (__int64)1 << (spl - 1);
120  plr[myplr]._pSplLvl[spl] = spllvl;
121 }
122 
123 void SetAllSpellsCheat()
124 {
125  SetSpellLevelCheat(SPL_FIREBOLT, 8);
126  SetSpellLevelCheat(SPL_CBOLT, 11);
127  SetSpellLevelCheat(SPL_HBOLT, 10);
128  SetSpellLevelCheat(SPL_HEAL, 7);
129  SetSpellLevelCheat(SPL_HEALOTHER, 5);
130  SetSpellLevelCheat(SPL_LIGHTNING, 9);
131  SetSpellLevelCheat(SPL_FIREWALL, 5);
132  SetSpellLevelCheat(SPL_TELEKINESIS, 3);
133  SetSpellLevelCheat(SPL_TOWN, 3);
134  SetSpellLevelCheat(SPL_FLASH, 3);
135  SetSpellLevelCheat(SPL_RNDTELEPORT, 2);
136  SetSpellLevelCheat(SPL_MANASHIELD, 2);
137  SetSpellLevelCheat(SPL_WAVE, 4);
138  SetSpellLevelCheat(SPL_FIREBALL, 3);
139  SetSpellLevelCheat(SPL_STONE, 1);
140  SetSpellLevelCheat(SPL_CHAIN, 1);
141  SetSpellLevelCheat(SPL_GUARDIAN, 4);
142  SetSpellLevelCheat(SPL_ELEMENT, 3);
143  SetSpellLevelCheat(SPL_NOVA, 1);
144  SetSpellLevelCheat(SPL_GOLEM, 2);
145  SetSpellLevelCheat(SPL_FLARE, 1);
146  SetSpellLevelCheat(SPL_BONESPIRIT, 1);
147 }
148 
149 void PrintDebugPlayer(BOOL bNextPlayer)
150 {
151  char dstr[128];
152 
153  if (bNextPlayer)
154  dbgplr = ((BYTE)dbgplr + 1) & 3;
155 
156  sprintf(dstr, "Plr %i : Active = %i", dbgplr, plr[dbgplr].plractive);
157  NetSendCmdString(1 << myplr, dstr);
158 
159  if (plr[dbgplr].plractive) {
160  sprintf(dstr, " Plr %i is %s", dbgplr, plr[dbgplr]._pName);
161  NetSendCmdString(1 << myplr, dstr);
162  sprintf(dstr, " Lvl = %i : Change = %i", plr[dbgplr].plrlevel, plr[dbgplr]._pLvlChanging);
163  NetSendCmdString(1 << myplr, dstr);
164  sprintf(dstr, " x = %i, y = %i : tx = %i, ty = %i", plr[dbgplr].WorldX, plr[dbgplr].WorldY, plr[dbgplr]._ptargx, plr[dbgplr]._ptargy);
165  NetSendCmdString(1 << myplr, dstr);
166  sprintf(dstr, " mode = %i : daction = %i : walk[0] = %i", plr[dbgplr]._pmode, plr[dbgplr].destAction, plr[dbgplr].walkpath[0]);
167  NetSendCmdString(1 << myplr, dstr);
168  sprintf(dstr, " inv = %i : hp = %i", plr[dbgplr]._pInvincible, plr[dbgplr]._pHitPoints);
169  NetSendCmdString(1 << myplr, dstr);
170  }
171 }
172 
173 void PrintDebugQuest()
174 {
175  char dstr[128];
176 
177  sprintf(dstr, "Quest %i : Active = %i, Var1 = %i", dbgqst, quests[dbgqst]._qactive, quests[dbgqst]._qvar1);
178  NetSendCmdString(1 << myplr, dstr);
179 
180  dbgqst++;
181  if (dbgqst == MAXQUESTS)
182  dbgqst = 0;
183 }
184 
185 void PrintDebugMonster(int m)
186 {
187  BOOL bActive;
188  int i;
189  char dstr[128];
190 
191  sprintf(dstr, "Monster %i = %s", m, monster[m].mName);
192  NetSendCmdString(1 << myplr, dstr);
193  sprintf(dstr, "X = %i, Y = %i", monster[m]._mx, monster[m]._my);
194  NetSendCmdString(1 << myplr, dstr);
195  sprintf(dstr, "Enemy = %i, HP = %i", monster[m]._menemy, monster[m]._mhitpoints);
196  NetSendCmdString(1 << myplr, dstr);
197  sprintf(dstr, "Mode = %i, Var1 = %i", monster[m]._mmode, monster[m]._mVar1);
198  NetSendCmdString(1 << myplr, dstr);
199 
200  bActive = FALSE;
201 
202  for (i = 0; i < nummonsters; i++) {
203  if (monstactive[i] == m)
204  bActive = TRUE;
205  }
206 
207  sprintf(dstr, "Active List = %i, Squelch = %i", bActive, monster[m]._msquelch);
208  NetSendCmdString(1 << myplr, dstr);
209 }
210 
211 void GetDebugMonster()
212 {
213  int mi1, mi2;
214 
215  mi1 = pcursmonst;
216  if (mi1 == -1) {
217  mi2 = dMonster[cursmx][cursmy];
218  if (mi2 != 0) {
219  mi1 = mi2 - 1;
220  if (mi2 <= 0)
221  mi1 = -1 - mi2;
222  } else {
223  mi1 = dbgmon;
224  }
225  }
226  PrintDebugMonster(mi1);
227 }
228 
229 void NextDebugMonster()
230 {
231  char dstr[128];
232 
233  dbgmon++;
234  if (dbgmon == MAXMONSTERS)
235  dbgmon = 0;
236 
237  sprintf(dstr, "Current debug monster = %i", dbgmon);
238  NetSendCmdString(1 << myplr, dstr);
239 }
240 #endif
241 
GOLD_MAX_LIMIT
#define GOLD_MAX_LIMIT
Definition: defs.h:68
SPL_HBOLT
@ SPL_HBOLT
Definition: enums.h:2161
cursmx
int cursmx
Definition: cursor.cpp:24
PlayerStruct::_pGold
int _pGold
Definition: structs.h:275
quests
QuestStruct quests[MAXQUESTS]
Definition: quests.cpp:8
SpawnPremium
void SpawnPremium(int lvl)
Definition: items.cpp:3473
PlayerStruct::InvGrid
char InvGrid[NUM_INV_GRID_ELEM]
Definition: structs.h:316
currlevel
BYTE currlevel
Definition: gendung.cpp:40
SPL_FIREBOLT
@ SPL_FIREBOLT
Definition: enums.h:2131
ItemStruct::_iCurs
int _iCurs
Definition: structs.h:121
SPL_HEALOTHER
@ SPL_HEALOTHER
Definition: enums.h:2164
seed_index
int seed_index
Definition: debug.cpp:15
dMonsDbg
char dMonsDbg[NUMLEVELS][MAXDUNX][MAXDUNY]
Definition: debug.cpp:20
FreeDebugGFX
void FreeDebugGFX()
Definition: debug.cpp:29
LoadDebugGFX
void LoadDebugGFX()
Definition: debug.cpp:23
SPL_STONE
@ SPL_STONE
Definition: enums.h:2138
PlayerStruct::_pNumInv
int _pNumInv
Definition: structs.h:315
MAXDUNX
#define MAXDUNX
Definition: defs.h:25
SMITH_PREMIUM_ITEMS
#define SMITH_PREMIUM_ITEMS
Definition: defs.h:58
dFlagDbg
char dFlagDbg[NUMLEVELS][MAXDUNX][MAXDUNY]
Definition: debug.cpp:21
GetPlrHandSeed
void GetPlrHandSeed(ItemStruct *h)
Definition: items.cpp:818
ItemStruct::_itype
int _itype
Definition: structs.h:102
SPL_TOWN
@ SPL_TOWN
Definition: enums.h:2137
SPL_FIREWALL
@ SPL_FIREWALL
Definition: enums.h:2136
ITYPE_NONE
@ ITYPE_NONE
Definition: enums.h:2495
SPL_FIREBALL
@ SPL_FIREBALL
Definition: enums.h:2142
PlayerStruct::_pSplLvl
char _pSplLvl[64]
Definition: structs.h:225
PlayerStruct::InvList
ItemStruct InvList[NUM_INV_GRID_ELEM]
Definition: structs.h:314
MemFreeDbg
#define MemFreeDbg(p)
Definition: defs.h:157
NetSendCmdString
void NetSendCmdString(int pmask, const char *pszStr)
Definition: msg.cpp:965
ItemStruct::_ivalue
int _ivalue
Definition: structs.h:122
all.h
CheckDungeonClear
void CheckDungeonClear()
Definition: debug.cpp:34
PlayerStruct::SpdList
ItemStruct SpdList[MAXBELTITEMS]
Definition: structs.h:317
premiumitem
ItemStruct premiumitem[SMITH_PREMIUM_ITEMS]
Definition: stores.cpp:10
spelldata
DEVILUTION_BEGIN_NAMESPACE SpellData spelldata[]
Data related to each spell ID.
Definition: spelldat.cpp:6
MAXBELTITEMS
#define MAXBELTITEMS
Definition: defs.h:28
MAXDUNY
#define MAXDUNY
Definition: defs.h:26
SPL_RNDTELEPORT
@ SPL_RNDTELEPORT
Definition: enums.h:2140
SPL_MANASHIELD
@ SPL_MANASHIELD
Definition: enums.h:2141
ICURS_GOLD_LARGE
@ ICURS_GOLD_LARGE
Definition: enums.h:179
SPL_LIGHTNING
@ SPL_LIGHTNING
Definition: enums.h:2133
level_seeds
int level_seeds[NUMLEVELS+1]
Definition: debug.cpp:16
SPL_GOLEM
@ SPL_GOLEM
Definition: enums.h:2151
app_fatal
void app_fatal(const char *pszFmt,...)
Definition: appfat.cpp:18
DEVILUTION_END_NAMESPACE
#define DEVILUTION_END_NAMESPACE
Definition: types.h:10
ITYPE_GOLD
@ ITYPE_GOLD
Definition: enums.h:2491
SPL_CHAIN
@ SPL_CHAIN
Definition: enums.h:2144
monster
MonsterStruct monster[MAXMONSTERS]
Definition: monster.cpp:19
seed_table
int seed_table[DEBUGSEEDS]
Definition: debug.cpp:17
SetPlrHandItem
void SetPlrHandItem(ItemStruct *h, int idata)
Definition: items.cpp:779
SPL_ELEMENT
@ SPL_ELEMENT
Definition: enums.h:2159
SPL_TELEKINESIS
@ SPL_TELEKINESIS
Definition: enums.h:2163
LoadFileInMem
BYTE * LoadFileInMem(char *pszName, DWORD *pdwFileLen)
Load a file in to a buffer.
Definition: engine.cpp:801
RemoveInvItem
void RemoveInvItem(int pnum, int iv)
Definition: inv.cpp:1276
NUMLEVELS
#define NUMLEVELS
Definition: defs.h:56
SPL_CBOLT
@ SPL_CBOLT
Definition: enums.h:2160
SPL_FLARE
@ SPL_FLARE
Definition: enums.h:2165
SPL_BONESPIRIT
@ SPL_BONESPIRIT
Definition: enums.h:2166
IDI_GOLD
@ IDI_GOLD
Definition: enums.h:2499
SPL_HEAL
@ SPL_HEAL
Definition: enums.h:2132
pSquareCel
BYTE * pSquareCel
Definition: debug.cpp:19
numpremium
int numpremium
Definition: stores.cpp:22
PlayerStruct::_pMemSpells
uint64_t _pMemSpells
Definition: structs.h:226
DEBUGSEEDS
#define DEBUGSEEDS
Definition: debug.cpp:14
witchitem
ItemStruct witchitem[20]
Definition: stores.cpp:20
pcursmonst
int pcursmonst
Definition: cursor.cpp:13
MAXQUESTS
#define MAXQUESTS
Definition: defs.h:35
monstactive
int monstactive[MAXMONSTERS]
Definition: monster.cpp:16
nummonsters
int nummonsters
Definition: monster.cpp:17
myplr
int myplr
Definition: player.cpp:9
SPL_NOVA
@ SPL_NOVA
Definition: enums.h:2148
cursmy
int cursmy
Definition: cursor.cpp:25
dMonster
int dMonster[MAXDUNX][MAXDUNY]
Definition: gendung.cpp:17
DEVILUTION_BEGIN_NAMESPACE
Definition: sha.cpp:10
BFLAG_POPULATED
@ BFLAG_POPULATED
Definition: enums.h:1880
SPL_GUARDIAN
@ SPL_GUARDIAN
Definition: enums.h:2143
SPL_FLASH
@ SPL_FLASH
Definition: enums.h:2134
dPlayer
char dPlayer[MAXDUNX][MAXDUNY]
Definition: gendung.cpp:49
SpawnWitch
void SpawnWitch(int lvl)
Definition: items.cpp:3579
dFlags
char dFlags[MAXDUNX][MAXDUNY]
Definition: gendung.cpp:56
NUM_INV_GRID_ELEM
#define NUM_INV_GRID_ELEM
Definition: defs.h:46
SPL_WAVE
@ SPL_WAVE
Definition: enums.h:2145
MAXMONSTERS
#define MAXMONSTERS
Definition: defs.h:31
visiondebug
BOOL visiondebug
Definition: diablo.cpp:31
plr
PlayerStruct plr[MAX_PLRS]
Definition: player.cpp:10
BFLAG_VISIBLE
@ BFLAG_VISIBLE
Definition: enums.h:1878
MAX_SPELLS
#define MAX_SPELLS
Definition: defs.h:22