Browse Source

🐛 Implement missing Hellfire arrow types

pull/1312/head
Anders Jenbo 5 years ago
parent
commit
fd64193208
  1. 50
      Source/player.cpp

50
Source/player.cpp

@ -2796,15 +2796,38 @@ BOOL PM_DoRangeAttack(int pnum)
app_fatal("PM_DoRangeAttack: illegal player %d", pnum);
}
origFrame = plr[pnum]._pAnimFrame;
if (plr[pnum]._pIFlags & ISPL_QUICKATTACK && origFrame == 1) {
plr[pnum]._pAnimFrame++;
}
if (plr[pnum]._pIFlags & ISPL_FASTATTACK && (origFrame == 1 || origFrame == 3)) {
plr[pnum]._pAnimFrame++;
if (!gbIsHellfire) {
origFrame = plr[pnum]._pAnimFrame;
if (plr[pnum]._pIFlags & ISPL_QUICKATTACK && origFrame == 1) {
plr[pnum]._pAnimFrame++;
}
if (plr[pnum]._pIFlags & ISPL_FASTATTACK && (origFrame == 1 || origFrame == 3)) {
plr[pnum]._pAnimFrame++;
}
}
int arrows = 0;
if (plr[pnum]._pAnimFrame == plr[pnum]._pAFNum) {
arrows = 1;
}
if ((plr[pnum]._pIFlags & ISPL_MULT_ARROWS) != 0 && plr[pnum]._pAnimFrame == plr[pnum]._pAFNum + 2) {
arrows = 2;
}
for (int arrow = 0; arrow < arrows; arrow++) {
int xoff = 0;
int yoff = 0;
if (arrows != 1) {
int angle = arrow == 0 ? -1 : 1;
int x = plr[pnum]._pVar1 - plr[pnum]._px;
if (x)
yoff = x < 0 ? angle : -angle;
int y = plr[pnum]._pVar2 - plr[pnum]._py;
if (y)
xoff = y < 0 ? -angle : angle;
}
int dmg = 4;
mistype = MIS_ARROW;
if (plr[pnum]._pIFlags & ISPL_FIRE_ARROWS) {
mistype = MIS_FARROW;
@ -2812,19 +2835,26 @@ BOOL PM_DoRangeAttack(int pnum)
if (plr[pnum]._pIFlags & ISPL_LIGHT_ARROWS) {
mistype = MIS_LARROW;
}
if ((plr[pnum]._pIFlags & ISPL_FIRE_ARROWS) != 0 && (plr[pnum]._pIFlags & ISPL_LIGHT_ARROWS) != 0) {
dmg = plr[pnum]._pIFMinDam + random_(3, plr[pnum]._pIFMaxDam - plr[pnum]._pIFMinDam);
mistype = MIS_SPECARROW;
}
AddMissile(
plr[pnum]._px,
plr[pnum]._py,
plr[pnum]._pVar1,
plr[pnum]._pVar2,
plr[pnum]._pVar1 + xoff,
plr[pnum]._pVar2 + yoff,
plr[pnum]._pdir,
mistype,
TARGET_MONSTERS,
pnum,
4,
dmg,
0);
PlaySfxLoc(PS_BFIRE, plr[pnum]._px, plr[pnum]._py);
if (arrow == 0 && mistype != MIS_SPECARROW) {
PlaySfxLoc(arrows != 1 ? IS_STING1 : PS_BFIRE, plr[pnum]._px, plr[pnum]._py);
}
if (WeaponDur(pnum, 40)) {
StartStand(pnum, plr[pnum]._pdir);

Loading…
Cancel
Save