Skip to content

Commit

Permalink
Re #17: Failed blitz move ends blitz process
Browse files Browse the repository at this point in the history
The following action in the ticket was a clean touchdown with no dodge
or other roll. Failed movement still continued into blitz, which
tried reading events and failed.

Fixes #17
  • Loading branch information
IBBoard committed Dec 19, 2021
1 parent d87e236 commit 0deb5d3
Show file tree
Hide file tree
Showing 5 changed files with 86 additions and 11 deletions.
3 changes: 3 additions & 0 deletions bbreplay/replay.py
Original file line number Diff line number Diff line change
Expand Up @@ -599,6 +599,9 @@ def _process_block(self, targeting_player, target_by_idx, cmds, log_entries, boa
moves = self.__get_moves(targeting_player, cmds)
cmd = next(cmds)
yield from self.__process_movement_list(targeting_player, moves, cmds, log_entries, board)
if board.is_prone(targeting_player):
# Something failed in the block
return
else:
cmd = next(cmds)
yield from self._process_uncontrollable_skills(targeting_player, cmds, log_entries, board)
Expand Down
10 changes: 5 additions & 5 deletions dvc.lock
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ stages:
cmd: python3 metrics.py -o metrics/metrics.json -p metrics/plots.json data/
deps:
- path: bbreplay/
md5: a9460689115f918a0c086ffb3e96ce24.dir
size: 238834
md5: 87afb66e15097fe4897a33d0930b18ba.dir
size: 238913
nfiles: 14
- path: data/
md5: 8f4f4d470b87ccc84345c3d35a283af3.dir
Expand All @@ -16,8 +16,8 @@ stages:
size: 3310
outs:
- path: metrics/metrics.json
md5: 2123e849d93cb9474390ff8d5b3933ad
md5: 342079c81c634150afff80cb416f0170
size: 5224
- path: metrics/plots.json
md5: 630e849d4c66b74092d7f0db9a2b95ff
size: 1785
md5: 71aed121f3fb19528094d531a27d4e5c
size: 1786
10 changes: 5 additions & 5 deletions metrics/metrics.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"total_commands": 140177,
"total_processed": 24939,
"total_unprocessed": 115238,
"total_processed": 25249,
"total_unprocessed": 114928,
"results": {
"data/Replay_2021-04-05_11-35-42.db": {
"commands": 42,
Expand Down Expand Up @@ -89,9 +89,9 @@
},
"data/Replay_2020-09-06_10-13-12.db": {
"commands": 6480,
"events": 588,
"processed": 2941,
"unprocessed": 3539
"events": 622,
"processed": 3251,
"unprocessed": 3229
},
"data/Replay_2021-04-04_09-49-09.db": {
"commands": 5160,
Expand Down
2 changes: 1 addition & 1 deletion metrics/plots.json
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@
"score": 0.4279875756089586
},
{
"score": 0.453858024691358
"score": 0.5016975308641975
},
{
"score": 0.5517241379310345
Expand Down
72 changes: 72 additions & 0 deletions tests/test_replay__blitz.py
Original file line number Diff line number Diff line change
Expand Up @@ -1561,3 +1561,75 @@ def test_blitz_with_double_frenzied_gfi(board):
assert not next(events, None)
assert not next(cmds, None)
assert not next(log_entries, None)

def test_bug17_failed_dodge_on_blitz(board):
home_team, away_team = board.teams
replay = Replay(home_team, away_team, [], [])
player = home_team.get_player(0)
board.set_position(Position(7, 7), player)
opponent = away_team.get_player(0)
board.set_position(Position(8, 7), opponent)
cmds = iter_([
TargetPlayerCommand(1, 1, TeamType.HOME, 0, [TeamType.HOME.value, 0, TeamType.AWAY.value, 0, 8, 7]),
MovementCommand(1, 1, TeamType.HOME, 0, [TeamType.HOME.value, 0, 0, 0, 0, 0, 0, 0, 8, 8]),
TargetSpaceCommand(1, 1, TeamType.HOME, 0, [TeamType.HOME.value, 0, 0, 0, 0, 0, 0, 0, 8, 7]),
RerollCommand(1, 1, TeamType.HOME, 1, [])
])
log_entries = iter_([
DodgeEntry(player.team.team_type, player.number, "6+", "2", ActionResult.FAILURE),
RerollEntry(TeamType.HOME),
DodgeEntry(player.team.team_type, player.number, "6+", "2", ActionResult.FAILURE),
ArmourValueRollEntry(player.team.team_type, player.number, "9+", "8", ActionResult.FAILURE),
TurnOverEntry(player.team.team_type, "Knocked Down!")
])
events = replay._process_block(player, opponent, cmds, log_entries, board)

event = next(events)
assert isinstance(event, Blitz)
assert event.blitzing_player == player
assert event.blitzed_player == opponent

event = next(events)
assert isinstance(event, Action)
assert event.player == player
assert event.action == ActionType.DODGE
assert event.result == ActionResult.FAILURE

event = next(events)
assert isinstance(event, Reroll)
assert event.team == player.team.team_type

event = next(events)
assert isinstance(event, Action)
assert event.player == player
assert event.action == ActionType.DODGE
assert event.result == ActionResult.FAILURE

event = next(events)
assert isinstance(event, PlayerDown)
assert event.player == player

event = next(events)
assert isinstance(event, ArmourRoll)
assert event.player == player
assert event.result == ActionResult.FAILURE

event = next(events)
assert isinstance(event, FailedMovement)
assert event.player == player
assert event.source_space == Position(7, 7)
assert event.target_space == Position(8, 8)

event = next(events)
assert isinstance(event, EndTurn)
assert event.reason == "Knocked Down!"

event = next(events)
assert isinstance(event, StartTurn)

assert board.is_prone(player)
assert not board.is_prone(opponent)

assert not next(cmds, None)
assert not next(log_entries, None)
assert not next(events, None)

0 comments on commit 0deb5d3

Please sign in to comment.