| 171 | } |
| 172 | |
| 173 | void GetLevelMTypes() |
| 174 | { |
| 175 | int i; |
| 176 | |
| 177 | // this array is merged with skeltypes down below. |
| 178 | int typelist[MAXMONSTERS]; |
| 179 | int skeltypes[NUM_MTYPES]; |
| 180 | |
| 181 | int minl; // min level |
| 182 | int maxl; // max level |
| 183 | char mamask; |
| 184 | const int numskeltypes = 19; |
| 185 | |
| 186 | int nt; // number of types |
| 187 | |
| 188 | #ifdef SPAWN |
| 189 | mamask = 1; // monster availability mask |
| 190 | #else |
| 191 | mamask = 3; // monster availability mask |
| 192 | #endif |
| 193 | |
| 194 | AddMonsterType(MT_GOLEM, 2); |
| 195 | if (currlevel == 16) { |
| 196 | AddMonsterType(MT_ADVOCATE, 1); |
| 197 | AddMonsterType(MT_RBLACK, 1); |
| 198 | AddMonsterType(MT_DIABLO, 2); |
| 199 | return; |
| 200 | } |
| 201 | |
| 202 | if (!setlevel) { |
| 203 | if (QuestStatus(QTYPE_BUTCH)) |
| 204 | AddMonsterType(MT_CLEAVER, 2); |
| 205 | if (QuestStatus(QTYPE_GARB)) |
| 206 | AddMonsterType(UniqMonst[UMT_GARBUD].mtype, 4); |
| 207 | if (QuestStatus(QTYPE_ZHAR)) |
| 208 | AddMonsterType(UniqMonst[UMT_ZHAR].mtype, 4); |
| 209 | if (QuestStatus(QTYPE_BOL)) |
| 210 | AddMonsterType(UniqMonst[UMT_SNOTSPIL].mtype, 4); |
| 211 | if (QuestStatus(QTYPE_VEIL)) |
| 212 | AddMonsterType(UniqMonst[UMT_LACHDAN].mtype, 4); |
| 213 | if (QuestStatus(QTYPE_WARLRD)) |
| 214 | AddMonsterType(UniqMonst[UMT_WARLORD].mtype, 4); |
| 215 | |
| 216 | if (gbMaxPlayers != 1 && currlevel == quests[QTYPE_KING]._qlevel) { |
| 217 | |
| 218 | AddMonsterType(MT_SKING, 4); |
| 219 | |
| 220 | nt = 0; |
| 221 | for (i = MT_WSKELAX; i <= MT_WSKELAX + numskeltypes; i++) { |
| 222 | if (IsSkel(i)) { |
| 223 | minl = 15 * monsterdata[i].mMinDLvl / 30 + 1; |
| 224 | maxl = 15 * monsterdata[i].mMaxDLvl / 30 + 1; |
| 225 | |
| 226 | if (currlevel >= minl && currlevel <= maxl) { |
| 227 | if (MonstAvailTbl[i] & mamask) { |
| 228 | skeltypes[nt++] = i; |
| 229 | } |
| 230 | } |
no test coverage detected