diff --git a/load/bgm.lua b/load/bgm.lua index 21aa1d2..2eb03c6 100644 --- a/load/bgm.lua +++ b/load/bgm.lua @@ -9,31 +9,38 @@ local current_bgm = nil local bgm_locked = false function switchBGM(sound, subsound) - if bgm_locked then return end if current_bgm ~= nil then current_bgm:stop() end - if subsound ~= nil then - current_bgm = bgm[sound][subsound] - resetBGMFadeout() + if bgm_locked or config.bgm_volume <= 0 then + current_bgm = nil elseif sound ~= nil then - current_bgm = bgm[sound] - resetBGMFadeout() + if subsound ~= nil then + current_bgm = bgm[sound][subsound] + else + current_bgm = bgm[sound] + end else current_bgm = nil end + if current_bgm ~= nil then + resetBGMFadeout() + end end function switchBGMLoop(sound, subsound) - if bgm_locked then return end switchBGM(sound, subsound) - current_bgm:setLooping(true) + if current_bgm then current_bgm:setLooping(true) end end function lockBGM() bgm_locked = true end +function unlockBGM() + bgm_locked = false +end + local fading_bgm = false local fadeout_time = 0 local total_fadeout_time = 0 @@ -53,7 +60,7 @@ function resetBGMFadeout(time) end function processBGMFadeout(dt) - if fading_bgm then + if current_bgm and fading_bgm then fadeout_time = fadeout_time - dt if fadeout_time < 0 then fadeout_time = 0 diff --git a/load/sounds.lua b/load/sounds.lua index 7e0b80b..0dfae21 100644 --- a/load/sounds.lua +++ b/load/sounds.lua @@ -27,33 +27,37 @@ sounds = { } function playSE(sound, subsound) - if subsound == nil then - sounds[sound]:setVolume(config.sfx_volume) - if sounds[sound]:isPlaying() then - sounds[sound]:stop() + if sound ~= nil then + if subsound ~= nil then + sounds[sound][subsound]:setVolume(config.sfx_volume) + if sounds[sound][subsound]:isPlaying() then + sounds[sound][subsound]:stop() + end + sounds[sound][subsound]:play() + else + sounds[sound]:setVolume(config.sfx_volume) + if sounds[sound]:isPlaying() then + sounds[sound]:stop() + end + sounds[sound]:play() end - sounds[sound]:play() - else - sounds[sound][subsound]:setVolume(config.sfx_volume) - if sounds[sound][subsound]:isPlaying() then - sounds[sound][subsound]:stop() - end - sounds[sound][subsound]:play() end end function playSEOnce(sound, subsound) - if subsound == nil then - sounds[sound]:setVolume(config.sfx_volume) - if sounds[sound]:isPlaying() then - return + if sound ~= nil then + if subsound ~= nil then + sounds[sound][subsound]:setVolume(config.sfx_volume) + if sounds[sound][subsound]:isPlaying() then + return + end + sounds[sound][subsound]:play() + else + sounds[sound]:setVolume(config.sfx_volume) + if sounds[sound]:isPlaying() then + return + end + sounds[sound]:play() end - sounds[sound]:play() - else - sounds[sound][subsound]:setVolume(config.sfx_volume) - if sounds[sound][subsound]:isPlaying() then - return - end - sounds[sound][subsound]:play() end end \ No newline at end of file diff --git a/scene/game.lua b/scene/game.lua index babb6e5..d9dcf35 100644 --- a/scene/game.lua +++ b/scene/game.lua @@ -42,62 +42,17 @@ function GameScene:update() end function GameScene:render() - love.graphics.setColor(1, 1, 1, 1) - love.graphics.draw( - backgrounds[self.game:getBackground()], - 0, 0, 0, - 0.5, 0.5 - ) - - -- game frame - if self.game.grid.width == 10 and self.game.grid.height == 24 then - love.graphics.draw(misc_graphics["frame"], 48, 64) - end - - love.graphics.setColor(0, 0, 0, 200) - love.graphics.rectangle( - "fill", 64, 80, - 16 * self.game.grid.width, 16 * (self.game.grid.height - 4) - ) - - if self.game.grid.width ~= 10 or self.game.grid.height ~= 24 then - love.graphics.setColor(174/255, 83/255, 76/255, 1) - love.graphics.setLineWidth(8) - love.graphics.line( - 60,76, - 68+16*self.game.grid.width,76, - 68+16*self.game.grid.width,84+16*(self.game.grid.height-4), - 60,84+16*(self.game.grid.height-4), - 60,76 - ) - love.graphics.setColor(203/255, 137/255, 111/255, 1) - love.graphics.setLineWidth(4) - love.graphics.line( - 60,76, - 68+16*self.game.grid.width,76, - 68+16*self.game.grid.width,84+16*(self.game.grid.height-4), - 60,84+16*(self.game.grid.height-4), - 60,76 - ) - love.graphics.setLineWidth(1) - end - + self.game:drawBackground() + self.game:drawFrame() self.game:drawGrid() if self.game.lcd > 0 then self.game:drawLineClearAnimation() end self.game:drawPiece() self.game:drawNextQueue(self.ruleset) self.game:drawScoringInfo() - - -- ready/go graphics - - if self.game.ready_frames <= 100 and self.game.ready_frames > 52 then - love.graphics.draw(misc_graphics["ready"], 144 - 50, 240 - 14) - elseif self.game.ready_frames <= 50 and self.game.ready_frames > 2 then - love.graphics.draw(misc_graphics["go"], 144 - 27, 240 - 14) - end - + self.game:drawReadyGo() self.game:drawCustom() + love.graphics.setColor(1, 1, 1, 1) love.graphics.setFont(font_3x5_2) if config.gamesettings.display_gamemode == 1 then love.graphics.printf(self.game.name .. " - " .. self.ruleset.name, 0, 460, 640, "left") diff --git a/tetris/components/piece.lua b/tetris/components/piece.lua index d1d302a..cfde50e 100644 --- a/tetris/components/piece.lua +++ b/tetris/components/piece.lua @@ -118,6 +118,7 @@ function Piece:lockIfBottomed(grid) end function Piece:addGravity(gravity, grid, classic_lock) + gravity = gravity / (self.big and 2 or 1) local new_gravity = self.gravity + gravity if self:isDropBlocked(grid) then if classic_lock then diff --git a/tetris/modes/gamemode.lua b/tetris/modes/gamemode.lua index dedc1dc..d7c98fd 100644 --- a/tetris/modes/gamemode.lua +++ b/tetris/modes/gamemode.lua @@ -325,11 +325,13 @@ function GameMode:onPieceEnter() end function GameMode:onHold() end function GameMode:onSoftDrop(dropped_row_count) - self.drop_bonus = self.drop_bonus + 1 * dropped_row_count + self.drop_bonus = self.drop_bonus + ( + (self.piece.big and 2 or 1) * dropped_row_count + ) end function GameMode:onHardDrop(dropped_row_count) - self.drop_bonus = self.drop_bonus + 2 * dropped_row_count + self:onSoftDrop(dropped_row_count * 2) end function GameMode:onGameOver() @@ -838,6 +840,61 @@ function GameMode:drawSectionTimesWithSplits(current_section, section_limit) end end +function GameMode:drawBackground() + love.graphics.setColor(1, 1, 1, 1) + love.graphics.draw( + backgrounds[self:getBackground()], + 0, 0, 0, + 0.5, 0.5 + ) +end + +function GameMode:drawFrame() + -- game frame + if self.grid.width == 10 and self.grid.height == 24 then + love.graphics.draw(misc_graphics["frame"], 48, 64) + end + + love.graphics.setColor(0, 0, 0, 200) + love.graphics.rectangle( + "fill", 64, 80, + 16 * self.grid.width, 16 * (self.grid.height - 4) + ) + + if self.grid.width ~= 10 or self.grid.height ~= 24 then + love.graphics.setColor(174/255, 83/255, 76/255, 1) + love.graphics.setLineWidth(8) + love.graphics.line( + 60,76, + 68+16*self.grid.width,76, + 68+16*self.grid.width,84+16*(self.grid.height-4), + 60,84+16*(self.grid.height-4), + 60,76 + ) + love.graphics.setColor(203/255, 137/255, 111/255, 1) + love.graphics.setLineWidth(4) + love.graphics.line( + 60,76, + 68+16*self.grid.width,76, + 68+16*self.grid.width,84+16*(self.grid.height-4), + 60,84+16*(self.grid.height-4), + 60,76 + ) + love.graphics.setLineWidth(1) + end +end + +function GameMode:drawReadyGo() + -- ready/go graphics + love.graphics.setColor(1, 1, 1, 1) + + if self.ready_frames <= 100 and self.ready_frames > 52 then + love.graphics.draw(misc_graphics["ready"], 144 - 50, 240 - 14) + elseif self.ready_frames <= 50 and self.ready_frames > 2 then + love.graphics.draw(misc_graphics["go"], 144 - 27, 240 - 14) + end +end + function GameMode:drawCustom() end return GameMode diff --git a/tetris/rulesets/ruleset.lua b/tetris/rulesets/ruleset.lua index abee732..623e537 100644 --- a/tetris/rulesets/ruleset.lua +++ b/tetris/rulesets/ruleset.lua @@ -161,11 +161,6 @@ function Ruleset:dropPiece( inputs, piece, grid, gravity, drop_speed, drop_locked, hard_drop_locked, hard_drop_enabled, additive_gravity, classic_lock ) - if piece.big then - gravity = gravity / 2 - drop_speed = drop_speed / 2 - end - local y = piece.position.y if inputs["down"] == true and drop_locked == false then if additive_gravity then