MCPcopy Create free account
hub / github.com/diasurgical/devilution / OperateBook

Function OperateBook

Source/objects.cpp:2388–2459  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2386}
2387
2388void 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,

Callers 1

OperateObjectFunction · 0.85

Calls 5

AddMissileFunction · 0.85
PlaySfxLocFunction · 0.85
InitDiabloMsgFunction · 0.85
ObjChangeMapResyncFunction · 0.85
SyncObjectAnimFunction · 0.85

Tested by

no test coverage detected