diff --git a/inc/init/init.config.lua b/inc/init/init.config.lua
index ff2ef0d..9bf0fd0 100644
--- a/inc/init/init.config.lua
+++ b/inc/init/init.config.lua
@@ -20,7 +20,8 @@ function Config.initial_data()
meter_bg = 1
},
timing = {
- splash_duration = 120
+ splash_duration = 120,
+ minigame_win_duration = 180
}
}
end
diff --git a/inc/init/init.minigame.lua b/inc/init/init.minigame.lua
index b7e4fe0..3c40bdd 100644
--- a/inc/init/init.minigame.lua
+++ b/inc/init/init.minigame.lua
@@ -78,7 +78,8 @@ function Minigame.get_default_ddr()
current_song = nil,
pattern_index = 1,
use_pattern = false,
- return_window = nil
+ return_window = nil,
+ win_timer = 0
}
end
@@ -101,6 +102,7 @@ end
--- * button_x (number) Button indicator X position.
--- * button_y (number) Button indicator Y position.
--- * button_size (number) Button indicator size.
+--- * win_timer (number) Timer for the win message overlay.
function Minigame.get_default_button_mash()
return {
bar_fill = 0,
@@ -120,7 +122,8 @@ function Minigame.get_default_button_mash()
button_size = 12,
focus_center_x = nil,
focus_center_y = nil,
- focus_initial_radius = 0
+ focus_initial_radius = 0,
+ win_timer = 0
}
end
@@ -150,6 +153,7 @@ end
--- * button_size (number) Button indicator size.
--- * press_cooldown (number) Current cooldown timer.
--- * press_cooldown_duration (number) Frames of press cooldown.
+--- * win_timer (number) Timer for the win message overlay.
function Minigame.get_default_rhythm()
return {
line_position = 0,
@@ -176,10 +180,28 @@ function Minigame.get_default_rhythm()
press_cooldown_duration = 15,
focus_center_x = nil,
focus_center_y = nil,
- focus_initial_radius = 0
+ focus_initial_radius = 0,
+ win_timer = 0
}
end
+--- Draws a unified win message overlay.
+--- @within Minigame
+function Minigame.draw_win_overlay()
+ local text = "WELL DONE!"
+ local tw = #text * 4
+ local th = 6
+ local padding = 4
+ local box_w = tw + padding * 2
+ local box_h = th + padding * 2
+ local box_x = (Config.screen.width - box_w) / 2
+ local box_y = (Config.screen.height - box_h) / 2
+
+ rect(box_x, box_y, box_w, box_h, Config.colors.dark_grey)
+ rectb(box_x, box_y, box_w, box_h, Config.colors.white)
+ Print.text_center(text, Config.screen.width / 2, box_y + padding, Config.colors.white)
+end
+
--- Configures DDR minigame.
--- @within Minigame
--- @param params table Optional parameters to override defaults (see Minigame.get_default_ddr).
diff --git a/inc/window/window.minigame.ddr.lua b/inc/window/window.minigame.ddr.lua
index 3caa3bd..de7af3e 100644
--- a/inc/window/window.minigame.ddr.lua
+++ b/inc/window/window.minigame.ddr.lua
@@ -108,18 +108,25 @@ end
--- @within MinigameDDRWindow
function MinigameDDRWindow.update()
local mg = Context.minigame_ddr
+
+ if mg.win_timer > 0 then
+ mg.win_timer = mg.win_timer - 1
+ if mg.win_timer == 0 then
+ Meter.on_minigame_complete()
+ Meter.show()
+ Window.set_current(mg.return_window)
+ end
+ return
+ end
+
if mg.bar_fill >= mg.max_fill then
- Meter.on_minigame_complete()
- Meter.show()
- Window.set_current(mg.return_window)
+ mg.win_timer = Config.timing.minigame_win_duration
return
end
mg.frame_counter = mg.frame_counter + 1
if mg.use_pattern and mg.current_song and mg.current_song.end_frame then
if mg.frame_counter > mg.current_song.end_frame and #mg.arrows == 0 then
- Meter.on_minigame_complete()
- Meter.show()
- Window.set_current(mg.return_window)
+ mg.win_timer = Config.timing.minigame_win_duration
return
end
end
@@ -265,4 +272,7 @@ function MinigameDDRWindow.draw()
else
Print.text_center("RANDOM MODE", Config.screen.width / 2, debug_y, Config.colors.blue)
end
+if mg.win_timer > 0 then
+ Minigame.draw_win_overlay()
+end
end
\ No newline at end of file
diff --git a/inc/window/window.minigame.mash.lua b/inc/window/window.minigame.mash.lua
index f001753..fa9e8ff 100644
--- a/inc/window/window.minigame.mash.lua
+++ b/inc/window/window.minigame.mash.lua
@@ -25,6 +25,18 @@ end
--- @within MinigameButtonMashWindow
function MinigameButtonMashWindow.update()
local mg = Context.minigame_button_mash
+
+ if mg.win_timer > 0 then
+ mg.win_timer = mg.win_timer - 1
+ if mg.win_timer == 0 then
+ Meter.on_minigame_complete()
+ Meter.show()
+ if mg.focus_center_x then Focus.stop() end
+ Window.set_current(mg.return_window)
+ end
+ return
+ end
+
if Input.select() then
mg.bar_fill = mg.bar_fill + mg.fill_per_press
mg.button_pressed_timer = mg.button_press_duration
@@ -33,10 +45,7 @@ function MinigameButtonMashWindow.update()
end
end
if mg.bar_fill >= mg.max_fill then
- Meter.on_minigame_complete()
- Meter.show()
- if mg.focus_center_x then Focus.stop() end
- Window.set_current(mg.return_window)
+ mg.win_timer = Config.timing.minigame_win_duration
return
end
local degradation = mg.base_degradation + (mg.bar_fill * mg.degradation_multiplier)
@@ -86,4 +95,8 @@ function MinigameButtonMashWindow.draw()
Print.text_center("MASH Z!", Config.screen.width / 2, mg.bar_y + mg.bar_height + 10, Config.colors.light_grey)
local percentage = math.floor((mg.bar_fill / mg.max_fill) * 100)
Print.text_center(percentage .. "%", mg.bar_x + mg.bar_width / 2, mg.bar_y + 2, Config.colors.black)
+
+ if mg.win_timer > 0 then
+ Minigame.draw_win_overlay()
+ end
end
diff --git a/inc/window/window.minigame.rhythm.lua b/inc/window/window.minigame.rhythm.lua
index 0690f05..ff43d8f 100644
--- a/inc/window/window.minigame.rhythm.lua
+++ b/inc/window/window.minigame.rhythm.lua
@@ -27,6 +27,18 @@ end
--- @within MinigameRhythmWindow
function MinigameRhythmWindow.update()
local mg = Context.minigame_rhythm
+
+ if mg.win_timer > 0 then
+ mg.win_timer = mg.win_timer - 1
+ if mg.win_timer == 0 then
+ Meter.on_minigame_complete()
+ Meter.show()
+ if mg.focus_center_x then Focus.stop() end
+ Window.set_current(mg.return_window)
+ end
+ return
+ end
+
mg.line_position = mg.line_position + (mg.line_speed * mg.line_direction)
if mg.line_position > 1 then
mg.line_position = 1
@@ -57,10 +69,7 @@ function MinigameRhythmWindow.update()
end
end
if mg.score >= mg.max_score then
- Meter.on_minigame_complete()
- Meter.show()
- if mg.focus_center_x then Focus.stop() end
- Window.set_current(mg.return_window)
+ mg.win_timer = Config.timing.minigame_win_duration
return
end
if mg.button_pressed_timer > 0 then
@@ -107,4 +116,8 @@ function MinigameRhythmWindow.draw()
circ(mg.button_x, mg.button_y, mg.button_size - 2, button_color)
end
Print.text_center("Z", mg.button_x - 2, mg.button_y - 3, button_color)
+
+ if mg.win_timer > 0 then
+ Minigame.draw_win_overlay()
+ end
end