timinggroupについて理解しよう!(anglex & angleyの解説付き)

timinggroup…それは使いこなせばかっこいいのに理解が難しい…
そんな謎の存在timinggroupを解剖します。
みなさんもtiminggroupの使い手になりましょう。

timinggroupって?

timinggroupの使い手の方々にわかりやすい説明を求めたところ、

「透明のトラックを追加する」

「異なるBPMを持つことができるレイヤーのようなもので、BPMの高いtiminggroupを使うことで追い越しギミックを作れる。」
という回答をいただきました。
使い手が言っているのでこういう概念で間違いなさそうです。

実際、timinggroupの概要は透明のトラック(timingのまとまり)を追加し、任意のノーツに任意のBPMを付与する、といった感じです。

読んでもわかんねぇ!って人は実際に手を動かしてみましょう。

試しにコードを用意してみました。

timing(0,220.00,4.00);
(4363,1);
(5454,1);
timinggroup(){
timing(0,110.00,4.00);
(4363,2);
(5454,2);
};
timinggroup(){
timing(0,180.00,4.00);
(4363,3);
(5454,3);
};
timinggroup(){
timing(0,300.00,4.00);
(4363,4);
(5454,4);
};

これで左から順にBPMが、220,110,180,300の速さでノーツが流れてきます。

ノーツは同時のタイミングで下のラインに到達しますがBPMが違うだけでなんか混乱しますよね。それがtiminggroupです。この機能をうまく使ってギミックを作るというわけです。

ギミックを作ってみよう。

ノーツに独自のスピードがつけられるわけですから、創作の幅は広がります。例えば、

こんな感じで、1:37からみたいにできたり、

2:04からのように脳トレ譜面を作ったり、

このようにホールドをtiminggroupで流し元のtimingで小節線を変えることでかっこよくし、スカイノーツがバウンドするギミックを作ったり、

この動画すべてみたいに、なんかすごい芸術を作ることができます。

……..ちょっと待って。今の動画の1:36みたいな反応しないで流れていったノーツあるが….これはいったい???

noinput 

timinggroupに関する機能の一つとしてnoinputがあります。機能は
そのtiminggroupに所属しているノーツの判定をなくす。
というものです。シンプル。
例は下のような感じです。

timinggroup(noinput){
timing(0,110.00,4.00);
(4363,2);
(5454,2);
};

2レーン目のノーツが反応しないですぎていくと思います。

これもうまく使えばかっこいいギミックが作れそうですね!

…実はもう一つ機能があります。

anglex & angley

皆様は覚えているでしょうか。2022年のエイプリール譜面の衝撃を。

0:53は横に動き、
2:12からは縦に降ってくるし…
この謎挙動も今のコードで再現することができます。
(ArcadeZeroAppend、ArcadeZeroYutMOD、ArcadeOne、ArcadeAlphaは対応。ArcadeZero v4は別仕様、後で解説します。)
この 挙動は ArcTap(スカイノーツ) に対してのみ有効です。
イメージとしてはanglexは縦方向、angleyは横方向の指示だと思ってください。

timinggroup(anglex200){
timing(0,220.00,4.00);
arc(4363,4364,0.50,0.50,s,0.00,0.00,0,none,true)[arctap(4363)];
};
timinggroup(angley200){
timing(0,220.00,4.00);
arc(4363,4364,0.50,0.50,s,0.00,0.00,0,none,true)[arctap(4363)];
};
timinggroup(angley3400){
timing(0,220.00,4.00);
arc(4363,4364,0.50,0.50,s,0.00,0.00,0,none,true)[arctap(4363)];
};
timinggroup(angley3400_anglex200){
timing(0,220.00,4.00);
arc(4363,4364,0.50,0.50,s,0.00,0.00,0,none,true)[arctap(4363)];
};
timinggroup(noinput_angley200_anglex200){
timing(0,220.00,4.00);
arc(4363,4364,0.50,0.50,s,0.00,0.00,0,none,true)[arctap(4363)];
};

このように記述します。
注意点としては、angleyについて、反時計回りに角度が増えていくので、
angley200なら左20度の方向から、
angley3400なら右20度の方向から(左340度の方向から)

ノーツが流れてきます。

わかりやすくするために動画の例を置いておきます。

マウス手書きの図も置いておきますので参考までにどうぞ。

ArcadeZero v4~では注意が必要です。
例として、
timinggroup(noinput_anglex25_angley50)
を、
timinggroup(noinput,angleX=2.5,angleY=5)
のように置き換える必要があります。
つまり先ほどの挙動と同じようにするには、

timinggroup(angleX=20){
timing(0,220.00,4.00);
arc(4363,4364,0.50,0.50,s,0.00,0.00,0,none,true)[arctap(4363)];
};
timinggroup(angleY=20){
timing(0,220.00,4.00);
arc(4363,4364,0.50,0.50,s,0.00,0.00,0,none,true)[arctap(4363)];
};
timinggroup(angleY=340){
timing(0,220.00,4.00);
arc(4363,4364,0.50,0.50,s,0.00,0.00,0,none,true)[arctap(4363)];
};
timinggroup(angleY=340,angleX=20){
timing(0,220.00,4.00);
arc(4363,4364,0.50,0.50,s,0.00,0.00,0,none,true)[arctap(4363)];
};
timinggroup(noinput,angleY=20,angleX=20){
timing(0,220.00,4.00);
arc(4363,4364,0.50,0.50,s,0.00,0.00,0,none,true)[arctap(4363)];
};

このようにして記述する必要があります。

anglex & angleyは一方通行の挙動しかできないので少し不便に感じるかもしれませんが使いこなせるとかっこいいですね。

以上timinggroupの説明でした。少し難しいかもしれませんが、とりあえずnoinput までを使いこなせればほぼ完璧だと言っていいでしょう。
とりあえずいろいろ試してみることをお勧めします。

記:nesiddo

この記事が気に入ったらサポートをしてみませんか?