rd.rdlevel.cn/pages/moreoneshotbeats.md
OLDREDSTONE 318bbf3be2 new
2025-06-01 11:35:11 +08:00

374 lines
17 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 单发拍子的衍生节奏型
## 单发拍子进阶用法
本小节的内容可能会稍显冗长和晦涩,希望大家能保持耐心多多琢磨。
我们前面说过,护士提示的 Rea 和 Get 对应脉冲Dy 和 Set 对应按拍Go 代表单发拍开始,这种规则当然不仅仅适用于普通单发拍。先来看一个简单的摇摆单发拍:
```rdview 11 3
es.SayReadyGetSetGo_Get 1[];
es.SayReadyGetSetGo_Set 2.5[];
es.SayReadyGetSetGo_Go 5[];
eb.AddOneshotBeat 5 1[loop=1,tick=1.5,interval=4];
```
可以看到,虽然 Get-Set 与 Set-Go 之间的间隔不同,但依然保持了上述的对应关系。实际上,这就是`4-4`使用的单发拍子。
在`2-3`中也出现了摇摆单发拍子,可以试着自己理解一下这关的单发拍子提示:
```rdview 10 2
eb.AddOneshotBeat 1[];
eb.AddOneshotBeat 3[];
eb.AddOneshotBeat 5[tick=0.75];
eb.AddOneshotBeat 6[tick=0.75];
eb.AddOneshotBeat 7[tick=0.75];
eb.AddOneshotBeat 8[tick=0.75];
```
如果我们在此基础上更进一步,会发生什么呢?来看看`4-4N`中出现过的这段单发拍子:
```rdview 12 4
g 1 1 4 2[offset=4]{
es.SayReadyGetSetGo_Rea 0 0[];
es.SayReadyGetSetGo_Dy 0.75 1[];
es.SayReadyGetSetGo_Get 1.5 0[];
es.SayReadyGetSetGo_Set 2.25 1[];
es.SayReadyGetSetGo_Go 4 0[];
g 0 -1 0.75 3 #0f8[]{};
g 1.5 -1 0.75 3 #0f8[]{};
g 4 -1 0 3 #0f8[]{};
};
eb.AddOneshotBeat 5[tick=0.75];
eb.AddOneshotBeat 6.5[tick=0.75];
eb.AddOneshotBeat 9[tick=0.75];
eb.AddOneshotBeat 10.5[tick=0.75];
```
可以看到,图中的单发拍子已不再局限于一个单发拍子不断重复了,而是变成了若干个单发拍子构成的单发拍子组的不断重复,但前面讲过的与护士提示之间的对应关系仍保持不变。由此我们可以得到单发拍子的核心规则:
单发拍子本质上是对一段节奏(循环节)的不断重复,这段节奏可以由一个或多个单发拍子构成。在单发拍子开始之前,会使用护士提示,以 Rea、Dy、Get、Set 的形式,重复一次(或多次)这段单发拍子循环节,并在最后用 Go 表示单发拍子的开始。
当对一段较为复杂的单发拍子进行提示的时候,由于循环节由多个单发拍组成,护士必然会提示多个脉冲和按拍的位置,这时仍然需要遵循只在最后一对脉冲和按拍处使用 Get Set其余部分均使用 Rea Dy。
```rdview 13 4
g 1 1 4 2[offset=4]{
es.SayReadyGetSetGo_Rea 0 0[];
es.SayReadyGetSetGo_Dy 1 0[];
es.SayReadyGetSetGo_Rea 2 0[];
es.SayReadyGetSetGo_Dy 2.5 1[];
es.SayReadyGetSetGo_Get 3 0[];
es.SayReadyGetSetGo_Set 3.5 1[];
es.SayReadyGetSetGo_Go 4 0[];
g 0 -1 1 2 #0f8[]{};
g 2 -1 0.5 3 #0f8[]{};
g 3 -1 0.5 3 #0f8[]{};
g 4 -1 0 3 #0f8[]{};
};
eb.AddOneshotBeat 5[];
eb.AddOneshotBeat 7[tick=0.5];
eb.AddOneshotBeat 8[tick=0.5];
eb.AddOneshotBeat 9[];
eb.AddOneshotBeat 11[tick=0.5];
eb.AddOneshotBeat 12[tick=0.5];
```
当你不确定一段单发拍提示是否正确时,可以把这段单发拍提示向后复制几份,首尾相连,如果发现所有的 Dy 和 Set 均对齐了按拍时机,就说明单发拍提示是正确的。
## 复杂脉冲
正如`2-1`所说的那样,单发拍子的脉冲位置并不重要,只要保证按拍位置不变,脉冲位置是可以任意变化的。
同时,一个单发拍子也可能拥有不止一个脉冲。若要实现这种效果,只需将几个单发拍子的尾端对齐,首端放在不同位置即可。
以下单发拍子均是合法的:
```rdview 9 2
eb.AddOneshotBeat 1[];
eb.AddOneshotBeat 3[];
eb.AddOneshotBeat 3.5[tick=0.5];
eb.AddOneshotBeat 4.75[tick=1.25];
eb.AddOneshotBeat 5[];
eb.AddOneshotBeat 5.75[tick=0.25];
eb.AddOneshotBeat 7.5[tick=0.5];
```
![](../images/moreoneshotbeats-farmer.gif)
但这样一来前面所说的“Rea、Get 对应单发拍脉冲”就没有意义了吗其实不然Rea、Get 的作用如下:
1. 护士提示的第一个词必然是 Rea 或 Get也就意味着这个词代表单发拍子循环节的开始与末尾的 Go 对应。
2. Rea、Get 可以辅助玩家掌握单发拍子的节奏型。在实际游玩中,玩家通常是会以 Rea、Get 为基础来进行单发拍子的演奏的。所以通常要使 Rea、Get 契合音乐或节拍设计,来达到方便玩家记忆或丰富游戏体验的效果。
举个例子Rea-Dy-Get-Set-Go 与 Rea-Dy--GetSet-Go尽管两者的按拍时机相同但不同的 Rea、Get 位置会给人带来不同的游玩体验。
```rdview 12 6
eb.AddOneshotBeat 5[];
eb.AddOneshotBeat 7.5[tick=0.5];
eb.AddOneshotBeat 9[];
eb.AddOneshotBeat 11.5[tick=0.5];
g 1 1 4 1 [offset=4]{
es.SayReadyGetSetGo_Rea 0[];
es.SayReadyGetSetGo_Dy 1[];
es.SayReadyGetSetGo_Get 2.5[];
es.SayReadyGetSetGo_Set 3[];
es.SayReadyGetSetGo_Go 4[];
g 0 -1 1 2 #0f8[]{};
g 2.5 -1 0.5 2 #0f8[]{};
g 4 -1 0 2 #0f8[]{};
};
eb.AddOneshotBeat 5 3[];
eb.AddOneshotBeat 7 3[];
eb.AddOneshotBeat 9 3[];
eb.AddOneshotBeat 11 3[];
g 1 4 4 1 [offset=4]{
es.SayReadyGetSetGo_Rea 0[];
es.SayReadyGetSetGo_Dy 1[];
es.SayReadyGetSetGo_Get 2[];
es.SayReadyGetSetGo_Set 3[];
es.SayReadyGetSetGo_Go 4[];
g 0 -1 1 2 #0f8[]{};
g 2 -1 1 2 #0f8[]{};
g 4 -1 0 2 #0f8[]{};
};
```
## 跳过单发拍子
游戏在`2-1N`中引入了一种全新的单发拍子机制:跳过单发拍子。这种单发拍子的规则很简单:跳过单发拍子之后的一次单发拍子按拍会被跳过。跳过单发拍子无需手动添加提示,只需在单发拍子修饰符中选择跳过单发拍子,相关的视效与音效提示会被自动添加到关卡中。
当然,在被跳过的单发拍子的这段空白时间里,也可以放置多个单发拍子脉冲,以丰富谱面的节奏设计。跳过拍子的“间隔”参数会影响跳过符号的动画时长。
需要注意的是,跳过单发拍子会跳过下一次**击拍**,而不是下一个循环节。
```rdview 7 4
eb.AddOneshotBeat 1[type=skipshot];
eb.AddOneshotBeat 5[];
eb.AddOneshotBeat 1 2[type=skipshot];
eb.AddOneshotBeat 3 2[tick=3];
eb.AddOneshotBeat 3.75 2[tick=2.25];
eb.AddOneshotBeat 4.5 2[tick=1.5];
eb.AddOneshotBeat 5.25 2[tick=0.75];
```
另外,在剧情关卡中,跳过拍子的位置如果按下空格会计算成失误,但编辑器中默认是不会失误的。
## 方块单发拍子
常规的单发拍子是针对一个节奏型的不断重复,而**方块单发拍子**是“一次性”的单发拍子,即没有重复,只需按拍一次。
方块单发拍子最早出现于`MD-1`,在第五章更新后也出现在了`5-X`用于预警细分拍子的出现。
选中一个单发拍子,在修饰符中选择方块符号``,将细分数量设为 1 ,便创建了一个方块单发拍子。方块单发拍子出现时需要添加特殊音效,在方块单发拍子的声音栏选择“特殊”即可自动添加提示音。
![](../images/moreoneshotbeats-subdivision.png)
除此之外,方块单发拍子也需要护士提示。这种护士提示与普通单发拍子的提示类似,唯一的不同点在于最后的 Go 被替换为了 One。
```rdview 5 3
eb.AddOneshotBeat 3[];
es.SayReadyGetSetGo_Get 1 1[];
es.SayReadyGetSetGo_Set 2 1[];
es.SayReadyGetSetGo_Go 3 1[];
```
如果相同拍长的方块单发拍子连续出现了多次,无需为每次出现添加完整的护士提示。可以逐步减少护士提示,直到完全没有护士提示,只剩下特殊提示音。
## 细分拍子
与方块单发拍子的概念类似,**细分拍子**也是“一次性”的单发拍,但是会产生多次等间距的心跳脉冲,按键的次数也变为多次。
细分拍子最早出现于`MD-1`,当时官方谱面没有官方名称,且最多仅有两个三角拍;后来第五章更新后三角拍首次出现在`5-1`并正式更名为**细分拍子**,并出现了多个细分。
在修饰符中选择方块后,将细分数量设为大于 1 的值或者点击细分符号``,即可创建细分拍子。特殊音效的添加与方块单发拍子类似。最多可以将细分数量设置为 10 。
![](../images/moreoneshotbeats-amountofsubdivision.png)
```rdview 4 5
eb.AddOneshotBeat 1[type=subdivision,subdivision=2];
eb.AddOneshotBeat 1 1[type=subdivision,subdivision=3];
eb.AddOneshotBeat 1 2[type=subdivision,subdivision=4];
eb.AddOneshotBeat 1 3[type=subdivision,subdivision=5];
```
在护士提示方面,不同于方块单发拍子,细分拍子需要在出拍前的半拍长开始数拍提示。
```rdview 13
eb.AddOneshotBeat 1[type=subdivision,subdivision=2];
g 1 1 0.5 1 #0f0[]{};
g 1 1 1 1 #0f0[]{};
g 0.5 1 0.5 1[offset=0.5]{
es.SayReadyGetSetGo_2 0 1[];
};
eb.AddOneshotBeat 4[tick=2,type=subdivision,subdivision=2,interval=4];
g 4 1 1 1 #0f0[]{};
g 4 1 2 1 #0f0[]{};
g 3 1 1 1[offset=1]{
es.SayReadyGetSetGo_2 0 1[];
};
eb.AddOneshotBeat 9[tick=2,type=subdivision,subdivision=3,interval=4];
g 9 1 1 1 #0f0[]{};
g 9 1 2 1 #0f0[]{};
g 8 1 1 1[offset=1]{
es.SayReadyGetSetGo_3 0 1[];
};
```
如果你搞不懂数拍事件提前放置的规则,可以直接使用第五章新增的单发拍数拍功能。只需将细分偏移设置为 0.5 即可自动且正确地为方块拍和细分拍数拍。*但需要注意数拍不会影响单发拍护士提示事件,容易导致聚光灯滞留,可以在第一个数拍处放置一个音量 0% 的单发拍护士数拍事件即可。*
![](../images/moreoneshotbeats-setnursesay.png)
> 注意:非必要情况下,不要关闭方块单发拍子和细分拍子本身的声音。这对于仅靠听觉游玩的玩家而言是必要的。
### 单独的细分拍子
跟 `MD-1` 一样,你可以通过 `Rea Dy Get Set Two~Ten` 来提示单独出现的细分 2 至细分 10 。
单独细分的提示**与正常单发拍的提示类似**Rea Dy 或 Get Set 之间的间隔同样用于提示细分拍子的拍长,且数字提示**和 Go! 提示一样不需要提前**。
```rdview 14 3
eb.AddOneshotBeat 3[type=subdivision,subdivision=2];
es.SayReadyGetSetGo_Get 1 1[];
es.SayReadyGetSetGo_Set 2 1[];
es.SayReadyGetSetGo_2 3 1[];
eb.AddOneshotBeat 9[tick=2,type=subdivision,subdivision=4,interval=4];
es.SayReadyGetSetGo_Get 5 1[];
es.SayReadyGetSetGo_Set 7 1[];
es.SayReadyGetSetGo_4 9 1[];
```
## 冻结拍子🧊
**冻结拍子**会将单发拍子冻住,使下一拍相比正常按拍位置延后一些。
冻结拍子很早就存在于编辑器中,但尚未在官方关卡出现,第五章更新后终于在`5-2`首次露面,并且有了新的特效。
在修饰符中选中冰块符号`🧊`,就创建了一个冻结拍子。创建一个冻结拍子后,会多出“延迟”与“间隔”选项,同时相比于更新前,冻结拍子在编辑器内的样式也有所变化。
![](../images/moreoneshotbeats-freezeshot.png)
```rdview 8 2
eb.AddOneshotBeat 2[type=freezeshot,delay=0.5,interval=2];
eb.AddOneshotBeat 5[type=freezeshot,delay=0.5,interval=2,tick=2];
```
对于一个冻结拍子而言,一共有五个关键的时间点:左十字,右十字,出拍点(绿线),原按拍点(蓝线),实际按拍点(黄线)。
```rdview 4 2
eb.AddOneshotBeat 2[type=freezeshot,delay=0.5,interval=2];
```
- **左十字**和**右十字**会显示两次冰冻特效并分别播放不同的冰冻音效,用于预示拍子延长的时间。
- **绿线**代表单发拍会在此响一次。
- **蓝线**处会将人物冻成冰块,再显示一次冰冻特效并播放一次冰冻音效,表示拍子延长的开始。
- **黄线**处拍子会解冻并播放最后一次冰冻音效,也是玩家应该按拍的时机。
- **绿线**与**蓝线**之间的间隔就是`拍长`的时间。
- **左十字**与**右十字**或者**蓝线**与**黄线**之间的间隔就是`延迟`的时间。
- **左十字**与**蓝线**或者**右十字**与**黄线**之间的间隔就是`间隔`的时间。
- 以前由于冻结拍子尚不完善导致**绿线**不允许夹在**两个十字**之间,现在这种操作已经允许了。
若设计冻结拍子,还必须满足以下两个时间点正确:
- **蓝线**所在时间应在正常单发拍子的按拍位置上;
- **左十字**必须和上一个普通单发拍子的按拍位置重合。
```rdview 5 3
eb.AddOneshotBeat 1[];
eb.AddOneshotBeat 3[type=freezeshot,delay=0.5,interval=2];
eb.AddOneshotBeat 1 1[grayscale=100,offset_grayscale=80];
eb.AddOneshotBeat 3 1[grayscale=100,offset_grayscale=80];
```
## 灼热拍子🔥
与**冻结拍子**相反,**灼热拍子**会形成一股热浪,使下一拍的按拍位置提前一些。
第五章更新后,灼热拍子在`5-2N`首次出现。
在修饰符中选中火焰符号`🔥`,就创建了一个灼热拍子。创建一个灼热拍子后,会多出“间隔”选项。
![](../images/moreoneshotbeats-burnshot.png)
类似地,对于一个灼热拍子,一共有四个关键的时间点:左十字,右十字,出拍点(绿线),按拍点。为作区分且方便表述,将会把按拍点称为红线。
```rdview 5 2
eb.AddOneshotBeat 3[tick=0.5,type=burnshot,interval=2];
```
- **左十字**和**右十字**会显示两次热浪特效并分别播放不同的灼热音效,用于预示拍子实际的时间。
- **绿线**处会再显示一次热浪特效并播放一次灼热特效,同时单发拍会在此响一次。
- **红线**处拍子会解除灼热状态并播放最后一次灼热音效,也是玩家应该按拍的时机。
- **左十字**与**右十字**或者**绿线**与**红线**之间的间隔就是`拍长`的时间。
- **左十字**与**绿线**或者**右十字**与**红线**之间的间隔就是`间隔`的时间。
若设计灼热拍子,还必须满足以下两个时间点正确:
- **绿线**所在时间应在正常单发拍子的原定出拍位置上;
- **左十字**必须和上一个普通单发拍子的原定出拍位置重合。
```rdview 5 3
eb.AddOneshotBeat 1[];
eb.AddOneshotBeat 3[tick=0.5,type=burnshot,interval=2];
eb.AddOneshotBeat 1 1[grayscale=100,offset_grayscale=80];
eb.AddOneshotBeat 3 1[grayscale=100,offset_grayscale=80];
```
最后我们针对细分拍子、冻结拍子、灼热拍子做一个技术总结:
```rdview 19 7
eb.AddOneshotBeat 1[loop=1];
eb.AddOneshotBeat 5[type=freezeshot,delay=0.5,interval=2];
eb.AddOneshotBeat 1 1[loop=1];
eb.AddOneshotBeat 5 1[];
eb.AddOneshotBeat 1 2[loop=1];
eb.AddOneshotBeat 5 2[tick=0.5,type=burnshot,interval=2];
eb.AddOneshotBeat 1 4[loop=1];
eb.AddOneshotBeat 5 4[tick=1,type=subdivision,subdivision=2,interval=2];
eb.AddOneshotBeat 7 4[tick=0.5,loop=1,interval=1];
eb.AddOneshotBeat 9 4[tick=0.5,type=subdivision,subdivision=2,interval=1];
eb.AddOneshotBeat 10 4[tick=2];
eb.AddOneshotBeat 14 4[tick=2,type=subdivision,subdivision=3,interval=4];
g 5 5 0.5 1 #0f0[]{};
g 5 5 1 1 #0f0[]{};
g 4.5 5 0.5 1[offset=0.5]{
es.SayReadyGetSetGo_2 0 1[];
};
g 9 5 0.25 1 #0f0[]{};
g 9 5 0.5 1 #0f0[]{};
g 8.75 5 0.25 1[offset=0.25]{
es.SayReadyGetSetGo_2 0 1[];
};
g 14 5 1 1 #0f0[]{};
g 14 5 2 1 #0f0[]{};
g 13 5 1 1[offset=1]{
es.SayReadyGetSetGo_2 0 1[];
};
```
## 冲击拍子
**冲击拍子**属于一种单发拍子,但在通常情况下相比正常的单发拍而言更快,护士在喊口令的同时会伴有新的哨声提示。
第五章更新后,冲击拍子在`5-X`首次出现。虽然`2-2`中最快的单发拍子也相当快,但并不属于冲击拍子。
冲击拍子的本质是**护士提示带有哨声的单发拍****正拍按拍**以及**快速**是其显著特征,这两点在`5-X`中也有所体现。
冲击拍子除了正常的护士提示之外,开始前后还会分别会伴随四声哨子,顺序分别为**短低短低**和**高高高高**,每声哨子之间的间隔相同,且四声哨子 - 高音效与前四下按拍重合,如下图上半部分。
同时,仅当面临如下图下半部分特定的冲击像正常单发拍转化时,最后三个冲击拍子的按拍会伴随三声哨子,顺序分别为**高高低**。
![](../images/moreoneshotbeats-blastbeat.png)
![](/images/13-23.png)
*请注意,灰色的护士提示事件只是为了方便理解单发拍机制,实际只需要放置红色护士语音事件即可。*
虽然`5-X`引入了冲击拍子,但有几点仍需注意:
1. **冲击拍子依旧是一种单发拍子**,其护士提示方式与正常拍长的单发拍基本无异,只不过在拍长较短时需要多加两个 Rea Dy 延长预先提示。
2. **冲击拍子并没有正拍按拍以及高速度的强制要求**,只要是一组循环的单发拍子,无论正反拍都可以加上哨声提示当作冲击拍子使用,只需注意使用场景、合理性与便捷性。
3. 哨声虽然是判定冲击拍子的指标,但是**这只是一种新的提示方式**,只是为了让玩家更好地应对单发拍,请勿为了创造冲击拍子而随意添加哨声堆砌提示,否则会显得相当冗杂。
简言之,冲击拍子并不是什么新东西,只是加了哨子提示的单发拍子,仅此而已。尽管在`5-X`里其速度和正反按拍切换令人印象深刻,但只需像正常单发拍子一样使用即可。
总的来说,冲击拍子只是为了符合`5-X`剧情而设计的机制,其提示方式相较于正常单发拍更为复杂,如果有需要可以添加哨声提示以创造出冲击拍子,但是只使用护士语音提示也是完全合理的,需根据个人需求进行选择。~~虽然我不推荐用就是了,提示整得那么麻烦还容易出错。~~