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

Function MI_Element

Source/missiles.cpp:3903–3973  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3901}
3902
3903void MI_Element(int i)
3904{
3905 int mid, sd, dam, cx, cy, px, py, id;
3906
3907 missile[i]._mirange--;
3908 dam = missile[i]._midam;
3909 id = missile[i]._misource;
3910 if (missile[i]._miAnimType == MFILE_BIGEXP) {
3911 cx = missile[i]._mix;
3912 cy = missile[i]._miy;
3913 px = plr[id].WorldX;
3914 py = plr[id].WorldY;
3915 ChangeLight(missile[i]._mlid, cx, cy, missile[i]._miAnimFrame);
3916 if (!CheckBlock(px, py, cx, cy))
3917 CheckMissileCol(i, dam, dam, TRUE, cx, cy, TRUE);
3918 if (!CheckBlock(px, py, cx, cy + 1))
3919 CheckMissileCol(i, dam, dam, TRUE, cx, cy + 1, TRUE);
3920 if (!CheckBlock(px, py, cx, cy - 1))
3921 CheckMissileCol(i, dam, dam, TRUE, cx, cy - 1, TRUE);
3922 if (!CheckBlock(px, py, cx + 1, cy))
3923 CheckMissileCol(i, dam, dam, TRUE, cx + 1, cy, TRUE); /* check x/y */
3924 if (!CheckBlock(px, py, cx + 1, cy - 1))
3925 CheckMissileCol(i, dam, dam, TRUE, cx + 1, cy - 1, TRUE);
3926 if (!CheckBlock(px, py, cx + 1, cy + 1))
3927 CheckMissileCol(i, dam, dam, TRUE, cx + 1, cy + 1, TRUE);
3928 if (!CheckBlock(px, py, cx - 1, cy))
3929 CheckMissileCol(i, dam, dam, TRUE, cx - 1, cy, TRUE);
3930 if (!CheckBlock(px, py, cx - 1, cy + 1))
3931 CheckMissileCol(i, dam, dam, TRUE, cx - 1, cy + 1, TRUE);
3932 if (!CheckBlock(px, py, cx - 1, cy - 1))
3933 CheckMissileCol(i, dam, dam, TRUE, cx - 1, cy - 1, TRUE);
3934 if (!missile[i]._mirange) {
3935 missile[i]._miDelFlag = TRUE;
3936 AddUnLight(missile[i]._mlid);
3937 }
3938 } else {
3939 missile[i]._mitxoff += missile[i]._mixvel;
3940 missile[i]._mityoff += missile[i]._miyvel;
3941 GetMissilePos(i);
3942 cx = missile[i]._mix;
3943 cy = missile[i]._miy;
3944 CheckMissileCol(i, dam, dam, FALSE, cx, cy, FALSE);
3945 if (!missile[i]._miVar3 && cx == missile[i]._miVar4 && cy == missile[i]._miVar5)
3946 missile[i]._miVar3 = 1;
3947 if (missile[i]._miVar3 == 1) {
3948 missile[i]._miVar3 = 2;
3949 missile[i]._mirange = 255;
3950 mid = FindClosest(cx, cy, 19);
3951 if (mid > 0) {
3952 sd = GetDirection8(cx, cy, monster[mid]._mx, monster[mid]._my);
3953 SetMissDir(i, sd);
3954 GetMissileVel(i, cx, cy, monster[mid]._mx, monster[mid]._my, 16);
3955 } else {
3956 sd = plr[id]._pdir;
3957 SetMissDir(i, sd);
3958 GetMissileVel(i, cx, cy, cx + XDirAdd[sd], cy + YDirAdd[sd], 16);
3959 }
3960 }

Callers

nothing calls this directly

Calls 11

ChangeLightFunction · 0.85
CheckBlockFunction · 0.85
CheckMissileColFunction · 0.85
AddUnLightFunction · 0.85
GetMissilePosFunction · 0.85
FindClosestFunction · 0.85
GetDirection8Function · 0.85
SetMissDirFunction · 0.85
GetMissileVelFunction · 0.85
SetMissAnimFunction · 0.85
PutMissileFunction · 0.85

Tested by

no test coverage detected