| 2386 | } |
| 2387 | |
| 2388 | void OperateBook(int pnum, int i) |
| 2389 | { |
| 2390 | int j, oi; |
| 2391 | int dx, dy; |
| 2392 | BOOL do_add_missile, missile_added; |
| 2393 | |
| 2394 | if (object[i]._oSelFlag == 0) |
| 2395 | return; |
| 2396 | if (setlevel && setlvlnum == SL_VILEBETRAYER) { |
| 2397 | do_add_missile = FALSE; |
| 2398 | missile_added = FALSE; |
| 2399 | for (j = 0; j < nobjects; j++) { |
| 2400 | oi = objectactive[j]; |
| 2401 | if (object[oi]._otype == OBJ_MCIRCLE2) { |
| 2402 | if (object[oi]._oVar6 == 1) { |
| 2403 | dx = 27; |
| 2404 | dy = 29; |
| 2405 | object[oi]._oVar6 = 4; |
| 2406 | do_add_missile = TRUE; |
| 2407 | } |
| 2408 | if (object[oi]._oVar6 == 2) { |
| 2409 | dx = 43; |
| 2410 | dy = 29; |
| 2411 | object[oi]._oVar6 = 4; |
| 2412 | do_add_missile = TRUE; |
| 2413 | } |
| 2414 | } |
| 2415 | if (do_add_missile) { |
| 2416 | object[dObject[35][36] - 1]._oVar5++; |
| 2417 | AddMissile(plr[pnum].WorldX, plr[pnum].WorldY, dx, dy, plr[pnum]._pdir, MIS_RNDTELEPORT, 0, pnum, 0, 0); |
| 2418 | missile_added = TRUE; |
| 2419 | do_add_missile = FALSE; |
| 2420 | } |
| 2421 | } |
| 2422 | if (!missile_added) |
| 2423 | return; |
| 2424 | } |
| 2425 | object[i]._oAnimFrame++; |
| 2426 | object[i]._oSelFlag = 0; |
| 2427 | if (!setlevel) |
| 2428 | return; |
| 2429 | |
| 2430 | if (setlvlnum == SL_BONECHAMB) { |
| 2431 | plr[myplr]._pMemSpells |= ((__int64)1 << (SPL_GUARDIAN - 1)); |
| 2432 | if (plr[pnum]._pSplLvl[SPL_GUARDIAN] < 15) |
| 2433 | plr[myplr]._pSplLvl[SPL_GUARDIAN]++; |
| 2434 | quests[QTYPE_BONE]._qactive = 3; |
| 2435 | if (!deltaload) |
| 2436 | PlaySfxLoc(IS_QUESTDN, object[i]._ox, object[i]._oy); |
| 2437 | InitDiabloMsg(EMSG_BONECHAMB); |
| 2438 | AddMissile( |
| 2439 | plr[myplr].WorldX, |
| 2440 | plr[myplr].WorldY, |
| 2441 | object[i]._ox - 2, |
| 2442 | object[i]._oy - 4, |
| 2443 | plr[myplr]._pdir, |
| 2444 | MIS_GUARDIAN, |
| 2445 | 0, |
no test coverage detected