diff --git a/inc/decision/decision.do_work.lua b/inc/decision/decision.do_work.lua index a40b138..4558618 100644 --- a/inc/decision/decision.do_work.lua +++ b/inc/decision/decision.do_work.lua @@ -15,7 +15,7 @@ Decision.register({ modes_for_ascension_levels[3] = "only_nothing" modes_for_ascension_levels[4] = "normal" - MinigameDDRWindow.start("game", "generated", { + local ddr_config = { on_win = function(game_context) if (game_context.special_mode_condition and Context.ascension.level == 1) then Context.should_ascend = true @@ -31,6 +31,11 @@ Decision.register({ Context.have_done_work_today = true end, special_mode = modes_for_ascension_levels[Ascension.get_level()] or "normal" - }) + } + if Context.meters and Context.meters.wpm < 100 then + ddr_config.arrow_fall_speed = 2.5 + ddr_config.arrow_spawn_interval = 30 + end + MinigameDDRWindow.start("game", "generated", ddr_config) end, }) diff --git a/inc/decision/decision.play_rhythm.lua b/inc/decision/decision.play_rhythm.lua index 111c56b..24922c7 100644 --- a/inc/decision/decision.play_rhythm.lua +++ b/inc/decision/decision.play_rhythm.lua @@ -3,10 +3,24 @@ Decision.register({ label = "Play Rhythm Game", handle = function() Meter.hide() - MinigameRhythmWindow.start("game", { + local wpm_at_start = Context.meters and Context.meters.wpm or 0 + local rhythm_config = { focus_center_x = (Config.screen.width / 2) - 22, focus_center_y = (Config.screen.height / 2) - 18, focus_initial_radius = 0, - }) + on_win = function() + if wpm_at_start > 900 then + Meter.add("ism", math.floor(Meter.get_max() * 0.05)) + Meter.add("bm", math.floor(Meter.get_max() * 0.05)) + end + Meter.show() + Window.set_current("game") + end, + } + if wpm_at_start < 100 then + rhythm_config.line_speed = 0.025 + rhythm_config.initial_target_width = 0.2 + end + MinigameRhythmWindow.start("game", rhythm_config) end, }) diff --git a/inc/logic/logic.meter.lua b/inc/logic/logic.meter.lua index d746d93..c9b8994 100644 --- a/inc/logic/logic.meter.lua +++ b/inc/logic/logic.meter.lua @@ -168,6 +168,7 @@ function Meter.apply_ddr_reward(mistake_count) if not Context or not Context.meters then return end local max = Meter.get_max() local m = Context.meters + local wpm_was_high = m.wpm > 900 local wpm_pct, ism_pct, bm_pct if mistake_count == 0 then wpm_pct, ism_pct, bm_pct = -0.10, 0.05, 0.05 @@ -185,6 +186,10 @@ function Meter.apply_ddr_reward(mistake_count) if bm_pct ~= 0 then Meter.add("bm", math.floor(max * bm_pct)) end + if wpm_was_high then + Meter.add("ism", math.floor(max * 0.05)) + Meter.add("bm", math.floor(max * 0.05)) + end m.combo = m.combo + 1 m.combo_timer = 0 end