PracticeMode - 123jimin/unnamed-sdvx-clone GitHub Wiki

What is practice mode?

The practice mode is a mode where you can repeatedly play a part of a chart in USC. This mode is very useful for following situations:

  • You want to grind a chart until certain clear mark (Clear, UC, PUC) or grade (S, AAA+, AAA, ...) is achieved.
  • You want to repeatedly play a part of a chart.
  • You want to practice a part of a chart, in lower playback speed.

Before entering the practice mode

  • Set the key for the back button in the setting.
  • If you're using another skin, using the default skin's scripts/gamesettingsdialog.lua is highly recommended.

How to enter practice mode?

In the song selection scene, scroll to the chart you want to practice, then do one of the followings:

Method 1:

  1. Press the grave(`) key, which is usually located left to the number 1 key and just under the ESC key.

Method 2:

  1. Press both FX buttons at the same time, which will open the gameplay settings dialog.
  2. Use the FX buttons to navigate to the "Game" tab.
  3. Use the left knob (or up/down arrow keys) to locate the cursor on the "Practice" button.
    • Depending on skins, the buttons might be displayed as checkboxes or some other input controls.
  4. Press the START button.

You'll enter the practice setup scene, where various options related to the practice mode can be adjusted.

Navigating the practice setup

For the practice setup dialog, the way of navigating is identical to that of gameplay settings dialog.

  • Press both FX buttons (or the Back button) to close/open the dialog.
  • Use the FX buttons to navigate between tabs.
  • Use the left knob (or up/down arrow keys) to navigate between various options.
  • Use the right knob (or left/right arrow keys) to adjust numeral options.
  • Use the START button to trigger buttons or check/uncheck checkboxes.

When the dialog is closed, the chart will be autoplayed.

  • To pause, press one of the FX buttons.
  • To scroll the chart, use one of the knobs. (The right knob scrolls faster than the left knob.)

The basic method of setting up for the practice is:

  1. Close the dialog.
  2. Scroll to the point where you want to start playing.
  3. Open the dialog and trigger the "Set the start point ... to here" button.
  4. Close the dialog again.
  5. Scroll to the point where you want to end playing.
  6. Open the dialog and trigger the "Set the end point ... to here" button.
  7. Toggle the "Loop on success" checkbox.
  8. Trigger the "Start practice" button to start.

Basic options

  • Set the start point ... to here
    • The start point is where the chart will be started upon starting the practice.
    • By triggering the button, the start point will be set to the moment which you're currently viewing.
  • Set the end point ... to here
    • The end point is where the practice will be finished.
    • Similarly for the start point, triggering this button will set the end point.
    • If the end point is before the start point, the chart will be played until the end of the chart is reached.
  • Loop on success
    • If this option is set, then upon reaching the end point, the chart will be restarted from the start point.
  • Loop on fail
    • If this option is set, then upon failing, the chart will be restarted from the start point.
  • Enable navigation inputs for the setup
    • If this option is not set, then FX buttons and knobs will be disabled when the dialog is closed.
    • This is useful for practicing while the chart is being autoplayed.
    • Use the Back button to reopen the dialog.
  • Playback speed
    • Adjust the playback speed of the song.
    • There are several known bugs related to this setting.
      • Higher than 100% is currently not supported due to a critical bug.
      • Some FX effects will be unaffected.
      • For lower speeds the offset will be messed up.
  • Start practice
    • Trigger this button to start the practice.
  • Exit
    • Trigger this button to exit the practice mode.

The score will be saved if the following conditions are met:

  • The playback speed is x1.0 (100%)
  • The whole chart is being played
    • The start point is 0
    • The end point is located at or before the start point

Advanced practice mode options

There are four tabs for advanced options.

  • Looping: for setting the start/end points
  • LoopControl: for controlling how the looping is done
  • Mission: for setting missions, where failing it will fail the practice
  • Settings: for setting other options related to gameplay

Examples on using advanced options

  • Grind a chart until PUC
    • Disable "loop on success" and enable "loop on fail".
    • Clear both the start point and the end point".
    • Set the mission to "Grade" and set the relevant value to "PUC".
  • Practice a part, starting from 50% playback speed and increasing it by 10%p upon UCing two times in a row
    • Enable both "loop on success" and "loop on fail".
    • Set the playback speed to "50%".
    • Set the start point and the end point the the position where you want them to be.
    • Enable "Increase speed on success", set the increment to "10%p", and set the streak to "2".
    • Set the mission to "Miss" and set the relevant value to "0".

Looping

You can fine-control the loop points, by specifying the measure number or the timestamp in milliseconds.

LoopControl

You can control what happens when a play is restarted due to looping.

  • Increase speed on success
    • If the last play was not failed, increase the playback speed by given amount.
    • You can specify the increment in %p, and the required amount of streaks.
  • Decrease speed on fail
    • On fail, decrease the playback speed by given amount.
    • You can also specify the minimum speed for this feature.
  • Set maximum amount of rewinding on fail
    • On fail, instead of going back all the way to the start point, go back maximal amount of measures specified.

Mission

You can specify a fail condition, where satisfying it will immediately result in a fail.

Hence, the mission will be avoiding the fail condition.

  • None
  • Score (Score less than)
    • If the max possible score is less than the specified value, then the play will fail.
  • Grade (Grade less taan)
    • If the max possible grade is less than the specified value, then the play will fail.
  • Miss (Miss more than)
    • If the # of misses is above the specified value, then the play will fail.
  • MissAndNear (Miss+Near more than)
    • If the # of misses and nears is above the specified value, then the play will fail.
  • Gauge (Gauge less than)
    • If the gauge is less than the specified value, then the play will fail.
    • Note that this option is only useful when the hard gauge is being used.

Settings

  • Global offset, chart offset
  • Temporary offset
    • You can specify additional offset, which will not be stored.
    • This is intended as a workaround for the offset problem related to setting a low playback speed.
  • Lead-in time for practices
    • You can specify the wait time until the chart appears.
  • Revert to the setup after the result is shown
    • Instead of going back to the song selection scene, revert to the practice setup again.

Skinning

Following scripts are changed.

gameplay.lua

Not updating this file does not heavily affect the features of the practice mode.

  • gameplay table has additional field practice_setup.
    • If this is nil, then the game is not in the practice mode.
    • If this is false, then the game is in the practice mode, and the practice is being played right now.
    • If this is true, then the game is in the practice setup. Note that if this is true, then autoplay is also true.
  • New function: practice_start(mission_type, mission_threshold, mission_description)
    • This is called when the practice is being started.
    • mission_type: current mission type (one of None, Score, Grade, Miss, MissAndNear, and Gauge)
    • mission_threshold: the parameter value for the current mission
    • mission_description: a textual description for the current mission, suitable for displaying
  • New function: practice_end_run(playCount, successCount, isSuccessful, scoring)
    • This is called when a run ("one loop") is finished.
    • playCount, successCount, isSuccessful are self-explationary.
    • scoring is a table containing informations on the current run with the following fields.
      • score, perfects, goods, misses, medianHitDelta, meanHitDelta, medianHitDeltaAbs, meanHitDeltaAbs
      • score changes depending on current score display setting.
  • New function: practice_end(playCount, successCount)
    • This is called when the practice setup is entered again after practicing.

gamesettingsdialog.lua

There are several changes which may affect the practice mode.

  • SettingsDiag has additional fields posX and posY.
    • 0.0: the dialog should be located at the left or top
    • 1.0: the dialog should be located at the right or bottom
  • There is an additional type for settings called "button".