wiki

故事板编写一般规则

一个编写 .osb 脚本的例子。一个编写 .osb 脚本的例子。

本指南会描述 .osb 或 .osu 文件中,[Events] 部分下的代码。谱面 .osb 文件中的命令,所有难度都会使用;而 .osu 文件中的命令只由对应难度使用。

基本规则

对象

对于 osu! 模式与作图时的物件,参见:打击物件

故事板对象指的是故事板中精灵图或动画的实例。故事板也可以播放声音,请阅读音频指南获取详情。

可以使用 PNG 与 JPEG 格式的图片作为对象。JPEG 格式是有损的,意味着文件较小,不会精确存储每个像素,也不支持透明。因此,这种格式适用于背景图片、方形图像与自然图像。PNG 格式是无损的,意味着它会保留每个像素的信息,但文件会比 JPEG 大。PNG 格式支持透明,因此通常是叠加在其他图像之上的对象或显示文本的最佳选择。

引擎会使用命令处理动态图片,因此请勿使用 PNG 格式的多图层或动态图片功能。相反地,你应该将动态图片包含的每一帧图像保存为单一文件,并且在文件的扩展名的点之前加一个数字,来让引擎按顺序播放动画(比如,对于包含两帧的动态图片 “sample.png”,可改名为 “sample0.png” 与 “sample1.png”)。

屏幕大小

编辑器屏幕大小。绿色区域对应屏幕大小,红色对应游玩区域编辑器屏幕大小。绿色区域对应屏幕大小,红色对应游玩区域

编辑器屏幕大小为 640 x 480 像素,常规游玩区域大小为 510 x 385 像素。

坐标使用数值指定,X 轴正方向向Y 轴向,原点 (0,0) 位于屏幕左上角。也可以指定这个范围外的坐标(比如让精灵图从屏幕外进入屏幕)。

编辑器坐标:

屏幕 x y
编辑器 0–640 0–480
游玩区域 60–570 55–440

图层

所有故事板精灵图都位于皮肤与打击物件下层。因此,即使是故事板中“最高”的层(前景层)也会显示在血条、物件与光标等等下方。

一共有四个故事板层,按优先级从低到高排序:

  • 背景层
  • 失败层(仅在玩家处于“失败状态”时显示,见下文的游戏状态
  • 通过层(仅在玩家处于“通过状态”时显示,见下文的游戏状态
  • 前景层

注意与“设计”标签页中所示不同,“失败”与“通过”层不会同时出现。

默认情况下,谱面指定的预览背景(可在选歌界面中看到的背景)置于所有四层下面。然而,如果相同的背景文件被引用为故事板中的对象,则在谱面加载后会立即消失。通常会将谱面的预览背景图指定为(时间与精灵图上)第一个对象,并使用“渐隐”(变亮)命令将背景“引进”给玩家。

重叠规则

  • 不同层重叠的对象会按上述顺序绘制(例如,位于前景层的所有对象都会显示在其他三层上面)。
  • 同一图层重叠的对象会按指定的顺序绘制(例如,如果对象 1 先在 .osb 或 .osu 文件中被指定,其后是对象 2,二者处于同一图层,则对象 2 会显示在对象 1 上层)。
  • .osb 文件中命令的优先级高于 .osu 文件中的命令,正如 .osb 文件的命令附加到 .osu 文件末尾一般。这不会覆盖上述提及四层的规则。看看这个例子

游戏状态

使用故事板而非视频文件的想法,来自**动态更改元素,使之与游玩情况匹配的能力。**取决于玩家的表现状况,osu! 一次只会显示失败或通过层之一。这两个状况被称作“失败状态”与“通过状态”。

游玩时间前(如第一个圆圈/滑条/转盘前,不一定在 MP3/OGG 音频开始播放前)的状态:

  • 总处于通过状态,不会显示失败层。不推荐在这里使用通过或失败层,因为在此时认为玩家“通过”毫无意义。

游玩期间(“掉血时间”,玩家需要点击物件,防止血量下降)的状态:

  • 当处于第一个颜色连击,或前一个连击末尾获得“激”(或“精英节拍!”(EBA 中的判定,连击中全部获得 300))时,处于通过状态。
  • 除了以上的情况之外,均为失败状态。注意与 DS 游戏(有三个状态)不同,“喝”(或“击中!”(EBA 中的判定))判定没有对应的状态。
    • osu!taiko 中,玩家最后一个物件得 MISS 时为失败状态,否则为通过状态。
    • osu!catch 中,总会使用前一休息时段的状态。首个可玩区段期间总处于通过状态。

休息时段(游玩时段之间)的状态:

  • 当上一游玩时段结束时血条过半,则为通过状态(即出现“O”符号)。
  • 否则为失败状态(即出现“X”符号)。
    • osu!taiko 中,在一定时间点达到一定限额时。参考以下两个例子:
      • 示例一:血条仍处于 40% 时准确率为 96.5% 可获得“通过”而非“失败”。
      • 示例二:在大约 30 个物件中得到太多 100,以及血条仍约处于 30% 时获得 D 评价,会导致“失败”(此情况参见ZUN - Maiden's Cappricio ~ Dream Battle)。

若谱面至少有一个休息时段,在上一游玩时间后的状态:

  • 若至少一半休息时段处于通过状态,则是通过状态。
  • 否则为失败状态。

若谱面没有休息时段,在上一游玩时间后的状态:

  • 与休息时段期间相同。

时间

用 CTRL+C 复制时间戳。用 CTRL+C 复制时间戳。

  • 时间从谱面主要音频文件 (.mp3/.ogg) 起始处开始,以毫秒为单位(1000 毫秒 = 1 秒),也可以用负值表示片头。
  • 故事板的时间与谱面本身的计时设置(如小节数、每分钟拍数)无关。因此,推荐你在制作故事板前就将谱面的时间轴测好,因为这些设置日后会更难调整。
  • 时间不受歌曲长度限制。歌曲开始前(片头)事件的时间可以使用负值,事件也可以使用游玩部分与音频文件结束后的时间(片尾)。
  • 当被加载后,谱面会从指定的最早事件与时间 0 中,较早的时间点开始。
    • 在前一种情况下,会向用户显示跳过按钮。点击按钮或按下空格后会跳转到时间 0,此时游戏转而使用正常的谱面前跳转行为(例如再点一次跳过会直接跳转到倒计时 - 与《精英节拍特工》中不同,后者在重玩谱面时会将玩家带回最起点,而不是时间 0)。
  • 在最后一个事件发生后,或用户点击跳过按钮或按下空格键时,游戏会转场到结算界面
    • 通过与失败层的事件包含在内,无论会显示哪一个。
      • 例如:失败层故事板在时间 20000 处结束,通过层在 25000 处结束,则即使玩家处于失败状态(所有对象消失了),游戏也会等待到时间 25000。因此,最好的办法是确保两层故事板结束的时间都相同。
    • 用户提前跳转到结算界面时,事件依然会继续进行,也可以听到故事板播放的声音。
  • 当使用谱面编辑器的“设计”标签页时,会以毫秒为单位显示当前时间。按下 Ctrl + C 可将时间复制到剪贴板。

注释

可以添加 C 语言样式的单行注释,但请注意,当在游戏内编辑器保存谱面时,注释可能会被移除。默认情况下,有几条注释会建议你将命令按四层分开写。

// 这是一条注释。

与 C/C++/C#/Java 中的注释不同,注释不能与有效命令放在同一行。也无法在脚本中使用块注释。