ダミーノーツの置き方

この記事ではダミーノーツの置き方を解説します。
ダミーノーツのイメージとして分かりやすいのはAegleseekerの最後の消えるノーツみたいなやつです。
(Aegleseekerのダミーノーツ)

ダミーノーツの置き方には大きく別けて2種類あるので、それぞれ解説していきます。

  1.timingを用いたダミーノーツ

1つ目は基本的なtimingを用いた方法です。
この方法では、曲の終了後の位置に置かれたノーツをtimingで無理やり手前に持ってくることでダミーノーツを配置します。

  1-1.ノーツを置く


①ダミーノーツにしたいノーツを普通のノーツと同じように置きます。
②このダミーノーツ用に新しくtiminggroupを作成して、ノーツをそのグループに変更します。
③ノーツのtimingに10万を足していき、曲の最後より後になるようにします。
一旦ノーツが無くなりますが、後で出てきます。

  1-2.BPMを操作する


次に先ほど置いたノーツを手前に持ってきます。
ここでの操作は新しく作ったtiminggroup上で行うことに注意してください。

①ノーツを消したいタイミングにtimingを追加します(早めにすれば判定ラインに到達する前に消え、遅めにすれば判定ラインを通り過ぎるノーツになります)。
②その1ms後にtimingを追加します。
③1つ目のtimingのBPMを直前のBPMのマイナス10万倍にします(このとき、1-1でノーツのtimingに20万を足した場合はマイナス20万倍、30万を足した場合はマイナス30万倍します)。
④2つ目のtimingのBPMを逆走前と同じBPMにします。

この方法では逆走に1msを要する影響で、僅かにノーツの位置がずれてしまいます。
これが気になる場合は逆走時のBPMで調整してください。
また、ダミーノーツに通常の速度変化を付けたい場合は、逆走前に普通のノーツと同じようにtimingを追加してください。

2.hidegroupを用いたダミーノーツ

2つ目はscenecontrolの1つであるhidegroupを用いる方法です。
この方法では、ノーツを非表示にすることでダミーノーツを配置します。

2-1.ノーツを置く

①ダミーノーツにしたいノーツを普通のノーツと同じように置きます。
②このダミーノーツ用に新しくtiminggroupを作成して、そのグループに変更します。

2-2.hidegroupを配置する

この手順ではArcadeの種類によって作り方が少し違うので、使っているArcadeの項目を読んでください。
また、この先はArcadeではなくaffファイルやluaファイルに直接書き込んでいきます。
affファイルが分からない方は[.affの読み方について]を参照してください。
※ArcadeZero v4のみ、Arcade内の☆ボタンから配置することができます。

・ArcadePlus, ArcadeOneの場合

1-1でノーツを配置したtiminggroupに次のように追記します。
scenecontrol(timing,hidegroup,0.00,1); 
scenecontrol(timing,hidegroup,0.00,0);
timingは任意のタイミングにしてください。
最後の項目が1で非表示になり、0で戻ります。

・ArcadeZero v4の場合

1-1でノーツを配置したtiminggroupに次のように追記します。
scenecontrol(timing,hidegroup,0,0); 
scenecontrol(timing,hidegroup,0,256);
timingは任意のタイミングにしてください。
最後の項目が0で非表示になり、256で戻ります。

ArcadeZero v4では継続時間と透明度を指定することができます。
3つ目の項目が継続時間で、単位はmsです。
最後の項目が透明度で、256で100%になり、それ以上を指定することもできます。
注意点として、公式譜面の記述では透明度を指定しないので、そのまま読み込むと想定通りに動作しません。
公式譜面を読み込む場合は最後の項目を、
1→0, 0→256
と書き換えることで想定通りに動作します。

・ArcadeZero(v2, v3)の場合


・ArcadeZero v2, v3の場合
①楽曲フォルダ内にScenecontrolというフォルダを作成します。
②Scenecontrolフォルダ内にhidegroup.txtを作成します。
③hidegroup.txtに次のように記述した後、luaファイルに変更します。

function onAffCommand(timing, delay, isHide)
    notes = getNoteGroup()
    register(notes, timing, 1, "hideGroup")
end
 
function hideGroup(timing, delay, isHide)
    local a = 1
    if isHide == 1 and timing > BaseTiming then
       a = 0
    end
        notes.setAlpha(a)
end

④1-1でノーツを配置したtiminggroupに次のように追記します。
   scenecontrol(timing,hidegroup,0.00,1);
   scenecontrol(timing,hidegroup,0.00,0);
timingは任意のタイミングにしてください。
最後の項目が1で非表示になり、0で戻ります。

3.配点を0点にする

最後に、このままでは叩けないノーツにも配点されている影響で満点取れなくなってしまうので、ダミーノーツの配点を0点にします。
affファイルを開き、ダミーノーツを配置しているtiminggroupの()の中にnoinputと記述します。
timinggroup(noinput)に属するノーツは配点が0点になります。

4.それぞれの特徴


timingを用いる方法とhidegroupを用いる方法には、それぞれにしか無い特徴があるので紹介します。
timingを用いる方法の特徴は、判定ラインを通り過ぎるノーツを置けることです。
hidegroupでは判定ラインを通り過ぎることなくノーツが消滅します。
hidegroupを用いる方法の特徴は、途中からダミーノーツになっているアークの切れ目が分からないことです。
文字だと分かりづらいと思いますが、例えば画像の青アークはhidegroup、赤アークはtimingを用いたダミーノーツです。
青アークは切れ目が分かりませんよね。そういうことです。

※ここで紹介した2つの特徴は細かい仕様の為、Arcadeのバージョンによっては実装されていないこともあります。

5.最後に


このギミックは発想次第でかなり応用の幅が広くて楽しいので是非活用してみてください。
うまくできない場合はdiscordのArcaea Fanmade鯖で質問をしてもらえれば応えるのでよろしくお願いします。

記:なーど


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