Repository navigation
Releases: xirain/RandomPlaylistMod
Release list
v2.3.4
v2.3.4
Fix: mid-game session interrupt no longer breaks return to main menu
When a session was ended mid-game (long-press B during a level), the summary auto-show logic tried to re-present the RPM FlowCoordinator while the menu UI was still inactive, causing coroutine failures and a broken UI hierarchy that made it impossible to return to the main menu.
- New persistent \SummaryPresenter\ coroutine host defers re-presentation until the main menu UI is actually active again.
- \SessionSummaryView\ now branches: FC active 鈫?show immediately; FC inactive (mid-game) 鈫?defer to \SummaryPresenter.
- Verified in-game: ending a session mid-level returns to the summary screen and allows returning to the main menu.
Full diff: local/level-filter-2.2.0...v2.3.4
v2.2.0
RandomPlaylistMod v2.3.3
v2.3.3 Patch Release
Fix: 结束 session 后总结页面不可见、且无法回退主界面的问题。
修复内容
- 总结页面可见 + 可回退: session 结束后 RPM FlowCoordinator 已被游戏 deactivate,旧逻辑直接在其上弹出总结导致不可见且卡死。现改为先重新 Present 该 FlowCoordinator 再显示总结面板(SessionSummaryView)。
- 避免重复初始化: RandomPlaylistFlowCoordinator.DidActivate 去掉 _isPresented 重复 ProvideInitialViewControllers 判断。
- 歌单列表置顶: 官方 OST / 自定义歌曲虚拟歌单保持列表顶部(上一轮修正,本次一并打包)。
安装
将 RandomPlaylistMod.dll 覆盖到 Beat Saber 实例的 Plugins/ 目录(BS 1.44.0)。
v2.3.1 - 90 degree swing actually works
RandomPlaylistMod v2.3.1 (补丁)
修复 AutoBS 90° 摆动(45/60/90 档)实际不生效的问题。
修复内容
- 特征名映射修正:
ModeToCharacteristic将 45°/60°/90° 映射到 AutoBS 真正的生成特征Generated90Degree(原错误地映射到原生90Degree),否则普通歌曲无此特征导致回退 Standard。 - 起播前注入生成特征:RPM 随机放歌跳过了"菜单选歌"流程,AutoBS 的
SetContent不会为随机歌曲注入Generated90Degree特征、GeneratedToStandardKey映射表也为空。现于起播前反射调用 AutoBS 自身的SetContent.CreateGen360DifficultySet(level),复用其逻辑完成注入,使 90° 生成真正触发。 - 配合已有的
ApplyAutoBSSwingRange(反射写入 AutoBSGenerated90SwingRange),45/60/90 三档摆幅差异生效。
依赖
- AutoBS v1.1.2(已修复 90° 场景旋转生成)
- Beat Saber 1.44.0
附件
- RandomPlaylistMod.dll
v2.3.0 鈥?AutoBS 90掳 swing integration
v2.3.0
核心新增:AutoBS 集成(自动播放 90° 摆头谱)
本版本让 RandomPlaylistMod 的自动播放流程直接借力 AutoBS 模组,
在有限活动空间里也能舒适游玩——无需手动翻找 90° 谱面,任意普通 Standard 歌都能自动生成 90° 摆头版本播放。
前置条件:需另行安装并启用 AutoBS(Enable Generated 90 Maps 开关打开),RandomPlaylistMod 只负责选
90Degree 特征起播,真正的旋转/弧线/墙体增强由 AutoBS 在播放时完成。
UI 新增:AutoBS 模式开关
播放面板在 NPS 行下方新增 AutoBS 模式行,四档按钮:
| 按钮 | 行为 |
|---|---|
Standard |
不指定特征,回退标准播放(不使用 AutoBS) |
45° |
选 90° 特征起播,并令 AutoBS 以 ±45° 摆幅生成 |
60° |
选 90° 特征起播,并令 AutoBS 以 ±60° 摆幅生成(默认) |
90° |
选 90° 特征起播,并令 AutoBS 以 ±90° 摆幅生成 |
360° |
选 Generated360Degree 特征起播(不适合有限空间,保留选项) |
- 45°/60°/90° 三档通过反射写入已安装 AutoBS 的
Config.Generated90SwingRange(不硬引用 AutoBS 程序集;
AutoBS 未安装时仅记日志,不影响 RandomPlaylistMod 自身播放)。 - 摆幅换算:每格 15°,45°→±45°、60°→±60°、90°→±90°(不含转身,适合运动场地)。
行为修正:不再因缺 90° 特征跳过歌曲
早期版本在歌曲菜单特征列表里没有 90Degree 时会整首跳过。现改为回退 Standard 播放——
AutoBS 在歌曲数据加载阶段即生成 90° 特征,歌曲照常播放且下一轮即可命中 90° 生成,避免大量歌被静默跳过。
其他
- 目标 Beat Saber 1.44.0,manifest 版本 2.3.0。
- 运行时硬依赖不变:BSIPA ^4.1.0、SiraUtil ^3.0.0、SongCore ^3.16.0、BeatSaberMarkupLanguage ^1.6.0、
SongDetailsCache ^1.0.0、PlaylistManager ^1.0.0。 - 向后兼容 2.2.0 的播单 / 会话 / NPS 筛选逻辑。
基于分支
local/level-filter-2.2.0,目标 Beat Saber 1.44.0。
v2.1.0
RandomPlaylistMod v2.1.0 Release Notes
🎯 Target: Beat Saber 1.44
- Built and tested against Beat Saber 1.44.0. Development continues on 1.44 (1.40 is no longer maintained).
- Runtime dependencies (manifest
dependsOn): BSIPA^4.1.0, SiraUtil^3.0.0, SongCore^3.16.0, BeatSaberMarkupLanguage^1.6.0, SongDetailsCache^1.0.0, PlaylistManager^1.0.0. - PlaylistManager 需 1.44 兼容版本(推荐使用 1.44 适配 fork
xirain/PlaylistManager@1.44)。
🎮 New: In-Gameplay B Button Controls (手柄/控制器)
- 短按 B(或左手 Y):把当前正在播放的歌曲收藏到
RandomPlaylist Favorites歌单(写入 Beat Saber 的 PlaylistManager 共享歌单目录.../Playlists/RandomPlaylist_Favorites.bplist)。 - 长按 B 约 0.7 秒:直接退出当前随机会话。
- 基于 Unity XR
InputDevices+CommonUsages.secondaryButton检测,后端无关 —— Pico / Index / Quest 等 OpenXR 串流手柄均可使用。 - 新增
GameplayFavoriteInput(关卡场景内挂载)与FavoriteManager(收藏逻辑,依赖 PlaylistManager 的BeatSaberPlaylistsLib)。
🛠️ Fix: 收藏/退出提示可见性
- 原提示用
WorldSpaceCanvas 挂在相机下,被 Beat Saber gameplay 的 HUD(分数/能量条,ScreenSpaceOverlay层)完全遮挡,导致"已收藏"其实成功却看不到。 - 改为
ScreenSpaceOverlay+sortingOrder = 1000(与 HUD 同层且置顶),现在短按收藏会明确在屏幕上方弹出「★ 已收藏「曲名」」,长按退出弹出「已退出随机会话」。
🛠️ Fix: 长按 B 抖动导致几乎不触发退出
- OpenXR 手柄按住 B 期间
secondaryButton状态会抖动(部分帧轮询为 false),旧逻辑每次抖动伪边沿都重置长按计时,导致 0.7s 阈值永远累积不到,长按几乎不触发。 - 修复:长按计时仅在"全新一次按下"时启动,抖动伪边沿不再打断累计;短按加 4 帧(约 0.066s)防抖,避免按住期间抖动误触发收藏。
🧹 Code Quality
- 更新
.gitignore,排除 sibling mod 源码目录(PlaylistManager/、BeatSaber_BetterSongSearch/等)、构建/部署日志与本地工具目录。 - 版本号 2.0.0 → 2.1.0(manifest + csproj 同步)。
📝 Contributors
Installation: Copy RandomPlaylistMod.dll and manifest.json to Beat Saber/Plugins/RandomPlaylistMod/. Make sure PlaylistManager (1.44-compatible), SongCore, SiraUtil, BSML and SongDetailsCache are installed.
RandomPlaylistMod v2.0.0 (Beat Saber 1.44)
RandomPlaylistMod v2.0.0 Release Notes
🎯 Target: Beat Saber 1.44
- v2.0 is built and tested against Beat Saber 1.44.0. Development continues on 1.44 (1.40 is no longer maintained).
- Runtime dependencies (manifest
dependsOn): BSIPA^4.1.0, SiraUtil^3.0.0, SongCore^3.16.0, BeatSaberMarkupLanguage^1.6.0, SongDetailsCache^1.0.0, PlaylistManager^1.0.0. - PlaylistManager 需 1.44 兼容版本(推荐使用 1.44 适配 fork
xirain/PlaylistManager@1.44)。
🚀 New: Beat Saber 1.44 Compatibility (core startup fix)
- Problem fixed: On 1.44, clicking Start Session froze / immediately ended because
MenuTransitionsHelper.StartStandardLevelwas called with a non-nullbeatmapLevelDatawhile_beatmapLevelsModelis injected (the two are mutually exclusive inGameplayCoreSceneSetupData). - New behavior:
PlaySessionManager.StartLevelnow passesbeatmapLevelData = nulland lets the game load viaBeatmapLevelsModel— the standard menu-launch path. Custom songs and OST official songs both work. - Removed the now-unneeded
IBeatmapLevelLoader/ResolveBeatmapLevelDataworkaround that masked the real exception.
📊 New: Session Summary (end-of-session info display)
- When a session ends (time up or End Session), a Session Summary screen shows the results: total songs played, total play time, score/exercise summary, and the list of songs played.
- Includes
ExerciseSummary/PlayerProfile/SessionRecord/SongResultmodels backing the summary.
🕘 New: Session History
- Added a History view listing past sessions, so you can review what you played and how each session went.
- Backed by
HistoryManager(session records persisted) andHistoryView.
🖼️ New: Share Image Generator
ShareImageGeneratorproduces a shareable summary image of a finished session (for social sharing).
🧹 Code Quality
- Removed an unused
BS_Utilsproject reference (no code usage). - Updated
manifest.jsonauthor toxirainandgameVersionto1.44.0.
📝 Contributors
Installation: Copy RandomPlaylistMod.dll and manifest.json to Beat Saber/Plugins/RandomPlaylistMod/. Make sure PlaylistManager (1.44-compatible), SongCore, SiraUtil, BSML and SongDetailsCache are installed.
v1.7.0
v1.6.0
v1.5.0
v1.5.0 发布说明
🆕 新功能
- 官方歌曲支持:Beat Saber 官方歌曲(Official Levels)现在作为一个虚拟播放列表出现在可选列表中,可以和自定义播放列表一起随机播放
- HUD 世界空间渲染:HUD 不再跟随头部转动,固定在 VR 世界空间中,始终面朝玩家
- HUD 显示开关:新增 HUD 显示/隐藏切换按钮,玩家可自由控制 HUD 可见性
🐛 Bug 修复
- 修复计时显示问题:修复 HUD 计时器在某些情况下显示异常的问题
📦 安装方法
- 下载 RandomPlaylistMod.dll 和 manifest.json
- 将 RandomPlaylistMod.dll 放入 Beat Saber 的 Plugins 文件夹
- 将 manifest.json 放入 Plugins/RandomPlaylistMod 文件夹(如果不存在则创建)
- 启动游戏