I will be explaining ticks, values, and other things that are required when charting on the C2 format. Make sure to read all of the guide, so that you don't have to read the guide over and over again!
Also, the key to mastering the C2 Format, or anything, is to practice. Keep making C2 formatted charts, start from simple charts, and go on from there.
In the C2 format, this is considered the hardest among charters. When it is oversimplified, it is the position of the note on the y-axis. However, ticks are much complicated than that, and I will explain step by step on how it works.
To explain ticks, Let me explain what time_base is. If time_base is 480, 1 page = 480 ticks. Why it's 480 is just for convenience in math. 480 can be factored by a lot of numbers, but if you'd like to, you can always use a number other than 480. (such as 960) However, I highly do not recommend using anything other than 480, (unless you're using a song that isn't 4/4) as most charts use 480 or 960, and other numbers can lead you to using a ton of decimals. Still can't understand? Let me explain further.
Let's say this is page 1 of a chart. See those red and blue makes I made on the right side? That is the tick value for the grid lines.
Another thing to note here is that bpm does not matter.
To put it simply, if you put a note at 120 ticks at 60bpm, and then change the bpm to 240bpm, the note will still be at 120 ticks.
Now you might be thinking, what about pages other than page 1? How do I differentiate between the two?
Simple. You use this equation:
(Page #) * (time_base) + α
As you can see here, I've labeled the notes on page 8. Let's say I'm trying to figure out the tick value of note 3 (written on the note).
Let's use the formula! so, since the formula is:
(Page #) * (time_base) + α
and Page # is 8, time_base is 480, and α is 240 (in the middle of the page, refer top image), you get...
4080! Just like the one labeled one the picture! Seems simple enough, right?
Now that I've tried to explain tick values as simple as I possibly could, Let me explain tick in a more.. technical way. But before that, I'll show you some other things you need to know.
"format_version" - not required. You can remove it altogether. (unless you're playing it on Cytus 2)
"time_base" - Explained earlier. Recommend to use 480 when using 4/4 or 2/4 songs.
"start_offset_time" - Put it at 0.
"start_tick" - the very first tick of a page. The value you need in here can be found by:
(page #)*(time_base)
"end_tick" - the very last tick of a page. The value you need in here can be cound by:
{(page #)+1}*(time_base)
"scan_line_direction" - (-1) is the scanline going down, (1) is the scanling going up.
Do note, you need to fill in for each page. If your chart has 38 pages, you need to fill that up 38 times.
"tick" - Explained earlier. You put a value of when you want the bpm change to happen.
"value" - This is complicated. Simply put, you want to use:
60000000/(BPM)
More on this will be explained.
The first "tempo_list" must have a tick of 0, and the a value should be what I've shown above.
If you use speed changes, you can add them after the first one. If you don't, you just need 1.
"page_index" - What page the note is in. Don't mess this up, or else your note will be not shown, but it will count as a miss when playing.
"type" - 0 = tap note, 1 =hold note, 2 = long hold note, 3 = drag head note, 4 = drag child note, 5 = flick note.
"id" - put this is numerical order. 0, 1, 2, 3, etc. Make sure the ids don't overlap with each other.
"tick" - when you want the note to show up. Explained earlier.
"x" - This can be between 0 and 1. 0 at the furthest left, 1 at the furthest right.
"hold_tick" - how long you want the hold time to be. in ticks, only can be applied when "id" = 1 or 2.
"next_id" - used for drags. When you're connecting, you want to connect the drag head and the child together. See below.
As you can see, note 21, 22, 23 are connected together. (20 is the drag head, I cut it off. Sorry!)
using next_id, you are connecting these drag types together. But as you can see on note 23, its next id is -1. When you are finishing off a drag, you must put on -1 it, instead of 0. It indicates that the drag is finished.
You can not apply drags on anything other than 4 and 3.
When you are not using drags, just put 0 on "next_id".
There may be also
"has_sibling": true,
"is_forward": false
on note list. These are not commonly used, however, has_sibling is set to true when there are notes on the same tick. I don't recommend you using it when your charting though, because you're basically going to chart even slower than now.
"format_version" - set it to 0. This has nothing to do with "event_order_list" by the way, so you just need to write it down once.
"tick" - explained above.
"type" - 0 is used when the bpm is going faster than before, 1 is used when it is going slower than before.
"args" - There are three things you can fill in here. This is a direct explanation from Lumixanth:
When to fill in W: When the scanline speed changes back to the basic speed. (e.g. 2x-1x. 0.5x-1x)
When to fill in R: When the scanline speed changes faster than the basic speed. No matter it's becoming fast or slow comparing to the previous speed. (e.g. 1x-2x. 2x-4x, 4x-2x)
When to fill in G: When the scanline speed changes slower than the basic speed. No matter it's becoming fast or slow comparing to the previous speed. (e.g. 1x-0.5x. 0.5x-0.25x, 0.5x-0.25x)
Here are things you can refer from when you're charting!
https://jsoneditoronline.org/ - useful. If you're editing ANY json file or chart file like this, always use this. It makes the process easier, and helps you correct your errors.
Some prime examples of Cytoid 1.5 Levels:
This includes 3 types of charts:
.cyt output charts
Official Charts
Custom charts (Converter)
The custom charts have 3 charts in them, 2 are mine and 1 is CrowFX's chart, I put them there since most of the c2 formatted charts are all .cyt type charts, and other things that aren't mandatory. Also, the examples I've provided you have been tidied up using the online JSON Editor I explained earlier.
As you've now learned about "tempo_list", you will understand what "value" is.
The actual meaning of "tick" is to define a relationship between time_base and the actual time.
value defines that, time_base = value in μs (microseconds)
If we define time_base to be 480, then
say that value=1000000 , it means 480 (in terms of relative time) = 1,000,000 μs
This is also why 60000000/(BPM) works (considering time_base = 480). Both are equivalent equations, but in different form.