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

Function Obj_Trap

Source/objects.cpp:1634–1685  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1632}
1633
1634void Obj_Trap(int i)
1635{
1636 int oti, dir;
1637 BOOLEAN otrig;
1638 int sx, sy, dx, dy, x, y;
1639
1640 otrig = FALSE;
1641 if (!object[i]._oVar4) {
1642 oti = dObject[object[i]._oVar1][object[i]._oVar2] - 1;
1643 switch (object[oti]._otype) {
1644 case OBJ_L1LDOOR:
1645 case OBJ_L1RDOOR:
1646 case OBJ_L2LDOOR:
1647 case OBJ_L2RDOOR:
1648 case OBJ_L3LDOOR:
1649 case OBJ_L3RDOOR:
1650 if (object[oti]._oVar4)
1651 otrig = TRUE;
1652 break;
1653 case OBJ_LEVER:
1654 case OBJ_CHEST1:
1655 case OBJ_CHEST2:
1656 case OBJ_CHEST3:
1657 case OBJ_SWITCHSKL:
1658 case OBJ_SARC:
1659 if (object[oti]._oSelFlag == 0)
1660 otrig = TRUE;
1661 break;
1662 }
1663 if (otrig) {
1664 object[i]._oVar4 = 1;
1665 sx = object[i]._ox;
1666 sy = object[i]._oy;
1667 dx = object[oti]._ox;
1668 dy = object[oti]._oy;
1669 for (y = dy - 1; y <= object[oti]._oy + 1; y++) {
1670 for (x = object[oti]._ox - 1; x <= object[oti]._ox + 1; x++) {
1671 if (dPlayer[x][y]) {
1672 dx = x;
1673 dy = y;
1674 }
1675 }
1676 }
1677 if (!deltaload) {
1678 dir = GetDirection(sx, sy, dx, dy);
1679 AddMissile(sx, sy, dx, dy, dir, object[i]._oVar3, 1, -1, 0, 0);
1680 PlaySfxLoc(IS_TRAP, object[oti]._ox, object[oti]._oy);
1681 }
1682 object[oti]._oTrapFlag = FALSE;
1683 }
1684 }
1685}
1686
1687void Obj_BCrossDamage(int i)
1688{

Callers 2

ProcessObjectsFunction · 0.85
DeltaLoadLevelFunction · 0.85

Calls 3

GetDirectionFunction · 0.85
AddMissileFunction · 0.85
PlaySfxLocFunction · 0.85

Tested by

no test coverage detected