BepInEx 5.x mod for Bits & Bops that adds chart subtitles loaded from .bop / .riq archives (or extracted chart folders).
- Install BepInEx 5.x by following the BepInEx installation guide.
- Download
BopSubtitleReader.dllfrom the latest release. - Place
BopSubtitleReader.dllin<GameRoot>/BepInEx/plugins/. - Launch the game.
Add one or more files inside your chart archive/folder:
subtitles.en.srtsubtitles.ja.srtsubtitles.es.asssubtitles.jsonsubtitles.en.json
Supported filename patterns:
subtitles.<lang>.<ext>subtitles.<ext>subtitle.<lang>.<ext>lyrics.<lang>.<ext>
Supported extensions:
.srt.ass/.ssa(supports styling / karaoke timing).json(custom format based on beats, best for rhythm precision)
<lang> should be an ISO-like code such as en, ja, fr, pt-br.
Use standard .srt files exported from common subtitle tools. SRT is time-based.
ASS/SSA is supported, with V4 ScriptType, and 1920x1680 resolution.
Supported karaoke tags: \k, \K, \kf, \ko.
Supported style inputs:
- style defaults from
[V4+ Styles]/[V4 Styles]:Fontname,Fontsize,PrimaryColour,Bold,Italic,Alignment - per-line override tags:
\fn,\fs,\c,\1c,\b,\i,\an
These tags are mapped onto the TMP overlay (font size, color, bold/italic, alignment). Unsupported ASS drawing/effect tags are ignored.
This is a custom subtitle format - it allows for timing subtitles to beats of the song (respects BPM changes).
Single-track:
{
"language": "en",
"cues": [
{
"startBeat": 12.0,
"endBeat": 16.0,
"text": "Ready, set, go!"
},
{
"startBeat": 20.0,
"endBeat": 24.0,
"text": "Bounce with me",
"karaoke": [
{ "beat": 20.0, "text": "Bounce" },
{ "beat": 22.0, "text": "with me" }
]
}
]
}Multi-track:
{
"defaultLanguage": "en",
"tracks": {
"en": [
{ "startBeat": 12, "endBeat": 16, "text": "Ready, set, go!" }
],
"ja": [
{ "startBeat": 12, "endBeat": 16, "text": "よーい、スタート!" }
]
}
}Language resolution order:
PreferredLanguage(if set)- game language (if
UseGameLanguage=true) en(ifFallbackToEnglish=true)defaultLanguagefrom subtitle catalog (ifFallbackToDefaultTrack=true)
Config file location:
<GameRoot>/BepInEx/config/BopSubtitleReader.cfg
| Key | Type / Values | What it does |
|---|---|---|
Enabled |
true/false |
Master toggle for all subtitle rendering. |
PreferredLanguage |
string | Force a language code like en, ja, fr. Leave empty to use automatic language resolution. |
UseGameLanguage |
true/false |
If true, attempts to use the game's current language. |
FallbackToEnglish |
true/false |
If selected language is missing, tries English (en). |
FallbackToDefaultTrack |
true/false |
If selected language and English are missing, uses subtitle catalog defaultLanguage. |
KaraokeEnabled |
true/false |
Enables karaoke timing effects when karaoke segment data exists. |
UseAssStyles |
true/false |
If true, ASS/SSA style defaults and inline style tags are applied. If false, ASS styles are ignored and display uses the values from [SubtitleDisplay]. |
These are the base display settings used by the TMP subtitle overlay.
| Key | Type / Values | What it does |
|---|---|---|
FontName |
string | Preferred font name. Leave empty to use the mod's default TMP font selection. |
FontSize |
float | Default subtitle text size. |
ColorHexRgba |
color string | Default text color in #RRGGBBAA. |
SecondaryColorHexRgba |
color string | Default secondary karaoke color in #RRGGBBAA (pre-highlight color for karaoke tags). |
OutlineColorHexRgba |
color string | Default outline color in #RRGGBBAA. |
OutlineWidth |
float | Default outline thickness. |
Bold |
true/false |
Render subtitles in bold by default. |
Italic |
true/false |
Render subtitles in italic by default. |
Alignment |
1..9 |
ASS numpad alignment (1 bottom-left, 2 bottom-center, 3 bottom-right, 4 mid-left, 5 center, 6 mid-right, 7 top-left, 8 top-center, 9 top-right). |
- Copy
BopSubtitleReader/BopSubtitleReader.user.props.exampletoBopSubtitleReader/BopSubtitleReader.user.props. - Set
GameRootinBopSubtitleReader/BopSubtitleReader.user.propsto your Bits & Bops install path. - Build with
dotnet build BopSubtitleReader.sln.
Derived paths:
BepInExPluginsDir = <GameRoot>/BepInEx/pluginsUnityManagedDir = <GameRoot>/Bits & Bops_Data/Managed
If BepInExPluginsDir exists, build output is copied there automatically.
Formatting, code style rules and analyzer rules are enforced on pull requests. To enable auto-format on commit locally, run the attached script once after cloning the repository.
Windows:
scripts/setup-git-hooks.batLinux/macOS:
./scripts/setup-git-hooks.sh