From 2e3eff025f50bc0a3a2a1ad24fd408e1bdd4c26d Mon Sep 17 00:00:00 2001 From: Joe Zeng Date: Fri, 6 Nov 2020 20:49:44 -0500 Subject: [PATCH] Replaced spaces with tabs. Check CONTRIBUTING.md, guys! --- README.md | 8 +- docs/gamemodes.md | 18 +- funcs.lua | 14 +- load/graphics.lua | 40 ++--- load/rpc.lua | 76 ++++---- main.lua | 14 +- scene/exit.lua | 2 +- scene/game.lua | 26 +-- scene/game_config.lua | 44 ++--- scene/input_config.lua | 36 ++-- scene/mode_select.lua | 10 +- scene/title.lua | 36 ++-- tetris/components/grid.lua | 130 +++++++------- tetris/components/piece.lua | 2 +- tetris/modes/4wide.lua | 10 +- tetris/modes/big_a2.lua | 118 ++++++------ tetris/modes/ck.lua | 48 ++--- tetris/modes/demon_mode.lua | 10 +- tetris/modes/gamemode.lua | 22 +-- tetris/modes/konoha.lua | 42 ++--- tetris/modes/marathon_2020.lua | 72 ++++---- tetris/modes/marathon_a1.lua | 144 +++++++-------- tetris/modes/marathon_a2.lua | 140 +++++++-------- tetris/modes/marathon_a3.lua | 188 ++++++++++---------- tetris/modes/marathon_ax4.lua | 6 +- tetris/modes/marathon_c89.lua | 10 +- tetris/modes/phantom_mania.lua | 34 ++-- tetris/modes/phantom_mania2.lua | 42 ++--- tetris/modes/phantom_mania_n.lua | 12 +- tetris/modes/race_40.lua | 16 +- tetris/modes/scoredrain.lua | 118 ++++++------ tetris/modes/strategy.lua | 4 +- tetris/modes/survival_2020.lua | 2 +- tetris/modes/survival_a1.lua | 82 ++++----- tetris/modes/survival_a2.lua | 32 ++-- tetris/modes/survival_a3.lua | 58 +++--- tetris/modes/tgmplus.lua | 140 +++++++-------- tetris/randomizers/bag7noSZOstart.lua | 20 +-- tetris/randomizers/bag8.lua | 4 +- tetris/randomizers/history_4rolls.lua | 26 +-- tetris/randomizers/history_6rolls.lua | 26 +-- tetris/randomizers/history_6rolls_35bag.lua | 96 +++++----- tetris/rulesets/arika.lua | 24 +-- tetris/rulesets/arika_ace.lua | 66 +++---- tetris/rulesets/arika_ace2.lua | 52 +++--- tetris/rulesets/arika_srs.lua | 14 +- tetris/rulesets/arika_ti.lua | 52 +++--- tetris/rulesets/cambridge.lua | 8 +- tetris/rulesets/crap.lua | 14 +- tetris/rulesets/dtet.lua | 16 +- tetris/rulesets/eheart.lua | 24 +-- tetris/rulesets/pptprs.lua | 24 +-- tetris/rulesets/ruleset.lua | 18 +- tetris/rulesets/standard_exp.lua | 46 ++--- tetris/rulesets/ti_srs.lua | 14 +- 55 files changed, 1175 insertions(+), 1175 deletions(-) diff --git a/README.md b/README.md index ba5c922..4c9f235 100644 --- a/README.md +++ b/README.md @@ -37,13 +37,13 @@ If you haven't already, install `love` with your favourite package manager (Home Clone the repository in git: - git clone https://github.com/SashLilac/cambridge + git clone https://github.com/SashLilac/cambridge Alternatively, download the source code ZIP in the latest release. Then, navigate to the root directory that you just cloned, and type: - love . + love . It should run automatically! @@ -53,11 +53,11 @@ You do not need LÖVE on Windows, as it comes bundled with the program. Download Extract the ZIP, open a Command Prompt at the folder you extracted Cambridge to, then run this command: - dist\windows\love.exe . + dist\windows\love.exe . Alternatively, if you're on a 32-bit system, run this instead: - dist\win32\love.exe . + dist\win32\love.exe . 32-bit systems do not support rich presence integration. diff --git a/docs/gamemodes.md b/docs/gamemodes.md index 19b755e..d3fd10e 100644 --- a/docs/gamemodes.md +++ b/docs/gamemodes.md @@ -4,17 +4,17 @@ Game modes There are several classes of game modes. The modes that originate from other games are organized by suffix: * The "C" series stand for "Classic" games, games that were produced before around 1992-1993 and generally have no wallkicks or lock delay. - * C84 - The original version from the Electronika 60. - * C88 - Sega Tetris. - * C89 - Nintendo / NES Tetris. + * C84 - The original version from the Electronika 60. + * C88 - Sega Tetris. + * C89 - Nintendo / NES Tetris. * The "A" series stand for "Arika" games, or games in the Tetris the Grand Master series. - * A1 - Tetris The Grand Master (the original from 1998). - * A2 - Tetris The Absolute The Grand Master 2 PLUS. - * A3 - Tetris The Grand Master 3 Terror-Instinct. - * AX - Tetris The Grand Master ACE (X for Xbox). + * A1 - Tetris The Grand Master (the original from 1998). + * A2 - Tetris The Absolute The Grand Master 2 PLUS. + * A3 - Tetris The Grand Master 3 Terror-Instinct. + * AX - Tetris The Grand Master ACE (X for Xbox). * The "G" series stand for "Guideline" games, or games that follow the Tetris Guideline. - * GF - Tetris Friends (2007-2019) - * GJ - Tetris Online Japan (2005-2011) + * GF - Tetris Friends (2007-2019) + * GJ - Tetris Online Japan (2005-2011) * N stands for Nullpomino, only used for Phantom Mania N. MARATHON diff --git a/funcs.lua b/funcs.lua index ea195f6..cd1bed1 100644 --- a/funcs.lua +++ b/funcs.lua @@ -1,11 +1,11 @@ function copy(t) -- returns deep copy of t (as opposed to the shallow copy you get from var = t) if type(t) ~= "table" then return t end - local meta = getmetatable(t) - local target = {} - for k, v in pairs(t) do target[k] = v end - setmetatable(target, meta) - return target + local meta = getmetatable(t) + local target = {} + for k, v in pairs(t) do target[k] = v end + setmetatable(target, meta) + return target end function strTrueValues(tbl) @@ -64,6 +64,6 @@ function formatBigNum(number) end function Mod1(n, m) - -- returns a number congruent to n modulo m in the range [1;m] (as opposed to [0;m-1]) - return ((n-1) % m) + 1 + -- returns a number congruent to n modulo m in the range [1;m] (as opposed to [0;m-1]) + return ((n-1) % m) + 1 end \ No newline at end of file diff --git a/load/graphics.lua b/load/graphics.lua index b442167..4269aa6 100644 --- a/load/graphics.lua +++ b/load/graphics.lua @@ -20,8 +20,8 @@ backgrounds = { love.graphics.newImage("res/backgrounds/1800-railways.png"), love.graphics.newImage("res/backgrounds/1900-world-wide-web.png"), title = love.graphics.newImage("res/backgrounds/title_v0.1.png"), - input_config = love.graphics.newImage("res/backgrounds/options-pcb.png"), - game_config = love.graphics.newImage("res/backgrounds/options-gears.png"), + input_config = love.graphics.newImage("res/backgrounds/options-pcb.png"), + game_config = love.graphics.newImage("res/backgrounds/options-gears.png"), } blocks = { @@ -48,24 +48,24 @@ blocks = { } ColourSchemes = { - Arika = { - I = "R", - L = "O", - J = "B", - S = "M", - Z = "G", - O = "Y", - T = "C", - }, - TTC = { - I = "C", - L = "O", - J = "B", - S = "G", - Z = "R", - O = "Y", - T = "M", - }, + Arika = { + I = "R", + L = "O", + J = "B", + S = "M", + Z = "G", + O = "Y", + T = "C", + }, + TTC = { + I = "C", + L = "O", + J = "B", + S = "G", + Z = "R", + O = "Y", + T = "M", + }, } for name, blockset in pairs(blocks) do diff --git a/load/rpc.lua b/load/rpc.lua index 5dc3de8..1dc45c0 100644 --- a/load/rpc.lua +++ b/load/rpc.lua @@ -1,58 +1,58 @@ print("Loading discord RPC...") DiscordRPC = { - loaded = false + loaded = false } local success, RPC = pcall(require, "libs.discordRPC") if success then - DiscordRPC.loaded = true - DiscordRPC.appId = "599778517789573120" + DiscordRPC.loaded = true + DiscordRPC.appId = "599778517789573120" - function RPC.ready(userId, username, discriminator, avatar) - print(string.format("Discord: ready (%s, %s, %s, %s)", userId, username, discriminator, avatar)) - end + function RPC.ready(userId, username, discriminator, avatar) + print(string.format("Discord: ready (%s, %s, %s, %s)", userId, username, discriminator, avatar)) + end - function RPC.disconnected(errorCode, message) - print(string.format("Discord: disconnected (%d: %s)", errorCode, message)) - end + function RPC.disconnected(errorCode, message) + print(string.format("Discord: disconnected (%d: %s)", errorCode, message)) + end - function RPC.errored(errorCode, message) - print(string.format("Discord: error (%d: %s)", errorCode, message)) - end + function RPC.errored(errorCode, message) + print(string.format("Discord: error (%d: %s)", errorCode, message)) + end - function RPC.joinGame(joinSecret) - print(string.format("Discord: join (%s)", joinSecret)) - end + function RPC.joinGame(joinSecret) + print(string.format("Discord: join (%s)", joinSecret)) + end - function RPC.spectateGame(spectateSecret) - print(string.format("Discord: spectate (%s)", spectateSecret)) - end + function RPC.spectateGame(spectateSecret) + print(string.format("Discord: spectate (%s)", spectateSecret)) + end - function RPC.joinRequest(userId, username, discriminator, avatar) - print(string.format("Discord: join request (%s, %s, %s, %s)", userId, username, discriminator, avatar)) - RPC.respond(userId, "yes") - end + function RPC.joinRequest(userId, username, discriminator, avatar) + print(string.format("Discord: join request (%s, %s, %s, %s)", userId, username, discriminator, avatar)) + RPC.respond(userId, "yes") + end - RPC.initialize(DiscordRPC.appId, true) - local now = os.time(os.date("*t")) - - DiscordRPC.RPC = RPC - print("DiscordRPC successfully loaded.") + RPC.initialize(DiscordRPC.appId, true) + local now = os.time(os.date("*t")) + + DiscordRPC.RPC = RPC + print("DiscordRPC successfully loaded.") else - print("DiscordRPC failed to load!") - print(RPC) + print("DiscordRPC failed to load!") + print(RPC) end DiscordRPC.presence = { - startTimestamp = now, - details = "Loading game...", - state = "", - largeImageKey = "icon2", - largeImageText = "Arcade Stacker", - smallImageKey = "", - smallImageText = "" + startTimestamp = now, + details = "Loading game...", + state = "", + largeImageKey = "icon2", + largeImageText = "Arcade Stacker", + smallImageKey = "", + smallImageText = "" } function DiscordRPC:update(newstuff) - for k, v in pairs(newstuff) do self.presence[k] = v end - if self.loaded then self.RPC.updatePresence(self.presence) end + for k, v in pairs(newstuff) do self.presence[k] = v end + if self.loaded then self.RPC.updatePresence(self.presence) end end diff --git a/main.lua b/main.lua index 2b5e617..cd043d6 100644 --- a/main.lua +++ b/main.lua @@ -15,13 +15,13 @@ function love.load() love.window.setMode(love.graphics.getWidth(), love.graphics.getHeight(), {resizable = true}); - if not config.gamesettings then config.gamesettings = {} end - for _, option in ipairs(GameConfigScene.options) do - if not config.gamesettings[option[1]] then - config.gamesettings[option[1]] = 1 - end - end - + if not config.gamesettings then config.gamesettings = {} end + for _, option in ipairs(GameConfigScene.options) do + if not config.gamesettings[option[1]] then + config.gamesettings[option[1]] = 1 + end + end + if not config.input then config.input = {} scene = InputConfigScene() diff --git a/scene/exit.lua b/scene/exit.lua index 3ae1c55..ba0f849 100644 --- a/scene/exit.lua +++ b/scene/exit.lua @@ -7,7 +7,7 @@ function ExitScene:new() end function ExitScene:update() - love.event.quit() + love.event.quit() end function ExitScene:render() diff --git a/scene/game.lua b/scene/game.lua index 8ecff33..5f796c8 100644 --- a/scene/game.lua +++ b/scene/game.lua @@ -6,9 +6,9 @@ function GameScene:new(game_mode, ruleset) self.ruleset = ruleset() self.game:initialize(self.ruleset) DiscordRPC:update({ - details = self.game.rpc_details, - state = self.game.name, - }) + details = self.game.rpc_details, + state = self.game.name, + }) end function GameScene:update() @@ -66,16 +66,16 @@ function GameScene:onKeyPress(e) highscore_hash = self.game.hash .. "-" .. self.ruleset.hash submitHighscore(highscore_hash, highscore_entry) scene = ModeSelectScene() - elseif (e.scancode == config.input.retry) then - -- fuck this, this is hacky but the way this codebase is setup prevents anything else - -- it seems like all the values that get touched in the child gamemode class - -- stop being linked to the values of the GameMode superclass because of how `mt.__index` works - -- not even sure this is the actual problem, but I don't want to have to rebuild everything about - -- the core organisation of everything. this hacky way will have to do until someone figures out something. - love.keypressed("escape", "escape", false) - love.keypressed("return", "return", false) - elseif e.scancode == "escape" then - scene = ModeSelectScene() + elseif (e.scancode == config.input.retry) then + -- fuck this, this is hacky but the way this codebase is setup prevents anything else + -- it seems like all the values that get touched in the child gamemode class + -- stop being linked to the values of the GameMode superclass because of how `mt.__index` works + -- not even sure this is the actual problem, but I don't want to have to rebuild everything about + -- the core organisation of everything. this hacky way will have to do until someone figures out something. + love.keypressed("escape", "escape", false) + love.keypressed("return", "return", false) + elseif e.scancode == "escape" then + scene = ModeSelectScene() end end diff --git a/scene/game_config.lua b/scene/game_config.lua index d2eafe6..37c8a84 100644 --- a/scene/game_config.lua +++ b/scene/game_config.lua @@ -16,11 +16,11 @@ function ConfigScene:new() -- load current config self.config = config.input self.highlight = 1 - + DiscordRPC:update({ - details = "In menus", - state = "Changing game settings", - }) + details = "In menus", + state = "Changing game settings", + }) end function ConfigScene:update() @@ -33,21 +33,21 @@ function ConfigScene:render() 0, 0, 0, 0.5, 0.5 ) - + love.graphics.setFont(font_3x5_4) - love.graphics.print("GAME SETTINGS", 80, 40) - + love.graphics.print("GAME SETTINGS", 80, 40) + love.graphics.setColor(1, 1, 1, 0.5) - love.graphics.rectangle("fill", 20, 98 + self.highlight * 20, 170, 22) - + love.graphics.rectangle("fill", 20, 98 + self.highlight * 20, 170, 22) + love.graphics.setFont(font_3x5_2) for i, option in ipairs(ConfigScene.options) do - love.graphics.setColor(1, 1, 1, 1) - love.graphics.printf(option[2], 40, 100 + i * 20, 150, "left") - for j, setting in ipairs(option[3]) do - love.graphics.setColor(1, 1, 1, config.gamesettings[option[1]] == j and 1 or 0.5) - love.graphics.printf(setting, 100 + 110 * j, 100 + i * 20, 100, "center") - end + love.graphics.setColor(1, 1, 1, 1) + love.graphics.printf(option[2], 40, 100 + i * 20, 150, "left") + for j, setting in ipairs(option[3]) do + love.graphics.setColor(1, 1, 1, config.gamesettings[option[1]] == j and 1 or 0.5) + love.graphics.printf(setting, 100 + 110 * j, 100 + i * 20, 100, "center") + end end end @@ -64,15 +64,15 @@ function ConfigScene:onKeyPress(e) self.highlight = Mod1(self.highlight+1, optioncount) elseif (e.scancode == config.input["left"] or e.scancode == "left") and e.isRepeat == false then playSE("cursor_lr") - local option = ConfigScene.options[self.highlight] - config.gamesettings[option[1]] = Mod1(config.gamesettings[option[1]]-1, #option[3]) + local option = ConfigScene.options[self.highlight] + config.gamesettings[option[1]] = Mod1(config.gamesettings[option[1]]-1, #option[3]) elseif (e.scancode == config.input["right"] or e.scancode == "right") and e.isRepeat == false then playSE("cursor_lr") - local option = ConfigScene.options[self.highlight] - config.gamesettings[option[1]] = Mod1(config.gamesettings[option[1]]+1, #option[3]) - elseif e.scancode == "escape" then - loadSave() - scene = TitleScene() + local option = ConfigScene.options[self.highlight] + config.gamesettings[option[1]] = Mod1(config.gamesettings[option[1]]+1, #option[3]) + elseif e.scancode == "escape" then + loadSave() + scene = TitleScene() end end diff --git a/scene/input_config.lua b/scene/input_config.lua index 6170d9f..a16aa23 100644 --- a/scene/input_config.lua +++ b/scene/input_config.lua @@ -6,16 +6,16 @@ require 'load.save' local configurable_inputs = { "left", - "right", - "up", - "down", + "right", + "up", + "down", "rotate_left", "rotate_left2", - "rotate_right", - "rotate_right2", - "rotate_180", - "hold", - "retry", + "rotate_right", + "rotate_right2", + "rotate_180", + "hold", + "retry", } function ConfigScene:new() @@ -24,9 +24,9 @@ function ConfigScene:new() self.input_state = 1 DiscordRPC:update({ - details = "In menus", - state = "Changing input config", - }) + details = "In menus", + state = "Changing input config", + }) end function ConfigScene:update() @@ -42,7 +42,7 @@ function ConfigScene:render() love.graphics.setFont(font_3x5_2) for i, input in pairs(configurable_inputs) do - love.graphics.printf(input, 40, 50 + i * 20, 200, "left") + love.graphics.printf(input, 40, 50 + i * 20, 200, "left") if config.input[input] then love.graphics.printf( love.keyboard.getKeyFromScancode(config.input[input]) .. " (" .. config.input[input] .. ")", @@ -67,13 +67,13 @@ function ConfigScene:onKeyPress(e) self.input_state = 1 end else - if e.scancode == "escape" then - loadSave() + if e.scancode == "escape" then + loadSave() scene = TitleScene() - else - config.input[configurable_inputs[self.input_state]] = e.scancode - self.input_state = self.input_state + 1 - end + else + config.input[configurable_inputs[self.input_state]] = e.scancode + self.input_state = self.input_state + 1 + end end end diff --git a/scene/mode_select.lua b/scene/mode_select.lua index aa987e4..e810bd3 100755 --- a/scene/mode_select.lua +++ b/scene/mode_select.lua @@ -12,9 +12,9 @@ function ModeSelectScene:new() select = "mode", } DiscordRPC:update({ - details = "In menus", - state = "Choosing a mode", - }) + details = "In menus", + state = "Choosing a mode", + }) end function ModeSelectScene:update() @@ -77,8 +77,8 @@ function ModeSelectScene:onKeyPress(e) (e.scancode == config.input["right"] or e.scancode == "right") then self:switchSelect() playSE("cursor_lr") - elseif e.scancode == "escape" then - scene = TitleScene() + elseif e.scancode == "escape" then + scene = TitleScene() end end diff --git a/scene/title.lua b/scene/title.lua index adcb688..a21ce24 100644 --- a/scene/title.lua +++ b/scene/title.lua @@ -4,30 +4,30 @@ local main_menu_screens = { ModeSelectScene, InputConfigScene, GameConfigScene, - ExitScene, + ExitScene, } local mainmenuidle = { - "Idle", - "On title screen", - "On main menu screen", - "Twiddling their thumbs", - "Admiring the main menu's BG", - "Waiting for spring to come", - "Actually not playing", - "Contemplating collecting stars", - "Preparing to put the block!!", - "Having a nap", - "In menus", - "Bottom text", + "Idle", + "On title screen", + "On main menu screen", + "Twiddling their thumbs", + "Admiring the main menu's BG", + "Waiting for spring to come", + "Actually not playing", + "Contemplating collecting stars", + "Preparing to put the block!!", + "Having a nap", + "In menus", + "Bottom text", } function TitleScene:new() self.main_menu_state = 1 DiscordRPC:update({ - details = "In menus", - state = mainmenuidle[math.random(#mainmenuidle)], - }) + details = "In menus", + state = mainmenuidle[math.random(#mainmenuidle)], + }) end function TitleScene:update() @@ -67,8 +67,8 @@ function TitleScene:onKeyPress(e) elseif (e.scancode == config.input["down"] or e.scancode == "down") and e.isRepeat == false then self:changeOption(1) playSE("cursor") - elseif e.scancode == "escape" and e.isRepeat == false then - love.event.quit() + elseif e.scancode == "escape" and e.isRepeat == false then + love.event.quit() end end diff --git a/tetris/components/grid.lua b/tetris/components/grid.lua index 6e3fb1a..1cfcfcb 100644 --- a/tetris/components/grid.lua +++ b/tetris/components/grid.lua @@ -29,10 +29,10 @@ function Grid:clear() end function Grid:getCell(x, y) - if x < 1 or x > 10 or y > 24 then return oob - elseif y < 1 then return empty - else return self.grid[y][x] - end + if x < 1 or x > 10 or y > 24 then return oob + elseif y < 1 then return empty + else return self.grid[y][x] + end end function Grid:isOccupied(x, y) @@ -67,11 +67,11 @@ function Grid:canPlaceBigPiece(piece) for index, offset in pairs(offsets) do local x = piece.position.x + offset.x local y = piece.position.y + offset.y - if ( - self:isOccupied(x * 2 + 0, y * 2 + 0) - or self:isOccupied(x * 2 + 1, y * 2 + 0) - or self:isOccupied(x * 2 + 0, y * 2 + 1) - or self:isOccupied(x * 2 + 1, y * 2 + 1) + if ( + self:isOccupied(x * 2 + 0, y * 2 + 0) + or self:isOccupied(x * 2 + 1, y * 2 + 0) + or self:isOccupied(x * 2 + 0, y * 2 + 1) + or self:isOccupied(x * 2 + 1, y * 2 + 1) ) then return false end @@ -148,27 +148,27 @@ function Grid:copyBottomRow() end function Grid:garbageRise(row_vals) - for row = 1, 23 do - self.grid[row] = self.grid[row+1] - self.grid_age[row] = self.grid_age[row+1] - end - self.grid[24] = {empty, empty, empty, empty, empty, empty, empty, empty, empty, empty} - self.grid_age[24] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0} + for row = 1, 23 do + self.grid[row] = self.grid[row+1] + self.grid_age[row] = self.grid_age[row+1] + end + self.grid[24] = {empty, empty, empty, empty, empty, empty, empty, empty, empty, empty} + self.grid_age[24] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0} for col = 1, 10 do self.grid[24][col] = (row_vals[col] == "e") and empty or block end end function Grid:applyFourWide() - for row = 1, 24 do - local x = self.grid[row] - x[1] = x[1]~=block and block or x[1] - x[2] = x[2]~=block and block or x[2] - x[3] = x[3]~=block and block or x[3] - x[8] = x[8]~=block and block or x[8] - x[9] = x[9]~=block and block or x[9] - x[10] = x[10]~=block and block or x[10] - end + for row = 1, 24 do + local x = self.grid[row] + x[1] = x[1]~=block and block or x[1] + x[2] = x[2]~=block and block or x[2] + x[3] = x[3]~=block and block or x[3] + x[8] = x[8]~=block and block or x[8] + x[9] = x[9]~=block and block or x[9] + x[10] = x[10]~=block and block or x[10] + end end function Grid:applyPiece(piece) if piece.big then @@ -195,12 +195,12 @@ function Grid:applyBigPiece(piece) y = piece.position.y + offset.y for a = 1, 2 do for b = 1, 2 do - if y*2+a > 0 then - self.grid[y*2+a][x*2+b] = { - skin = piece.skin, - colour = piece.colour - } - end + if y*2+a > 0 then + self.grid[y*2+a][x*2+b] = { + skin = piece.skin, + colour = piece.colour + } + end end end end @@ -208,45 +208,45 @@ end function Grid:checkForBravo(cleared_row_count) for i = 0, 23 - cleared_row_count do - for j = 0, 9 do - if self:isOccupied(j, i) then return false end - end - end + for j = 0, 9 do + if self:isOccupied(j, i) then return false end + end + end return true end function Grid:checkSecretGrade() - local sgrade = 0 - for i=23,5,-1 do - local validLine = true - local emptyCell = 0 - if i > 13 then - emptyCell = 23-i - end - if i <= 13 then - emptyCell = i-5 - end - for j=0,9 do - if (not self:isOccupied(j,i) and j ~= emptyCell) or (j == emptyCell and self:isOccupied(j,i)) then - validLine = false - end - end - if not self:isOccupied(emptyCell,i-1) then - validLine = false - end - if(validLine) then - sgrade = sgrade + 1 - else - return sgrade - end - end - --[[ - if(sgrade == 0) then return "" - elseif(sgrade < 10) then return 10-sgrade - elseif(sgrade < 19) then return "S"..(sgrade-9) end - return "GM" - --]] - return sgrade + local sgrade = 0 + for i=23,5,-1 do + local validLine = true + local emptyCell = 0 + if i > 13 then + emptyCell = 23-i + end + if i <= 13 then + emptyCell = i-5 + end + for j=0,9 do + if (not self:isOccupied(j,i) and j ~= emptyCell) or (j == emptyCell and self:isOccupied(j,i)) then + validLine = false + end + end + if not self:isOccupied(emptyCell,i-1) then + validLine = false + end + if(validLine) then + sgrade = sgrade + 1 + else + return sgrade + end + end + --[[ + if(sgrade == 0) then return "" + elseif(sgrade < 10) then return 10-sgrade + elseif(sgrade < 19) then return "S"..(sgrade-9) end + return "GM" + --]] + return sgrade end function Grid:update() diff --git a/tetris/components/piece.lua b/tetris/components/piece.lua index 5ea5cd4..1ae0790 100644 --- a/tetris/components/piece.lua +++ b/tetris/components/piece.lua @@ -10,7 +10,7 @@ function Piece:new(shape, rotation, position, block_offsets, gravity, lock_delay self.gravity = gravity self.lock_delay = lock_delay self.skin = skin - self.colour = colour + self.colour = colour self.ghost = false self.locked = false self.big = big diff --git a/tetris/modes/4wide.lua b/tetris/modes/4wide.lua index e49916f..3680d0b 100644 --- a/tetris/modes/4wide.lua +++ b/tetris/modes/4wide.lua @@ -20,13 +20,13 @@ function FourWideGame:onLineClear(cleared_row_count) local new_level = self.level + cleared_row_levels[cleared_row_count] self:updateSectionTimes(self.level, new_level) if new_level >= 1300 or self:hitTorikan(self.level, new_level) then - self.clear = true + self.clear = true if new_level >= 1300 then self.level = 1300 - self.grid:clear() - self.roll_frames = -150 - else - self.game_over = true + self.grid:clear() + self.roll_frames = -150 + else + self.game_over = true end else self.level = math.min(new_level, 1300) diff --git a/tetris/modes/big_a2.lua b/tetris/modes/big_a2.lua index fb015d9..15fa1da 100755 --- a/tetris/modes/big_a2.lua +++ b/tetris/modes/big_a2.lua @@ -15,86 +15,86 @@ MarathonA2Game.tagline = "The points don't matter! Can you reach the invisible r function MarathonA2Game:new() - self.super:new() - self.big_mode = true + self.super:new() + self.big_mode = true self.roll_frames = 0 - self.combo = 1 + self.combo = 1 self.grade = 0 self.grade_points = 0 self.grade_point_decay_counter = 0 - + self.randomizer = History6RollsRandomizer() - self.lock_drop = false + self.lock_drop = false self.enable_hold = false self.next_queue_length = 1 end function MarathonA2Game:getARE() - if self.level < 700 then return 27 - elseif self.level < 800 then return 18 - else return 14 end + if self.level < 700 then return 27 + elseif self.level < 800 then return 18 + else return 14 end end function MarathonA2Game:getLineARE() - if self.level < 600 then return 27 - elseif self.level < 700 then return 18 - elseif self.level < 800 then return 14 - else return 8 end + if self.level < 600 then return 27 + elseif self.level < 700 then return 18 + elseif self.level < 800 then return 14 + else return 8 end end function MarathonA2Game:getDasLimit() - if self.level < 500 then return 15 - elseif self.level < 900 then return 9 - else return 7 end + if self.level < 500 then return 15 + elseif self.level < 900 then return 9 + else return 7 end end function MarathonA2Game:getLineClearDelay() - if self.level < 500 then return 40 - elseif self.level < 600 then return 25 - elseif self.level < 700 then return 16 - elseif self.level < 800 then return 12 - else return 6 end + if self.level < 500 then return 40 + elseif self.level < 600 then return 25 + elseif self.level < 700 then return 16 + elseif self.level < 800 then return 12 + else return 6 end end function MarathonA2Game:getLockDelay() - if self.level < 900 then return 30 - else return 17 end + if self.level < 900 then return 30 + else return 17 end end function MarathonA2Game:getGravity() - if (self.level < 30) then return 4/256 - elseif (self.level < 35) then return 6/256 - elseif (self.level < 40) then return 8/256 - elseif (self.level < 50) then return 10/256 - elseif (self.level < 60) then return 12/256 - elseif (self.level < 70) then return 16/256 - elseif (self.level < 80) then return 32/256 - elseif (self.level < 90) then return 48/256 - elseif (self.level < 100) then return 64/256 - elseif (self.level < 120) then return 80/256 - elseif (self.level < 140) then return 96/256 - elseif (self.level < 160) then return 112/256 - elseif (self.level < 170) then return 128/256 - elseif (self.level < 200) then return 144/256 - elseif (self.level < 220) then return 4/256 - elseif (self.level < 230) then return 32/256 - elseif (self.level < 233) then return 64/256 - elseif (self.level < 236) then return 96/256 - elseif (self.level < 239) then return 128/256 - elseif (self.level < 243) then return 160/256 - elseif (self.level < 247) then return 192/256 - elseif (self.level < 251) then return 224/256 - elseif (self.level < 300) then return 1 - elseif (self.level < 330) then return 2 - elseif (self.level < 360) then return 3 - elseif (self.level < 400) then return 4 - elseif (self.level < 420) then return 5 - elseif (self.level < 450) then return 4 - elseif (self.level < 500) then return 3 - else return 20 - end + if (self.level < 30) then return 4/256 + elseif (self.level < 35) then return 6/256 + elseif (self.level < 40) then return 8/256 + elseif (self.level < 50) then return 10/256 + elseif (self.level < 60) then return 12/256 + elseif (self.level < 70) then return 16/256 + elseif (self.level < 80) then return 32/256 + elseif (self.level < 90) then return 48/256 + elseif (self.level < 100) then return 64/256 + elseif (self.level < 120) then return 80/256 + elseif (self.level < 140) then return 96/256 + elseif (self.level < 160) then return 112/256 + elseif (self.level < 170) then return 128/256 + elseif (self.level < 200) then return 144/256 + elseif (self.level < 220) then return 4/256 + elseif (self.level < 230) then return 32/256 + elseif (self.level < 233) then return 64/256 + elseif (self.level < 236) then return 96/256 + elseif (self.level < 239) then return 128/256 + elseif (self.level < 243) then return 160/256 + elseif (self.level < 247) then return 192/256 + elseif (self.level < 251) then return 224/256 + elseif (self.level < 300) then return 1 + elseif (self.level < 330) then return 2 + elseif (self.level < 360) then return 3 + elseif (self.level < 400) then return 4 + elseif (self.level < 420) then return 5 + elseif (self.level < 450) then return 4 + elseif (self.level < 500) then return 3 + else return 20 + end end function MarathonA2Game:advanceOneFrame() @@ -118,12 +118,12 @@ end function MarathonA2Game:onLineClear(cleared_row_count) cleared_row_count = cleared_row_count / 2 - self.level = math.min(self.level + cleared_row_count, 999) - if self.level == 999 and not self.clear then - self.clear = true - self.grid:clear() - self.roll_frames = -150 - end + self.level = math.min(self.level + cleared_row_count, 999) + if self.level == 999 and not self.clear then + self.clear = true + self.grid:clear() + self.roll_frames = -150 + end end function MarathonA2Game:updateScore(level, drop_bonus, cleared_lines) diff --git a/tetris/modes/ck.lua b/tetris/modes/ck.lua index ae5affa..d15a54b 100644 --- a/tetris/modes/ck.lua +++ b/tetris/modes/ck.lua @@ -29,7 +29,7 @@ function SurvivalCKGame:new() end function SurvivalCKGame:getARE() - if self.level < 100 then return 15 + if self.level < 100 then return 15 elseif self.level < 200 then return 14 elseif self.level < 300 then return 13 elseif self.level < 400 then return 12 @@ -49,7 +49,7 @@ function SurvivalCKGame:getLineARE() end function SurvivalCKGame:getDasLimit() - if self.level < 700 then return 10 + if self.level < 700 then return 10 elseif self.level < 900 then return 9 elseif self.level < 1100 then return 8 elseif self.level < 1300 then return 7 @@ -58,7 +58,7 @@ function SurvivalCKGame:getDasLimit() end function SurvivalCKGame:getLineClearDelay() - if self.level < 100 then return 10 + if self.level < 100 then return 10 elseif self.level < 200 then return 8 elseif self.level < 300 then return 7 elseif self.level < 400 then return 6 @@ -66,7 +66,7 @@ function SurvivalCKGame:getLineClearDelay() end function SurvivalCKGame:getLockDelay() - if self.level < 600 then return 20 + if self.level < 600 then return 20 elseif self.level < 700 then return 19 elseif self.level < 800 then return 18 elseif self.level < 900 then return 17 @@ -87,7 +87,7 @@ function SurvivalCKGame:getGravity() end function SurvivalCKGame:getGarbageLimit() - if self.level < 1000 then return 20 + if self.level < 1000 then return 20 elseif self.level < 1100 then return 17 elseif self.level < 1200 then return 14 elseif self.level < 1300 then return 11 @@ -95,7 +95,7 @@ function SurvivalCKGame:getGarbageLimit() end function SurvivalCKGame:getRegretTime() - if self.level < 500 then return frameTime(0,55) + if self.level < 500 then return frameTime(0,55) elseif self.level < 1000 then return frameTime(0,50) elseif self.level < 1500 then return frameTime(0,40) elseif self.level < 2000 then return frameTime(0,35) @@ -153,11 +153,11 @@ function SurvivalCKGame:onLineClear(cleared_row_count) local new_level = self.level + cleared_row_count * 2 self:updateSectionTimes(self.level, new_level) if new_level >= 2500 or self:hitTorikan(self.level, new_level) then - self.clear = true + self.clear = true if new_level >= 2500 then self.level = 2500 - self.grid:clear() - self.big_mode = true + self.grid:clear() + self.big_mode = true self.roll_frames = -150 end else @@ -217,11 +217,11 @@ function SurvivalCKGame:drawGrid() elseif self.level >= 1600 and self.level < 1700 then self.grid:drawInvisible(self.rollOpacityFunction2) elseif self.level >= 1700 and self.level < 1800 then - self.grid:drawInvisible(self.rollOpacityFunction3) + self.grid:drawInvisible(self.rollOpacityFunction3) elseif self.level >= 1800 and self.level < 1900 then - self.grid:drawInvisible(self.rollOpacityFunction4) + self.grid:drawInvisible(self.rollOpacityFunction4) elseif self.level >= 1900 and self.level < 2000 then - self.grid:drawInvisible(self.rollOpacityFunction5) + self.grid:drawInvisible(self.rollOpacityFunction5) else self.grid:draw() end @@ -237,27 +237,27 @@ SurvivalCKGame.rollOpacityFunction1 = function(age) end SurvivalCKGame.rollOpacityFunction2 = function(age) - if age < 360 then return 1 - elseif age > 420 then return 0 - else return 1 - (age - 360) / 60 end + if age < 360 then return 1 + elseif age > 420 then return 0 + else return 1 - (age - 360) / 60 end end SurvivalCKGame.rollOpacityFunction3 = function(age) - if age < 300 then return 1 - elseif age > 360 then return 0 - else return 1 - (age - 300) / 60 end + if age < 300 then return 1 + elseif age > 360 then return 0 + else return 1 - (age - 300) / 60 end end SurvivalCKGame.rollOpacityFunction4 = function(age) - if age < 240 then return 1 - elseif age > 300 then return 0 - else return 1 - (age - 240) / 60 end + if age < 240 then return 1 + elseif age > 300 then return 0 + else return 1 - (age - 240) / 60 end end SurvivalCKGame.rollOpacityFunction5 = function(age) - if age < 180 then return 1 - elseif age > 240 then return 0 - else return 1 - (age - 180) / 60 end + if age < 180 then return 1 + elseif age > 240 then return 0 + else return 1 - (age - 180) / 60 end end local master_grades = { "M", "MK", "MV", "MO", "MM" } diff --git a/tetris/modes/demon_mode.lua b/tetris/modes/demon_mode.lua index 1fad30c..963913e 100644 --- a/tetris/modes/demon_mode.lua +++ b/tetris/modes/demon_mode.lua @@ -26,13 +26,13 @@ function DemonModeGame:new() self.enable_hold = true self.lock_drop = true self.next_queue_length = 3 - if math.random() < 1/6.66 then - self.rpc_details = "Suffering" - end + if math.random() < 1/6.66 then + self.rpc_details = "Suffering" + end end function DemonModeGame:getARE() - if self.level < 500 then return 30 + if self.level < 500 then return 30 elseif self.level < 600 then return 25 elseif self.level < 700 then return 15 elseif self.level < 800 then return 14 @@ -53,7 +53,7 @@ function DemonModeGame:getLineARE() end function DemonModeGame:getDasLimit() - if self.level < 500 then return 15 + if self.level < 500 then return 15 elseif self.level < 1000 then return 10 elseif self.level < 1500 then return 5 elseif self.level < 1700 then return 4 diff --git a/tetris/modes/gamemode.lua b/tetris/modes/gamemode.lua index 503ef2c..4ca0235 100644 --- a/tetris/modes/gamemode.lua +++ b/tetris/modes/gamemode.lua @@ -40,12 +40,12 @@ function GameMode:new() self.draw_section_times = false self.draw_secondary_section_times = false self.big_mode = false - self.rpc_details = "In game" + self.rpc_details = "In game" -- variables related to configurable parameters self.drop_locked = false self.hard_drop_locked = false - self.lock_on_soft_drop = false - self.lock_on_hard_drop = false + self.lock_on_soft_drop = false + self.lock_on_hard_drop = false self.hold_queue = nil self.held = false self.section_start_time = 0 @@ -62,7 +62,7 @@ function GameMode:getLineClearDelay() return 40 end function GameMode:getDasLimit() return 15 end function GameMode:getNextPiece(ruleset) - + return { skin = "2tie", shape = self.randomizer:nextPiece(), @@ -72,12 +72,12 @@ end function GameMode:initialize(ruleset) -- generate next queue - self:new() + self:new() for i = 1, self.next_queue_length do table.insert(self.next_queue, self:getNextPiece(ruleset)) end - self.lock_on_soft_drop = ({ruleset.softdrop_lock, self.instant_soft_drop, false, true })[config.gamesettings.manlock] - self.lock_on_hard_drop = ({ruleset.harddrop_lock, self.instant_hard_drop, true, false})[config.gamesettings.manlock] + self.lock_on_soft_drop = ({ruleset.softdrop_lock, self.instant_soft_drop, false, true })[config.gamesettings.manlock] + self.lock_on_hard_drop = ({ruleset.harddrop_lock, self.instant_hard_drop, true, false})[config.gamesettings.manlock] end function GameMode:update(inputs, ruleset) @@ -346,7 +346,7 @@ function GameMode:drawGhostPiece(ruleset) end function GameMode:drawNextQueue(ruleset) - local colourscheme = ({ruleset.colourscheme, ColourSchemes.Arika, ColourSchemes.TTC})[config.gamesettings.piece_colour] + local colourscheme = ({ruleset.colourscheme, ColourSchemes.Arika, ColourSchemes.TTC})[config.gamesettings.piece_colour] function drawPiece(piece, skin, offsets, pos_x, pos_y) for index, offset in pairs(offsets) do local x = offset.x + ruleset.spawn_positions[piece].x @@ -379,9 +379,9 @@ function GameMode:drawNextQueue(ruleset) end function GameMode:setNextOpacity(i, j) - i = i ~= nil and i or 1 - j = j ~= nil and j or 1 - love.graphics.setColor(j, j, j, i) + i = i ~= nil and i or 1 + j = j ~= nil and j or 1 + love.graphics.setColor(j, j, j, i) end function GameMode:setHoldOpacity(i, j) i = i ~= nil and i or 1 diff --git a/tetris/modes/konoha.lua b/tetris/modes/konoha.lua index 009ab2c..102306d 100755 --- a/tetris/modes/konoha.lua +++ b/tetris/modes/konoha.lua @@ -16,8 +16,8 @@ function KonohaGame:new() self.randomizer = KonohaRandomizer() self.bravos = 0 - self.last_bonus_amount = 0 - self.last_bonus_display_time = 0 + self.last_bonus_amount = 0 + self.last_bonus_display_time = 0 self.time_limit = 10800 self.big_mode = true @@ -26,7 +26,7 @@ function KonohaGame:new() end function KonohaGame:getARE() - if self.level < 300 then return 30 + if self.level < 300 then return 30 elseif self.level < 400 then return 25 elseif self.level < 500 then return 20 elseif self.level < 600 then return 17 @@ -42,14 +42,14 @@ function KonohaGame:getLineARE() end function KonohaGame:getDasLimit() - if self.level < 500 then return 10 + if self.level < 500 then return 10 elseif self.level < 800 then return 9 elseif self.level < 1000 then return 8 else return 7 end end function KonohaGame:getLineClearDelay() - if self.level < 200 then return 14 + if self.level < 200 then return 14 elseif self.level < 500 then return 9 elseif self.level < 800 then return 8 elseif self.level < 1000 then return 7 @@ -57,7 +57,7 @@ function KonohaGame:getLineClearDelay() end function KonohaGame:getLockDelay() - if self.level < 500 then return 30 + if self.level < 500 then return 30 elseif self.level < 600 then return 25 elseif self.level < 700 then return 23 elseif self.level < 800 then return 20 @@ -69,7 +69,7 @@ function KonohaGame:getLockDelay() end function KonohaGame:getGravity() - if (self.level < 30) then return 4/256 + if (self.level < 30) then return 4/256 elseif (self.level < 35) then return 8/256 elseif (self.level < 40) then return 12/256 elseif (self.level < 50) then return 16/256 @@ -102,7 +102,7 @@ function KonohaGame:advanceOneFrame() if self.time_limit <= 0 then self.game_over = true end - self.last_bonus_display_time = self.last_bonus_display_time - 1 + self.last_bonus_display_time = self.last_bonus_display_time - 1 end function KonohaGame:onPieceEnter() @@ -124,9 +124,9 @@ local non_bravo_bonus = {0, 0, 20, 40} local bravo_ot_bonus = {0, 60, 120, 180} function KonohaGame:onLineClear(cleared_row_count) - local oldtime = self.time_limit + local oldtime = self.time_limit - self.level = self.level + cleared_row_levels[cleared_row_count / 2] + self.level = self.level + cleared_row_levels[cleared_row_count / 2] if self.grid:checkForBravo(cleared_row_count) then self.bravos = self.bravos + 1 if self.level < 1000 then self.time_limit = self.time_limit + bravo_bonus[cleared_row_count / 2] @@ -136,12 +136,12 @@ function KonohaGame:onLineClear(cleared_row_count) elseif self.level < 1000 then self.time_limit = self.time_limit + non_bravo_bonus[cleared_row_count / 2] end - - local bonus = self.time_limit - oldtime - if bonus > 0 then - self.last_bonus_amount = bonus - self.last_bonus_display_time = 120 - end + + local bonus = self.time_limit - oldtime + if bonus > 0 then + self.last_bonus_amount = bonus + self.last_bonus_display_time = 120 + end end function KonohaGame:getBackground() @@ -164,13 +164,13 @@ function KonohaGame:drawScoringInfo() love.graphics.setFont(font_3x5_3) if not self.game_over and self.time_limit < frameTime(0,10) and self.time_limit % 4 < 2 then - love.graphics.setColor(1, 0.3, 0.3, 1) - end + love.graphics.setColor(1, 0.3, 0.3, 1) + end love.graphics.printf(formatTime(self.time_limit), 240, 140, 120, "right") love.graphics.setColor(1, 1, 1, 1) - if self.last_bonus_display_time > 0 then - love.graphics.printf("+"..formatTime(self.last_bonus_amount), 240, 160, 120, "right") - end + if self.last_bonus_display_time > 0 then + love.graphics.printf("+"..formatTime(self.last_bonus_amount), 240, 160, 120, "right") + end love.graphics.printf(self.bravos, 240, 220, 90, "left") love.graphics.printf(self.level, 240, 340, 50, "right") love.graphics.printf(self:getSectionEndLevel(), 240, 370, 50, "right") diff --git a/tetris/modes/marathon_2020.lua b/tetris/modes/marathon_2020.lua index 18ea22e..c54cb72 100644 --- a/tetris/modes/marathon_2020.lua +++ b/tetris/modes/marathon_2020.lua @@ -41,7 +41,7 @@ function Marathon2020Game:new() end function Marathon2020Game:getARE() - if self.delay_level < 1 then return 27 + if self.delay_level < 1 then return 27 elseif self.delay_level < 2 then return 24 elseif self.delay_level < 3 then return 21 elseif self.delay_level < 4 then return 18 @@ -60,7 +60,7 @@ function Marathon2020Game:getLineARE() end function Marathon2020Game:getDasLimit() - if self.delay_level < 1 then return 15 + if self.delay_level < 1 then return 15 elseif self.delay_level < 3 then return 12 elseif self.delay_level < 5 then return 9 elseif self.delay_level < 8 then return 8 @@ -72,7 +72,7 @@ function Marathon2020Game:getDasLimit() end function Marathon2020Game:getLineClearDelay() - if self.delay_level < 1 then return 40 + if self.delay_level < 1 then return 40 elseif self.delay_level < 3 then return 25 elseif self.delay_level < 4 then return 20 elseif self.delay_level < 5 then return 15 @@ -84,7 +84,7 @@ function Marathon2020Game:getLineClearDelay() end function Marathon2020Game:getLockDelay() - if self.delay_level < 6 then return 30 + if self.delay_level < 6 then return 30 elseif self.delay_level < 7 then return 26 elseif self.delay_level < 8 then return 22 elseif self.delay_level < 9 then return 19 @@ -98,35 +98,35 @@ function Marathon2020Game:getLockDelay() end function Marathon2020Game:getGravity() - if self.level < 30 then return 4/256 + if self.level < 30 then return 4/256 elseif self.level < 35 then return 6/256 - elseif self.level < 40 then return 8/256 - elseif self.level < 50 then return 10/256 - elseif self.level < 60 then return 12/256 - elseif self.level < 70 then return 16/256 - elseif self.level < 80 then return 32/256 - elseif self.level < 90 then return 48/256 - elseif self.level < 100 then return 64/256 - elseif self.level < 120 then return 80/256 - elseif self.level < 140 then return 96/256 - elseif self.level < 160 then return 112/256 - elseif self.level < 170 then return 128/256 - elseif self.level < 200 then return 144/256 - elseif self.level < 220 then return 4/256 - elseif self.level < 230 then return 32/256 - elseif self.level < 233 then return 64/256 - elseif self.level < 236 then return 96/256 - elseif self.level < 239 then return 128/256 - elseif self.level < 243 then return 160/256 - elseif self.level < 247 then return 192/256 - elseif self.level < 251 then return 224/256 + elseif self.level < 40 then return 8/256 + elseif self.level < 50 then return 10/256 + elseif self.level < 60 then return 12/256 + elseif self.level < 70 then return 16/256 + elseif self.level < 80 then return 32/256 + elseif self.level < 90 then return 48/256 + elseif self.level < 100 then return 64/256 + elseif self.level < 120 then return 80/256 + elseif self.level < 140 then return 96/256 + elseif self.level < 160 then return 112/256 + elseif self.level < 170 then return 128/256 + elseif self.level < 200 then return 144/256 + elseif self.level < 220 then return 4/256 + elseif self.level < 230 then return 32/256 + elseif self.level < 233 then return 64/256 + elseif self.level < 236 then return 96/256 + elseif self.level < 239 then return 128/256 + elseif self.level < 243 then return 160/256 + elseif self.level < 247 then return 192/256 + elseif self.level < 251 then return 224/256 elseif self.level < 300 then return 1 - elseif self.level < 330 then return 2 - elseif self.level < 360 then return 3 - elseif self.level < 400 then return 4 - elseif self.level < 420 then return 5 - elseif self.level < 450 then return 4 - elseif self.level < 500 then return 3 + elseif self.level < 330 then return 2 + elseif self.level < 360 then return 3 + elseif self.level < 400 then return 4 + elseif self.level < 420 then return 5 + elseif self.level < 450 then return 4 + elseif self.level < 500 then return 3 else return 20 end end @@ -260,7 +260,7 @@ local function getSectionForLevel(level) end function Marathon2020Game:getEndOfSectionForSection(section) - if self.torikan_passed[900] == false and section == 10 then return 999 + if self.torikan_passed[900] == false and section == 10 then return 999 elseif self.torikan_passed[1900] == false and section == 20 then return 2000 elseif section == 20 then return 2020 else return section * 100 end @@ -303,7 +303,7 @@ function Marathon2020Game:checkClear(level) level >= 2020 ) then - if self.torikan_passed[500] == false then self.level = 500 + if self.torikan_passed[500] == false then self.level = 500 elseif self.torikan_passed[900] == false then self.level = 999 elseif self.torikan_passed[1000] == false then self.level = 1000 elseif self.torikan_passed[1500] == false then self.level = 1500 @@ -434,9 +434,9 @@ function Marathon2020Game:drawScoringInfo() self:drawSectionTimesWithSecondary(current_section) if (self.cool_timer > 0) then - love.graphics.printf("COOL!!", 64, 400, 160, "center") - self.cool_timer = self.cool_timer - 1 - end + love.graphics.printf("COOL!!", 64, 400, 160, "center") + self.cool_timer = self.cool_timer - 1 + end love.graphics.setFont(font_3x5_3) love.graphics.printf(self:getTotalGrade(), text_x, 120, 90, "left") diff --git a/tetris/modes/marathon_a1.lua b/tetris/modes/marathon_a1.lua index ac559ef..7fc5b71 100644 --- a/tetris/modes/marathon_a1.lua +++ b/tetris/modes/marathon_a1.lua @@ -14,26 +14,26 @@ MarathonA1Game.tagline = "Can you score enough points to reach the title of Gran function MarathonA1Game:new() - MarathonA1Game.super:new() - + MarathonA1Game.super:new() + self.roll_frames = 0 - self.combo = 1 + self.combo = 1 self.bravos = 0 self.gm_conditions = { level300 = false, level500 = false, level999 = false - } - self.SGnames = { - "9", "8", "7", "6", "5", "4", "3", "2", "1", - "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", - "GM" - } - + } + self.SGnames = { + "9", "8", "7", "6", "5", "4", "3", "2", "1", + "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", + "GM" + } + self.randomizer = History4RollsRandomizer() - self.lock_drop = false - self.enable_hard_drop = false + self.lock_drop = false + self.enable_hard_drop = false self.enable_hold = false self.next_queue_length = 1 end @@ -59,60 +59,60 @@ function MarathonA1Game:getLockDelay() end local function getRankForScore(score) - if score < 400 then return {rank = "9", next = 400} - elseif score < 800 then return {rank = "8", next = 800} - elseif score < 1400 then return {rank = "7", next = 1400} - elseif score < 2000 then return {rank = "6", next = 2000} - elseif score < 3500 then return {rank = "5", next = 3500} - elseif score < 5500 then return {rank = "4", next = 5500} - elseif score < 8000 then return {rank = "3", next = 8000} - elseif score < 12000 then return {rank = "2", next = 12000} - elseif score < 16000 then return {rank = "1", next = 16000} - elseif score < 22000 then return {rank = "S1", next = 22000} - elseif score < 30000 then return {rank = "S2", next = 30000} - elseif score < 40000 then return {rank = "S3", next = 40000} - elseif score < 52000 then return {rank = "S4", next = 52000} - elseif score < 66000 then return {rank = "S5", next = 66000} - elseif score < 82000 then return {rank = "S6", next = 82000} - elseif score < 100000 then return {rank = "S7", next = 100000} - elseif score < 120000 then return {rank = "S8", next = 120000} - else return {rank = "S9", next = "???"} - end + if score < 400 then return {rank = "9", next = 400} + elseif score < 800 then return {rank = "8", next = 800} + elseif score < 1400 then return {rank = "7", next = 1400} + elseif score < 2000 then return {rank = "6", next = 2000} + elseif score < 3500 then return {rank = "5", next = 3500} + elseif score < 5500 then return {rank = "4", next = 5500} + elseif score < 8000 then return {rank = "3", next = 8000} + elseif score < 12000 then return {rank = "2", next = 12000} + elseif score < 16000 then return {rank = "1", next = 16000} + elseif score < 22000 then return {rank = "S1", next = 22000} + elseif score < 30000 then return {rank = "S2", next = 30000} + elseif score < 40000 then return {rank = "S3", next = 40000} + elseif score < 52000 then return {rank = "S4", next = 52000} + elseif score < 66000 then return {rank = "S5", next = 66000} + elseif score < 82000 then return {rank = "S6", next = 82000} + elseif score < 100000 then return {rank = "S7", next = 100000} + elseif score < 120000 then return {rank = "S8", next = 120000} + else return {rank = "S9", next = "???"} + end end function MarathonA1Game:getGravity() - local level = self.level - if (level < 30) then return 4/256 - elseif (level < 35) then return 6/256 - elseif (level < 40) then return 8/256 - elseif (level < 50) then return 10/256 - elseif (level < 60) then return 12/256 - elseif (level < 70) then return 16/256 - elseif (level < 80) then return 32/256 - elseif (level < 90) then return 48/256 - elseif (level < 100) then return 64/256 - elseif (level < 120) then return 80/256 - elseif (level < 140) then return 96/256 - elseif (level < 160) then return 112/256 - elseif (level < 170) then return 128/256 - elseif (level < 200) then return 144/256 - elseif (level < 220) then return 4/256 - elseif (level < 230) then return 32/256 - elseif (level < 233) then return 64/256 - elseif (level < 236) then return 96/256 - elseif (level < 239) then return 128/256 - elseif (level < 243) then return 160/256 - elseif (level < 247) then return 192/256 - elseif (level < 251) then return 224/256 - elseif (level < 300) then return 1 - elseif (level < 330) then return 2 - elseif (level < 360) then return 3 - elseif (level < 400) then return 4 - elseif (level < 420) then return 5 - elseif (level < 450) then return 4 - elseif (level < 500) then return 3 - else return 20 - end + local level = self.level + if (level < 30) then return 4/256 + elseif (level < 35) then return 6/256 + elseif (level < 40) then return 8/256 + elseif (level < 50) then return 10/256 + elseif (level < 60) then return 12/256 + elseif (level < 70) then return 16/256 + elseif (level < 80) then return 32/256 + elseif (level < 90) then return 48/256 + elseif (level < 100) then return 64/256 + elseif (level < 120) then return 80/256 + elseif (level < 140) then return 96/256 + elseif (level < 160) then return 112/256 + elseif (level < 170) then return 128/256 + elseif (level < 200) then return 144/256 + elseif (level < 220) then return 4/256 + elseif (level < 230) then return 32/256 + elseif (level < 233) then return 64/256 + elseif (level < 236) then return 96/256 + elseif (level < 239) then return 128/256 + elseif (level < 243) then return 160/256 + elseif (level < 247) then return 192/256 + elseif (level < 251) then return 224/256 + elseif (level < 300) then return 1 + elseif (level < 330) then return 2 + elseif (level < 360) then return 3 + elseif (level < 400) then return 4 + elseif (level < 420) then return 5 + elseif (level < 450) then return 4 + elseif (level < 500) then return 3 + else return 20 + end end function MarathonA1Game:advanceOneFrame() @@ -134,7 +134,7 @@ function MarathonA1Game:onPieceEnter() end function MarathonA1Game:onLineClear(cleared_row_count) - self:checkGMRequirements(self.level, self.level + cleared_row_count) + self:checkGMRequirements(self.level, self.level + cleared_row_count) if not self.clear then local new_level = math.min(self.level + cleared_row_count, 999) if new_level == 999 then @@ -201,10 +201,10 @@ function MarathonA1Game:drawScoringInfo() love.graphics.printf("SCORE", 240, 200, 40, "left") love.graphics.printf("NEXT RANK", 240, 260, 90, "left") love.graphics.printf("LEVEL", 240, 320, 40, "left") - local sg = self.grid:checkSecretGrade() - if sg >= 5 then - love.graphics.printf("SECRET GRADE", 240, 430, 180, "left") - end + local sg = self.grid:checkSecretGrade() + if sg >= 5 then + love.graphics.printf("SECRET GRADE", 240, 430, 180, "left") + end if self.bravos > 0 then love.graphics.printf("BRAVO", 300, 120, 40, "left") end @@ -218,11 +218,11 @@ function MarathonA1Game:drawScoringInfo() love.graphics.printf(getRankForScore(self.score).next, 240, 280, 90, "left") love.graphics.printf(self.level, 240, 340, 40, "right") love.graphics.printf(self:getSectionEndLevel(), 240, 370, 40, "right") - if sg >= 5 then - love.graphics.printf(self.SGnames[sg], 240, 450, 180, "left") - end + if sg >= 5 then + love.graphics.printf(self.SGnames[sg], 240, 450, 180, "left") + end if self.bravos > 0 then love.graphics.printf(self.bravos, 300, 140, 40, "left") end - + love.graphics.setFont(font_8x11) love.graphics.printf(formatTime(self.frames), 64, 420, 160, "center") end diff --git a/tetris/modes/marathon_a2.lua b/tetris/modes/marathon_a2.lua index 9703b3c..99e255e 100644 --- a/tetris/modes/marathon_a2.lua +++ b/tetris/modes/marathon_a2.lua @@ -15,10 +15,10 @@ MarathonA2Game.tagline = "The points don't matter! Can you reach the invisible r function MarathonA2Game:new() - MarathonA2Game.super:new() + MarathonA2Game.super:new() self.roll_frames = 0 - self.combo = 1 + self.combo = 1 self.randomizer = History6RollsRandomizer() self.grade = 0 self.grade_points = 0 @@ -26,82 +26,82 @@ function MarathonA2Game:new() self.section_start_time = 0 self.section_times = { [0] = 0 } self.section_tetrises = { [0] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } - - self.SGnames = { - "9", "8", "7", "6", "5", "4", "3", "2", "1", - "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", - "GM" - } + + self.SGnames = { + "9", "8", "7", "6", "5", "4", "3", "2", "1", + "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", + "GM" + } - self.lock_drop = false + self.lock_drop = false self.enable_hold = false self.next_queue_length = 1 end function MarathonA2Game:getARE() - if self.level < 700 then return 27 - elseif self.level < 800 then return 18 - else return 14 end + if self.level < 700 then return 27 + elseif self.level < 800 then return 18 + else return 14 end end function MarathonA2Game:getLineARE() - if self.level < 600 then return 27 - elseif self.level < 700 then return 18 - elseif self.level < 800 then return 14 - else return 8 end + if self.level < 600 then return 27 + elseif self.level < 700 then return 18 + elseif self.level < 800 then return 14 + else return 8 end end function MarathonA2Game:getDasLimit() - if self.level < 500 then return 15 - elseif self.level < 900 then return 9 - else return 7 end + if self.level < 500 then return 15 + elseif self.level < 900 then return 9 + else return 7 end end function MarathonA2Game:getLineClearDelay() - if self.level < 500 then return 40 - elseif self.level < 600 then return 25 - elseif self.level < 700 then return 16 - elseif self.level < 800 then return 12 - else return 6 end + if self.level < 500 then return 40 + elseif self.level < 600 then return 25 + elseif self.level < 700 then return 16 + elseif self.level < 800 then return 12 + else return 6 end end function MarathonA2Game:getLockDelay() - if self.level < 900 then return 30 - else return 17 end + if self.level < 900 then return 30 + else return 17 end end function MarathonA2Game:getGravity() - if (self.level < 30) then return 4/256 - elseif (self.level < 35) then return 6/256 - elseif (self.level < 40) then return 8/256 - elseif (self.level < 50) then return 10/256 - elseif (self.level < 60) then return 12/256 - elseif (self.level < 70) then return 16/256 - elseif (self.level < 80) then return 32/256 - elseif (self.level < 90) then return 48/256 - elseif (self.level < 100) then return 64/256 - elseif (self.level < 120) then return 80/256 - elseif (self.level < 140) then return 96/256 - elseif (self.level < 160) then return 112/256 - elseif (self.level < 170) then return 128/256 - elseif (self.level < 200) then return 144/256 - elseif (self.level < 220) then return 4/256 - elseif (self.level < 230) then return 32/256 - elseif (self.level < 233) then return 64/256 - elseif (self.level < 236) then return 96/256 - elseif (self.level < 239) then return 128/256 - elseif (self.level < 243) then return 160/256 - elseif (self.level < 247) then return 192/256 - elseif (self.level < 251) then return 224/256 - elseif (self.level < 300) then return 1 - elseif (self.level < 330) then return 2 - elseif (self.level < 360) then return 3 - elseif (self.level < 400) then return 4 - elseif (self.level < 420) then return 5 - elseif (self.level < 450) then return 4 - elseif (self.level < 500) then return 3 - else return 20 - end + if (self.level < 30) then return 4/256 + elseif (self.level < 35) then return 6/256 + elseif (self.level < 40) then return 8/256 + elseif (self.level < 50) then return 10/256 + elseif (self.level < 60) then return 12/256 + elseif (self.level < 70) then return 16/256 + elseif (self.level < 80) then return 32/256 + elseif (self.level < 90) then return 48/256 + elseif (self.level < 100) then return 64/256 + elseif (self.level < 120) then return 80/256 + elseif (self.level < 140) then return 96/256 + elseif (self.level < 160) then return 112/256 + elseif (self.level < 170) then return 128/256 + elseif (self.level < 200) then return 144/256 + elseif (self.level < 220) then return 4/256 + elseif (self.level < 230) then return 32/256 + elseif (self.level < 233) then return 64/256 + elseif (self.level < 236) then return 96/256 + elseif (self.level < 239) then return 128/256 + elseif (self.level < 243) then return 160/256 + elseif (self.level < 247) then return 192/256 + elseif (self.level < 251) then return 224/256 + elseif (self.level < 300) then return 1 + elseif (self.level < 330) then return 2 + elseif (self.level < 360) then return 3 + elseif (self.level < 400) then return 4 + elseif (self.level < 420) then return 5 + elseif (self.level < 450) then return 4 + elseif (self.level < 500) then return 3 + else return 20 + end end function MarathonA2Game:advanceOneFrame() @@ -144,13 +144,13 @@ function MarathonA2Game:updateScore(level, drop_bonus, cleared_lines) end function MarathonA2Game:onLineClear(cleared_row_count) - self.level = math.min(self.level + cleared_row_count, 999) - if self.level == 999 and not self.clear then - self.clear = true - self.grid:clear() + self.level = math.min(self.level + cleared_row_count, 999) + if self.level == 999 and not self.clear then + self.clear = true + self.grid:clear() if self:qualifiesForMRoll() then self.grade = 32 end - self.roll_frames = -150 - end + self.roll_frames = -150 + end end function MarathonA2Game:updateSectionTimes(old_level, new_level) @@ -335,10 +335,10 @@ function MarathonA2Game:drawScoringInfo() love.graphics.printf("GRADE", 240, 120, 40, "left") love.graphics.printf("SCORE", 240, 200, 40, "left") love.graphics.printf("LEVEL", 240, 320, 40, "left") - local sg = self.grid:checkSecretGrade() - if sg >= 5 then - love.graphics.printf("SECRET GRADE", 240, 430, 180, "left") - end + local sg = self.grid:checkSecretGrade() + if sg >= 5 then + love.graphics.printf("SECRET GRADE", 240, 430, 180, "left") + end love.graphics.setFont(font_3x5_3) if self.clear then @@ -355,9 +355,9 @@ function MarathonA2Game:drawScoringInfo() love.graphics.printf(self.score, 240, 220, 90, "left") love.graphics.printf(self.level, 240, 340, 40, "right") love.graphics.printf(self:getSectionEndLevel(), 240, 370, 40, "right") - if sg >= 5 then - love.graphics.printf(self.SGnames[sg], 240, 450, 180, "left") - end + if sg >= 5 then + love.graphics.printf(self.SGnames[sg], 240, 450, 180, "left") + end love.graphics.setFont(font_8x11) love.graphics.printf(formatTime(self.frames), 64, 420, 160, "center") diff --git a/tetris/modes/marathon_a3.lua b/tetris/modes/marathon_a3.lua index 8261ede..2610572 100644 --- a/tetris/modes/marathon_a3.lua +++ b/tetris/modes/marathon_a3.lua @@ -15,11 +15,11 @@ MarathonA3Game.tagline = "The game gets faster way more quickly! Can you get all function MarathonA3Game:new() - MarathonA3Game.super:new() + MarathonA3Game.super:new() self.speed_level = 0 self.roll_frames = 0 - self.combo = 1 + self.combo = 1 self.grade = 0 self.grade_points = 0 self.roll_points = 0 @@ -30,17 +30,17 @@ function MarathonA3Game:new() self.section_70_times = { [0] = 0 } self.section_times = { [0] = 0 } self.section_cool = false - + self.randomizer = History6RollsRandomizer() self.SGnames = { - "9", "8", "7", "6", "5", "4", "3", "2", "1", - "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", - "GM" - } + "9", "8", "7", "6", "5", "4", "3", "2", "1", + "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", + "GM" + } - self.lock_drop = true - self.lock_hard_drop = true + self.lock_drop = true + self.lock_hard_drop = true self.enable_hold = true self.next_queue_length = 3 @@ -51,77 +51,77 @@ self.SGnames = { end function MarathonA3Game:getARE() - if self.speed_level < 700 then return 27 - elseif self.speed_level < 800 then return 18 - elseif self.speed_level < 1000 then return 14 - elseif self.speed_level < 1100 then return 8 - elseif self.speed_level < 1200 then return 7 - else return 6 end + if self.speed_level < 700 then return 27 + elseif self.speed_level < 800 then return 18 + elseif self.speed_level < 1000 then return 14 + elseif self.speed_level < 1100 then return 8 + elseif self.speed_level < 1200 then return 7 + else return 6 end end function MarathonA3Game:getLineARE() - if self.speed_level < 600 then return 27 - elseif self.speed_level < 700 then return 18 - elseif self.speed_level < 800 then return 14 - elseif self.speed_level < 1100 then return 8 - elseif self.speed_level < 1200 then return 7 - else return 6 end + if self.speed_level < 600 then return 27 + elseif self.speed_level < 700 then return 18 + elseif self.speed_level < 800 then return 14 + elseif self.speed_level < 1100 then return 8 + elseif self.speed_level < 1200 then return 7 + else return 6 end end function MarathonA3Game:getDasLimit() - if self.speed_level < 500 then return 15 - elseif self.speed_level < 900 then return 9 - else return 7 end + if self.speed_level < 500 then return 15 + elseif self.speed_level < 900 then return 9 + else return 7 end end function MarathonA3Game:getLineClearDelay() - if self.speed_level < 500 then return 40 - elseif self.speed_level < 600 then return 25 - elseif self.speed_level < 700 then return 16 - elseif self.speed_level < 800 then return 12 - elseif self.speed_level < 1100 then return 6 - elseif self.speed_level < 1200 then return 5 - else return 4 end + if self.speed_level < 500 then return 40 + elseif self.speed_level < 600 then return 25 + elseif self.speed_level < 700 then return 16 + elseif self.speed_level < 800 then return 12 + elseif self.speed_level < 1100 then return 6 + elseif self.speed_level < 1200 then return 5 + else return 4 end end function MarathonA3Game:getLockDelay() - if self.speed_level < 900 then return 30 - elseif self.speed_level < 1100 then return 17 - else return 15 end + if self.speed_level < 900 then return 30 + elseif self.speed_level < 1100 then return 17 + else return 15 end end function MarathonA3Game:getGravity() - if (self.speed_level < 30) then return 4/256 - elseif (self.speed_level < 35) then return 6/256 - elseif (self.speed_level < 40) then return 8/256 - elseif (self.speed_level < 50) then return 10/256 - elseif (self.speed_level < 60) then return 12/256 - elseif (self.speed_level < 70) then return 16/256 - elseif (self.speed_level < 80) then return 32/256 - elseif (self.speed_level < 90) then return 48/256 - elseif (self.speed_level < 100) then return 64/256 - elseif (self.speed_level < 120) then return 80/256 - elseif (self.speed_level < 140) then return 96/256 - elseif (self.speed_level < 160) then return 112/256 - elseif (self.speed_level < 170) then return 128/256 - elseif (self.speed_level < 200) then return 144/256 - elseif (self.speed_level < 220) then return 4/256 - elseif (self.speed_level < 230) then return 32/256 - elseif (self.speed_level < 233) then return 64/256 - elseif (self.speed_level < 236) then return 96/256 - elseif (self.speed_level < 239) then return 128/256 - elseif (self.speed_level < 243) then return 160/256 - elseif (self.speed_level < 247) then return 192/256 - elseif (self.speed_level < 251) then return 224/256 - elseif (self.speed_level < 300) then return 1 - elseif (self.speed_level < 330) then return 2 - elseif (self.speed_level < 360) then return 3 - elseif (self.speed_level < 400) then return 4 - elseif (self.speed_level < 420) then return 5 - elseif (self.speed_level < 450) then return 4 - elseif (self.speed_level < 500) then return 3 - else return 20 - end + if (self.speed_level < 30) then return 4/256 + elseif (self.speed_level < 35) then return 6/256 + elseif (self.speed_level < 40) then return 8/256 + elseif (self.speed_level < 50) then return 10/256 + elseif (self.speed_level < 60) then return 12/256 + elseif (self.speed_level < 70) then return 16/256 + elseif (self.speed_level < 80) then return 32/256 + elseif (self.speed_level < 90) then return 48/256 + elseif (self.speed_level < 100) then return 64/256 + elseif (self.speed_level < 120) then return 80/256 + elseif (self.speed_level < 140) then return 96/256 + elseif (self.speed_level < 160) then return 112/256 + elseif (self.speed_level < 170) then return 128/256 + elseif (self.speed_level < 200) then return 144/256 + elseif (self.speed_level < 220) then return 4/256 + elseif (self.speed_level < 230) then return 32/256 + elseif (self.speed_level < 233) then return 64/256 + elseif (self.speed_level < 236) then return 96/256 + elseif (self.speed_level < 239) then return 128/256 + elseif (self.speed_level < 243) then return 160/256 + elseif (self.speed_level < 247) then return 192/256 + elseif (self.speed_level < 251) then return 224/256 + elseif (self.speed_level < 300) then return 1 + elseif (self.speed_level < 330) then return 2 + elseif (self.speed_level < 360) then return 3 + elseif (self.speed_level < 400) then return 4 + elseif (self.speed_level < 420) then return 5 + elseif (self.speed_level < 450) then return 4 + elseif (self.speed_level < 500) then return 3 + else return 20 + end end function MarathonA3Game:advanceOneFrame() @@ -149,28 +149,28 @@ end function MarathonA3Game:onPieceEnter() if (self.level % 100 ~= 99) and self.level ~= 998 and self.frames ~= 0 then - self:updateSectionTimes(self.level, self.level + 1) - self.level = self.level + 1 - self.speed_level = self.speed_level + 1 + self:updateSectionTimes(self.level, self.level + 1) + self.level = self.level + 1 + self.speed_level = self.speed_level + 1 self.torikan_passed = self.level >= 500 and true or false - end + end end local cleared_row_levels = {1, 2, 4, 6} function MarathonA3Game:onLineClear(cleared_row_count) - local advanced_levels = cleared_row_levels[cleared_row_count] - self:updateSectionTimes(self.level, self.level + advanced_levels) - if not self.clear then - self.level = math.min(self.level + advanced_levels, 999) - end - self.speed_level = self.speed_level + advanced_levels - if self.level == 999 and not self.clear then - self.clear = true - self.grid:clear() - self.roll_frames = -150 - end - if not self.torikan_passed and self.level >= 500 and self.frames >= 25200 then + local advanced_levels = cleared_row_levels[cleared_row_count] + self:updateSectionTimes(self.level, self.level + advanced_levels) + if not self.clear then + self.level = math.min(self.level + advanced_levels, 999) + end + self.speed_level = self.speed_level + advanced_levels + if self.level == 999 and not self.clear then + self.clear = true + self.grid:clear() + self.roll_frames = -150 + end + if not self.torikan_passed and self.level >= 500 and self.frames >= 25200 then self.level = 500 self.game_over = true end @@ -217,15 +217,15 @@ function MarathonA3Game:updateSectionTimes(old_level, new_level) table.insert(self.section_70_times, section_70_time) if section <= 9 and self.section_status[section - 1] == "cool" and - self.section_70_times[section] < self.section_70_times[section - 1] + 120 then + self.section_70_times[section] < self.section_70_times[section - 1] + 120 then self.section_cool = true self.coolregret_message = "COOL!!" - self.coolregret_timer = 300 - elseif self.section_status[section - 1] == "cool" then self.section_cool = false - elseif section <= 9 and self.section_70_times[section] < cool_cutoffs[section] then + self.coolregret_timer = 300 + elseif self.section_status[section - 1] == "cool" then self.section_cool = false + elseif section <= 9 and self.section_70_times[section] < cool_cutoffs[section] then self.section_cool = true self.coolregret_message = "COOL!!" - self.coolregret_timer = 300 + self.coolregret_timer = 300 end end end @@ -407,9 +407,9 @@ function MarathonA3Game:drawScoringInfo() love.graphics.printf("SCORE", 240, 200, 40, "left") love.graphics.printf("LEVEL", 240, 320, 40, "left") local sg = self.grid:checkSecretGrade() - if sg >= 5 then - love.graphics.printf("SECRET GRADE", 240, 430, 180, "left") - end + if sg >= 5 then + love.graphics.printf("SECRET GRADE", 240, 430, 180, "left") + end -- draw section time data current_section = math.floor(self.level / 100) + 1 @@ -439,9 +439,9 @@ function MarathonA3Game:drawScoringInfo() if not self.clear then love.graphics.printf(formatTime(self.frames - self.section_start_time), current_x, 40 + 20 * current_section, 90, "left") end if(self.coolregret_timer > 0) then - love.graphics.printf(self.coolregret_message, 64, 400, 160, "center") - self.coolregret_timer = self.coolregret_timer - 1 - end + love.graphics.printf(self.coolregret_message, 64, 400, 160, "center") + self.coolregret_timer = self.coolregret_timer - 1 + end love.graphics.setFont(font_3x5_3) love.graphics.printf(self.score, 240, 220, 90, "left") @@ -452,8 +452,8 @@ function MarathonA3Game:drawScoringInfo() love.graphics.printf(self.level, 240, 340, 40, "right") love.graphics.printf(self:getSectionEndLevel(), 240, 370, 40, "right") if sg >= 5 then - love.graphics.printf(self.SGnames[sg], 240, 450, 180, "left") - end + love.graphics.printf(self.SGnames[sg], 240, 450, 180, "left") + end love.graphics.setFont(font_8x11) love.graphics.printf(formatTime(self.frames), 64, 420, 160, "center") diff --git a/tetris/modes/marathon_ax4.lua b/tetris/modes/marathon_ax4.lua index 6554cc0..51ed313 100644 --- a/tetris/modes/marathon_ax4.lua +++ b/tetris/modes/marathon_ax4.lua @@ -29,7 +29,7 @@ function MarathonAX4Game:new() end function MarathonAX4Game:getARE() - if self.lines < 10 then return 18 + if self.lines < 10 then return 18 elseif self.lines < 40 then return 14 elseif self.lines < 60 then return 12 elseif self.lines < 70 then return 10 @@ -43,14 +43,14 @@ function MarathonAX4Game:getLineARE() end function MarathonAX4Game:getDasLimit() - if self.lines < 20 then return 10 + if self.lines < 20 then return 10 elseif self.lines < 50 then return 9 elseif self.lines < 70 then return 8 else return 7 end end function MarathonAX4Game:getLineClearDelay() - if self.lines < 10 then return 14 + if self.lines < 10 then return 14 elseif self.lines < 30 then return 9 else return 5 end end diff --git a/tetris/modes/marathon_c89.lua b/tetris/modes/marathon_c89.lua index bc4b75d..f37d636 100644 --- a/tetris/modes/marathon_c89.lua +++ b/tetris/modes/marathon_c89.lua @@ -13,8 +13,8 @@ MarathonC89Game.tagline = "Can you play fast enough to reach the killscreen?" function MarathonC89Game:new() - MarathonC89Game.super:new() - + MarathonC89Game.super:new() + self.randomizer = Randomizer() self.ready_frames = 1 @@ -23,8 +23,8 @@ function MarathonC89Game:new() self.start_level = 12 self.level = 12 - self.lock_drop = true - self.enable_hard_drop = false + self.lock_drop = true + self.enable_hard_drop = false self.enable_hold = false self.next_queue_length = 1 self.additive_gravity = false @@ -99,7 +99,7 @@ local gravity_table = { function MarathonC89Game:getGravity() if self.waiting_frames > 0 then return 0 end - if self.level >= 29 then return 1 + if self.level >= 29 then return 1 elseif self.level >= 19 then return 1/2 else return gravity_table[self.level] end end diff --git a/tetris/modes/phantom_mania.lua b/tetris/modes/phantom_mania.lua index a83e936..3abbf69 100644 --- a/tetris/modes/phantom_mania.lua +++ b/tetris/modes/phantom_mania.lua @@ -16,12 +16,12 @@ function PhantomManiaGame:new() self.lock_drop = true self.next_queue_length = 1 - - self.SGnames = { - "9", "8", "7", "6", "5", "4", "3", "2", "1", - "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", - "GM" - } + + self.SGnames = { + "9", "8", "7", "6", "5", "4", "3", "2", "1", + "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", + "GM" + } self.roll_frames = 0 self.combo = 1 @@ -29,7 +29,7 @@ function PhantomManiaGame:new() end function PhantomManiaGame:getARE() - if self.level < 100 then return 18 + if self.level < 100 then return 18 elseif self.level < 200 then return 14 elseif self.level < 400 then return 8 elseif self.level < 500 then return 7 @@ -37,14 +37,14 @@ function PhantomManiaGame:getARE() end function PhantomManiaGame:getLineARE() - if self.level < 100 then return 18 + if self.level < 100 then return 18 elseif self.level < 400 then return 8 elseif self.level < 500 then return 7 else return 6 end end function PhantomManiaGame:getDasLimit() - if self.level < 200 then return 11 + if self.level < 200 then return 11 elseif self.level < 300 then return 10 elseif self.level < 400 then return 9 else return 7 end @@ -55,7 +55,7 @@ function PhantomManiaGame:getLineClearDelay() end function PhantomManiaGame:getLockDelay() - if self.level < 100 then return 30 + if self.level < 100 then return 30 elseif self.level < 200 then return 26 elseif self.level < 300 then return 22 elseif self.level < 400 then return 18 @@ -171,10 +171,10 @@ function PhantomManiaGame:drawScoringInfo() if getLetterGrade(self.level, self.clear) ~= "" then love.graphics.printf("GRADE", text_x, 120, 40, "left") end love.graphics.printf("SCORE", text_x, 200, 40, "left") love.graphics.printf("LEVEL", text_x, 320, 40, "left") - local sg = self.grid:checkSecretGrade() - if sg >= 5 then - love.graphics.printf("SECRET GRADE", 240, 430, 180, "left") - end + local sg = self.grid:checkSecretGrade() + if sg >= 5 then + love.graphics.printf("SECRET GRADE", 240, 430, 180, "left") + end love.graphics.setFont(font_3x5_3) if getLetterGrade(self.level, self.clear) ~= "" then love.graphics.printf(getLetterGrade(self.level, self.clear), text_x, 140, 90, "left") end @@ -186,9 +186,9 @@ function PhantomManiaGame:drawScoringInfo() love.graphics.printf(self:getSectionEndLevel(), text_x, 370, 40, "right") end - if sg >= 5 then - love.graphics.printf(self.SGnames[sg], 240, 450, 180, "left") - end + if sg >= 5 then + love.graphics.printf(self.SGnames[sg], 240, 450, 180, "left") + end end function PhantomManiaGame:getSectionEndLevel() diff --git a/tetris/modes/phantom_mania2.lua b/tetris/modes/phantom_mania2.lua index b0fb1b9..22fa5a3 100644 --- a/tetris/modes/phantom_mania2.lua +++ b/tetris/modes/phantom_mania2.lua @@ -25,12 +25,12 @@ function PhantomMania2Game:new() self.hold_age = 0 self.queue_age = 0 self.roll_points = 0 - - self.SGnames = { - "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", - "m1", "m2", "m3", "m4", "m5", "m6", "m7", "m8", "m9", - "GM" - } + + self.SGnames = { + "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", + "m1", "m2", "m3", "m4", "m5", "m6", "m7", "m8", "m9", + "GM" + } self.randomizer = History6RollsRandomizer() @@ -43,12 +43,12 @@ function PhantomMania2Game:new() end function PhantomMania2Game:getARE() - if self.level < 300 then return 12 + if self.level < 300 then return 12 else return 6 end end function PhantomMania2Game:getLineARE() - if self.level < 100 then return 8 + if self.level < 100 then return 8 elseif self.level < 200 then return 7 elseif self.level < 500 then return 6 elseif self.level < 1300 then return 5 @@ -56,7 +56,7 @@ function PhantomMania2Game:getLineARE() end function PhantomMania2Game:getDasLimit() - if self.level < 200 then return 9 + if self.level < 200 then return 9 elseif self.level < 500 then return 7 else return 5 end end @@ -66,7 +66,7 @@ function PhantomMania2Game:getLineClearDelay() end function PhantomMania2Game:getLockDelay() - if self.level < 200 then return 18 + if self.level < 200 then return 18 elseif self.level < 300 then return 17 elseif self.level < 500 then return 15 elseif self.level < 600 then return 13 @@ -299,15 +299,15 @@ function PhantomMania2Game:drawScoringInfo() love.graphics.printf("GRADE", text_x, 120, 40, "left") love.graphics.printf("SCORE", text_x, 200, 40, "left") love.graphics.printf("LEVEL", text_x, 320, 40, "left") - local sg = self.grid:checkSecretGrade() - if sg >= 5 then - love.graphics.printf("SECRET GRADE", 240, 430, 180, "left") - end + local sg = self.grid:checkSecretGrade() + if sg >= 5 then + love.graphics.printf("SECRET GRADE", 240, 430, 180, "left") + end if(self.coolregret_timer > 0) then - love.graphics.printf(self.coolregret_message, 64, 400, 160, "center") - self.coolregret_timer = self.coolregret_timer - 1 - end + love.graphics.printf(self.coolregret_message, 64, 400, 160, "center") + self.coolregret_timer = self.coolregret_timer - 1 + end love.graphics.setFont(font_3x5_3) love.graphics.printf(getLetterGrade(math.floor(self.grade)), text_x, 140, 90, "left") @@ -318,10 +318,10 @@ function PhantomMania2Game:drawScoringInfo() else love.graphics.printf(math.floor(self.level / 100 + 1) * 100, text_x, 370, 50, "right") end - - if sg >= 5 then - love.graphics.printf(self.SGnames[sg], 240, 450, 180, "left") - end + + if sg >= 5 then + love.graphics.printf(self.SGnames[sg], 240, 450, 180, "left") + end end function PhantomMania2Game:getBackground() diff --git a/tetris/modes/phantom_mania_n.lua b/tetris/modes/phantom_mania_n.lua index 708ae7b..e39d03d 100644 --- a/tetris/modes/phantom_mania_n.lua +++ b/tetris/modes/phantom_mania_n.lua @@ -8,12 +8,12 @@ PhantomManiaNGame.tagline = "The old mode from Nullpomino, for Ti-ARS and SRS su function PhantomManiaNGame:new() PhantomManiaNGame.super:new() - - self.SGnames = { - "M1", "M2", "M3", "M4", "M5", "M6", "M7", "M8", "M9", - "M10", "M11", "M12", "M13", "M14", "M15", "M16", "M17", "M18", - "GM" - } + + self.SGnames = { + "M1", "M2", "M3", "M4", "M5", "M6", "M7", "M8", "M9", + "M10", "M11", "M12", "M13", "M14", "M15", "M16", "M17", "M18", + "GM" + } self.next_queue_length = 3 self.enable_hold = true diff --git a/tetris/modes/race_40.lua b/tetris/modes/race_40.lua index 8ee3b86..02c2321 100644 --- a/tetris/modes/race_40.lua +++ b/tetris/modes/race_40.lua @@ -23,10 +23,10 @@ function Race40Game:new() self.roll_frames = 0 self.SGnames = { - [0] = "", + [0] = "", "9", "8", "7", "6", "5", "4", "3", "2", "1", - "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", - "GM" + "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", + "GM" } self.upstacked = false @@ -128,16 +128,16 @@ function Race40Game:drawScoringInfo() love.graphics.printf("line/min", text_x, 160, 80, "left") love.graphics.printf("piece/sec", text_x, 220, 80, "left") local sg = self.grid:checkSecretGrade() - if sg >= 7 or self.upstacked then - love.graphics.printf("SECRET GRADE", 240, 430, 180, "left") - end + if sg >= 7 or self.upstacked then + love.graphics.printf("SECRET GRADE", 240, 430, 180, "left") + end love.graphics.setFont(font_3x5_3) love.graphics.printf(string.format("%.02f", self.lines / math.max(1, self.frames) * 3600), text_x, 180, 80, "left") love.graphics.printf(string.format("%.04f", self.pieces / math.max(1, self.frames) * 60), text_x, 240, 80, "left") if sg >= 7 or self.upstacked then - love.graphics.printf(self:getSecretGrade(sg), 240, 450, 180, "left") - end + love.graphics.printf(self:getSecretGrade(sg), 240, 450, 180, "left") + end love.graphics.setFont(font_3x5_4) love.graphics.printf(math.max(0, self.line_goal - self.lines), text_x, 340, 40, "left") diff --git a/tetris/modes/scoredrain.lua b/tetris/modes/scoredrain.lua index ad0ff53..fb8402b 100644 --- a/tetris/modes/scoredrain.lua +++ b/tetris/modes/scoredrain.lua @@ -20,83 +20,83 @@ function ScoreDrainGame:new() self.randomizer = History6RollsRandomizer() self.lock_drop = true - self.lock_hard_drop = true + self.lock_hard_drop = true self.enable_hold = true self.next_queue_length = 3 end function ScoreDrainGame:getARE() - if self.level < 700 then return 27 - elseif self.level < 800 then return 18 - elseif self.level < 1000 then return 14 - elseif self.level < 1100 then return 8 - elseif self.level < 1200 then return 7 - else return 6 end + if self.level < 700 then return 27 + elseif self.level < 800 then return 18 + elseif self.level < 1000 then return 14 + elseif self.level < 1100 then return 8 + elseif self.level < 1200 then return 7 + else return 6 end end function ScoreDrainGame:getLineARE() - if self.level < 600 then return 27 - elseif self.level < 700 then return 18 - elseif self.level < 800 then return 14 - elseif self.level < 1100 then return 8 - elseif self.level < 1200 then return 7 - else return 6 end + if self.level < 600 then return 27 + elseif self.level < 700 then return 18 + elseif self.level < 800 then return 14 + elseif self.level < 1100 then return 8 + elseif self.level < 1200 then return 7 + else return 6 end end function ScoreDrainGame:getDasLimit() - if self.level < 500 then return 15 - elseif self.level < 900 then return 9 - else return 7 end + if self.level < 500 then return 15 + elseif self.level < 900 then return 9 + else return 7 end end function ScoreDrainGame:getLineClearDelay() - if self.level < 500 then return 40 - elseif self.level < 600 then return 25 - elseif self.level < 700 then return 16 - elseif self.level < 800 then return 12 - elseif self.level < 1100 then return 6 - elseif self.level < 1200 then return 5 - else return 4 end + if self.level < 500 then return 40 + elseif self.level < 600 then return 25 + elseif self.level < 700 then return 16 + elseif self.level < 800 then return 12 + elseif self.level < 1100 then return 6 + elseif self.level < 1200 then return 5 + else return 4 end end function ScoreDrainGame:getLockDelay() - if self.level < 900 then return 30 - elseif self.level < 1100 then return 17 - else return 15 end + if self.level < 900 then return 30 + elseif self.level < 1100 then return 17 + else return 15 end end function ScoreDrainGame:getGravity() - if (self.level < 30) then return 4/256 - elseif (self.level < 35) then return 6/256 - elseif (self.level < 40) then return 8/256 - elseif (self.level < 50) then return 10/256 - elseif (self.level < 60) then return 12/256 - elseif (self.level < 70) then return 16/256 - elseif (self.level < 80) then return 32/256 - elseif (self.level < 90) then return 48/256 - elseif (self.level < 100) then return 64/256 - elseif (self.level < 120) then return 80/256 - elseif (self.level < 140) then return 96/256 - elseif (self.level < 160) then return 112/256 - elseif (self.level < 170) then return 128/256 - elseif (self.level < 200) then return 144/256 - elseif (self.level < 220) then return 4/256 - elseif (self.level < 230) then return 32/256 - elseif (self.level < 233) then return 64/256 - elseif (self.level < 236) then return 96/256 - elseif (self.level < 239) then return 128/256 - elseif (self.level < 243) then return 160/256 - elseif (self.level < 247) then return 192/256 - elseif (self.level < 251) then return 224/256 - elseif (self.level < 300) then return 1 - elseif (self.level < 330) then return 2 - elseif (self.level < 360) then return 3 - elseif (self.level < 400) then return 4 - elseif (self.level < 420) then return 5 - elseif (self.level < 450) then return 4 - elseif (self.level < 500) then return 3 - else return 20 - end + if (self.level < 30) then return 4/256 + elseif (self.level < 35) then return 6/256 + elseif (self.level < 40) then return 8/256 + elseif (self.level < 50) then return 10/256 + elseif (self.level < 60) then return 12/256 + elseif (self.level < 70) then return 16/256 + elseif (self.level < 80) then return 32/256 + elseif (self.level < 90) then return 48/256 + elseif (self.level < 100) then return 64/256 + elseif (self.level < 120) then return 80/256 + elseif (self.level < 140) then return 96/256 + elseif (self.level < 160) then return 112/256 + elseif (self.level < 170) then return 128/256 + elseif (self.level < 200) then return 144/256 + elseif (self.level < 220) then return 4/256 + elseif (self.level < 230) then return 32/256 + elseif (self.level < 233) then return 64/256 + elseif (self.level < 236) then return 96/256 + elseif (self.level < 239) then return 128/256 + elseif (self.level < 243) then return 160/256 + elseif (self.level < 247) then return 192/256 + elseif (self.level < 251) then return 224/256 + elseif (self.level < 300) then return 1 + elseif (self.level < 330) then return 2 + elseif (self.level < 360) then return 3 + elseif (self.level < 400) then return 4 + elseif (self.level < 420) then return 5 + elseif (self.level < 450) then return 4 + elseif (self.level < 500) then return 3 + else return 20 + end end function ScoreDrainGame:advanceOneFrame() @@ -110,8 +110,8 @@ end function ScoreDrainGame:onPieceEnter() if (self.level % 100 ~= 99) and self.frames ~= 0 then - self.level = self.level + 1 - end + self.level = self.level + 1 + end end local cleared_row_levels = {1, 2, 4, 6} diff --git a/tetris/modes/strategy.lua b/tetris/modes/strategy.lua index a0b558b..049a6e3 100644 --- a/tetris/modes/strategy.lua +++ b/tetris/modes/strategy.lua @@ -27,7 +27,7 @@ function StrategyGame:new() end function StrategyGame:getARE() - if self.level < 100 then return 60 + if self.level < 100 then return 60 elseif self.level < 200 then return 54 elseif self.level < 300 then return 48 elseif self.level < 400 then return 42 @@ -52,7 +52,7 @@ function StrategyGame:getLineClearDelay() end function StrategyGame:getLockDelay() - if self.level < 500 then return 8 + if self.level < 500 then return 8 elseif self.level < 700 then return 6 else return 4 end end diff --git a/tetris/modes/survival_2020.lua b/tetris/modes/survival_2020.lua index 8db03fb..651f28a 100644 --- a/tetris/modes/survival_2020.lua +++ b/tetris/modes/survival_2020.lua @@ -45,7 +45,7 @@ function Survival2020Game:getLineARE() end function Survival2020Game:getDasLimit() - if self.level < 200 then return 9 + if self.level < 200 then return 9 elseif self.level < 500 then return 7 elseif self.level < 1000 then return 5 elseif self.level < 1500 then return 4 diff --git a/tetris/modes/survival_a1.lua b/tetris/modes/survival_a1.lua index f978a49..c635dd0 100644 --- a/tetris/modes/survival_a1.lua +++ b/tetris/modes/survival_a1.lua @@ -15,28 +15,28 @@ SurvivalA1Game.tagline = "The game starts fast and only gets faster!" function SurvivalA1Game:new() - SurvivalA1Game.super:new() - + SurvivalA1Game.super:new() + self.roll_frames = 0 - self.combo = 1 + self.combo = 1 self.bravos = 0 self.gm_conditions = { level300 = false, level500 = false, level999 = false - } - - self.SGnames = { - "9", "8", "7", "6", "5", "4", "3", "2", "1", - "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", - "GM" - } - + } + + self.SGnames = { + "9", "8", "7", "6", "5", "4", "3", "2", "1", + "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", + "GM" + } + self.randomizer = History4RollsRandomizer() - self.lock_drop = false - self.enable_hard_drop = false + self.lock_drop = false + self.enable_hard_drop = false self.enable_hold = false self.next_queue_length = 1 end @@ -62,29 +62,29 @@ function SurvivalA1Game:getLockDelay() end function SurvivalA1Game:getGravity() - return 20 + return 20 end local function getRankForScore(score) - if score < 400 then return {rank = "9", next = 400} - elseif score < 800 then return {rank = "8", next = 800} - elseif score < 1400 then return {rank = "7", next = 1400} - elseif score < 2000 then return {rank = "6", next = 2000} - elseif score < 3500 then return {rank = "5", next = 3500} - elseif score < 5500 then return {rank = "4", next = 5500} - elseif score < 8000 then return {rank = "3", next = 8000} - elseif score < 12000 then return {rank = "2", next = 12000} - elseif score < 16000 then return {rank = "1", next = 16000} - elseif score < 22000 then return {rank = "S1", next = 22000} - elseif score < 30000 then return {rank = "S2", next = 30000} - elseif score < 40000 then return {rank = "S3", next = 40000} - elseif score < 52000 then return {rank = "S4", next = 52000} - elseif score < 66000 then return {rank = "S5", next = 66000} - elseif score < 82000 then return {rank = "S6", next = 82000} - elseif score < 100000 then return {rank = "S7", next = 100000} - elseif score < 120000 then return {rank = "S8", next = 120000} - else return {rank = "S9", next = "???"} - end + if score < 400 then return {rank = "9", next = 400} + elseif score < 800 then return {rank = "8", next = 800} + elseif score < 1400 then return {rank = "7", next = 1400} + elseif score < 2000 then return {rank = "6", next = 2000} + elseif score < 3500 then return {rank = "5", next = 3500} + elseif score < 5500 then return {rank = "4", next = 5500} + elseif score < 8000 then return {rank = "3", next = 8000} + elseif score < 12000 then return {rank = "2", next = 12000} + elseif score < 16000 then return {rank = "1", next = 16000} + elseif score < 22000 then return {rank = "S1", next = 22000} + elseif score < 30000 then return {rank = "S2", next = 30000} + elseif score < 40000 then return {rank = "S3", next = 40000} + elseif score < 52000 then return {rank = "S4", next = 52000} + elseif score < 66000 then return {rank = "S5", next = 66000} + elseif score < 82000 then return {rank = "S6", next = 82000} + elseif score < 100000 then return {rank = "S7", next = 100000} + elseif score < 120000 then return {rank = "S8", next = 120000} + else return {rank = "S9", next = "???"} + end end function SurvivalA1Game:advanceOneFrame() @@ -106,7 +106,7 @@ function SurvivalA1Game:onPieceEnter() end function SurvivalA1Game:onLineClear(cleared_row_count) - self:checkGMRequirements(self.level, self.level + cleared_row_count) + self:checkGMRequirements(self.level, self.level + cleared_row_count) if not self.clear then local new_level = math.min(self.level + cleared_row_count, 999) if new_level == 999 then @@ -171,10 +171,10 @@ function SurvivalA1Game:drawScoringInfo() love.graphics.printf("SCORE", 240, 200, 40, "left") love.graphics.printf("NEXT RANK", 240, 260, 90, "left") love.graphics.printf("LEVEL", 240, 320, 40, "left") - local sg = self.grid:checkSecretGrade() - if sg >= 5 then - love.graphics.printf("SECRET GRADE", 240, 430, 180, "left") - end + local sg = self.grid:checkSecretGrade() + if sg >= 5 then + love.graphics.printf("SECRET GRADE", 240, 430, 180, "left") + end if self.bravos > 0 then love.graphics.printf("BRAVO", 300, 120, 40, "left") end @@ -188,9 +188,9 @@ function SurvivalA1Game:drawScoringInfo() love.graphics.printf(getRankForScore(self.score).next, 240, 280, 90, "left") love.graphics.printf(self.level, 240, 340, 40, "right") love.graphics.printf(self:getSectionEndLevel(), 240, 370, 40, "right") - if sg >= 5 then - love.graphics.printf(self.SGnames[sg], 240, 450, 180, "left") - end + if sg >= 5 then + love.graphics.printf(self.SGnames[sg], 240, 450, 180, "left") + end if self.bravos > 0 then love.graphics.printf(self.bravos, 300, 140, 40, "left") end love.graphics.setFont(font_8x11) diff --git a/tetris/modes/survival_a2.lua b/tetris/modes/survival_a2.lua index 78caf0a..cc659ca 100644 --- a/tetris/modes/survival_a2.lua +++ b/tetris/modes/survival_a2.lua @@ -19,12 +19,12 @@ function SurvivalA2Game:new() self.roll_frames = 0 self.combo = 1 self.randomizer = History6RollsRandomizer() - - self.SGnames = { - "9", "8", "7", "6", "5", "4", "3", "2", "1", - "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", - "GM" - } + + self.SGnames = { + "9", "8", "7", "6", "5", "4", "3", "2", "1", + "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", + "GM" + } self.lock_drop = true end @@ -98,9 +98,9 @@ function SurvivalA2Game:onLineClear(cleared_row_count) local new_level = math.min(self.level + cleared_row_count, 999) if self.level == 999 or self:hitTorikan(self.level, new_level) then self.clear = true - if self.level < 999 then - self.game_over = true - end + if self.level < 999 then + self.game_over = true + end else self.level = new_level end @@ -150,10 +150,10 @@ function SurvivalA2Game:drawScoringInfo() if self:getLetterGrade() ~= "" then love.graphics.printf("GRADE", text_x, 120, 40, "left") end love.graphics.printf("SCORE", text_x, 200, 40, "left") love.graphics.printf("LEVEL", text_x, 320, 40, "left") - local sg = self.grid:checkSecretGrade() - if sg >= 5 then - love.graphics.printf("SECRET GRADE", 240, 430, 180, "left") - end + local sg = self.grid:checkSecretGrade() + if sg >= 5 then + love.graphics.printf("SECRET GRADE", 240, 430, 180, "left") + end love.graphics.setFont(font_3x5_3) love.graphics.printf(self.score, text_x, 220, 90, "left") @@ -162,9 +162,9 @@ function SurvivalA2Game:drawScoringInfo() if self:getLetterGrade() ~= "" then love.graphics.printf(self:getLetterGrade(), text_x, 140, 90, "left") end love.graphics.printf(self.level, text_x, 340, 40, "right") love.graphics.printf(self:getSectionEndLevel(), text_x, 370, 40, "right") - if sg >= 5 then - love.graphics.printf(self.SGnames[sg], 240, 450, 180, "left") - end + if sg >= 5 then + love.graphics.printf(self.SGnames[sg], 240, 450, 180, "left") + end end function SurvivalA2Game:getSectionEndLevel() diff --git a/tetris/modes/survival_a3.lua b/tetris/modes/survival_a3.lua index c298797..5dc799c 100644 --- a/tetris/modes/survival_a3.lua +++ b/tetris/modes/survival_a3.lua @@ -23,13 +23,13 @@ function SurvivalA3Game:new() self.roll_frames = 0 self.combo = 1 self.randomizer = History6RollsRandomizer() - - self.SGnames = { - "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", - "m1", "m2", "m3", "m4", "m5", "m6", "m7", "m8", "m9", - "GM" - } - + + self.SGnames = { + "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", + "m1", "m2", "m3", "m4", "m5", "m6", "m7", "m8", "m9", + "GM" + } + self.lock_drop = true self.enable_hold = true self.next_queue_length = 3 @@ -40,19 +40,19 @@ end function SurvivalA3Game:initialize(ruleset) - self.torikan_time = frameTime(2,28) - if ruleset.world then self.torikan_time = frameTime(3,03) end - self.super.initialize(self, ruleset) - -- ^ notice the . here instead of the : + self.torikan_time = frameTime(2,28) + if ruleset.world then self.torikan_time = frameTime(3,03) end + self.super.initialize(self, ruleset) + -- ^ notice the . here instead of the : end function SurvivalA3Game:getARE() - if self.level < 300 then return 12 + if self.level < 300 then return 12 else return 6 end end function SurvivalA3Game:getLineARE() - if self.level < 100 then return 8 + if self.level < 100 then return 8 elseif self.level < 200 then return 7 elseif self.level < 500 then return 6 elseif self.level < 1300 then return 5 @@ -60,7 +60,7 @@ function SurvivalA3Game:getLineARE() end function SurvivalA3Game:getDasLimit() - if self.level < 100 then return 9 + if self.level < 100 then return 9 elseif self.level < 500 then return 7 else return 5 end end @@ -71,7 +71,7 @@ function SurvivalA3Game:getLineClearDelay() end function SurvivalA3Game:getLockDelay() - if self.level < 200 then return 18 + if self.level < 200 then return 18 elseif self.level < 300 then return 17 elseif self.level < 500 then return 15 elseif self.level < 600 then return 13 @@ -145,14 +145,14 @@ function SurvivalA3Game:onLineClear(cleared_row_count) local new_level = self.level + cleared_row_levels[cleared_row_count] self:updateSectionTimes(self.level, new_level) if new_level >= 1300 or self:hitTorikan(self.level, new_level) then - self.clear = true + self.clear = true if new_level >= 1300 then self.level = 1300 - self.grid:clear() - self.big_mode = true - self.roll_frames = -150 - else - self.game_over = true + self.grid:clear() + self.big_mode = true + self.roll_frames = -150 + else + self.game_over = true end else self.level = math.min(new_level, 1300) @@ -228,10 +228,10 @@ function SurvivalA3Game:drawScoringInfo() love.graphics.printf("GRADE", text_x, 120, 40, "left") love.graphics.printf("SCORE", text_x, 200, 40, "left") love.graphics.printf("LEVEL", text_x, 320, 40, "left") - local sg = self.grid:checkSecretGrade() - if sg >= 5 then - love.graphics.printf("SECRET GRADE", 240, 430, 180, "left") - end + local sg = self.grid:checkSecretGrade() + if sg >= 5 then + love.graphics.printf("SECRET GRADE", 240, 430, 180, "left") + end if(self.coolregret_timer > 0) then love.graphics.printf(self.coolregret_message, 64, 400, 160, "center") @@ -243,7 +243,7 @@ function SurvivalA3Game:drawScoringInfo() love.graphics.setFont(font_3x5_3) if self.roll_frames > 3238 then love.graphics.setColor(1, 0.5, 0, 1) - elseif self.clear then love.graphics.setColor(0, 1, 0, 1) end + elseif self.clear then love.graphics.setColor(0, 1, 0, 1) end love.graphics.printf(getLetterGrade(math.floor(self.grade)), text_x, 140, 90, "left") love.graphics.setColor(1, 1, 1, 1) love.graphics.printf(self.score, text_x, 220, 90, "left") @@ -253,9 +253,9 @@ function SurvivalA3Game:drawScoringInfo() else love.graphics.printf(math.floor(self.level / 100 + 1) * 100, text_x, 370, 50, "right") end - if sg >= 5 then - love.graphics.printf(self.SGnames[sg], 240, 450, 180, "left") - end + if sg >= 5 then + love.graphics.printf(self.SGnames[sg], 240, 450, 180, "left") + end end function SurvivalA3Game:getBackground() diff --git a/tetris/modes/tgmplus.lua b/tetris/modes/tgmplus.lua index a91e652..1b76e65 100644 --- a/tetris/modes/tgmplus.lua +++ b/tetris/modes/tgmplus.lua @@ -17,15 +17,15 @@ function TGMPlusGame:new() self.roll_frames = 0 self.combo = 1 - self.SGnames = { - "9", "8", "7", "6", "5", "4", "3", "2", "1", - "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", - "GM" - } - + self.SGnames = { + "9", "8", "7", "6", "5", "4", "3", "2", "1", + "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", + "GM" + } + self.randomizer = History6RollsRandomizer() - self.lock_drop = false + self.lock_drop = false self.enable_hold = false self.next_queue_length = 1 @@ -33,29 +33,29 @@ function TGMPlusGame:new() self.garbage_pos = 0 self.garbage_rows = { [0] = {"e", "b", "b", "b", "b", "b", "b", "b", "b", "b"}, - {"e", "b", "b", "b", "b", "b", "b", "b", "b", "b"}, - {"e", "b", "b", "b", "b", "b", "b", "b", "b", "b"}, - {"e", "b", "b", "b", "b", "b", "b", "b", "b", "b"}, - {"b", "b", "b", "b", "b", "b", "b", "b", "b", "e"}, - {"b", "b", "b", "b", "b", "b", "b", "b", "b", "e"}, - {"b", "b", "b", "b", "b", "b", "b", "b", "b", "e"}, - {"b", "b", "b", "b", "b", "b", "b", "b", "b", "e"}, - {"e", "e", "b", "b", "b", "b", "b", "b", "b", "b"}, - {"e", "b", "b", "b", "b", "b", "b", "b", "b", "b"}, - {"e", "b", "b", "b", "b", "b", "b", "b", "b", "b"}, - {"b", "b", "b", "b", "b", "b", "b", "b", "e", "e"}, - {"b", "b", "b", "b", "b", "b", "b", "b", "b", "e"}, - {"b", "b", "b", "b", "b", "b", "b", "b", "b", "e"}, - {"b", "b", "e", "b", "b", "b", "b", "b", "b", "b"}, - {"b", "e", "e", "b", "b", "b", "b", "b", "b", "b"}, - {"b", "e", "b", "b", "b", "b", "b", "b", "b", "b"}, - {"b", "b", "b", "b", "b", "b", "b", "e", "b", "b"}, - {"b", "b", "b", "b", "b", "b", "b", "e", "e", "b"}, - {"b", "b", "b", "b", "b", "b", "b", "b", "e", "b"}, - {"b", "b", "b", "b", "e", "e", "b", "b", "b", "b"}, - {"b", "b", "b", "b", "e", "e", "b", "b", "b", "b"}, - {"b", "b", "b", "b", "e", "b", "b", "b", "b", "b"}, - {"b", "b", "b", "e", "e", "e", "b", "b", "b", "b"}, + {"e", "b", "b", "b", "b", "b", "b", "b", "b", "b"}, + {"e", "b", "b", "b", "b", "b", "b", "b", "b", "b"}, + {"e", "b", "b", "b", "b", "b", "b", "b", "b", "b"}, + {"b", "b", "b", "b", "b", "b", "b", "b", "b", "e"}, + {"b", "b", "b", "b", "b", "b", "b", "b", "b", "e"}, + {"b", "b", "b", "b", "b", "b", "b", "b", "b", "e"}, + {"b", "b", "b", "b", "b", "b", "b", "b", "b", "e"}, + {"e", "e", "b", "b", "b", "b", "b", "b", "b", "b"}, + {"e", "b", "b", "b", "b", "b", "b", "b", "b", "b"}, + {"e", "b", "b", "b", "b", "b", "b", "b", "b", "b"}, + {"b", "b", "b", "b", "b", "b", "b", "b", "e", "e"}, + {"b", "b", "b", "b", "b", "b", "b", "b", "b", "e"}, + {"b", "b", "b", "b", "b", "b", "b", "b", "b", "e"}, + {"b", "b", "e", "b", "b", "b", "b", "b", "b", "b"}, + {"b", "e", "e", "b", "b", "b", "b", "b", "b", "b"}, + {"b", "e", "b", "b", "b", "b", "b", "b", "b", "b"}, + {"b", "b", "b", "b", "b", "b", "b", "e", "b", "b"}, + {"b", "b", "b", "b", "b", "b", "b", "e", "e", "b"}, + {"b", "b", "b", "b", "b", "b", "b", "b", "e", "b"}, + {"b", "b", "b", "b", "e", "e", "b", "b", "b", "b"}, + {"b", "b", "b", "b", "e", "e", "b", "b", "b", "b"}, + {"b", "b", "b", "b", "e", "b", "b", "b", "b", "b"}, + {"b", "b", "b", "e", "e", "e", "b", "b", "b", "b"}, } end @@ -65,37 +65,37 @@ function TGMPlusGame:getLockDelay() return 30 end function TGMPlusGame:getLineClearDelay() return 40 end function TGMPlusGame:getGravity() - if (self.level < 30) then return 4/256 - elseif (self.level < 35) then return 6/256 - elseif (self.level < 40) then return 8/256 - elseif (self.level < 50) then return 10/256 - elseif (self.level < 60) then return 12/256 - elseif (self.level < 70) then return 16/256 - elseif (self.level < 80) then return 32/256 - elseif (self.level < 90) then return 48/256 - elseif (self.level < 100) then return 64/256 - elseif (self.level < 120) then return 80/256 - elseif (self.level < 140) then return 96/256 - elseif (self.level < 160) then return 112/256 - elseif (self.level < 170) then return 128/256 - elseif (self.level < 200) then return 144/256 - elseif (self.level < 220) then return 4/256 - elseif (self.level < 230) then return 32/256 - elseif (self.level < 233) then return 64/256 - elseif (self.level < 236) then return 96/256 - elseif (self.level < 239) then return 128/256 - elseif (self.level < 243) then return 160/256 - elseif (self.level < 247) then return 192/256 - elseif (self.level < 251) then return 224/256 - elseif (self.level < 300) then return 1 - elseif (self.level < 330) then return 2 - elseif (self.level < 360) then return 3 - elseif (self.level < 400) then return 4 - elseif (self.level < 420) then return 5 - elseif (self.level < 450) then return 4 - elseif (self.level < 500) then return 3 - else return 20 - end + if (self.level < 30) then return 4/256 + elseif (self.level < 35) then return 6/256 + elseif (self.level < 40) then return 8/256 + elseif (self.level < 50) then return 10/256 + elseif (self.level < 60) then return 12/256 + elseif (self.level < 70) then return 16/256 + elseif (self.level < 80) then return 32/256 + elseif (self.level < 90) then return 48/256 + elseif (self.level < 100) then return 64/256 + elseif (self.level < 120) then return 80/256 + elseif (self.level < 140) then return 96/256 + elseif (self.level < 160) then return 112/256 + elseif (self.level < 170) then return 128/256 + elseif (self.level < 200) then return 144/256 + elseif (self.level < 220) then return 4/256 + elseif (self.level < 230) then return 32/256 + elseif (self.level < 233) then return 64/256 + elseif (self.level < 236) then return 96/256 + elseif (self.level < 239) then return 128/256 + elseif (self.level < 243) then return 160/256 + elseif (self.level < 247) then return 192/256 + elseif (self.level < 251) then return 224/256 + elseif (self.level < 300) then return 1 + elseif (self.level < 330) then return 2 + elseif (self.level < 360) then return 3 + elseif (self.level < 400) then return 4 + elseif (self.level < 420) then return 5 + elseif (self.level < 450) then return 4 + elseif (self.level < 500) then return 3 + else return 20 + end end function TGMPlusGame:getGarbageLimit() return 13 - math.floor(self.level / 100) end @@ -123,8 +123,8 @@ function TGMPlusGame:onPieceLock(piece, cleared_row_count) end function TGMPlusGame:onLineClear(cleared_row_count) - self.level = math.min(self.level + cleared_row_count, 999) - if self.level == 999 and not self.clear then self.clear = true end + self.level = math.min(self.level + cleared_row_count, 999) + if self.level == 999 and not self.clear then self.clear = true end end function TGMPlusGame:advanceBottomRow() @@ -188,18 +188,18 @@ function TGMPlusGame:drawScoringInfo() love.graphics.printf("NEXT", 64, 40, 40, "left") love.graphics.printf("SCORE", 240, 200, 40, "left") love.graphics.printf("LEVEL", 240, 320, 40, "left") - local sg = self.grid:checkSecretGrade() - if sg >= 5 then - love.graphics.printf("SECRET GRADE", 240, 430, 180, "left") - end + local sg = self.grid:checkSecretGrade() + if sg >= 5 then + love.graphics.printf("SECRET GRADE", 240, 430, 180, "left") + end love.graphics.setFont(font_3x5_3) love.graphics.printf(self.score, 240, 220, 90, "left") love.graphics.printf(self.level, 240, 340, 40, "right") love.graphics.printf(self:getSectionEndLevel(), 240, 370, 40, "right") - if sg >= 5 then - love.graphics.printf(self.SGnames[sg], 240, 450, 180, "left") - end + if sg >= 5 then + love.graphics.printf(self.SGnames[sg], 240, 450, 180, "left") + end love.graphics.setFont(font_8x11) love.graphics.printf(formatTime(self.frames), 64, 420, 160, "center") diff --git a/tetris/randomizers/bag7noSZOstart.lua b/tetris/randomizers/bag7noSZOstart.lua index 30ec8f3..266a371 100644 --- a/tetris/randomizers/bag7noSZOstart.lua +++ b/tetris/randomizers/bag7noSZOstart.lua @@ -3,27 +3,27 @@ local Randomizer = require 'tetris.randomizers.randomizer' local Bag7NoSZOStartRandomizer = Randomizer:extend() function Bag7NoSZOStartRandomizer:shuffleBag() - local b = self.bag - local ln = #b - for i = 1, ln do - local j = math.random(i, ln) - b[i], b[j] = b[j], b[i] - end + local b = self.bag + local ln = #b + for i = 1, ln do + local j = math.random(i, ln) + b[i], b[j] = b[j], b[i] + end end local function isnotSZO(x) return not(x == "S" or x == "Z" or x == "O") end function Bag7NoSZOStartRandomizer:initialize() self.bag = {"I", "J", "L", "O", "S", "T", "Z"} - repeat - self:shuffleBag() - until isnotSZO(self.bag[7]) + repeat + self:shuffleBag() + until isnotSZO(self.bag[7]) end function Bag7NoSZOStartRandomizer:generatePiece() if #self.bag == 0 then self.bag = {"I", "J", "L", "O", "S", "T", "Z"} - self:shuffleBag() + self:shuffleBag() end return table.remove(self.bag) end diff --git a/tetris/randomizers/bag8.lua b/tetris/randomizers/bag8.lua index 7c91791..59c7dc8 100644 --- a/tetris/randomizers/bag8.lua +++ b/tetris/randomizers/bag8.lua @@ -10,8 +10,8 @@ end function Bag7Randomizer:generatePiece() if next(self.extra) == nil then - self.extra = {"I", "J", "L", "O", "S", "T", "Z"} - end + self.extra = {"I", "J", "L", "O", "S", "T", "Z"} + end if next(self.bag) == nil then self.bag = {"I", "J", "L", "O", "S", "T", "Z"} table.insert(self.bag, table.remove(self.extra, math.random(table.getn(self.extra)))) diff --git a/tetris/randomizers/history_4rolls.lua b/tetris/randomizers/history_4rolls.lua index c1e8f33..e598358 100644 --- a/tetris/randomizers/history_4rolls.lua +++ b/tetris/randomizers/history_4rolls.lua @@ -4,22 +4,22 @@ local History4RollsRandomizer = Randomizer:extend() function History4RollsRandomizer:initialize() self.history = {"Z", "Z", "Z", "Z"} - self.first = true + self.first = true end function History4RollsRandomizer:generatePiece() - if self.first then - self.first = false - return self:updateHistory(({"L", "J", "I", "T"})[math.random(4)]) - else - local shapes = {"I", "J", "L", "O", "S", "T", "Z"} - for i = 1, 4 do - local x = math.random(7) - if not inHistory(shapes[x], self.history) or i == 4 then - return self:updateHistory(shapes[x]) - end - end - end + if self.first then + self.first = false + return self:updateHistory(({"L", "J", "I", "T"})[math.random(4)]) + else + local shapes = {"I", "J", "L", "O", "S", "T", "Z"} + for i = 1, 4 do + local x = math.random(7) + if not inHistory(shapes[x], self.history) or i == 4 then + return self:updateHistory(shapes[x]) + end + end + end end function History4RollsRandomizer:updateHistory(shape) diff --git a/tetris/randomizers/history_6rolls.lua b/tetris/randomizers/history_6rolls.lua index f48543c..44c2d41 100644 --- a/tetris/randomizers/history_6rolls.lua +++ b/tetris/randomizers/history_6rolls.lua @@ -4,22 +4,22 @@ local History6RollsRandomizer = Randomizer:extend() function History6RollsRandomizer:initialize() self.history = {"Z", "S", "Z", "S"} - self.first = true + self.first = true end function History6RollsRandomizer:generatePiece() - if self.first then - self.first = false - return self:updateHistory(({"L", "J", "I", "T"})[math.random(4)]) - else - local shapes = {"I", "J", "L", "O", "S", "T", "Z"} - for i = 1, 6 do - local x = math.random(7) - if not inHistory(shapes[x], self.history) or i == 6 then - return self:updateHistory(shapes[x]) - end - end - end + if self.first then + self.first = false + return self:updateHistory(({"L", "J", "I", "T"})[math.random(4)]) + else + local shapes = {"I", "J", "L", "O", "S", "T", "Z"} + for i = 1, 6 do + local x = math.random(7) + if not inHistory(shapes[x], self.history) or i == 6 then + return self:updateHistory(shapes[x]) + end + end + end end function History6RollsRandomizer:updateHistory(shape) diff --git a/tetris/randomizers/history_6rolls_35bag.lua b/tetris/randomizers/history_6rolls_35bag.lua index 190d396..000332a 100644 --- a/tetris/randomizers/history_6rolls_35bag.lua +++ b/tetris/randomizers/history_6rolls_35bag.lua @@ -3,67 +3,67 @@ local Randomizer = require 'tetris.randomizers.randomizer' local History6Rolls35PoolRandomizer = Randomizer:extend() function History6Rolls35PoolRandomizer:initialize() - self.first = true + self.first = true self.history = {"Z", "S", "Z", "S"} self.pool = { "I", "I", "I", "I", "I", - "T", "T", "T", "T", "T", - "L", "L", "L", "L", "L", - "J", "J", "J", "J", "J", - "S", "S", "S", "S", "S", - "Z", "Z", "Z", "Z", "Z", - "O", "O", "O", "O", "O", + "T", "T", "T", "T", "T", + "L", "L", "L", "L", "L", + "J", "J", "J", "J", "J", + "S", "S", "S", "S", "S", + "Z", "Z", "Z", "Z", "Z", + "O", "O", "O", "O", "O", + } + self.droughts = { + I = 0, + T = 0, + L = 0, + J = 0, + S = 0, + Z = 0, + O = 0, } - self.droughts = { - I = 0, - T = 0, - L = 0, - J = 0, - S = 0, - Z = 0, - O = 0, - } end function History6Rolls35PoolRandomizer:generatePiece() - local index, x - if self.first then - local prevent = {"S", "Z", "O"} - repeat - index = math.random(#self.pool) - x = self.pool[index] - until not inHistory(x, prevent) - self.first = false - else - for i = 1, 6 do - index = math.random(#self.pool) - x = self.pool[index] - if not inHistory(x, self.history) or i == 6 then - break - end - end - end - self.pool[index] = self:updateHistory(x) - return x + local index, x + if self.first then + local prevent = {"S", "Z", "O"} + repeat + index = math.random(#self.pool) + x = self.pool[index] + until not inHistory(x, prevent) + self.first = false + else + for i = 1, 6 do + index = math.random(#self.pool) + x = self.pool[index] + if not inHistory(x, self.history) or i == 6 then + break + end + end + end + self.pool[index] = self:updateHistory(x) + return x end function History6Rolls35PoolRandomizer:updateHistory(shape) table.remove(self.history, 1) table.insert(self.history, shape) - local highdrought - local highdroughtcount = 0 - for k, v in pairs(self.droughts) do - if k == shape then - self.droughts[k] = 0 - else - self.droughts[k] = v + 1 - if v >= highdroughtcount then - highdrought = k - highdroughtcount = v - end - end - end + local highdrought + local highdroughtcount = 0 + for k, v in pairs(self.droughts) do + if k == shape then + self.droughts[k] = 0 + else + self.droughts[k] = v + 1 + if v >= highdroughtcount then + highdrought = k + highdroughtcount = v + end + end + end return highdrought end diff --git a/tetris/rulesets/arika.lua b/tetris/rulesets/arika.lua index ea4f64d..1ea883e 100644 --- a/tetris/rulesets/arika.lua +++ b/tetris/rulesets/arika.lua @@ -82,18 +82,18 @@ function ARS:attemptWallkicks(piece, new_piece, rot_dir, grid) ) and ( piece.rotation == 0 or piece.rotation == 2 ) then - local offsets = new_piece:getBlockOffsets() - table.sort(offsets, function(A, B) return A.y < B.y or A.y == B.y and A.x < B.y end) - for index, offset in pairs(offsets) do - if grid:isOccupied(piece.position.x + offset.x, piece.position.y + offset.y) then - if offset.x == 0 then - return - else - break - end - end - end - end + local offsets = new_piece:getBlockOffsets() + table.sort(offsets, function(A, B) return A.y < B.y or A.y == B.y and A.x < B.y end) + for index, offset in pairs(offsets) do + if grid:isOccupied(piece.position.x + offset.x, piece.position.y + offset.y) then + if offset.x == 0 then + return + else + break + end + end + end + end -- kick right, kick left if (grid:canPlacePiece(new_piece:withOffset({x=1, y=0}))) then diff --git a/tetris/rulesets/arika_ace.lua b/tetris/rulesets/arika_ace.lua index a42af0c..141c0bd 100755 --- a/tetris/rulesets/arika_ace.lua +++ b/tetris/rulesets/arika_ace.lua @@ -7,13 +7,13 @@ ARS.name = "ACE-ARS" ARS.hash = "ArikaACE" ARS.colourscheme = { - I = "C", - L = "O", - J = "B", - S = "G", - Z = "R", - O = "Y", - T = "M", + I = "C", + L = "O", + J = "B", + S = "G", + Z = "R", + O = "Y", + T = "M", } ARS.softdrop_lock = false @@ -98,18 +98,18 @@ function ARS:attemptWallkicks(piece, new_piece, rot_dir, grid) ) and ( piece.rotation == 0 or piece.rotation == 2 ) then - local offsets = new_piece:getBlockOffsets() - table.sort(offsets, function(A, B) return A.y < B.y or A.y == B.y and A.x < B.y end) - for index, offset in pairs(offsets) do - if grid:isOccupied(piece.position.x + offset.x, piece.position.y + offset.y) then - if offset.x == 0 then - return - else - break - end - end - end - end + local offsets = new_piece:getBlockOffsets() + table.sort(offsets, function(A, B) return A.y < B.y or A.y == B.y and A.x < B.y end) + for index, offset in pairs(offsets) do + if grid:isOccupied(piece.position.x + offset.x, piece.position.y + offset.y) then + if offset.x == 0 then + return + else + break + end + end + end + end if piece.shape == "I" then -- special kick rules for I @@ -138,20 +138,20 @@ function ARS:attemptWallkicks(piece, new_piece, rot_dir, grid) end end else - -- kick right, kick left - if grid:canPlacePiece(new_piece:withOffset({x=1, y=0})) then - piece:setRelativeRotation(rot_dir):setOffset({x=1, y=0}) - elseif grid:canPlacePiece(new_piece:withOffset({x=-1, y=0})) then - piece:setRelativeRotation(rot_dir):setOffset({x=-1, y=0}) - elseif piece.shape == "T" - and new_piece.rotation == 0 - and piece.floorkick == 0 - and grid:canPlacePiece(new_piece:withOffset({x=0, y=-1})) - then - -- T floorkick - piece.floorkick = piece.floorkick + 1 - piece:setRelativeRotation(rot_dir):setOffset({x=0, y=-1}) - end + -- kick right, kick left + if grid:canPlacePiece(new_piece:withOffset({x=1, y=0})) then + piece:setRelativeRotation(rot_dir):setOffset({x=1, y=0}) + elseif grid:canPlacePiece(new_piece:withOffset({x=-1, y=0})) then + piece:setRelativeRotation(rot_dir):setOffset({x=-1, y=0}) + elseif piece.shape == "T" + and new_piece.rotation == 0 + and piece.floorkick == 0 + and grid:canPlacePiece(new_piece:withOffset({x=0, y=-1})) + then + -- T floorkick + piece.floorkick = piece.floorkick + 1 + piece:setRelativeRotation(rot_dir):setOffset({x=0, y=-1}) + end end end diff --git a/tetris/rulesets/arika_ace2.lua b/tetris/rulesets/arika_ace2.lua index 0bc5156..18a445f 100644 --- a/tetris/rulesets/arika_ace2.lua +++ b/tetris/rulesets/arika_ace2.lua @@ -85,18 +85,18 @@ function ARS:attemptWallkicks(piece, new_piece, rot_dir, grid) ) and ( piece.rotation == 0 or piece.rotation == 2 ) then - local offsets = new_piece:getBlockOffsets() - table.sort(offsets, function(A, B) return A.y < B.y or A.y == B.y and A.x < B.y end) - for index, offset in pairs(offsets) do - if grid:isOccupied(piece.position.x + offset.x, piece.position.y + offset.y) then - if offset.x == 0 then - return - else - break - end - end - end - end + local offsets = new_piece:getBlockOffsets() + table.sort(offsets, function(A, B) return A.y < B.y or A.y == B.y and A.x < B.y end) + for index, offset in pairs(offsets) do + if grid:isOccupied(piece.position.x + offset.x, piece.position.y + offset.y) then + if offset.x == 0 then + return + else + break + end + end + end + end if piece.shape == "I" then -- special kick rules for I @@ -125,20 +125,20 @@ function ARS:attemptWallkicks(piece, new_piece, rot_dir, grid) end end else - -- kick right, kick left - if grid:canPlacePiece(new_piece:withOffset({x=1, y=0})) then - piece:setRelativeRotation(rot_dir):setOffset({x=1, y=0}) - elseif grid:canPlacePiece(new_piece:withOffset({x=-1, y=0})) then - piece:setRelativeRotation(rot_dir):setOffset({x=-1, y=0}) - elseif piece.shape == "T" - and new_piece.rotation == 0 - and piece.floorkick == 0 - and grid:canPlacePiece(new_piece:withOffset({x=0, y=-1})) - then - -- T floorkick - piece.floorkick = piece.floorkick + 1 - piece:setRelativeRotation(rot_dir):setOffset({x=0, y=-1}) - end + -- kick right, kick left + if grid:canPlacePiece(new_piece:withOffset({x=1, y=0})) then + piece:setRelativeRotation(rot_dir):setOffset({x=1, y=0}) + elseif grid:canPlacePiece(new_piece:withOffset({x=-1, y=0})) then + piece:setRelativeRotation(rot_dir):setOffset({x=-1, y=0}) + elseif piece.shape == "T" + and new_piece.rotation == 0 + and piece.floorkick == 0 + and grid:canPlacePiece(new_piece:withOffset({x=0, y=-1})) + then + -- T floorkick + piece.floorkick = piece.floorkick + 1 + piece:setRelativeRotation(rot_dir):setOffset({x=0, y=-1}) + end end end diff --git a/tetris/rulesets/arika_srs.lua b/tetris/rulesets/arika_srs.lua index 6d32566..fc52295 100755 --- a/tetris/rulesets/arika_srs.lua +++ b/tetris/rulesets/arika_srs.lua @@ -7,13 +7,13 @@ SRS.name = "ACE-SRS" SRS.hash = "ACE Standard" SRS.world = true SRS.colourscheme = { - I = "C", - L = "O", - J = "B", - S = "G", - Z = "R", - O = "Y", - T = "M", + I = "C", + L = "O", + J = "B", + S = "G", + Z = "R", + O = "Y", + T = "M", } SRS.softdrop_lock = false SRS.harddrop_lock = true diff --git a/tetris/rulesets/arika_ti.lua b/tetris/rulesets/arika_ti.lua index 8afdff9..7ed012a 100644 --- a/tetris/rulesets/arika_ti.lua +++ b/tetris/rulesets/arika_ti.lua @@ -85,18 +85,18 @@ function ARS:attemptWallkicks(piece, new_piece, rot_dir, grid) ) and ( piece.rotation == 0 or piece.rotation == 2 ) then - local offsets = new_piece:getBlockOffsets() - table.sort(offsets, function(A, B) return A.y < B.y or A.y == B.y and A.x < B.y end) - for index, offset in pairs(offsets) do - if grid:isOccupied(piece.position.x + offset.x, piece.position.y + offset.y) then - if offset.x == 0 then - return - else - break - end - end - end - end + local offsets = new_piece:getBlockOffsets() + table.sort(offsets, function(A, B) return A.y < B.y or A.y == B.y and A.x < B.y end) + for index, offset in pairs(offsets) do + if grid:isOccupied(piece.position.x + offset.x, piece.position.y + offset.y) then + if offset.x == 0 then + return + else + break + end + end + end + end if piece.shape == "I" then -- special kick rules for I @@ -125,20 +125,20 @@ function ARS:attemptWallkicks(piece, new_piece, rot_dir, grid) end end else - -- kick right, kick left - if grid:canPlacePiece(new_piece:withOffset({x=1, y=0})) then - piece:setRelativeRotation(rot_dir):setOffset({x=1, y=0}) - elseif grid:canPlacePiece(new_piece:withOffset({x=-1, y=0})) then - piece:setRelativeRotation(rot_dir):setOffset({x=-1, y=0}) - elseif piece.shape == "T" - and new_piece.rotation == 0 - and piece.floorkick == 0 - and grid:canPlacePiece(new_piece:withOffset({x=0, y=-1})) - then - -- T floorkick - piece.floorkick = piece.floorkick + 1 - piece:setRelativeRotation(rot_dir):setOffset({x=0, y=-1}) - end + -- kick right, kick left + if grid:canPlacePiece(new_piece:withOffset({x=1, y=0})) then + piece:setRelativeRotation(rot_dir):setOffset({x=1, y=0}) + elseif grid:canPlacePiece(new_piece:withOffset({x=-1, y=0})) then + piece:setRelativeRotation(rot_dir):setOffset({x=-1, y=0}) + elseif piece.shape == "T" + and new_piece.rotation == 0 + and piece.floorkick == 0 + and grid:canPlacePiece(new_piece:withOffset({x=0, y=-1})) + then + -- T floorkick + piece.floorkick = piece.floorkick + 1 + piece:setRelativeRotation(rot_dir):setOffset({x=0, y=-1}) + end end end diff --git a/tetris/rulesets/cambridge.lua b/tetris/rulesets/cambridge.lua index 2b0d963..4aaf96a 100644 --- a/tetris/rulesets/cambridge.lua +++ b/tetris/rulesets/cambridge.lua @@ -363,10 +363,10 @@ function CRS:attemptRotate(new_inputs, piece, grid, initial) end if rot_dir == 0 then return end - - if self.world and config.gamesettings.world_reverse == 2 then - rot_dir = 4 - rot_dir - end + + if self.world and config.gamesettings.world_reverse == 2 then + rot_dir = 4 - rot_dir + end local new_piece = piece:withRelativeRotation(rot_dir) self:attemptWallkicks(piece, new_piece, rot_dir, grid) diff --git a/tetris/rulesets/crap.lua b/tetris/rulesets/crap.lua index 7450f1d..1a3c331 100644 --- a/tetris/rulesets/crap.lua +++ b/tetris/rulesets/crap.lua @@ -8,13 +8,13 @@ CRAP.hash = "Completely Random Auto-Positioner" CRAP.world = true CRAP.colors={"C","O","M","R","G","Y","B"} CRAP.colourscheme = { - I = CRAP.colors[math.ceil(math.random(7))], - L = CRAP.colors[math.ceil(math.random(7))], - J = CRAP.colors[math.ceil(math.random(7))], - S = CRAP.colors[math.ceil(math.random(7))], - Z = CRAP.colors[math.ceil(math.random(7))], - O = CRAP.colors[math.ceil(math.random(7))], - T = CRAP.colors[math.ceil(math.random(7))], + I = CRAP.colors[math.ceil(math.random(7))], + L = CRAP.colors[math.ceil(math.random(7))], + J = CRAP.colors[math.ceil(math.random(7))], + S = CRAP.colors[math.ceil(math.random(7))], + Z = CRAP.colors[math.ceil(math.random(7))], + O = CRAP.colors[math.ceil(math.random(7))], + T = CRAP.colors[math.ceil(math.random(7))], } CRAP.softdrop_lock = true CRAP.harddrop_lock = false diff --git a/tetris/rulesets/dtet.lua b/tetris/rulesets/dtet.lua index 1560bd0..84f3920 100644 --- a/tetris/rulesets/dtet.lua +++ b/tetris/rulesets/dtet.lua @@ -29,21 +29,21 @@ DTET.big_spawn_positions = { DTET.block_offsets = { I={ { {x=0, y=0}, {x=-1, y=0}, {x=-2, y=0}, {x=1, y=0} }, - { {x=-1, y=-1}, {x=-1, y=-2}, {x=-1, y=0}, {x=-1, y=1} }, + { {x=-1, y=-1}, {x=-1, y=-2}, {x=-1, y=0}, {x=-1, y=1} }, { {x=0, y=0}, {x=-1, y=0}, {x=-2, y=0}, {x=1, y=0} }, - { {x=0, y=-1}, {x=0, y=-2}, {x=0, y=0}, {x=0, y=1} }, + { {x=0, y=-1}, {x=0, y=-2}, {x=0, y=0}, {x=0, y=1} }, }, J={ - { {x=0, y=-1}, {x=-1, y=-1}, {x=1, y=-1}, {x=1, y=0} }, + { {x=0, y=-1}, {x=-1, y=-1}, {x=1, y=-1}, {x=1, y=0} }, { {x=0, y=-1}, {x=0, y=-2}, {x=0, y=0}, {x=-1, y=0} }, - { {x=0, y=0}, {x=-1, y=0}, {x=1, y=0}, {x=-1, y=-1} }, + { {x=0, y=0}, {x=-1, y=0}, {x=1, y=0}, {x=-1, y=-1} }, { {x=0, y=-1}, {x=1, y=-2}, {x=0, y=-2}, {x=0, y=0} }, }, L={ - { {x=0, y=-1}, {x=-1, y=-1}, {x=1, y=-1}, {x=-1, y=0} }, + { {x=0, y=-1}, {x=-1, y=-1}, {x=1, y=-1}, {x=-1, y=0} }, { {x=0, y=-1}, {x=-1, y=-2}, {x=0, y=-2}, {x=0, y=0} }, - { {x=0, y=0}, {x=-1, y=0}, {x=1, y=0}, {x=1, y=-1} }, - { {x=0, y=-2}, {x=0, y=-1}, {x=1, y=0}, {x=0, y=0} }, + { {x=0, y=0}, {x=-1, y=0}, {x=1, y=0}, {x=1, y=-1} }, + { {x=0, y=-2}, {x=0, y=-1}, {x=1, y=0}, {x=0, y=0} }, }, O={ { {x=0, y=0}, {x=-1, y=0}, {x=-1, y=-1}, {x=0, y=-1} }, @@ -60,7 +60,7 @@ DTET.block_offsets = { T={ { {x=0, y=-1}, {x=-1, y=-1}, {x=1, y=-1}, {x=0, y=0} }, { {x=0, y=-1}, {x=0, y=0}, {x=-1, y=-1}, {x=0, y=-2} }, - { {x=0, y=0}, {x=-1, y=0}, {x=1, y=0}, {x=0, y=-1} }, + { {x=0, y=0}, {x=-1, y=0}, {x=1, y=0}, {x=0, y=-1} }, { {x=0, y=-1}, {x=0, y=0}, {x=1, y=-1}, {x=0, y=-2} }, }, Z={ diff --git a/tetris/rulesets/eheart.lua b/tetris/rulesets/eheart.lua index ddadab0..18397d4 100644 --- a/tetris/rulesets/eheart.lua +++ b/tetris/rulesets/eheart.lua @@ -13,25 +13,25 @@ function EHeart:attemptWallkicks(piece, new_piece, rot_dir, grid) -- center column rule (kicks) local offsets = new_piece:getBlockOffsets() - table.sort(offsets, function(A, B) return A.y < B.y or A.y == B.y and A.x < B.y end) - for index, offset in pairs(offsets) do - if grid:isOccupied(piece.position.x + offset.x, piece.position.y + offset.y) then + table.sort(offsets, function(A, B) return A.y < B.y or A.y == B.y and A.x < B.y end) + for index, offset in pairs(offsets) do + if grid:isOccupied(piece.position.x + offset.x, piece.position.y + offset.y) then -- individual checks for all 9 cells, in the given order - if offset.y < 0 then + if offset.y < 0 then if offset.x < 0 then self:lateralKick(1, piece, new_piece, rot_dir, grid) elseif offset.x == 0 then return elseif offset.x > 0 then self:lateralKick(-1, piece, new_piece, rot_dir, grid) end elseif offset.y == 0 then if offset.x < 0 then self:lateralKick(1, piece, new_piece, rot_dir, grid) - elseif offset.x == 0 then return - elseif offset.x > 0 then self:lateralKick(-1, piece, new_piece, rot_dir, grid) end - elseif offset.y > 0 then + elseif offset.x == 0 then return + elseif offset.x > 0 then self:lateralKick(-1, piece, new_piece, rot_dir, grid) end + elseif offset.y > 0 then if offset.x < 0 then self:lateralKick(1, piece, new_piece, rot_dir, grid) - elseif offset.x == 0 then return - elseif offset.x > 0 then self:lateralKick(-1, piece, new_piece, rot_dir, grid) end - end - end - end + elseif offset.x == 0 then return + elseif offset.x > 0 then self:lateralKick(-1, piece, new_piece, rot_dir, grid) end + end + end + end end diff --git a/tetris/rulesets/pptprs.lua b/tetris/rulesets/pptprs.lua index 9e55a82..f2e138c 100644 --- a/tetris/rulesets/pptprs.lua +++ b/tetris/rulesets/pptprs.lua @@ -58,20 +58,20 @@ PPTPRS.wallkicks_O = { [3]={{x=-1, y=0}}, }, [1]={ - [0]={{x=0, y=-1}}, - [2]={{x=-1, y=0}}, - [3]={{x=-1, y=0}}, - }, + [0]={{x=0, y=-1}}, + [2]={{x=-1, y=0}}, + [3]={{x=-1, y=0}}, + }, [2]={ - [0]={{x=0, y=-1}}, - [1]={{x=1, y=0}}, - [3]={{x=0, y=-1}}, - }, + [0]={{x=0, y=-1}}, + [1]={{x=1, y=0}}, + [3]={{x=0, y=-1}}, + }, [3]={ - [0]={{x=1, y=0}}, - [1]={{x=1, y=0}}, - [2]={{x=0, y=1}}, - }, + [0]={{x=1, y=0}}, + [1]={{x=1, y=0}}, + [2]={{x=0, y=1}}, + }, } function PPTPRS:attemptWallkicks(piece, new_piece, rot_dir, grid) diff --git a/tetris/rulesets/ruleset.lua b/tetris/rulesets/ruleset.lua index c9cdc42..f7039ea 100644 --- a/tetris/rulesets/ruleset.lua +++ b/tetris/rulesets/ruleset.lua @@ -9,13 +9,13 @@ Ruleset.hash = "" -- Arika-type ruleset defaults Ruleset.world = false Ruleset.colourscheme = { - I = "R", - L = "O", - J = "B", - S = "M", - Z = "G", - O = "Y", - T = "C", + I = "R", + L = "O", + J = "B", + S = "M", + Z = "G", + O = "Y", + T = "C", } Ruleset.softdrop_lock = true Ruleset.harddrop_lock = false @@ -157,8 +157,8 @@ function Ruleset:initializePiece( else spawn_positions = self.spawn_positions end - local colours = ({self.colourscheme, ColourSchemes.Arika, ColourSchemes.TTC})[config.gamesettings.piece_colour] - + local colours = ({self.colourscheme, ColourSchemes.Arika, ColourSchemes.TTC})[config.gamesettings.piece_colour] + local piece = Piece(data.shape, data.orientation - 1, { x = spawn_positions[data.shape].x, y = spawn_positions[data.shape].y diff --git a/tetris/rulesets/standard_exp.lua b/tetris/rulesets/standard_exp.lua index 2c8b260..601f614 100755 --- a/tetris/rulesets/standard_exp.lua +++ b/tetris/rulesets/standard_exp.lua @@ -7,13 +7,13 @@ SRS.name = "Guideline SRS" SRS.hash = "Standard" SRS.world = true SRS.colourscheme = { - I = "C", - L = "O", - J = "B", - S = "G", - Z = "R", - O = "Y", - T = "M", + I = "C", + L = "O", + J = "B", + S = "G", + Z = "R", + O = "Y", + T = "M", } SRS.softdrop_lock = false SRS.harddrop_lock = true @@ -132,13 +132,13 @@ SRS.wallkicks_line = { }; function SRS:check_new_low(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.lowest_y = y - end - end + for _, block in pairs(piece:getBlockOffsets()) do + local y = piece.position.y + block.y + if y > piece.lowest_y then + piece.manipulations = 0 + piece.lowest_y = y + end + end end -- Component functions. @@ -170,16 +170,16 @@ end function SRS:onPieceCreate(piece, grid) piece.manipulations = 0 - piece.lowest_y = -math.huge + piece.lowest_y = -math.huge end function SRS:onPieceDrop(piece, grid) - self:check_new_low(piece) - if piece.manipulations >= 15 and piece:isDropBlocked(grid) then - piece.locked = true - else - piece.lock_delay = 0 -- step reset - end + self:check_new_low(piece) + if piece.manipulations >= 15 and piece:isDropBlocked(grid) then + piece.locked = true + else + piece.lock_delay = 0 -- step reset + end end function SRS:onPieceMove(piece, grid) @@ -194,8 +194,8 @@ end function SRS:onPieceRotate(piece, grid) piece.lock_delay = 0 -- rotate reset - self:check_new_low(piece) - piece.manipulations = piece.manipulations + 1 + self:check_new_low(piece) + piece.manipulations = piece.manipulations + 1 if piece:isDropBlocked(grid) then if piece.manipulations >= 15 then piece.locked = true diff --git a/tetris/rulesets/ti_srs.lua b/tetris/rulesets/ti_srs.lua index 7d9c8e1..6f79f34 100644 --- a/tetris/rulesets/ti_srs.lua +++ b/tetris/rulesets/ti_srs.lua @@ -7,13 +7,13 @@ SRS.name = "Ti-World" SRS.hash = "Bad I-kicks" SRS.world = true SRS.colourscheme = { - I = "C", - L = "O", - J = "B", - S = "G", - Z = "R", - O = "Y", - T = "M", + I = "C", + L = "O", + J = "B", + S = "G", + Z = "R", + O = "Y", + T = "M", } SRS.softdrop_lock = false SRS.harddrop_lock = true