forum

[Archived] Understand osu-mania file format

posted
Total Posts
6
Topic Starter
Kagu-chan
Problem Details:
Heyho... im scripting an extended AI-Mod special for osu mania.
For this i want to now at which lane hitobjects are placed.

Depending on some 4K maps ive looked it seems that the first value is for that:
64,192,300,5,4,0:0:0:0:
448,192,300,1,0,0:0:0:0:
192,192,921,1,4,0:0:0:0:
448,192,1542,1,4,0:0:0:0:
320,192,1853,1,4,0:0:0:0:
64,192,2164,1,4,0:0:0:0:
192,192,2785,1,0,0:0:0:0:
448,192,2785,1,0,0:0:0:0:
320,192,3406,1,8,0:0:0:0:

But looking on 7K maps this cant be true:
450,295,3280,5,4,0:0:0:0:
385,261,3280,1,2,0:0:0:0:
127,123,3280,1,4,0:0:0:0:
62,89,3280,1,0,0:0:0:0:
256,192,3280,1,0,0:0:0:0:
385,261,3441,1,0,0:0:0:0:
191,157,3441,1,0,0:0:0:0:
450,295,3601,1,0,0:0:0:0:
385,261,3601,1,0,0:0:0:0:
62,89,3601,1,0,0:0:0:0:
127,123,3762,1,0,0:0:0:0:
256,192,3762,1,0,0:0:0:0:
450,295,3922,1,0,0:0:0:0:
62,89,3922,1,0,0:0:0:0:
321,226,3922,1,0,0:0:0:0:

Here i have 19 different values for first value in a Guest Diff.
All my Diffs working with 7 values, second value is always 192.

So it seems its depending on second value too...
I dont get the technique behind that :/ - And i dont get why i have always 192 on all my maps, on other maps then it is some different values ^^

So: how to decide which lane a object is placed depending on beatmap file?

4K is fine...
HD contains 401 Hitobjects (Short Note: 373, Long Note: 28)
81 on Row 1 (20.2%)
111 on Row 2 (27.68%)
109 on Row 3 (27.18%)
100 on Row 4 (24.94%)

Ayaya contains 523 Hitobjects (Short Note: 475, Long Note: 48)
117 on Row 1 (22.37%)
142 on Row 2 (27.15%)
135 on Row 3 (25.81%)
129 on Row 4 (24.67%)

7K is a bit tricky...
7K MX contains 1051 Hitobjects (Short Note: 881, Long Note: 170)
185 on Row 1 (17.6%)
0 on Row 2 (0.0%)
0 on Row 3 (0.0%)
188 on Row 4 (17.89%)
0 on Row 5 (0.0%)
0 on Row 6 (0.0%)
201 on Row 7 (19.12%)
0 on Row 8 (0.0%)
0 on Row 9 (0.0%)
102 on Row 10 (9.71%)
0 on Row 11 (0.0%)
0 on Row 12 (0.0%)
145 on Row 13 (13.8%)
0 on Row 14 (0.0%)
0 on Row 15 (0.0%)
108 on Row 16 (10.28%)
0 on Row 17 (0.0%)
0 on Row 18 (0.0%)
122 on Row 19 (11.61%)

Razorflame's 7K SC contains 1570 Hitobjects (Short Note: 1491, Long Note: 79)
82 on Row 1 (5.22%)
24 on Row 2 (1.53%)
118 on Row 3 (7.52%)
99 on Row 4 (6.31%)
19 on Row 5 (1.21%)
109 on Row 6 (6.94%)
86 on Row 7 (5.48%)
29 on Row 8 (1.85%)
110 on Row 9 (7.01%)
216 on Row 10 (13.76%)
22 on Row 11 (1.4%)
114 on Row 12 (7.26%)
86 on Row 13 (5.48%)
24 on Row 14 (1.53%)
117 on Row 15 (7.45%)
94 on Row 16 (5.99%)
16 on Row 17 (1.02%)
118 on Row 18 (7.52%)
87 on Row 19 (5.54%)

Fileformat: v14

Would be very nice could someone help me a bit with that (:
Rei Hakurei
mania formula, is only check the [x] coordinate, or the first integer that you found.

let's say the playfield is 512 (a constant)
assume that you have nK,

it basically means, every column is separated by (512/n)px, osu always truncates the integer
for     zone
4 keys 0-127;128-255;256-383;384-511
5 keys 0-101;102-203;204-306;307-408;409-511
6 keys 0-84;85-169;170-255;256-340;341-425;426-511
and so forth

by using that logic, you could differ that the hitobject parameter (which is shown below)
x,y,time,type,hitsound
and find out which column that the note is placed one by calculating the x with the (512/n),

let's say i have a pattern like this
36,100,1000,5,0
88,150,1250,1,0
441,125,1500,1,0

if i assume it was on 6 keys chart, these note basically were placed on
Time  [1][2][3][4][5][6] Explanation
1.000 O - - - - - 36 / (512/6) < 1, first column then.
1.250 - O - - - - 88 / (512/6) < 2, second column then.
1.500 - - - - - O 441 / (512/6) < 6, last/sixth column then.

ps. that first column IS ZERO
ps II. it just the basic of placing hitobject, not about holds and other, play with bit code on type parameter
bitcode  object type
00000000 NULL
00000001 Note
00000010 Mania Slider (deprecated/only auto-converts)
00000101 New Combo Note (useless, new combo doesn't mean anything in mania)
00001000 Mania Spinner (deprecated/only auto-converts)
yxxxy1yy New Combo Manipulation (useless in mania, x is possible combination,
10010100 while y is EXCLUSIVE ONLY ONE BIT that have 1)
11010100
00111100
etc.
10000000 Hold (mania basic holds)
Topic Starter
Kagu-chan
so it could be easy like this:

Ruby-Code (Ruby always truncates the result of divide if no gloat number is used)
row = 512 / line.split(",")[0].to_i
right?
Is 512 the correct value?
It seems that LNs have "normal" first parameter, LN seems to be indicated by 4th value (128?) and definitely by last block (x:x:x:x:hs -> is LN then its end:x:x:x:x:hs)

Thanks
Rei Hakurei
oh ruby user too... lol

yes, 512 it is, because its the actual osu playfield. you can check it using standard or old mania format which still use the osu!standard note convention
Drum-Hitnormal
so u mentionned the syntax is : x,y,time,type,hitsound
but each line is actually 6 paramenters (example taken from a ranked 4k song, osu file format v14):
448,192,14777,1,4,0:0:0:0:
what does the 4 represent in the above line?
its between type and hitsound.
also i noticed that this 5th parameter has value of 0 in 99% of times

also the first few lines is:
448,192,544,5,0,0:0:0:0:
320,192,617,1,0,0:0:0:0:
192,192,690,1,0,0:0:0:0:
64,192,763,1,0,0:0:0:0:

why is the first note type 5 ? i know 1=normal note, and 128 = LN

trying to make a 4k to 7k converter in java
Bara-
Please don't bump an old marked thread
Instead, make a new one regarding your issue
Please sign in to reply.

New reply