Merge branch 'master' into 3d_blocks

This commit is contained in:
nightmareci
2023-12-31 08:50:23 -08:00
42 changed files with 466 additions and 238 deletions

View File

@@ -16,9 +16,7 @@ function CreditsScene:new()
end
function CreditsScene:update()
if love.window.hasFocus() then
self.frames = self.frames + 1
end
self.frames = self.frames + 1
if self.frames >= 2100 * self.scroll_speed then
playSE("mode_decide")
scene = TitleScene()
@@ -32,11 +30,7 @@ function CreditsScene:render()
local offset = self.frames / self.scroll_speed
love.graphics.setColor(1, 1, 1, 1)
love.graphics.draw(
backgrounds[19],
0, 0, 0,
0.5, 0.5
)
drawBackground(19)
love.graphics.setFont(font_3x5_4)
love.graphics.print("Cambridge Credits", 320, 500 - offset)

View File

@@ -25,6 +25,8 @@ function GameScene:new(game_mode, ruleset, inputs)
hold=false,
}
self.paused = false
self.game.pause_count = 0
self.game.pause_time = 0
DiscordRPC:update({
details = self.game.rpc_details,
state = self.game.name,
@@ -33,7 +35,9 @@ function GameScene:new(game_mode, ruleset, inputs)
end
function GameScene:update()
if love.window.hasFocus() and not self.paused then
if self.paused then
self.game.pause_time = self.game.pause_time + 1
else
local inputs = {}
for input, value in pairs(self.inputs) do
inputs[input] = value
@@ -50,6 +54,16 @@ end
function GameScene:render()
self.game:draw(self.paused)
if self.game.pause_time > 0 or self.game.pause_count > 0 then
love.graphics.setColor(1, 1, 1, 1)
love.graphics.setFont(font_3x5_2)
love.graphics.printf(string.format(
"%d PAUSE%s (%s)",
self.game.pause_count,
self.game.pause_count == 1 and "" or "S",
formatTime(self.game.pause_time)
), 0, 0, 635, "right")
end
end
function GameScene:onInputPress(e)
@@ -67,12 +81,17 @@ function GameScene:onInputPress(e)
scene = e.input == "retry" and GameScene(self.retry_mode, self.retry_ruleset, self.secret_inputs) or ModeSelectScene()
elseif e.input == "retry" then
switchBGM(nil)
pitchBGM(1)
self.game:onExit()
scene = GameScene(self.retry_mode, self.retry_ruleset, self.secret_inputs)
elseif e.input == "pause" and not (self.game.game_over or self.game.completed) then
self.paused = not self.paused
if self.paused then pauseBGM()
else resumeBGM() end
if self.paused then
pauseBGM()
self.game.pause_count = self.game.pause_count + 1
else
resumeBGM()
end
elseif e.input == "menu_back" then
self.game:onExit()
scene = ModeSelectScene()

View File

@@ -45,11 +45,7 @@ end
function ConfigScene:render()
love.graphics.setColor(1, 1, 1, 1)
love.graphics.draw(
backgrounds["game_config"],
0, 0, 0,
0.5, 0.5
)
drawBackground("options_game")
love.graphics.setFont(font_3x5_4)
love.graphics.print("GAME SETTINGS", 80, 40)

View File

@@ -20,11 +20,7 @@ function ConfigScene:update() end
function ConfigScene:render()
love.graphics.setColor(1, 1, 1, 1)
love.graphics.draw(
backgrounds["input_config"],
0, 0, 0,
0.5, 0.5
)
drawBackground("options_input")
love.graphics.setFont(font_3x5_4)
love.graphics.print("INPUT CONFIG", 80, 40)

View File

@@ -45,11 +45,7 @@ end
function KeyConfigScene:render()
love.graphics.setColor(1, 1, 1, 1)
love.graphics.draw(
backgrounds["input_config"],
0, 0, 0,
0.5, 0.5
)
drawBackground("options_input")
love.graphics.setFont(font_3x5_2)
for i, input in ipairs(configurable_inputs) do

View File

@@ -58,11 +58,7 @@ function ModeSelectScene:update()
end
function ModeSelectScene:render()
love.graphics.draw(
backgrounds[0],
0, 0, 0,
0.5, 0.5
)
drawBackground(0)
love.graphics.draw(misc_graphics["select_mode"], 20, 40)

View File

@@ -6,6 +6,9 @@ ReplayScene.title = "Replay"
function ReplayScene:new(replay, game_mode, ruleset)
config.gamesettings = replay["gamesettings"]
if replay["delayed_auto_shift"] then config.das = replay["delayed_auto_shift"] end
if replay["auto_repeat_rate"] then config.arr = replay["auto_repeat_rate"] end
if replay["das_cut_delay"] then config.dcd = replay["das_cut_delay"] end
love.math.setRandomSeed(replay["random_low"], replay["random_high"])
love.math.setRandomState(replay["random_state"])
self.retry_replay = replay
@@ -29,8 +32,13 @@ function ReplayScene:new(replay, game_mode, ruleset)
hold=false,
}
self.paused = false
self.game.pause_count = replay["pause_count"]
self.game.pause_time = replay["pause_time"]
self.replay = deepcopy(replay)
self.replay_index = 1
self.replay_speed = 1
self.show_invisible = false
self.frame_steps = 0
DiscordRPC:update({
details = "Viewing a replay",
state = self.game.name,
@@ -39,18 +47,25 @@ function ReplayScene:new(replay, game_mode, ruleset)
end
function ReplayScene:update()
if love.window.hasFocus() and not self.paused then
self.inputs = self.replay["inputs"][self.replay_index]["inputs"]
self.replay["inputs"][self.replay_index]["frames"] = self.replay["inputs"][self.replay_index]["frames"] - 1
if self.replay["inputs"][self.replay_index]["frames"] == 0 and self.replay_index < table.getn(self.replay["inputs"]) then
self.replay_index = self.replay_index + 1
local frames_left = self.replay_speed
if not self.paused or self.frame_steps > 0 then
if self.frame_steps > 0 then
self.frame_steps = self.frame_steps - 1
end
local input_copy = {}
for input, value in pairs(self.inputs) do
input_copy[input] = value
while frames_left > 0 do
frames_left = frames_left - 1
self.inputs = self.replay["inputs"][self.replay_index]["inputs"]
self.replay["inputs"][self.replay_index]["frames"] = self.replay["inputs"][self.replay_index]["frames"] - 1
if self.replay["inputs"][self.replay_index]["frames"] == 0 and self.replay_index < table.getn(self.replay["inputs"]) then
self.replay_index = self.replay_index + 1
end
local input_copy = {}
for input, value in pairs(self.inputs) do
input_copy[input] = value
end
self.game:update(input_copy, self.ruleset)
self.game.grid:update()
end
self.game:update(input_copy, self.ruleset)
self.game.grid:update()
DiscordRPC:update({
details = "Viewing a replay",
state = self.game.name,
@@ -64,6 +79,30 @@ function ReplayScene:render()
love.graphics.setColor(1, 1, 1, 1)
love.graphics.setFont(font_3x5_3)
love.graphics.printf("REPLAY", 0, 0, 635, "right")
local pauses_y_coordinate = 23
if self.replay_speed > 1 then
pauses_y_coordinate = pauses_y_coordinate + 20
love.graphics.printf(self.replay_speed.."X", 0, 20, 635, "right")
end
love.graphics.setFont(font_3x5_2)
if self.game.pause_time and self.game.pause_count then
if self.game.pause_time > 0 or self.game.pause_count > 0 then
love.graphics.printf(string.format(
"%d PAUSE%s (%s)",
self.game.pause_count,
self.game.pause_count == 1 and "" or "S",
formatTime(self.game.pause_time)
), 0, pauses_y_coordinate, 635, "right")
end
else
love.graphics.printf("?? PAUSES (--:--.--)", 0, pauses_y_coordinate, 635, "right")
end
if self.show_invisible then
self.game.grid:draw()
love.graphics.setColor(1, 1, 1, 1)
love.graphics.setFont(font_3x5_3)
love.graphics.printf("SHOW INVIS", 64, 60, 160, "center")
end
end
function ReplayScene:onInputPress(e)
@@ -72,6 +111,8 @@ function ReplayScene:onInputPress(e)
e.input == "menu_decide" or
e.input == "retry"
) then
switchBGM(nil)
pitchBGM(1)
self.game:onExit()
loadSave()
love.math.setRandomSeed(os.time())
@@ -86,6 +127,23 @@ function ReplayScene:onInputPress(e)
self.paused = not self.paused
if self.paused then pauseBGM()
else resumeBGM() end
--frame step
elseif e.input == "rotate_left" then
self.frame_steps = self.frame_steps + 1
elseif e.input == "left" then
self.replay_speed = self.replay_speed - 1
if self.replay_speed < 1 then
self.replay_speed = 1
end
pitchBGM(self.replay_speed)
elseif e.input == "right" then
self.replay_speed = self.replay_speed + 1
if self.replay_speed > 99 then
self.replay_speed = 99
end
pitchBGM(self.replay_speed)
elseif e.input == "hold" then
self.show_invisible = not self.show_invisible
end
end

View File

@@ -14,8 +14,12 @@ function ReplaySelectScene:new()
replay_file_list = love.filesystem.getDirectoryItems("replays")
for i=1,#replay_file_list do
local data = love.filesystem.read("replays/"..replay_file_list[i])
local new_replay = binser.deserialize(data)[1]
replays[#replays + 1] = new_replay
local success, new_replay = pcall(
function() return binser.deserialize(data)[1] end
)
if success then
replays[#replays + 1] = new_replay
end
end
table.sort(replays, function(a, b)
return a["timestamp"] > b["timestamp"]
@@ -43,8 +47,6 @@ function ReplaySelectScene:new()
end
function ReplaySelectScene:update()
switchBGM(nil) -- experimental
if self.das_up or self.das_down or self.das_left or self.das_right then
self.das = self.das + 1
else
@@ -74,16 +76,12 @@ function ReplaySelectScene:update()
end
function ReplaySelectScene:render()
love.graphics.draw(
backgrounds[0],
0, 0, 0,
0.5, 0.5
)
drawBackground(0)
-- Same graphic as mode select
--love.graphics.draw(misc_graphics["select_mode"], 20, 40)
love.graphics.setFont(font_3x5_4)
love.graphics.setFont(font_8x11)
love.graphics.print("SELECT REPLAY", 20, 35)
if self.display_warning then

View File

@@ -29,11 +29,7 @@ function SettingsScene:update() end
function SettingsScene:render()
love.graphics.setColor(1, 1, 1, 1)
love.graphics.draw(
backgrounds["game_config"],
0, 0, 0,
0.5, 0.5
)
drawBackground("options_game")
love.graphics.setFont(font_3x5_4)
love.graphics.print("SETTINGS", 80, 40)

View File

@@ -46,11 +46,7 @@ end
function StickConfigScene:render()
love.graphics.setColor(1, 1, 1, 1)
love.graphics.draw(
backgrounds["input_config"],
0, 0, 0,
0.5, 0.5
)
drawBackground("options_input")
love.graphics.setFont(font_3x5_2)
for i, input in ipairs(configurable_inputs) do

View File

@@ -74,11 +74,7 @@ local block_offsets = {
function TitleScene:render()
love.graphics.setFont(font_3x5_4)
love.graphics.setColor(1, 1, 1, 1 - self.snow_bg_opacity)
love.graphics.draw(
backgrounds["title_no_icon"], -- title, title_night
0, 0, 0,
0.5, 0.5
)
drawBackground("title_no_icon") -- title, title_night
-- 490, 192
for _, b in ipairs(block_offsets) do
@@ -109,11 +105,7 @@ function TitleScene:render()
love.graphics.setFont(font_3x5_2)
love.graphics.setColor(1, 1, 1, self.snow_bg_opacity)
love.graphics.draw(
backgrounds["snow"],
0, 0, 0,
0.5, 0.5
)
drawBackground("snow")
love.graphics.draw(
misc_graphics["santa"],

View File

@@ -34,11 +34,7 @@ end
function TuningScene:render()
love.graphics.setColor(1, 1, 1, 1)
love.graphics.draw(
backgrounds["game_config"],
0, 0, 0,
0.5, 0.5
)
drawBackground("options_game")
love.graphics.setColor(1, 1, 1, 0.5)
love.graphics.rectangle("fill", 75, 98 + self.highlight * 75, 400, 33)