Dan★Oniソース概要
- 環境
- ParaFla Ver1.37
- ParaFla!ソース / Cross Walker (ver fd 3.12.9)
他のソースでは多少違いがある場合がある。
変数名の違いはあっても、ver fd 3.0.0以降は基本的に同じ。
矢印・フリーズアローの生成ルール [makeArrow]
- 名前の決め方
- 赤色 (矢印かフリーズアローか)
"f"という文字があればフリーズアロー、なければ矢印。
- 青色 (どの矢印か)
これは基本的に以下のようになっている。
「le」⇒左、「led」⇒左矢印、「do」⇒下、「oni」⇒おにぎり、
「up」⇒上、「rid」⇒右矢印、「ri」⇒右、
「le2」⇒左(2)、「do2」⇒下(2)、「up2」⇒上(2)、「ri2」⇒右(2)、
「gor」⇒ギコ、「iyo」⇒いよう
- 黄色 (その矢印の中で何番目か)
スタートから何番目の矢印かということ。
矢印の被り回避の際に、どの矢印かを特定するのに用いる。
- 必要な項目(参考)
Arrow | Frz | 名称 | 内容 |
◆ | ◆ | setflg | 判定が行われたかどうかのフラグ。初めはfalse。 |
◆ | ◆ | cnt | ステップゾーンに到達するまでのフレーム数。 1x, 400pxなら200frame。 |
◆ | ◆ | bstcnt | Sp.Motionで使用するフレーム数。 上のcntからストップする間のフレーム数を引いたもの。 |
◆ | ◆ | _alpha | 矢印の透明度。Appearanceで用いる。 |
◆ | ◆ | moveY | ステップゾーンまでの距離。 400pxなら基本400になるが誤差もある。 |
◆ | ◆ | spd | 矢印個別にかかる倍速。譜面データで言うところのboost_data。 初期倍速や途中変速で使われるような一斉倍速ではない。 |
◆ | ◆ | _y | 矢印の初期出現位置。 Reverse, Halfwayなどにより場所が変わる。 |
◆ | ◆ | onEnterFrame | 矢印・フリーズアローを動作させる関数を入れておく。 |
| ◆ | fLength | フリーズアローの長さ |
フリーズアローについては別途内部で長さ・色に関する設定が必要。
始点・終点と帯の3箇所に分かれている。
矢印・フリーズアローの動作ルール(共通) [movArrow]
1フレームで矢印が動く距離は以下の通り。
- (初期倍速)×(途中変速)×(個別加速)+Sp.Motion差分
- 初期倍速
オプション画面で選択するスピード。
- 途中変速
プレイの途中で変速するもののうち、全体で変化する倍速。
- 個別加速
プレイの途中で変速するもののうち、矢印個別で変化する倍速。
- Sp.Motion差分
オプション画面でBoost/Brakeを選択した際に加速されるスピード。
- フレーム毎に行われる処理の流れ
- 矢印が動く距離を上の計算式で計算し、矢印を移動させる。
- AppearanceがHidden/Sudden/Replaceのとき、
矢印・フリーズアローが画面の中央に来たら透明度を変化させる。
- 判定内に対応するキーが押されたら判定を行う(後述)。
なお、Autoフラグが1になっている矢印はcntが0になった時点で自動判定する。
- 判定枠から外れた場合 / setflg(判定済みフラグ)がfalseのとき
- 矢印
ウワァンを出して判定対象の矢印を次の矢印に変える。
ウワァンの出た矢印はその場で消去する。
- フリーズアロー
イクナイを出して判定対象のフリーズアローを次のフリーズアローに変える。
フリーズアローは消去せず色を変えておく。
フリーズアローの動作ルール(その他)
- 通常時 ⇒ 上の手順と同じ。
- ヒット時(押しっぱなし中)
- 代替キーの設定
フリーズアローと結びつけるキーを設定する。
- フリーズアローの色を変える。
- フリーズアローのバーを縮めて対の矢印を移動させる。
フリーズアローバーの長さは"y1"で管理している。
- 途中でキーを離した場合は失敗
- 押し切った場合(y1が0未満)のときは成功
- 失敗時
- フリーズアローの色を変える。
- 対象となるフリーズアローが特定の位置へ移動するまで
指定されたスピードで移動させる。
- フリーズアローを消去する。
判定に関するルール(枠外を除く) [judgeArrow]
- 押したキーと、対応する矢印・フリーズアローとの対応付けを行う。
- 現在判定する矢印・フリーズアローをチェックする。
現在の矢印・フリーズアローは上の名前の決め方から特定する。
- 現在の矢印が範囲内にあるかチェック
cntの値を調べてチェックする。対象内であれば判定も行う。
- 現在のフリーズアローが範囲内にあるかチェック
矢印が判定内にない場合は、フリーズアローをチェックする。
ここも同じくcntの値をチェック。判定は失敗時のみ行う。
- 空押しだった場合
矢印・フリーズアローともに判定内でない場合は、空押しになる。
(ステップゾーンを光らせる)
BarDrainがEscape+の場合は、プギャー判定を行う
(ただし、最初200フレームくらいは判定を行わない)。
譜面読み込みフロー [StartupArrow.as]
※ ver fd 4.3.0以降より、計算に時間がかかった場合のタイムアウト処理を追加。
- 初期化チェック(ver fd 4.3.0以降のみ)
- 初回は素通り。タイムアウトが発生して戻ってきた場合のみ、~
矢印出現位置補正[pushNotes]まで処理をスキップする。
- 譜面初期化[initLoad]
- 指定された譜面ファイル名を元に読み込みを開始する。~
判定数やコンボ数・判定幅など、ゲーム開始時に必要な変数もここで初期化。
- 譜面の読込
- 譜面の取出し[loadNotes]
- 譜面データを配列化して取り出す。~
また矢印数からフェードイン場所とライフ値を決定し、
速度変化についてはフェードイン量に応じて数値を補正する。
- 各フレームの速度格納[storageSpd]
- 各フレームにおける速度を、速度データから取得する。~
このデータは後の矢印出現位置補正[pushNotes]で必要。
- Sp.Motion補正計算[motionSpd]
- Sp.Motionの軌道関数から補正座標を計算する。~
補正座標は配列に格納しておく。(Sp.MotionがOFFでも生成するので注意)
- 矢印出現位置補正[pushNotes]
- 矢印の種類ごとにループさせ、矢印の出現位置を逆算する。~
速度が一定の場合は初めだけ逆算して、後は一律減算。
- 矢印の種類単位で7秒以上処理時間がかかった場合は、~
一旦タイムアウトを出して処理を終了させ(初期化チェックへ戻る)、
再度入ってきた場合に途中から処理を続行する。(ver fd 4.3.0以降のみ)
- 速度変化・色変化の逆算を行う。~
色変化は識別番号と実際に変更する矢印の対応付けも合わせて行う(pushColor)。
- 一時変数削除[delTemporary]
- 上記読込処理で共通に使用した一時変数を削除する。~