Browse Source

[hellfire] 🐛 Apply the zen fix

Going over the change history of Hellfire and Diablo appears that the
difference was an early version of the fix from patch 1.07
pull/1370/head
Anders Jenbo 5 years ago
parent
commit
69b11edace
  1. 3
      Source/player.cpp
  2. 80
      SourceT/player_test.cpp

3
Source/player.cpp

@ -3056,8 +3056,7 @@ BOOL PM_DoGotHit(int pnum)
plr[pnum]._pAnimFrame++;
}
if (plr[pnum]._pIFlags & ISPL_FASTERRECOVER && (frame == 3 || frame == 5)) {
if (!gbIsHellfire || !(plr[pnum]._pIFlags & ISPL_FASTESTRECOVER))
plr[pnum]._pAnimFrame++;
plr[pnum]._pAnimFrame++;
}
if (plr[pnum]._pIFlags & ISPL_FASTESTRECOVER && (frame == 1 || frame == 3 || frame == 5)) {
plr[pnum]._pAnimFrame++;

80
SourceT/player_test.cpp

@ -5,10 +5,8 @@ namespace dvl {
extern int PM_DoGotHit(int pnum);
}
int RunBlockTest(bool hellfire, int frames, int flags)
int RunBlockTest(int frames, int flags)
{
dvl::gbIsHellfire = hellfire;
int pnum = 0;
dvl::plr[pnum]._pAnimFrame = 1;
dvl::plr[pnum]._pHFrames = frames;
@ -40,67 +38,43 @@ int RunBlockTest(bool hellfire, int frames, int flags)
#define ROU 7
#define SRC 8
int BlockData[][4] = {
{ 6, false, WAR, NORM }, // D
{ 7, false, ROU, NORM }, // D
{ 8, false, SRC, NORM }, // D
{ 6, true, WAR, NORM }, // HF
{ 7, true, ROU, NORM }, // HF
{ 8, true, SRC, NORM }, // HF
int BlockData[][3] = {
{ 6, WAR, NORM },
{ 7, ROU, NORM },
{ 8, SRC, NORM },
{ 5, false, WAR, BAL }, // D
{ 6, false, ROU, BAL }, // D
{ 7, false, SRC, BAL }, // D
{ 5, true, WAR, BAL }, // HF
{ 6, true, ROU, BAL }, // HF
{ 7, true, SRC, BAL }, // HF
{ 5, WAR, BAL },
{ 6, ROU, BAL },
{ 7, SRC, BAL },
{ 4, false, WAR, STA }, // D
{ 5, false, ROU, STA }, // D
{ 6, false, SRC, STA }, // D
{ 4, true, WAR, STA }, // HF
{ 5, true, ROU, STA }, // HF
{ 6, true, SRC, STA }, // HF
{ 4, WAR, STA },
{ 5, ROU, STA },
{ 6, SRC, STA },
{ 3, false, WAR, HAR }, // D
{ 4, false, ROU, HAR }, // D
{ 5, false, SRC, HAR }, // D
{ 3, true, WAR, HAR }, // HF
{ 4, true, ROU, HAR }, // HF
{ 5, true, SRC, HAR }, // HF
{ 3, WAR, HAR },
{ 4, ROU, HAR },
{ 5, SRC, HAR },
{ 4, false, WAR, BALSTA }, // D
{ 5, false, ROU, BALSTA }, // D
{ 6, false, SRC, BALSTA }, // D
{ 4, true, WAR, BALSTA }, // HF
{ 5, true, ROU, BALSTA }, // HF
{ 6, true, SRC, BALSTA }, // HF
{ 4, WAR, BALSTA },
{ 5, ROU, BALSTA },
{ 6, SRC, BALSTA },
{ 3, false, WAR, BALHAR }, // D
{ 4, false, ROU, BALHAR }, // D
{ 5, false, SRC, BALHAR }, // D
{ 3, true, WAR, BALHAR }, // HF
{ 4, true, ROU, BALHAR }, // HF
{ 5, true, SRC, BALHAR }, // HF
{ 3, WAR, BALHAR },
{ 4, ROU, BALHAR },
{ 5, SRC, BALHAR },
{ 3, false, WAR, STAHAR }, // D
{ 4, false, ROU, STAHAR }, // D
{ 5, false, SRC, STAHAR }, // D
{ 3, true, WAR, STAHAR }, // HF
{ 4, true, ROU, STAHAR }, // HF
{ 5, true, SRC, STAHAR }, // HF
{ 3, WAR, STAHAR },
{ 4, ROU, STAHAR },
{ 5, SRC, STAHAR },
{ 2, false, WAR, ZEN }, // D
{ 3, false, ROU, ZEN }, // D
{ 4, false, SRC, ZEN }, // D
{ 3, true, WAR, ZEN }, // HF
{ 4, true, ROU, ZEN }, // HF
{ 5, true, SRC, ZEN }, // HF
{ 2, WAR, ZEN },
{ 3, ROU, ZEN },
{ 4, SRC, ZEN },
};
TEST(Player, PM_DoGotHit)
{
for (size_t i = 0; i < sizeof(BlockData) / sizeof(*BlockData); i++) {
EXPECT_EQ(BlockData[i][0], RunBlockTest(BlockData[i][1], BlockData[i][2], BlockData[i][3]));
EXPECT_EQ(BlockData[i][0], RunBlockTest(BlockData[i][1], BlockData[i][2]));
}
}

Loading…
Cancel
Save