化け猫さんだよ — 离线中文译本K-Shoot mania / 制谱技术

K-Shoot mania 的激光对象(K-Shoot 编辑器中的规格与文本编辑)

作者:cyanhair_neko · 2020-12-09 05:43

这篇文章使用了 JavaScript!如果禁用 JavaScript,原页面可能无法正常显示!
※ 本离线译本已将正文和折叠内容全部静态写入,阅读不依赖翻译端点。

本文是“TapeStop100 Advent Calendar 2020”第 9 天的文章。名字真长。

← 第 8 天:要不要来读《Magic: the Gathering》的故事?
为了维持动力的创作活动精神论:第 10 天 →

那位拥有象征兽人的兽耳,一头天蓝色长发随风飘扬,美貌与虎牙的光辉令太阳都不由得眯起眼的无性别美少女1,究竟是谁呢……

没错,就是我!2

……说回正题,我是作为宠物猫生活在 TapeStop100 这个团体里的化け猫3。喵4

第 9 天的内容,是一篇在 TP100 Advent Calendar 里颇为少见的 K-Shoot 文章5。这次要谈的是 K-Shoot mania 的激光对象(laser object)。

K-Shoot 编辑器在各种细分精度6下,激光对象究竟可以放在哪些位置,你不好奇吗?我很好奇,所以就打算把调查结果写成文章7

另外,我偶尔也会不用 K-Shoot 编辑器,而是直接编辑激光对象;所以也想把当时的编辑过程分享出来。

先理解 ksh 格式

进入正题之前,我们需要先理解当前(截至 2020-12-09)K-Shoot 谱面使用的 ksh 格式。这次只讲激光对象,其他部分不理解也没关系。

那么,实际看看 ksh 文件的内容吧。用文本编辑器8打开记录 K-Shoot 谱面的 ksh 文件,就会看到下图这样的内容。

用文本编辑器打开自制谱面
用文本编辑器打开自制谱面。字体使用 MyricaM M。

从来没见过这种东西的人,大概会觉得“这都是啥啊”。不过,只要分成各个区域来看,应该会好理解得多。加油。

BT、FX

这不是本文主题,所以放在一起说明。以刚才的图来说,左边 4 列表示 BT,隔着一条竖线,右边的 2 列表示 FX。还有其他更细的规格,但与正题无关,这里省略。

ksh 文件中 BT 和 FX 的位置
ksh 文件中 BT 和 FX 所在的位置。
每一行的时值(一行相当于几分音符)

我曾经犹豫要不要加这段,但判断这是知道了不吃亏的信息,于是还是放了进来9。因为会偏离正题,内容又比较长,原文用点击折叠的方式收起;离线译本默认展开。

ksh 格式中,小节用 -- 分隔。每小节的行数会由编辑器生成,原则是让该小节的总行数尽可能少。因此,每一行的时值会随小节而变。

例 1

考虑以下谱面数据:

--
// 4/4 拍
beat=4/4
(省略)
--
// 小节 A
0000|00|--
0000|00|--
0000|00|--
0000|00|--
--
// 小节 B
0000|00|--
0000|00|--
0000|00|--
0000|00|--
0000|00|--
0000|00|--
0000|00|--
0000|00|--
--

先看小节 A。除去注释,它共有 4 行10。一小节被分成 4 份,所以在小节 A 里,每行的长度等于一个四分音符11。小节 B 也可以用同样的方法考虑:一小节被分成 8 份,因此每行等于一个八分音符。

例 2(不是 4/4 拍时)

--
// 3/4 拍
beat=3/4
(省略)
--
0000|00|--
0000|00|--
0000|00|--
0000|00|--
0000|00|--
0000|00|--
--

这里和前面一样被分成 6 份,但如果因此说“每行是六分音符”,那就错了12。此时可以用“每小节行数 ÷ 拍号的分子”,机械地求出每行是几分音符13

计算每行时值的过程
计算过程。本例的结果是:每行长度为八分音符。

激光对象

在 FX 的更右侧,记录着激光对象的信息。左列是蓝色激光,右列是红色激光。

ksh 文件中激光对象的位置
激光对象所在的位置。

-(连字符)与 :(冒号)

-: 表示激光是否连接。- 表示激光不存在,: 表示激光处于连接状态。这两种符号不会被省略14

数字和英文字母

数字和英文字母表示激光的横坐标15。最左端是 0,数到 9 后继续用 AZ 之后是小写 a,最右端是 o。按顺序排列,共有 51 级:

0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmno

为了让上述内容更直观,我准备了下图。对照说明来看,应该更容易理解。激光移动的方向等信息,也可以根据数字和字母的变化看出来。

激光部分的读法
激光部分的读法。

补充一点:K-Shoot 会把长度小于或等于三十二分音符的所有激光,解释为直角激光。

补充信息

在 K-Shoot 编辑器里,谱面是从下往上书写的;但用文本编辑器打开时,则要从上往下阅读。写过程序的人应该能理解:数据从上到下记录,会更容易编写读取程序16

各细分精度下,激光对象可以放在哪里

必要的规格终于说完了,下面总算进入正题。K-Shoot 的激光对象有两种横向范围:等倍宽度和两倍宽度。原文的表格用“○”标出了各精度下可以放置的坐标;下表完整保留其对应关系,并改成更适合离线阅读的坐标列表。

横向范围为等倍时

编辑精度可放置的横坐标
标准(標準)0 5 A F K P U Z e j o
细致(詳細)0 2 5 7 A C F H K M P S U X Z b e h j m o
最细致(最も詳細)0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o

“标准”每跳过 4 个坐标取一点,共有 11 处可以放置。“最细致”则不跳过任何坐标,从 0(最左)到 o(最右)的全部位置都可以使用。

“细致”则稍微特殊。它会在“标准”的每两个可放置点之间再增加一点,但无法放在严格的正中间(例如,无法放在 05 的正中间)17。于是,以 P(中心)为界,左半的中间点会稍偏左,右半则相应地偏右18原文后半写作“稍偏左”,但从表格与脚注所说的以 P 为中心线对称来看,此处应为偏右。

横向范围为两倍时

编辑精度可放置的横坐标
标准(標準)0 2 5 7 A C F H K M P S U X Z b e h j m o
细致(詳細)0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o
最细致(最も詳細)0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o

在两倍横向范围下,“标准”可放置的点与等倍时的“细致”完全相同;两倍范围的“细致”又与“最细致”完全相同。

试着用文本编辑器编辑激光对象

读到这里,大家应该已经隐约理解了 ksh 文件的格式,尤其是激光对象部分。理解格式后,理论上当然也可以只用文本编辑器制作谱面,但实际上这并不现实。BT 和 FX 等对象几乎都可以用专用编辑器解决,激光对象也能在同一编辑器里编辑。

不过,当你在专用编辑器里以“最细致”精度编辑激光时,会渐渐搞不清它是否真的放到了想要的位置。(如果你完全不在意,那样也可以。)所以,为了把激光精确放到目标位置,我有时会改用文本编辑器。

既然已经介绍了 ksh 格式的一部分,下面就展示如何用文本编辑器编辑激光对象。

要放置什么样的激光

这次要做的激光如下。绿线表示 P(正中间),4 条黑色竖线则视为等间距排列。可以把它想成:在 4 条网格线上摆放激光的中继点。这种激光有时用文本编辑器反而更好处理。

今天要制作的激光
今天的激光。

决定每条线对应的位置

这次不打算把横向范围扩大到两倍,而是摆成约 1.5 倍。经过一番考虑,我决定把两端放到距中心 P 18 格的位置,也就是 7h19。这样一来,只要设定网格从左到右分别在 7JVh,再据此放置激光就可以了。

决定各条网格线的坐标
各条网格线的位置已经确定。

为用文本编辑器编辑做准备

用文本编辑器修改之前,先在 K-Shoot 编辑器里粗略摆好激光。虽说可以粗略,但纵向位置和时机最好准确对齐,这会让后续工作轻松很多。

激光的粗略草图
时机要严格对齐,横向位置粗略一点就可以。

截图里忘了这么做,但对本例来说,一开始就按“超出轨道的激光”来摆会更方便20。另外,这次没有这么做,但真正制作谱面时,最好在放激光的地方写上注释,这样用文本编辑器打开时,可以通过搜索快速定位。

在文本编辑器中编辑

摆好激光后,先保存一次,再用文本编辑器打开同一个文件。

用文本编辑器打开草图
用文本编辑器打开后的样子。

如果像截图一样,放置激光时并没有指定它超出轨道,就在激光出现前的紧邻位置加入 laserrange_l=2xlaserrange_r=2x。然后,把对应的数字或字母改写成 7JVh 之一。

如果不知道文本编辑器中的哪一处对应目标激光,可以尝试先在谱面里加上更细的注释。

完成

文本编辑器中的工作大致完成后,别忘了保存;然后再用 K-Shoot 编辑器打开谱面确认。如果某处没有变成预想的样子,就回到文本编辑器调整,再回 K-Shoot 编辑器确认,如此反复。得到预期形状时,就完成了。

完成的激光
完成后的样子。

今天写的内容:K-Shoot 的激光对象

大家觉得怎么样?(严格遵守 TP100 Advent Calendar “烂博客”规章)

ksh 文件格式、专用编辑器在各精度下摆放激光的规则,以及用文本编辑器编辑激光对象的方法——这些知识是否一学完就能派上用场,说实话很难说;但只要知道它们,或许某天就会在意外的地方派上用场21

关于 ksh 文件格式,K-Shoot mania 的开发者 masaka 也已经在 GitHub 上公开了资料,感兴趣的人不妨去看看。本文介绍的只是其中一小部分,资料里还写了旧版本的规格,也很有意思。原文在“GitHub”上只链到 Hatena 关键词页,没有给出具体仓库链接,因此本译本不自行猜测。

题外话

其实,K-Shoot 除了当时正在使用的 ksh 格式之外,还有一种以 JSON 语法表示的“kson 格式”。据 masaka 所说,将来会转向 kson 格式。

如果真的换成 kson,这篇文章的内容就会过时;但如果在 kson 里也能进行同类操作,我大概会再写一篇这样的文章吧。到时候还请多多关照。

道歉

对于 TP100 Advent Calendar 第 9 天的文章未能及时公开,我在此致以真诚的歉意。

本文会在必要时进行增补与修正。

脚注

  1. 指无性别的可爱之人。
  2. 其实我没看过会说出这种台词的那部作品。不过确实有点在意,如果 Amazon Prime Video 上有,我想看看。
  3. ???
  4. 可爱。
  5. 在截至昨天的 8 天里,只有 2 天提到了 K-Shoot;其中 1 天的字数还非常少。
  6. 指菜单栏“工具”里的“标准”、“细致”、“最细致”。
  7. 其实这个题材已经在我手里搁了大约 10 个月。
  8. 用记事本也可以。
  9. 这也许是在 K-Shoot 之外也能派上用场的知识。
  10. // 开头的行表示注释行,所以不计数。
  11. 此处指 4/4 拍的情况。
  12. 从“每小节有 3 个四分音符”这一拍号含义出发,直觉上应该也能看出每行并非六分音符。
  13. 行数少时,也许可以凭直觉算出来。但如果一小节有 48 行,只靠直觉就会变得困难。
  14. 如果允许省略,就无法判断激光究竟是否存在。
  15. 纵坐标则由字符所在的行来表示。
  16. 我可不想写用来读取“从下往上写”文件的程序。
  17. 假设从 0o 全部等间距。从开发角度等方面考虑,认为它们等间距是很自然的。
  18. 这样一来,在“细致”精度下也可以放置以 P 为中心、左右线对称的激光。
  19. 假定等倍范围的两端为 100%,两倍范围的两端为 200%,我想让 150% 所对应的位置成为两端。两倍时的 100% 是 25,乘以 1.5 得 37.5。与它最接近、同时又能把 4 条网格线等间距排列的数是 36。7h 都分别距 P 18 格(36 ÷ 2)。
  20. 如果激光完全不会超出轨道,则不用指定“超出轨道的激光”也可以。
  21. 实际上,正因为我理解激光对象在 ksh 格式中的表示方式,才能想到“直接在文本编辑器里改激光”这种方法。

原文:K-Shoot maniaのレーザーオブジェクトについて(ケーシューエディタでの仕様とテキストエディタでの編集)
本页为直接写入的静态中文译本;所有 10 张正文图片已保存在本地。本文没有原始视频或谱面预览嵌入。