用戶:ALFalpha/chartdata

出自Rotaeno中文维基
< User:ALFalpha
於 2024年8月15日 (四) 17:18 由 ALFalpha對話 | 貢獻 所做的修訂
(差異) ←上個修訂 | 最新修訂 (差異) | 下個修訂→ (差異)


警告:Rotaeno中一切資源,包括圖像、音源、代碼等,
版權均為心動網絡所有,擅自修改、傳播,後果自負!
本頁面嚴禁鏈入及引用!

本頁面是對Rotaeno譜面格式的簡要介紹。

總論

譜面文件存放於(Android apk)/assets/bin/Data/data.unity3d中。事實上,除了曲繪、音頻文件外,絕大多數的小文件都在這裏。

用AssetStudio等軟件可提取出具體的譜面文件。它們名為 <曲目id> [难度] (如:after_rain [IV]),類型為MonoBehaviour,如果事先提取了遊戲的dll文件則可以解析出詳細數據。但就算不解析也能閱讀出占文件大小90%+的加密字符串

"EncryptedV2ChartString": "cgjn/3jVl840+fB7..."

此時得到的譜面是用AES加密的base64字符串。採用適當的密鑰解密,可以得到可供人類閱讀的譜面:

# Version 2

# BPM
...

# Speed
...

# Note
...

解析

雖說是人類可讀的譜面,但其中沒有包含任何的額外信息,想要閱讀靠文字腦補譜面還是有一定難度。

譜面以行為界,每行只有用逗號分隔的參數。下面詳細說明它們的作用:

BPM

這部分每行只有兩個參數:時間點(單位ms)和BPM大小,表示「歌曲進行到該時間點時,譜面BPM變為該值」。

大部分沒有變速的譜面,這部分只有時間原點對應的一行:

例:After Rain 难度IV
# BPM
0,160

少數譜面的時間起點不是0,這可能是由音頻延遲引起的:

例:The Formula 难度IV
# BPM
50,144

至於有些譜面……

例:Rush E 难度IV
# BPM
0,130
1846,30
5846,35
7560,46
8864,56
9935,67
10831,78
11600,89
12274,68
13156,115
...(总共108行)

流速

這部分每行三個參數:時間點,流速,是否漸變。這裏流速不影響時間;譜面中所有的時間都是歌曲實際進行的時間。

在這部分最早的時間點(如果有)之前,流速默認為1。這裏的流速乘上用戶設置的流速,就是譜面實際的播放速度。

可以通過流速乘上對應的持續時間計算出譜面時間,這是物件出現的位置。

流速可以為0或者負數,Inverted World 難度IV 開幕的黑線表演就是這樣實現的:

例:Inverted World 难度IV
# Speed
0,1,1
1000,0.2,1
1667,0.2,1
2000,1,1
2646,6,1
2667,10000,0
2669,-8,0
3333,-0.3,1
4333,-0.3,1
4667,-1,1
5312,-8,1
5333,10000,0
5335,-8,0
6000,-1,1
6333,-0.1,1
7000,-0.1,0
7333,-1,1
7979,-8,1
8000,400,0
8002,-8,0
8667,-0.5,1
9167,0,1
10333,1,1
...

物件

這部分每行前兩個參數是固定的,分別為物件類型和時間點。根據物件類型的不同,還會有一些額外參數。物件可以不按時間順序寫!

TAP

0,1500,90

Tap對應物件類型0,第三個參數為角度。這裏的角度是按時鐘樣式計算的:0度為正上方,90度為水平右手方,270度為水平左手方。

FLICK

1,3175,60

Flick對應物件類型1,第三個參數同樣為角度。

SLIDE

2,135050,120,3,0,4,16,0,0

Slide對應物件類型2,每行代表一個slide組。這裏參數很多,我們命名後逐一介紹:

noteType, time, degree, slideHeadType, sildeEndDegree, slideSnap, slideCount, prevCurvature, nextCurvature
  • noteType:物件類型,這裏是2(slide)。
  • time:silde頭判定時間
  • degree:slide頭所在角度
  • slideHeadType:slide頭物件類型,可以是0(tap), 1(filck), 2(slide), 3(largeSlide)。除了slide頭以外,這個slide組中剩下的物件都是普通slide。
  • slideEndDegree:slide尾所在角度
  • slideSnap:每拍內slide數量。如果這首歌是常見的4/4拍,那麼這個參數*4就是這組slide中相鄰兩個所間隔的分音數。
  • slideCount:這組slide的總數。包含slide頭,所以若這個參數為1,則這組slide只有slide頭,又若slideHeadType不是2或3,則這組slide里實際上沒有slide。
  • prevCurvature, nextCurvature:控制slide組的形狀,參見#引導線

如果要寫單獨的大slide,只能寫一個slideHeadType為3,slideCount為1的slide組;要寫連續的大slide,只能一個一個寫。

ROTATE

4,0,45,75,0,0

Rotate對應物件類型4。第三個參數為旋轉起點角度,第四個參數為旋轉角度,正數為順時針(紅色),負數為逆時針(藍色)。

然而實際判定並不看這兩個角度,而是看旋轉速度;這兩個參數(和後面兩個參數)是為連接引導線(黑線)而存在的。

CATCH

5,11167,1
5,11667,0

Catch對應物件類型5。第三個參數為catch所在的側,0為右手側,1為左手側。Catch總在引導線上,其角度由對應時間點的引導線角度決定。

BOMB

6,6983,1
21,1333,105

Bomb對應物件類型6和21。類型6為老版bomb,參照catch格式,只能位於引導線上;類型21為新版freeBomb,參照tap/filck格式,可以不在引導線上。

引導線

11,2583,90,-105,0,0
11,4000,150,0,50,50

引導線對應物件類型11,參數與rotate相同。引導線總是中心對稱,只需寫一側即可。

譜面中寫的只是引導線的「節點」;引導線會在這些節點之間連接,具體方式由最後兩個參數(prevCurvature, nextCurvature)決定。