forum

【SB Code】即使编辑器好用,也有人想开记事本写代码

posted
Total Posts
18
Topic Starter
popner
上次写的那个批量歌词的教程貌似很高端的样子,实际是因为少了代码基础的部分(以及ps基础),刚好微风娘娘说老的SB代码教程需要更新,所以这次就写了个简单易懂的代码教程。因为是简单易懂,所以只讲常用的部分。

主要整理自【翻译】故事版脚本指南(Storyboarding by Scripting)

一些问题
  1. 代码的优势?
    数据精确控制,复制方便,不容易误操作,不会出现SB没保存的情况,有一些SBE没有的功能。
  2. 代码的劣势?
    一般情况下写代码都比较麻烦,并且具体效果不直观。代码一般需要结合SBE一起使用。
  3. SB代码在哪里?
    答:SB代码在歌曲文件夹下的.osb文件中,或者.osu文件中的[Events]下。
  4. 我没做SB,为什么.osu中[Events]有这么一堆代码,这堆代码是什么意思?
    答:
    [Events]
    //Background and Video events ———— 背景图及视频
    0,0,"BG.jpg" ———— 插入背景图
    Video,0,"OP.avi" ———— 插入视频,那个0是视频的offset
    //Break Periods ———— break,与SB基本无关
    2,13621,22531
    //Storyboard Layer 0 (Background) ———— 四个层主要用到的是背景和前景层,对一般的SB元件来说,放到哪里都可以,但是前景层始终在背景层之上
    //Storyboard Layer 1 (Fail)
    //Storyboard Layer 2 (Pass)
    //Storyboard Layer 3 (Foreground)
    //Storyboard Sound Samples ———— SB音效,后文会提
    //Background Colour Transformations ———— 背景颜色,与SB基本无关,大部分图都不会改这项
    3,100,163,162,255

    .osb文件中只有四个层以及SB音效的部分。需要注意的是,同是前景层的话osb在osu之上。
下面讲解代码
  1. 基本代码
  • Sprite,Foreground,Centre,"SB\A.jpg",320,240 ———— 代表前景层放入了一个元件"SB\A.jpg"。这一行的下面会有很多行 空格(或下划线)+一个字母 开头的代码,表示对这个元件进行的操作。
    _F,0,1003,1955,0,1
    这句代码这样来看:
    [空格(或下划线)+操作类型],[变化方式],[起始时间,结束时间],[起始量,结束量]
    其中[变化方式],[起始时间,结束时间]是大部分代码都有的部分,变化方式为0-平均变化,1-先快后慢,2-先慢后快,时间是毫秒数,比如1:23:674=83674。

    结束时间可以省略,省略的效果是只有一瞬间是生效的;
    结束量也可以省略,省略的效果相当于结束量=起始量。

    以操作类型分类

    F:对元件透明度操作,0为透明,1为不透明,小数为半透明。
    _F,0,1003,1955,0,1
    意思就是从1003到1955的时间内,元件由透明平均变化为不透明。

    M:对元件位置操作。
    _M,0,1003,1955,100,100,200,200
    意思就是从1003到1955的时间内,元件由(100,100)移动到(200,200)。

    S:对元件大小操作。
    _S,0,1003,1955,1,1.5
    意思就是从1003到1955的时间内,元件1倍大小变为1.5倍大小。

    R:对元件旋转操作。
    _R,0,1003,1955,0,0.3
    意思就是从1003到1955的时间内,元件从0度顺时针旋转为0.3弧度。3.14就是转180度。

    V:对元件进行矢量操作,通俗一点来说就是拉长或压扁。
    _V,0,1003,1955,1,1.5,2,1
    意思就是从1003到1955的时间内,元件横1倍竖1.5倍压扁成了横2倍竖1倍。

    C:对元件颜色操作,颜色代码顺序为R,G,B,不懂的话请开画图的颜色板研究。。
    _C,0,1003,1955,255,255,255,188,188,255
    意思就是从1003到1955的时间内,元件从原色调(255,255,255)变为偏蓝色(188,188,255)。

    MX MY:其实就是M的特例,只在X或Y方向上移动元件。
    _MX,0,1003,1955,100,150
    _MY,0,1003,1955,100,150

    意思就是从1003到1955的时间内,元件横向/纵向坐标从100移到了150。

    P:对元件的一些参数操作,包括 H - 水平翻转 V - 垂直翻转 A - additive-blend colour 颜色叠加取代原来的颜色覆盖。(注:效果无与伦比,亮瞎狗眼)
    _P,0,1003,1955,H
    意思就是从1003到1955的时间内,元件水平翻转。
  1. 循环
  • L循环:循环重现代码效果,可调整重现次数。
    例如:
    _L,2000,2
    __F,0,1003,1955,0,1 ———— 注意下面两行前面多一个空格(或下划线)
    __M,0,1003,1955,100,100,200,200

    首先在2000时刻循环触发,2000+1003=3003时刻执行一遍代码,2000+1955=3955时刻执行完毕,开始第二次循环;3955+1003=4958时刻执行第二遍代码,3955+1955=5910时刻第二遍执行完毕。

    T循环:达到特定条件后触发,条件有HitSoundClap, HitSoundFinish, HitSoundWhistle, Passing, Failing。
    例如:
    _T,HitSoundFinish,500,3000
    __F,0,0,100,1,0
    __M,0,0,100,100,100


    处于500-3000的时间内,所有的finish音效都会触发一个效果:在0-100时间内将元件由不透明变化为透明,元件的位置为100,100。

    假设在1000的时刻有一个带finish音的note。玩家打的时候由于手抖,在1050的时候打到了这个note。这时这个效果就相当于'_F,0,1050,1150,1,0'。也就是说,玩家的打击触发了这个SB效果。
  1. SB音效
  • 固定在某一时刻响起音效,不建议用来弥补长滑条中间需要加clap的情况,因为这个音效没有对应note,会给玩家造成不快。
    Sample,41352,0,"soft-hitclap.wav",65
    在00:41:352时刻,响起自定义soft音效的clap,音量为65;0代表背景层。


SB代码还可以简化为http://osu.ppy.sh/forum/t/97776
(不过众人纷纷表示这功能太鸡肋)



Scorpiour wrote:

SPOILER
补充两点:

  1. MX/MY代码在执行的时候,另一个坐标会在原件初始化时确定。

    举例:
    Sprite,Foreground,Centre,"item.png",320,240
    _MX,0,10000,50000,0,640
    在这段代码里,原件的纵坐标(即Y坐标)始终会保持在240的位置上无法改变,除非改变初始化的位置,例如320,280
    _
  2. 代码覆盖和默认代码
    在去掉代码结束时间的时候,元件会默认为“从开始时间起总保持这个状态”,因此在某些时候可以简化制作难度,例如
    Sprite,Foreground,Centre,"circle.png",320,240
    _S,0,0,,0.8
    _M,0,10000,50000,320,0,320,480
    这个代码可以简单的将缩放固定在0.8,而不用在去多写一次时间点,同样也不会在M动作对应的时间以外播放。这个方法更多用于对同一组原件的反复运用(比如尺寸相同的歌词),或者配合Triggle来用
修正一点:
  1. Loop代码的说明有错。
    _L,start time,times
    __Action.....

    L后面的数字是整个循环开始播放的时间,例如泡泡的这个例子
    _L,2000,2
    __F,0,1003,1955,0,1
    __M,0,1003,1955,100,100,200,200
    2000开始,loop代码段开始执行

    2000+1003= 3003,F/M开始生效
    2000+1995= 3995,执行结束,计数器-1,第2个循环
    3995+1003= 4998,F/M第二次生效
    3995+1995= 5990,F/M第二次执行结束,计数器-1,归0,结束循环。
Flower
好顶赞 前排待编 先马了再说

EDIT1
球球你把字体换回去 大字实在是瞎眼
Pokie
;)
Rotte
Pokie你还我沙发QAQ

/me slaps Flower
Lan wings
泡泡好评如潮吹
Ulysses
完全看不明白我好自悲
Scorpiour
补充两点:

  1. MX/MY代码在执行的时候,另一个坐标会在原件初始化时确定。

    举例:
    Sprite,Foreground,Centre,"item.png",320,240
    _MX,0,10000,50000,0,640
    在这段代码里,原件的纵坐标(即Y坐标)始终会保持在240的位置上无法改变,除非改变初始化的位置,例如320,280
    _
  2. 代码覆盖和默认代码
    在去掉代码结束时间的时候,元件会默认为“从开始时间起总保持这个状态”,因此在某些时候可以简化制作难度,例如
    Sprite,Foreground,Centre,"circle.png",320,240
    _S,0,0,,0.8
    _M,0,10000,50000,320,0,320,480
    这个代码可以简单的将缩放固定在0.8,而不用在去多写一次时间点,同样也不会在M动作对应的时间以外播放。这个方法更多用于对同一组原件的反复运用(比如尺寸相同的歌词),或者配合Triggle来用
修正一点:
  1. Loop代码的说明有错。
    _L,start time,times
    __Action.....

    L后面的数字是整个循环开始播放的时间,例如泡泡的这个例子
    _L,2000,2
    __F,0,1003,1955,0,1
    __M,0,1003,1955,100,100,200,200
    2000开始,loop代码段开始执行

    2000+1003= 3003,F/M开始生效
    2000+1995= 3995,执行结束,计数器-1,第2个循环
    3995+1003= 4998,F/M第二次生效
    3995+1995= 5990,F/M第二次执行结束,计数器-1,归0,结束循环。
kanpakyin
加進了索引
[CSGA]Ar3sgice
看起来好有趣的样子
pokedigi
没想到这么多年代码都没怎么变过,功能还是这些……
Beren
很厉害的样子
Scorpiour
\Beren/
Komeiji Yuki
RuRu表示記事本什麼的根本看不懂
Kotone
不明覺厲
SamiPale
好顶转,寒假可以进修一波
Shinkuu
虽然不太懂,但是好像好厉害

马克
YuZuKi Kenny
支持。
Breeze
看十感
Please sign in to reply.

New reply