From c698e06596efa29146e83e6ec2bca81c5ceeff1b Mon Sep 17 00:00:00 2001 From: staphen Date: Tue, 26 Oct 2021 17:06:59 -0400 Subject: [PATCH] Rotate arrows in the appropriate direction when blocking --- Source/missiles.cpp | 47 ++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/Source/missiles.cpp b/Source/missiles.cpp index 37572051c..7b7803bcd 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -414,6 +414,26 @@ bool Plr2PlrMHit(int pnum, int p, int mindam, int maxdam, int dist, missile_id m return true; } +void RotateBlockedMissile(Missile &missile) +{ + int rotation = GenerateRnd(2) != 0 ? 1 : -1; + + if (missile._miAnimType == MFILE_ARROWS) { + int dir = missile._miAnimFrame + rotation; + missile._miAnimFrame = (dir + 15) % 16 + 1; + return; + } + + int dir = missile._mimfnum + rotation; + int mAnimFAmt = MissileSpriteData[missile._miAnimType].animFAmt; + if (dir < 0) + dir = mAnimFAmt - 1; + else if (dir >= mAnimFAmt) + dir = 0; + + SetMissDir(missile, dir); +} + void CheckMissileCol(Missile &missile, int mindam, int maxdam, bool shift, Point position, bool nodel) { if (!InDungeonBounds(position)) @@ -469,14 +489,7 @@ void CheckMissileCol(Missile &missile, int mindam, int maxdam, bool shift, Point shift, &blocked)) { if (gbIsHellfire && blocked) { - int dir = missile._mimfnum + (GenerateRnd(2) != 0 ? 1 : -1); - int mAnimFAmt = MissileSpriteData[missile._miAnimType].animFAmt; - if (dir < 0) - dir = mAnimFAmt - 1; - else if (dir >= mAnimFAmt) - dir = 0; - - SetMissDir(missile, dir); + RotateBlockedMissile(missile); } else if (!nodel) { missile._mirange = 0; } @@ -504,14 +517,7 @@ void CheckMissileCol(Missile &missile, int mindam, int maxdam, bool shift, Point 0, &blocked)) { if (gbIsHellfire && blocked) { - int dir = missile._mimfnum + (GenerateRnd(2) != 0 ? 1 : -1); - int mAnimFAmt = MissileSpriteData[missile._miAnimType].animFAmt; - if (dir < 0) - dir = mAnimFAmt - 1; - else if (dir >= mAnimFAmt) - dir = 0; - - SetMissDir(missile, dir); + RotateBlockedMissile(missile); } else if (!nodel) { missile._mirange = 0; } @@ -553,14 +559,7 @@ void CheckMissileCol(Missile &missile, int mindam, int maxdam, bool shift, Point (missile._miAnimType == MFILE_FIREWAL || missile._miAnimType == MFILE_LGHNING) ? 1 : 0, &blocked)) { if (gbIsHellfire && blocked) { - int dir = missile._mimfnum + (GenerateRnd(2) != 0 ? 1 : -1); - int mAnimFAmt = MissileSpriteData[missile._miAnimType].animFAmt; - if (dir < 0) - dir = mAnimFAmt - 1; - else if (dir >= mAnimFAmt) - dir = 0; - - SetMissDir(missile, dir); + RotateBlockedMissile(missile); } else if (!nodel) { missile._mirange = 0; }