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

Function PM_DoRangeAttack

Source/player.cpp:2736–2788  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2734}
2735
2736BOOL PM_DoRangeAttack(int pnum)
2737{
2738 int origFrame, mistype;
2739
2740 if ((DWORD)pnum >= MAX_PLRS) {
2741 app_fatal("PM_DoRangeAttack: illegal player %d", pnum);
2742 }
2743
2744 origFrame = plr[pnum]._pAnimFrame;
2745 if (plr[pnum]._pIFlags & ISPL_QUICKATTACK && origFrame == 1) {
2746 plr[pnum]._pAnimFrame++;
2747 }
2748 if (plr[pnum]._pIFlags & ISPL_FASTATTACK && (origFrame == 1 || origFrame == 3)) {
2749 plr[pnum]._pAnimFrame++;
2750 }
2751
2752 if (plr[pnum]._pAnimFrame == plr[pnum]._pAFNum) {
2753 mistype = MIS_ARROW;
2754 if (plr[pnum]._pIFlags & ISPL_FIRE_ARROWS) {
2755 mistype = MIS_FARROW;
2756 }
2757 if (plr[pnum]._pIFlags & ISPL_LIGHT_ARROWS) {
2758 mistype = MIS_LARROW;
2759 }
2760 AddMissile(
2761 plr[pnum].WorldX,
2762 plr[pnum].WorldY,
2763 plr[pnum]._pVar1,
2764 plr[pnum]._pVar2,
2765 plr[pnum]._pdir,
2766 mistype,
2767 0,
2768 pnum,
2769 4,
2770 0);
2771
2772 PlaySfxLoc(PS_BFIRE, plr[pnum].WorldX, plr[pnum].WorldY);
2773
2774 if (WeaponDur(pnum, 40)) {
2775 StartStand(pnum, plr[pnum]._pdir);
2776 ClearPlrPVars(pnum);
2777 return TRUE;
2778 }
2779 }
2780
2781 if (plr[pnum]._pAnimFrame >= plr[pnum]._pAFrames) {
2782 StartStand(pnum, plr[pnum]._pdir);
2783 ClearPlrPVars(pnum);
2784 return TRUE;
2785 } else {
2786 return FALSE;
2787 }
2788}
2789
2790void ShieldDur(int pnum)
2791{

Callers 1

ProcessPlayersFunction · 0.85

Calls 6

app_fatalFunction · 0.85
AddMissileFunction · 0.85
PlaySfxLocFunction · 0.85
WeaponDurFunction · 0.85
StartStandFunction · 0.85
ClearPlrPVarsFunction · 0.85

Tested by

no test coverage detected