From 714c6b5e99855cf0e973f3bd22059a5e1bffe875 Mon Sep 17 00:00:00 2001 From: Ishaan Bhardwaj Date: Tue, 16 Feb 2021 23:28:54 -0500 Subject: [PATCH] Floorkicks reworked (read comments) If not classic lock, upward kicks reset to the top of the tile --- tetris/components/piece.lua | 10 +++++++--- tetris/rulesets/ruleset.lua | 19 ++++++++++++------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/tetris/components/piece.lua b/tetris/components/piece.lua index 4d1b414..457aba1 100644 --- a/tetris/components/piece.lua +++ b/tetris/components/piece.lua @@ -117,11 +117,15 @@ function Piece:lockIfBottomed(grid) return self end -function Piece:addGravity(gravity, grid) +function Piece:addGravity(gravity, grid, classic_lock) local new_gravity = self.gravity + gravity if self:isDropBlocked(grid) then - self.gravity = math.min(1, new_gravity) - self.lock_delay = self.lock_delay + 1 + if classic_lock then + self.gravity = math.min(1, new_gravity) + else + self.gravity = 0 + self.lock_delay = self.lock_delay + 1 + end else local dropped_squares = math.floor(new_gravity) local new_frac_gravity = new_gravity - dropped_squares diff --git a/tetris/rulesets/ruleset.lua b/tetris/rulesets/ruleset.lua index fc3de20..d4f08a6 100644 --- a/tetris/rulesets/ruleset.lua +++ b/tetris/rulesets/ruleset.lua @@ -115,7 +115,9 @@ function Ruleset:rotatePiece(inputs, piece, grid, prev_inputs, initial) local was_drop_blocked = piece:isDropBlocked(grid) - self:attemptRotate(new_inputs, piece, grid, initial) + if self:canPieceRotate(piece, grid) then + self:attemptRotate(new_inputs, piece, grid, initial) + end if not was_drop_blocked and piece:isDropBlocked(grid) then playSE("bottom") @@ -160,6 +162,7 @@ function Ruleset:attemptWallkicks(piece, new_piece, rot_dir, grid) end function Ruleset:movePiece(piece, grid, move, instant) + if not self:canPieceMove(piece, grid) then return end local x = piece.position.x local was_drop_blocked = piece:isDropBlocked(grid) if move == "left" then @@ -181,7 +184,7 @@ end function Ruleset:dropPiece( inputs, piece, grid, gravity, drop_speed, drop_locked, hard_drop_locked, - hard_drop_enabled, additive_gravity + hard_drop_enabled, additive_gravity, classic_lock ) if piece.big then gravity = gravity / 2 @@ -191,18 +194,18 @@ function Ruleset:dropPiece( local y = piece.position.y if inputs["down"] == true and drop_locked == false then if additive_gravity then - piece:addGravity(gravity + drop_speed, grid) + piece:addGravity(gravity + drop_speed, grid, classic_lock) else - piece:addGravity(math.max(gravity, drop_speed), grid) + piece:addGravity(math.max(gravity, drop_speed), grid, classic_lock) end elseif inputs["up"] == true and hard_drop_enabled == true then if hard_drop_locked == true or piece:isDropBlocked(grid) then - piece:addGravity(gravity, grid) + piece:addGravity(gravity, grid, classic_lock) else piece:dropToBottom(grid) end else - piece:addGravity(gravity, grid) + piece:addGravity(gravity, grid, classic_lock) end if piece.position.y ~= y then self:onPieceDrop(piece, grid) @@ -303,11 +306,13 @@ function Ruleset:processPiece( end self:dropPiece( inputs, piece, grid, gravity, drop_speed, drop_locked, hard_drop_locked, - hard_drop_enabled, additive_gravity + hard_drop_enabled, additive_gravity, classic_lock ) self:lockPiece(piece, grid, lock_delay, classic_lock) end +function Ruleset:canPieceMove(piece, grid) return true end +function Ruleset:canPieceRotate(piece, grid) return true end function Ruleset:onPieceMove(piece) end function Ruleset:onPieceRotate(piece) end function Ruleset:onPieceDrop(piece) end