diff --git a/tetris/rulesets/arika_exp.lua b/tetris/rulesets/arika_exp.lua new file mode 100644 index 0000000..bd5aa6c --- /dev/null +++ b/tetris/rulesets/arika_exp.lua @@ -0,0 +1,49 @@ +local Piece = require 'tetris.components.piece' +local Ruleset = require 'tetris.rulesets.arika_ace2' + +local ARS = Ruleset:extend() + +ARS.name = "ARS-X" +ARS.hash = "ArikaEXP" + +ARS.MANIPULATIONS_MAX = 24 +ARS.ROTATIONS_MAX = 12 + +function ARS:onPieceCreate(piece, grid) + piece.manipulations = 0 + piece.rotations = 0 + piece.lowest_y = -math.huge +end + +function ARS:checkNewLow(piece) + for _, block in pairs(piece:getBlockOffsets()) do + local y = piece.position.y + block.y + if y > piece.lowest_y then + piece.manipulations = 0 + piece.rotations = 0 + piece.lowest_y = y + end + end +end + +function ARS:onPieceMove(piece, grid) + piece.lock_delay = 0 -- move reset + if piece:isDropBlocked(grid) then + piece.manipulations = piece.manipulations + 1 + if piece.manipulations >= ARS.MANIPULATIONS_MAX then + piece.locked = true + end + end +end + +function ARS:onPieceRotate(piece, grid, upward) + piece.lock_delay = 0 -- rotate reset + if upward or piece:isDropBlocked(grid) then + piece.rotations = piece.rotations + 1 + if piece.rotations >= ARS.ROTATIONS_MAX and piece:isDropBlocked(grid) then + piece.locked = true + end + end +end + +return ARS \ No newline at end of file diff --git a/tetris/rulesets/standard.lua b/tetris/rulesets/standard.lua index 79226d7..0b0b5d1 100644 --- a/tetris/rulesets/standard.lua +++ b/tetris/rulesets/standard.lua @@ -1,5 +1,5 @@ local Piece = require 'tetris.components.piece' -local Ruleset = require 'tetris.rulesets.standard_exp' +local Ruleset = require 'tetris.rulesets.standard_ace' local SRS = Ruleset:extend() @@ -33,8 +33,8 @@ SRS.wallkicks_line = { }, }; -function SRS:attemptWallkicks(piece, new_piece, rot_dir, grid) +function SRS:attemptWallkicks(piece, new_piece, rot_dir, grid) local kicks if piece.shape == "O" then return @@ -69,6 +69,12 @@ function SRS:checkNewLow(piece) end end +function SRS:onPieceCreate(piece, grid) + piece.manipulations = 0 + piece.rotations = 0 + piece.lowest_y = -math.huge +end + function SRS:onPieceDrop(piece, grid) self:checkNewLow(piece) if piece.manipulations >= self.MANIPULATIONS_MAX and piece:isDropBlocked(grid) then diff --git a/tetris/rulesets/arika_srs.lua b/tetris/rulesets/standard_ace.lua old mode 100755 new mode 100644 similarity index 93% rename from tetris/rulesets/arika_srs.lua rename to tetris/rulesets/standard_ace.lua index 784c23d..15a68f6 --- a/tetris/rulesets/arika_srs.lua +++ b/tetris/rulesets/standard_ace.lua @@ -1,5 +1,5 @@ local Piece = require 'tetris.components.piece' -local Ruleset = require 'tetris.rulesets.ti_srs' +local Ruleset = require 'tetris.rulesets.standard_ti' local SRS = Ruleset:extend() diff --git a/tetris/rulesets/standard_exp.lua b/tetris/rulesets/standard_exp.lua index b36192a..354f90d 100755 --- a/tetris/rulesets/standard_exp.lua +++ b/tetris/rulesets/standard_exp.lua @@ -1,5 +1,5 @@ local Piece = require 'tetris.components.piece' -local Ruleset = require 'tetris.rulesets.arika_srs' +local Ruleset = require 'tetris.rulesets.standard_ti' local SRS = Ruleset:extend() @@ -27,8 +27,6 @@ function SRS:checkNewLow(piece) for _, block in pairs(piece:getBlockOffsets()) do local y = piece.position.y + block.y if y > piece.lowest_y then - --piece.manipulations = 0 - --piece.rotations = 0 piece.lowest_y = y end end diff --git a/tetris/rulesets/ti_srs.lua b/tetris/rulesets/standard_ti.lua similarity index 100% rename from tetris/rulesets/ti_srs.lua rename to tetris/rulesets/standard_ti.lua