Skip to content

ramonchi5/SplitDetail

Repository files navigation

SplitDetail - LiveSplit Component

SplitDetail is a compact, subsplit-aware LiveSplit component that shows timing details for the current split group, current segment/subsplit, previous split group, or previous segment/subsplit.

It is designed for runners who use Subsplits and want cleaner timing information than LiveSplit's default Detailed Timer / Previous Segment combination can provide.


What it does

SplitDetail can be added multiple times to a layout. Each instance can use a different mode.

Mode What it shows
Current Split The live elapsed time of the current parent split group, plus comparison times such as PB: and Best:.
Current Seg. The live elapsed time of the current individual segment/subsplit, plus comparison times such as PB: and Best:.
Prev Split The last completed parent split group: actual time on the right, comparison deltas in the middle.
Prev Seg. The last completed individual segment/subsplit: actual time on the right, comparison deltas in the middle.

When a prior-mode component detects that the current active split or segment is losing time, it can temporarily switch to a live display:

Normal display Live display Meaning
Prev Split Live Split Shows live deltas for the current active split group.
Prev Seg. Live Seg. Shows live deltas for the current active segment/subsplit.

If Use split/seg. name is enabled, the live display uses the active split or segment name instead of Live Split / Live Seg..

After the runner splits, the component returns to the normal previous-completed display.


Example layouts

A common setup is to add SplitDetail three times:

Current Split    PB:   1:46.67        1:20.99
                 Best: 1:36.97
Prev Seg.        -16.49  -16.41       1.04
Prev Split       +3m     +3:11        4:48.35

You can also use only one instance, for example as a more configurable replacement for Previous Segment.


Features

  • Subsplit-aware parent split group detection.
  • Current Split, Current Seg., Prev Split, and Prev Seg. modes.
  • Temporary live display when the active split or segment is losing time.
  • One-comparison or two-comparison display.
  • Fully selectable comparisons, including custom LiveSplit comparisons.
  • Priority delta setting for tight layouts.
  • Optional separator between deltas.
  • Configurable middle-column position.
  • Optional per-instance plain, vertical, horizontal, and delta-colored backgrounds.
  • Optional rounded background corners.
  • Fixed three-column layout for split/segment names, with optional auto-fit behavior.
  • Configurable accuracy: seconds, tenths, hundredths, milliseconds.
  • Automatic cleanup for Subsplits names when using split/segment names.
  • Compact shortening behavior for large deltas.
  • Gold delta coloring for new bests.
  • LiveSplit-style text shadows and outlines.
  • Bold controls for the left, middle, and right columns.
  • Dynamic Layout Editor names, such as Split Detail - Current Split and Split Detail - Current Seg..
  • Appears under Information in the Layout Editor component picker.

Settings

Mode & Labels

Setting Default Description
Mode Current Split Chooses what this instance displays.
Label mode default Label used by the selected mode. Previous modes switch the prefix to Live while showing live data unless split/segment names are enabled.
Use split/subsplit name off Use the active or previous split/subsplit name instead of the custom label. Subsplit names drop leading {Group} tags and -; split names like {Tutorial}5/5 Genji display as Tutorial.
Full size comparison/delta off When enabled, split/subsplit names use automatic column sizing so comparison and delta text keeps more room. When off, names use fixed thirds: name, comparison block, time.
Abbreviation method End ellipsis Choose how names shorten when they do not fit: add ... at the end, or remove leading parts one by one before ellipsis.
Always remove leading numbers off Removes leading numbered name parts such as 2/5 whenever split/subsplit names are shown, even when the name already fits.

The mode menu uses full names, such as Previous Segment, while the default row labels stay compact, such as Prev Seg..

Comparisons

Setting Default Description
Comparison 1 Current Comparison First comparison used for Current mode values and prior/live deltas. Current Comparison follows LiveSplit's active comparison if the runner changes it.
Comparison 2 Best Segments Second comparison used when showing two comparisons.
Show comparisons 2 (both) Choose one or two comparison values/deltas.
Priority delta Comparison 2 Which delta is preserved first when horizontal space is tight.

Comparison choices are read from the active run, so custom comparisons can be used.

Layout

Setting Default Description
Separator empty Optional separator between deltas. Empty means no separator.
Move Middle Column 5 Moves the comparison/delta area to the right. In fixed name columns, this is left padding inside the middle column and can move up to the safe gap before the right-side time value.
Background Color disabled, transparent plain Adds a component background when enabled. Gradients can use 2 or 3 colors. Delta modes use LiveSplit's current comparison for the color.
Radius 0 Rounds the component background corners. Can apply to all, top, or bottom corners.

Examples:

Separator empty: +1.21 +1.11
Separator |:     +1.21 | +1.11
Separator dot:   +1.21 . +1.11

Accuracy

Setting Description
Seconds No decimals.
Tenths One decimal.
Hundredths Two decimals.
Milliseconds Three decimals.

When space is tight, SplitDetail shortens values while keeping them readable. For example:

+57.530 -> +57.53 -> +57.5 -> +57
+3:11   -> +3m
+1:02:30 -> +1h

It avoids unreadable forms such as +3: or a lone +.

Colors

Setting Description
Text Color Label color.
Time Color Right-side time and Current mode comparison value color.
Comparison 1 Optional custom color for the first comparison label, such as PB:.
Comparison 2 Optional custom color for the second comparison label, such as Best:.
Delta 1 Optional custom color for the first prior/live delta.
Delta 2 Optional custom color for the second prior/live delta.

Delta colors follow LiveSplit's ahead/behind colors unless a delta-specific color is enabled. Gold deltas still use the layout's gold/best-segment color where available.

Font

Setting Description
Left bold Toggles bold for the label or split-name column.
Middle bold Toggles bold for the comparison/delta column.
Right bold Toggles bold for the timer/value column.

Subsplits convention

SplitDetail detects subsplit groups using the same naming convention as LiveSplit's Subsplits component:

-Room 1      <- child subsplit
-Room 2      <- child subsplit
Castle       <- parent split group/header

A child subsplit starts with -. The parent/header does not.

If your splits use a different prefix, change this constant in SplitDetailComponent.cs:

private const string SubsplitPrefix = "-";

If a run does not use subsplits, every segment is treated as its own group.


Installation

  1. Build the project in Release mode.
  2. Copy the compiled SplitDetail DLL:
bin\Release\LiveSplit.SplitDetail.dll

into your LiveSplit Components folder.

  1. Optional, but recommended for the full SplitDetail layout: install the separate companion timer:
LiveSplit.AlternativeTimer.dll

into the same LiveSplit Components folder. Alternative Timer removes the segment timer area, keeps the run timer plus current split name, and can display a leading 1/5 segment counter as a separate label.

  1. Restart LiveSplit.
  2. Open Layout Editor.
  3. Add Split Detail from Information.
  4. If using the companion timer, add Alternative Timer from Timer.

Building from source

Requirements

  • Visual Studio 2022 recommended.
  • .NET Framework 4.8 Developer Pack.
  • LiveSplit installed, or the required LiveSplit DLL references available in the project's packages folder.

Steps

  1. Open SplitDetail.csproj in Visual Studio.
  2. Make sure the references resolve:
    • LiveSplit.Core.dll
    • UpdateManager.dll
  3. Build in Release mode.
  4. Copy LiveSplit.SplitDetail.dll to LiveSplit's Components folder.

If references do not resolve automatically, add them manually through:

References -> Add Reference -> Browse

and select the DLLs from your LiveSplit installation or local packages folder.


Development notes

Important areas in SplitDetailComponent.cs:

Function Purpose
GetGroupRange(...) Detects parent split groups from subsplit names.
GetCurrentGroupRange(...) Finds the active parent split group.
GetPriorGroupRange(...) Finds the last completed parent split group.
GetPriorSubsplitIndex(...) Finds the last completed individual segment.
GetCompletedRangeTime(...) Gets actual time for a completed range.
GetActiveRangeTime(...) Gets live elapsed time for an active range.
GetComparisonRangeTime(...) Gets comparison time for any range.
CalcCurrentSplit(...) Display logic for Current Split and Current Seg. modes.
CalcPriorRange(...) Display logic for Prev/Live Split and Prev/Live Seg.
DrawRow(...) Main row layout and drawing entry point.
DrawTextWithEffects(...) LiveSplit-style shadows/outlines without clipping.
DrawTextWithEffectsClipped(...) Draws text with effects while preventing column overlap.
ShortenDeltaToFit(...) Compact delta text shortening for tight layouts.

The text drawing helpers are intentionally custom. Plain Graphics.DrawString can clip LiveSplit-style shadows/outlines on letters like p, g, and y.


Recommended testing checklist

Before publishing a new build, test:

  • Current Split mode.
  • Current Seg. mode.
  • Prev Split mode.
  • Prev Seg. mode.
  • Live Split switching when losing time.
  • Live Seg. switching when losing time.
  • One-comparison mode.
  • Two-comparison mode.
  • Priority Delta = Comparison 1.
  • Priority Delta = Comparison 2.
  • Separators empty, |, /, and dot.
  • Accuracy: seconds, tenths, hundredths, milliseconds.
  • Runs with no subsplits.
  • Runs with multiple subsplits per parent group.
  • Game Time and Real Time, if applicable.
  • Missing comparison values / skipped splits.

Credits / Third-Party Notices

SplitDetail is a custom component for LiveSplit.

LiveSplit is licensed under the MIT License. Copyright (c) 2013 Christopher Serr and Sergey Papushin.

Some implementation patterns, including component structure, comparison handling, layout settings integration, and rendering behavior, were developed with reference to LiveSplit and existing LiveSplit components.

Alternative Timer is maintained separately at https://github.com/ramonchi5/AlternativeTimer and is the recommended optional companion for SplitDetail. It is not an official LiveSplit release.

For more details, see THIRD_PARTY_NOTICES.md.


License

SplitDetail is licensed under the MIT License. See LICENSE.txt.

LiveSplit and related LiveSplit assemblies are licensed separately. See THIRD_PARTY_NOTICES.md.

About

Subsplit and Split Groups aware component that does what Detailed Timer and Previous Segment do for normal Splits, as well as showing their section time

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages