From 31e252926514a012171a7782aa184b14a14b3a75 Mon Sep 17 00:00:00 2001 From: Ishaan Bhardwaj Date: Wed, 17 Feb 2021 14:48:35 -0500 Subject: [PATCH] Upward kicks for SRS count toward rotation limit --- tetris/rulesets/arika_srs.lua | 11 ++++++----- tetris/rulesets/standard.lua | 13 ++++++++----- tetris/rulesets/standard_exp.lua | 24 +++++++++++++----------- tetris/rulesets/ti_srs.lua | 13 +++++++------ 4 files changed, 34 insertions(+), 27 deletions(-) diff --git a/tetris/rulesets/arika_srs.lua b/tetris/rulesets/arika_srs.lua index 36af808..918c6b8 100755 --- a/tetris/rulesets/arika_srs.lua +++ b/tetris/rulesets/arika_srs.lua @@ -21,14 +21,15 @@ SRS.spawn_above_field = true SRS.MANIPULATIONS_MAX = 128 -function SRS:onPieceRotate(piece, grid) +function SRS:onPieceRotate(piece, grid, upward) piece.lock_delay = 0 -- rotate reset - if piece:isDropBlocked(grid) then + if upward or piece:isDropBlocked(grid) then piece.manipulations = piece.manipulations + 1 - if piece.manipulations >= self.MANIPULATIONS_MAX then - piece.locked = true - end end end +function SRS:canPieceRotate(piece) + return piece.manipulations < self.MANIPULATIONS_MAX +end + return SRS diff --git a/tetris/rulesets/standard.lua b/tetris/rulesets/standard.lua index 9f7511a..f13aac8 100644 --- a/tetris/rulesets/standard.lua +++ b/tetris/rulesets/standard.lua @@ -92,11 +92,14 @@ function SRS:onPieceRotate(piece, grid) piece.lock_delay = 0 -- rotate reset self:checkNewLow(piece) piece.manipulations = piece.manipulations + 1 - if piece:isDropBlocked(grid) then - if piece.manipulations >= SRS.MANIPULATIONS_MAX then - piece.locked = true - end - end + if piece.manipulations >= self.MANIPULATIONS_MAX then + piece:moveInGrid({ x = 0, y = 1 }, 1, grid) + if piece:isDropBlocked(grid) then + piece.locked = true + end + end end +function SRS:canPieceRotate() end + return SRS diff --git a/tetris/rulesets/standard_exp.lua b/tetris/rulesets/standard_exp.lua index ab17aa3..9e3b00c 100755 --- a/tetris/rulesets/standard_exp.lua +++ b/tetris/rulesets/standard_exp.lua @@ -54,7 +54,7 @@ function SRS:attemptWallkicks(piece, new_piece, rot_dir, grid) if grid:canPlacePiece(kicked_piece) then piece:setRelativeRotation(rot_dir) piece:setOffset(offset) - self:onPieceRotate(piece, grid) + self:onPieceRotate(piece, grid, offset.y < 0) return end end @@ -69,7 +69,10 @@ end function SRS:onPieceDrop(piece, grid) self:checkNewLow(piece) - if piece.manipulations >= self.MANIPULATIONS_MAX and piece:isDropBlocked(grid) then + if ( + piece.manipulations >= self.MANIPULATIONS_MAX or + piece.rotations >= self.ROTATIONS_MAX + ) and piece:isDropBlocked(grid) then piece.locked = true else piece.lock_delay = 0 -- step reset @@ -86,16 +89,15 @@ function SRS:onPieceMove(piece, grid) end end -function SRS:onPieceRotate(piece, grid) +function SRS:onPieceRotate(piece, grid, upward) piece.lock_delay = 0 -- rotate reset - self:checkNewLow(piece) - if piece.rotations >= self.ROTATIONS_MAX then - piece.rotations = piece.rotations + 1 - piece:moveInGrid({ x = 0, y = 1 }, 1, grid) - if piece:isDropBlocked(grid) then - piece.locked = true - end - end + if upward or piece:isDropBlocked(grid) then + piece.rotations = piece.rotations + 1 + end +end + +function SRS:canPieceRotate(piece) + return piece.rotations < self.ROTATIONS_MAX end function SRS:get180RotationValue() return 2 end diff --git a/tetris/rulesets/ti_srs.lua b/tetris/rulesets/ti_srs.lua index 3b5ecc1..c4bab21 100644 --- a/tetris/rulesets/ti_srs.lua +++ b/tetris/rulesets/ti_srs.lua @@ -150,9 +150,9 @@ function SRS:attemptWallkicks(piece, new_piece, rot_dir, grid) for idx, offset in pairs(kicks) do kicked_piece = new_piece:withOffset(offset) if grid:canPlacePiece(kicked_piece) then - self:onPieceRotate(piece, grid) piece:setRelativeRotation(rot_dir) piece:setOffset(offset) + self:onPieceRotate(piece, grid, offset.y < 0) return end end @@ -182,16 +182,17 @@ function SRS:onPieceMove(piece, grid) end end -function SRS:onPieceRotate(piece, grid) +function SRS:onPieceRotate(piece, grid, upward) piece.lock_delay = 0 -- rotate reset - if piece:isDropBlocked(grid) then + if upward or piece:isDropBlocked(grid) then piece.rotations = piece.rotations + 1 - if piece.rotations >= self.ROTATIONS_MAX then - piece.locked = true - end end end +function SRS:canPieceRotate(piece) + return piece.rotations < self.ROTATIONS_MAX +end + function SRS:get180RotationValue() return 3 end return SRS