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

Function SpecialAutoPlace

Source/inv.cpp:484–549  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

482}
483
484BOOL SpecialAutoPlace(int pnum, int ii, int sx, int sy, BOOL saveflag)
485{
486 int i, j, xx, yy;
487 BOOL done;
488
489 done = TRUE;
490 yy = 10 * (ii / 10);
491 if (yy < 0) {
492 yy = 0;
493 }
494 for (j = 0; j < sy && done; j++) {
495 if (yy >= 40) {
496 done = FALSE;
497 }
498 xx = ii % 10;
499 if (xx < 0) {
500 xx = 0;
501 }
502 for (i = 0; i < sx && done; i++) {
503 if (xx >= 10) {
504 done = FALSE;
505 } else {
506 done = plr[pnum].InvGrid[xx + yy] == 0;
507 }
508 xx++;
509 }
510 yy += 10;
511 }
512 if (!done) {
513 if (sx > 1 || sy > 1) {
514 done = FALSE;
515 } else {
516 for (i = 0; i < MAXBELTITEMS; i++) {
517 if (plr[pnum].SpdList[i]._itype == ITYPE_NONE) {
518 done = TRUE;
519 break;
520 }
521 }
522 }
523 }
524 if (done && saveflag) {
525 plr[pnum].InvList[plr[pnum]._pNumInv] = plr[pnum].HoldItem;
526 plr[pnum]._pNumInv++;
527 yy = 10 * (ii / 10);
528 if (yy < 0) {
529 yy = 0;
530 }
531 for (j = 0; j < sy; j++) {
532 xx = ii % 10;
533 if (xx < 0) {
534 xx = 0;
535 }
536 for (i = 0; i < sx; i++) {
537 if (i != 0 || j != sy - 1) {
538 plr[pnum].InvGrid[xx + yy] = -plr[pnum]._pNumInv;
539 } else {
540 plr[pnum].InvGrid[xx + yy] = plr[pnum]._pNumInv;
541 }

Callers 2

S_WBuyEnterFunction · 0.85
S_HBuyEnterFunction · 0.85

Calls 1

CalcPlrScrollsFunction · 0.85

Tested by

no test coverage detected