1 /**
2 * @file debug.cpp
3 *
4 * Implementation of debug functions.
5 */
6 #include "all.h"
7
8 DEVILUTION_BEGIN_NAMESPACE
9
10 #ifdef _DEBUG
11 BOOL update_seed_check = FALSE;
12
13 #define DEBUGSEEDS 4096
14 int seed_index;
15 int level_seeds[NUMLEVELS + 1];
16 int seed_table[DEBUGSEEDS];
17
18 BYTE *pSquareCel;
19 char dMonsDbg[NUMLEVELS][MAXDUNX][MAXDUNY];
20 char dFlagDbg[NUMLEVELS][MAXDUNX][MAXDUNY];
21
LoadDebugGFX()22 void LoadDebugGFX()
23 {
24 if (visiondebug)
25 pSquareCel = LoadFileInMem("Data\\Square.CEL", NULL);
26 }
27
FreeDebugGFX()28 void FreeDebugGFX()
29 {
30 MemFreeDbg(pSquareCel);
31 }
32
CheckDungeonClear()33 void CheckDungeonClear()
34 {
35 int i, j;
36
37 for (j = 0; j < MAXDUNY; j++) {
38 for (i = 0; i < MAXDUNX; i++) {
39 if (dMonster[i][j] != 0)
40 app_fatal("Monsters not cleared");
41 if (dPlayer[i][j] != 0)
42 app_fatal("Players not cleared");
43
44 dMonsDbg[currlevel][i][j] = dFlags[i][j] & BFLAG_VISIBLE;
45 dFlagDbg[currlevel][i][j] = dFlags[i][j] & BFLAG_POPULATED;
46 }
47 }
48 }
49
GiveGoldCheat()50 void GiveGoldCheat()
51 {
52 int i, ni;
53
54 for (i = 0; i < NUM_INV_GRID_ELEM; i++) {
55 if (plr[myplr].InvGrid[i] == 0) {
56 ni = plr[myplr]._pNumInv++;
57 SetPlrHandItem(&plr[myplr].InvList[ni], IDI_GOLD);
58 GetPlrHandSeed(&plr[myplr].InvList[ni]);
59 plr[myplr].InvList[ni]._ivalue = GOLD_MAX_LIMIT;
60 plr[myplr].InvList[ni]._iCurs = ICURS_GOLD_LARGE;
61 plr[myplr]._pGold += GOLD_MAX_LIMIT;
62 plr[myplr].InvGrid[i] = plr[myplr]._pNumInv;
63 }
64 }
65 }
66
TakeGoldCheat()67 void TakeGoldCheat()
68 {
69 int i;
70 char ig;
71
72 for (i = 0; i < NUM_INV_GRID_ELEM; i++) {
73 ig = plr[myplr].InvGrid[i];
74 if (ig > 0 && plr[myplr].InvList[ig - 1]._itype == ITYPE_GOLD)
75 RemoveInvItem(myplr, ig - 1);
76 }
77
78 for (i = 0; i < MAXBELTITEMS; i++) {
79 if (plr[myplr].SpdList[i]._itype == ITYPE_GOLD)
80 plr[myplr].SpdList[i]._itype = ITYPE_NONE;
81 }
82
83 plr[myplr]._pGold = 0;
84 }
85
MaxSpellsCheat()86 void MaxSpellsCheat()
87 {
88 for (int i = SPL_FIREBOLT; i < MAX_SPELLS; i++) {
89 if (GetSpellBookLevel((spell_id)i) != -1) {
90 plr[myplr]._pMemSpells |= GetSpellBitmask(i);
91 plr[myplr]._pSplLvl[i] = 10;
92 }
93 }
94 }
95
SetSpellLevelCheat(char spl,int spllvl)96 void SetSpellLevelCheat(char spl, int spllvl)
97 {
98 plr[myplr]._pMemSpells |= GetSpellBitmask(spl);
99 plr[myplr]._pSplLvl[spl] = spllvl;
100 }
101
SetAllSpellsCheat()102 void SetAllSpellsCheat()
103 {
104 SetSpellLevelCheat(SPL_FIREBOLT, 8);
105 SetSpellLevelCheat(SPL_CBOLT, 11);
106 SetSpellLevelCheat(SPL_HBOLT, 10);
107 SetSpellLevelCheat(SPL_HEAL, 7);
108 SetSpellLevelCheat(SPL_HEALOTHER, 5);
109 SetSpellLevelCheat(SPL_LIGHTNING, 9);
110 SetSpellLevelCheat(SPL_FIREWALL, 5);
111 SetSpellLevelCheat(SPL_TELEKINESIS, 3);
112 SetSpellLevelCheat(SPL_TOWN, 3);
113 SetSpellLevelCheat(SPL_FLASH, 3);
114 SetSpellLevelCheat(SPL_RNDTELEPORT, 2);
115 SetSpellLevelCheat(SPL_MANASHIELD, 2);
116 SetSpellLevelCheat(SPL_WAVE, 4);
117 SetSpellLevelCheat(SPL_FIREBALL, 3);
118 SetSpellLevelCheat(SPL_STONE, 1);
119 SetSpellLevelCheat(SPL_CHAIN, 1);
120 SetSpellLevelCheat(SPL_GUARDIAN, 4);
121 SetSpellLevelCheat(SPL_ELEMENT, 3);
122 SetSpellLevelCheat(SPL_NOVA, 1);
123 SetSpellLevelCheat(SPL_GOLEM, 2);
124 SetSpellLevelCheat(SPL_FLARE, 1);
125 SetSpellLevelCheat(SPL_BONESPIRIT, 1);
126 }
127
128 int dbgplr;
129
PrintDebugPlayer(BOOL bNextPlayer)130 void PrintDebugPlayer(BOOL bNextPlayer)
131 {
132 char dstr[128];
133
134 if (bNextPlayer)
135 dbgplr = ((BYTE)dbgplr + 1) & 3;
136
137 sprintf(dstr, "Plr %i : Active = %i", dbgplr, plr[dbgplr].plractive);
138 NetSendCmdString(1 << myplr, dstr);
139
140 if (plr[dbgplr].plractive) {
141 sprintf(dstr, " Plr %i is %s", dbgplr, plr[dbgplr]._pName);
142 NetSendCmdString(1 << myplr, dstr);
143 sprintf(dstr, " Lvl = %i : Change = %i", plr[dbgplr].plrlevel, plr[dbgplr]._pLvlChanging);
144 NetSendCmdString(1 << myplr, dstr);
145 sprintf(dstr, " x = %i, y = %i : tx = %i, ty = %i", plr[dbgplr]._px, plr[dbgplr]._py, plr[dbgplr]._ptargx, plr[dbgplr]._ptargy);
146 NetSendCmdString(1 << myplr, dstr);
147 sprintf(dstr, " mode = %i : daction = %i : walk[0] = %i", plr[dbgplr]._pmode, plr[dbgplr].destAction, plr[dbgplr].walkpath[0]);
148 NetSendCmdString(1 << myplr, dstr);
149 sprintf(dstr, " inv = %i : hp = %i", plr[dbgplr]._pInvincible, plr[dbgplr]._pHitPoints);
150 NetSendCmdString(1 << myplr, dstr);
151 }
152 }
153
154 int dbgqst;
155
PrintDebugQuest()156 void PrintDebugQuest()
157 {
158 char dstr[128];
159
160 sprintf(dstr, "Quest %i : Active = %i, Var1 = %i", dbgqst, quests[dbgqst]._qactive, quests[dbgqst]._qvar1);
161 NetSendCmdString(1 << myplr, dstr);
162
163 dbgqst++;
164 if (dbgqst == MAXQUESTS)
165 dbgqst = 0;
166 }
167
PrintDebugMonster(int m)168 void PrintDebugMonster(int m)
169 {
170 BOOL bActive;
171 int i;
172 char dstr[128];
173
174 sprintf(dstr, "Monster %i = %s", m, monster[m].mName);
175 NetSendCmdString(1 << myplr, dstr);
176 sprintf(dstr, "X = %i, Y = %i", monster[m]._mx, monster[m]._my);
177 NetSendCmdString(1 << myplr, dstr);
178 sprintf(dstr, "Enemy = %i, HP = %i", monster[m]._menemy, monster[m]._mhitpoints);
179 NetSendCmdString(1 << myplr, dstr);
180 sprintf(dstr, "Mode = %i, Var1 = %i", monster[m]._mmode, monster[m]._mVar1);
181 NetSendCmdString(1 << myplr, dstr);
182
183 bActive = FALSE;
184
185 for (i = 0; i < nummonsters; i++) {
186 if (monstactive[i] == m)
187 bActive = TRUE;
188 }
189
190 sprintf(dstr, "Active List = %i, Squelch = %i", bActive, monster[m]._msquelch);
191 NetSendCmdString(1 << myplr, dstr);
192 }
193
194 int dbgmon;
195
GetDebugMonster()196 void GetDebugMonster()
197 {
198 int mi1, mi2;
199
200 mi1 = pcursmonst;
201 if (mi1 == -1) {
202 mi2 = dMonster[cursmx][cursmy];
203 if (mi2 != 0) {
204 mi1 = mi2 - 1;
205 if (mi2 <= 0)
206 mi1 = -(mi2 + 1);
207 } else {
208 mi1 = dbgmon;
209 }
210 }
211 PrintDebugMonster(mi1);
212 }
213
NextDebugMonster()214 void NextDebugMonster()
215 {
216 char dstr[128];
217
218 dbgmon++;
219 if (dbgmon == MAXMONSTERS)
220 dbgmon = 0;
221
222 sprintf(dstr, "Current debug monster = %i", dbgmon);
223 NetSendCmdString(1 << myplr, dstr);
224 }
225 #endif
226
227 DEVILUTION_END_NAMESPACE
228