diff --git a/load/sounds.lua b/load/sounds.lua index c00856f..7a4d520 100644 --- a/load/sounds.lua +++ b/load/sounds.lua @@ -14,11 +14,17 @@ sounds = { cursor_lr = love.audio.newSource("res/se/cursor_lr.wav", "static"), main_decide = love.audio.newSource("res/se/main_decide.wav", "static"), mode_decide = love.audio.newSource("res/se/mode_decide.wav", "static"), + lock = love.audio.newSource("res/se/lock.wav", "static"), + hold = love.audio.newSource("res/se/hold.wav", "static"), + erase = love.audio.newSource("res/se/erase.wav", "static"), + fall = love.audio.newSource("res/se/fall.wav", "static"), + ready = love.audio.newSource("res/se/ready.wav", "static"), + go = love.audio.newSource("res/se/go.wav", "static"), } function playSE(sound, subsound) if subsound == nil then - sounds[sound]:setVolume(0.1) + sounds[sound]:setVolume(0.5) if sounds[sound]:isPlaying() then sounds[sound]:stop() end @@ -31,3 +37,19 @@ function playSE(sound, subsound) sounds[sound][subsound]:play() end end + +function playSEOnce(sound, subsound) + if subsound == nil then + sounds[sound]:setVolume(0.5) + if sounds[sound]:isPlaying() then + return + end + sounds[sound]:play() + else + sounds[sound][subsound]:setVolume(0.5) + if sounds[sound][subsound]:isPlaying() then + return + end + sounds[sound][subsound]:play() + end +end \ No newline at end of file diff --git a/res/backgrounds/title_v0.1.png b/res/backgrounds/title_v0.1.png index 065b50d..1ea940c 100644 Binary files a/res/backgrounds/title_v0.1.png and b/res/backgrounds/title_v0.1.png differ diff --git a/res/se/bottom.wav b/res/se/bottom.wav index 73a804f..1a66150 100644 Binary files a/res/se/bottom.wav and b/res/se/bottom.wav differ diff --git a/res/se/erase.wav b/res/se/erase.wav new file mode 100644 index 0000000..ca326cf Binary files /dev/null and b/res/se/erase.wav differ diff --git a/res/se/fall.wav b/res/se/fall.wav new file mode 100644 index 0000000..6e8dab1 Binary files /dev/null and b/res/se/fall.wav differ diff --git a/res/se/go.wav b/res/se/go.wav new file mode 100644 index 0000000..6f76435 Binary files /dev/null and b/res/se/go.wav differ diff --git a/res/se/hold.wav b/res/se/hold.wav new file mode 100644 index 0000000..b47072e Binary files /dev/null and b/res/se/hold.wav differ diff --git a/res/se/lock.wav b/res/se/lock.wav new file mode 100644 index 0000000..d3538c1 Binary files /dev/null and b/res/se/lock.wav differ diff --git a/res/se/ready.wav b/res/se/ready.wav new file mode 100644 index 0000000..e9f8438 Binary files /dev/null and b/res/se/ready.wav differ diff --git a/scene/game.lua b/scene/game.lua index 5f796c8..9b085e9 100644 --- a/scene/game.lua +++ b/scene/game.lua @@ -49,6 +49,7 @@ function GameScene:render() 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 diff --git a/tetris/modes/gamemode.lua b/tetris/modes/gamemode.lua index 4ca0235..9648f2c 100644 --- a/tetris/modes/gamemode.lua +++ b/tetris/modes/gamemode.lua @@ -1,6 +1,9 @@ local Object = require 'libs.classic' require 'funcs' +local playedReadySE = false +local playedGoSE = false + local Grid = require 'tetris.components.grid' local Randomizer = require 'tetris.randomizers.randomizer' @@ -161,6 +164,7 @@ function GameMode:update(inputs, ruleset) end if cleared_row_count > 0 then + playSE("erase") self.lcd = self:getLineClearDelay() self.are = self:getLineARE() if self.lcd == 0 then @@ -194,10 +198,16 @@ end -- event functions function GameMode:whilePieceActive() end -function GameMode:onPieceLock(piece, cleared_row_count) end +function GameMode:onPieceLock(piece, cleared_row_count) + playSE("lock") +end + function GameMode:onLineClear(cleared_row_count) end + function GameMode:onPieceEnter() end -function GameMode:onHold() end +function GameMode:onHold() + playSE("hold") +end function GameMode:onSoftDrop(dropped_row_count) self.drop_bonus = self.drop_bonus + 1 * dropped_row_count @@ -239,8 +249,20 @@ function GameMode:chargeDAS(inputs) end function GameMode:processDelays(inputs, ruleset, drop_speed) + if self.ready_frames == 100 then + playedReadySE = false + playedGoSE = false + end if self.ready_frames > 0 then + if not playedReadySE then + playedReadySE = true + playSEOnce("ready") + end self.ready_frames = self.ready_frames - 1 + if self.ready_frames == 50 and not playedGoSE then + playedGoSE = true + playSEOnce("go") + end if self.ready_frames == 0 then self:initializeOrHold(inputs, ruleset) end @@ -248,6 +270,7 @@ function GameMode:processDelays(inputs, ruleset, drop_speed) self.lcd = self.lcd - 1 if self.lcd == 0 then self.grid:clearClearedRows() + playSE("fall") if self.are == 0 then self:initializeOrHold(inputs, ruleset) end