Skip to content

Releases: xirain/RandomPlaylistMod

v2.3.4

Choose a tag to compare

@xirain xirain released this 26 Aug 05:47

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

Choose a tag to compare

@xirain xirain released this 12 Aug 03:56

v2.2.0

本版本唯一改动:NPS 筛选范围调整。

  • 单选三档:Any / 3-8 / 8+
  • 范围放宽,可玩曲目更多(3-8、8+ 均覆盖;未知 NPS 曲目自动放行)
  • 无其他功能改动或依赖变化,向后兼容 2.1.0 的播单 / 会话逻辑

基于自用特别分支 local/level-filter-2.2.0,目标 Beat Saber 1.44.0。

RandomPlaylistMod v2.3.3

Choose a tag to compare

@xirain xirain released this 21 Aug 01:46

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

Choose a tag to compare

@xirain xirain released this 19 Aug 22:12

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(反射写入 AutoBS Generated90SwingRange),45/60/90 三档摆幅差异生效。

依赖

  • AutoBS v1.1.2(已修复 90° 场景旋转生成)
  • Beat Saber 1.44.0

附件

  • RandomPlaylistMod.dll

v2.3.0 鈥?AutoBS 90掳 swing integration

Choose a tag to compare

@xirain xirain released this 17 Aug 06:28

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

Choose a tag to compare

@xirain xirain released this 30 Jul 05:31

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: 收藏/退出提示可见性

  • 原提示用 WorldSpace Canvas 挂在相机下,被 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)

Choose a tag to compare

@xirain xirain released this 22 Jul 01:24

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.StartStandardLevel was called with a non-null beatmapLevelData while _beatmapLevelsModel is injected (the two are mutually exclusive in GameplayCoreSceneSetupData).
  • New behavior: PlaySessionManager.StartLevel now passes beatmapLevelData = null and lets the game load via BeatmapLevelsModel — the standard menu-launch path. Custom songs and OST official songs both work.
  • Removed the now-unneeded IBeatmapLevelLoader/ResolveBeatmapLevelData workaround 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 / SongResult models 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) and HistoryView.

🖼️ New: Share Image Generator

  • ShareImageGenerator produces a shareable summary image of a finished session (for social sharing).

🧹 Code Quality

  • Removed an unused BS_Utils project reference (no code usage).
  • Updated manifest.json author to xirain and gameVersion to 1.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

Choose a tag to compare

@xirain xirain released this 11 Jun 23:50

v1.7.0

变更摘要

  • 修复歌单选择后列表自动滚动回顶部的问题
  • 新增已选歌单数量实时显示
  • 提升歌单列表高度,减少滚动需求
  • 优化布局,改进选择体验

v1.6.0

Choose a tag to compare

@xirain xirain released this 09 Jun 01:20

v1.6.0 发布说明

🆕 新功能

  • 官方歌曲(OST)虚拟播放列表:正式支持 Beat Saber 官方原声歌曲作为独立播放列表,可与自定义歌曲混合同步随机播放

📦 安装方法

  1. 下载 RandomPlaylistMod.dll 和 manifest.json
  2. 将 RandomPlaylistMod.dll 放入 Beat Saber 的 Plugins 文件夹
  3. 将 manifest.json 放入 Plugins/RandomPlaylistMod 文件夹
  4. 启动游戏

v1.5.0

Choose a tag to compare

@xirain xirain released this 05 Jun 02:28

v1.5.0 发布说明

🆕 新功能

  • 官方歌曲支持:Beat Saber 官方歌曲(Official Levels)现在作为一个虚拟播放列表出现在可选列表中,可以和自定义播放列表一起随机播放
  • HUD 世界空间渲染:HUD 不再跟随头部转动,固定在 VR 世界空间中,始终面朝玩家
  • HUD 显示开关:新增 HUD 显示/隐藏切换按钮,玩家可自由控制 HUD 可见性

🐛 Bug 修复

  • 修复计时显示问题:修复 HUD 计时器在某些情况下显示异常的问题

📦 安装方法

  1. 下载 RandomPlaylistMod.dll 和 manifest.json
  2. 将 RandomPlaylistMod.dll 放入 Beat Saber 的 Plugins 文件夹
  3. 将 manifest.json 放入 Plugins/RandomPlaylistMod 文件夹(如果不存在则创建)
  4. 启动游戏