diff --git a/src/itdelatrisu/opsu/Options.java b/src/itdelatrisu/opsu/Options.java index d695780f..623fd29b 100644 --- a/src/itdelatrisu/opsu/Options.java +++ b/src/itdelatrisu/opsu/Options.java @@ -503,6 +503,18 @@ public class Options { SHOW_PERFECT_HIT ("Show Perfect Hits", "PerfectHit", "Whether to show perfect hit result bursts (300s, slider ticks).", true), SHOW_FOLLOW_POINTS ("Show Follow Points", "FollowPoints", "Whether to show follow points between hit objects.", true), SHOW_HIT_ERROR_BAR ("Show Hit Error Bar", "ScoreMeter", "Shows precisely how accurate you were with each hit.", false), + MAP_START_DELAY ("Map start delay", "StartDelay", "Have a fix amount of time to prepare your play/record", 20, 1, 50) { + @Override + public String getValueString() { + return String.valueOf(val * 100); + } + }, + MAP_END_DELAY ("Map end delay", "EndDelay", "Have a fix amount of time at the and of the map for a smooth finish", 50, 1, 50) { + @Override + public String getValueString() { + return String.valueOf(val * 100); + } + }, LOAD_HD_IMAGES ("Load HD Images", "LoadHDImages", String.format("Loads HD (%s) images when available. Increases memory usage and loading times.", GameImage.HD_SUFFIX), true), FIXED_CS ("Fixed Circle Size (CS)", "FixedCS", "Determines the size of circles and sliders.", 0, 0, 100) { @Override @@ -1696,6 +1708,9 @@ public class Options { */ public static boolean isHitErrorBarEnabled() { return GameOption.SHOW_HIT_ERROR_BAR.getBooleanValue(); } + public static int getMapStartDelay() { return GameOption.MAP_START_DELAY.getIntegerValue() * 100; } + public static int getMapEndDelay() { return GameOption.MAP_END_DELAY.getIntegerValue() * 100; } + /** * Returns whether or not to load HD (@2x) images. * @return true if HD images are enabled, false if only SD images should be loaded diff --git a/src/itdelatrisu/opsu/states/Game.java b/src/itdelatrisu/opsu/states/Game.java index 3c8364df..311d9cb8 100644 --- a/src/itdelatrisu/opsu/states/Game.java +++ b/src/itdelatrisu/opsu/states/Game.java @@ -827,7 +827,7 @@ public class Game extends BasicGameState { boolean complete = objectIndex >= gameObjects.length; if (GameMod.AUTO.isActive() && complete) { if (gameObjects.length > 0) { - complete = trackPosition >= gameObjects[gameObjects.length - 1].getEndTime() + 5000; + complete = trackPosition >= gameObjects[gameObjects.length - 1].getEndTime() + Options.getMapEndDelay(); } } if (complete || (MusicController.trackEnded() && objectIndex > 0)) { @@ -1438,7 +1438,7 @@ public class Game extends BasicGameState { MusicController.pause(); if (gameObjects.length > 0) { - int leadIntime = 2000 - gameObjects[0].getTime(); + int leadIntime = Options.getMapStartDelay() - gameObjects[0].getTime(); if (leadIntime > 0) { this.leadInTime = Math.max(leadIntime, this.leadInTime); } diff --git a/src/itdelatrisu/opsu/states/OptionsMenu.java b/src/itdelatrisu/opsu/states/OptionsMenu.java index 9bfa5450..9fee18a1 100644 --- a/src/itdelatrisu/opsu/states/OptionsMenu.java +++ b/src/itdelatrisu/opsu/states/OptionsMenu.java @@ -87,7 +87,9 @@ public class OptionsMenu extends BasicGameState { GameOption.SHOW_COMBO_BURSTS, GameOption.SHOW_PERFECT_HIT, GameOption.SHOW_FOLLOW_POINTS, - GameOption.SHOW_HIT_ERROR_BAR + GameOption.SHOW_HIT_ERROR_BAR, + GameOption.MAP_START_DELAY, + GameOption.MAP_END_DELAY, }), INPUT ("Input", new GameOption[] { GameOption.KEY_LEFT,