ダラダラズ・グループ ダンおにソース仕様書 2009/2/11 Ver.4.54 (Verが大きく変わらない限りほぼ同一だと思ってください) ------------------------------- 【バージョンの変遷】 Ver.1 No.7で使用しているソース。     tanishiさんソースからフリーズアローとショボーンを取り除き、曲位置表示を導入。     このときのデザインはVer.4.3まで引き継がれた。 Ver.2 No.1〜No.24(No.7、22除く)で使用しているソース。     曲中得点計算およびtickleさんソースへの移行が主。     また、Stair・OldStyle・Traiangle導入、またAutoMode搭載。     デザイン上ではフリーズアロー反応時に現在のように光るようにした。 -2.1 (No.19〜) コンボボーナス制度導入。コンボ重視の得点へ。 -2.2 (No.23〜) ハイスコア導入 -2.3 (No.24〜) 曲中得点計算を判定時関数処理へ Ver.3 No.25〜No.42(No.33、34除く)で使用しているソース。     tickleさんのフレーム判定方式ソースへ移行。     曲中の矢印デザインはすべてtickleさんソースに従う。     矢印色変更・保存機能やTraiangle・AutoModeの完全搭載の実現。 -3.1 (No.27〜)リプレイ機能搭載。 -3.11 (No.29〜)DOXF03飛び入り作品キーボードクラッシャー(現在公開停止)用に     Ramdom機能を搭載する。 -3.2 (No.35〜)フリーズアロー反応時矢印デザインの変更     Flash8制作に移行、プレイ中強制日本語入力OFF機能搭載、コンボボーナス仕様変更 -3.21 (No.38〜)TOP下部に白グラデーションが入る、フォントをIPS系に統一する。 -3.22 また、フリーズアロー判定時デザインにブラーをつける。 (3.21、3.22は制作時に変更として認めませんでした) Ver.4 No.43〜現在のソース     tickleさんソース最新版に乗り換え。2通りの速度変化が出来るようになる。     内部処理の大幅な変更があったためバージョンを一つ上げた。デザインも準拠。 -4.1 (No.44〜)若干判定が厳しくなる。そしてNo.44ではバージョンを上げ忘れる。     面倒なので放置して今に至る。 -4.2 CHOCOのソース。本当は4.1(改)なのだが、なんかいろいろ変わった気がしたので。 -4.5 間はどこか、というと、デザイン大幅変更・コンボボーナス変更     オプション変更(予定)・5段階評価移行・曲位置表示追加     そういうこと。 -4.51 バグ修正    (低速時に譜面が表示されないことがある、オプションボーナスが追加されない) -4.52 コンボボーナス改定、ランク判定改善、オプション設定の内部処理変更 -4.53 総得点表示を9桁まで対応、判定が緩くなる、SSSランクの出現にはフルコンが必須となる。     その他もろもろ細部修正。 -4.54 リプレイコピー再生時に表示されないバグ     Appearanceのy座標表示がデフォルトのままだとNaNとなっていたバグ     プレイ後にリプレイを見るとそのデータをコピーできなくなるバグ フリーズおにぎりが使えない(判定されない)バグを修正しました。     また、得点計算が意図とは違う式になっていた問題を修正し、     減点の計算式を若干変更しました。 <既知のバグ>  Sp.Motion設定時にフリーズアローが加速および減速しない。 ------------------------------- 【現在の仕様】 --判定--  単位はぴったりから±フレーム数。 ショボーン範囲を超えるとウワァン  矢印・デフォルトソース  3.5倍速以上 [イイ,マターリ,ショボーン] = [2,3,4] 0.5倍速以下 [4,6,7]  1.0倍速以下 [3,5,6] 1.5倍速以下 [3,4,6] 2.0倍速以下 [3,4,5]  2.5倍速以下 [2,4,5] 3.0倍速以下 [2,4,5] 3.5倍速以下 [2,3,4]  矢印・ダラダラズソース  3.5倍速以上 [イイ,マターリ,ショボーン] = [3,4,5] 0.5倍速以下 [3,4,5]  1.0倍速以下 [3,4,5] 1.5倍速以下 [3,4,5] 2.0倍速以下 [3,4,5]  2.5倍速以下 [3,4,5] 3.0倍速以下 [2,4,5] 3.5倍速以下 [2,4,5]  キターは一律で1フレーム以内。  単位はぴったりから±フレーム数。 各範囲を超えて反応するとイクナイ  ショボーンはウワァンと同様の減点と、少なめのライフ減少があります。  コンボは切れませんのでご安心を。  凍矢・デフォルトソース  3.5倍速以上 [押し判定,離し判定] = [2,4] 0.5倍速以下 [5,8]  1.0倍速以下 [4,7] 1.5倍速以下 [4,7] 2.0倍速以下 [3,6]  2.5倍速以下 [3,5] 3.0倍速以下 [2,5] 3.5倍速以下 [2,4]  凍矢・ダラダラズソース デフォルトに同じ --ランク判定--  キター 10点、イイ 8点、マターリ 3点、ショボーン -2点、ウワァン -10点、キテマス 20点、イクナイ -15点  BasicScoreの配点は以上の通り。  矢印個数×10(キターの得点)+フリーズの個数×20(イクナイの得点)を分母とし、得点率で算出する。  CQ オールキター&キテマス判定 (制覇 conquerの略)  PF マターリ、ショボーン、ウワァン、イクナイがゼロ。  SSS 得点率95%かつショボーン、ウワァン、イクナイがゼロ。  SS 得点率91%  S  得点率87%  SA 得点率80% (以下デフォルト)  AA 得点率75%  A  得点率70%  B  得点率55%  C  得点率45%  D  得点率45%未満  沈 ゲームオーバー  X  AutoPlayもしくはPractice時に出る。  ランク判定の算出方法は以前と同様であるが、得点配分が変わり  BasicScoreの高得点率獲得が難しくなったため、上位のランクのみいじった。  ちなみに矢印だけに限って言うと、SSSを出すにはキター:イイ=75:25が必要となる。 --得点算出方法--  BasicScore + OptionBonus + ComboBonus で計算する。  ○BasicScore   上記のとおり、キタ- 10点、イイ 8点、マターリ 3点、ショボーン -2点、ウワァン -10点、キテマス 20点、イクナイ -15点  ○OptionBonus   判定時に毎回、(その判定のBasicScore)×(OptionPoint)を加算する。   その判定のBasicScore(随時変化)=op_pl OptionPoint=op_pt   式は   o_scr+=op_pl*op_pt (関数は_rootにあり、op_plは関数内のローカル関数)   OptionPointの各オプションの配分は以下の通り。   選択されたオプションの配分点をすべて足してOptionPointとしている。   ・Motion    Boost 6 (2.5倍速以上の設定のとき 8)    Brake 7   ・StepArea    Halfway   6    OldStyle  10    Stair    8    Traiangle 25    Random  100   ・Scroll    Reverse 6    Cross・R-Cross・Split・R-Split 12    Alternate・R-Alt 15   ・Dark(内部処理の関係により少々特殊)    どの場所を消しているかによってポイントが異なる。    あくまでオプション名ではないので注意。    ライフゲージ・判定・ステップゾーン 4    矢印 400 (暗譜になるため)   ・Appearance    Hidden・Sudden 13×AppearBonus    Replace 24    Shadow  17    AppearBonusとは? More>>で設定できるy座標によって決まる。    Hiddenの場合は(y座標)÷190、Suddenの場合は190÷(y座標)となる。    190とはデフォルトの出現・消失場所。    Replaceは上記が両方起こるためボーナスの対象にしなかった。   ・BarDrain    No Recover 15    Death 30  ○ComboBonus   各判定ごとに以下の計算式の値を足し、その後小数点以下を切り捨てる。   (_root[head+"combo"]*3+_root.kitasc*2+(_root.iisc+_root.kitesc)*1.5+_root.matsc/2+_root[head+"maxcombo"])*plus;   kitasc=キターの数、iisc=イイの数、kitesc=キテマスの数、matsc=マターリの数、combo=現在のコンボ数、maxcombo=最大コンボ数   headは通常矢印のときは空、フリーズアローのときはfが入り、判定された矢印の種類を見分ける。   また、フリーズアローのボーナスが相対的に小さくなるためフリーズアローのときはこれを2倍する(plusに値が入る)   失敗した場合、以下の計算式を引き、その後小数点以下を切り捨てる。   (_root[head+"combo2"]*(12*plus)+_root.kitasc*4+(_root.kitesc+_root.iisc)*2+_root.matsc+_root[head+"maxcombo"]*(24*plus))*plus;   combo2=失敗時のコンボ数、plus=矢印のとき 1、フリーズアローのとき 2(上と同様) その他については上と同様。   御覧の通り、コンボ数が多いほど多く点がひかれる計算式となっている。   通常矢印・フリーズアロー2つのコンボ数が100の倍数となったとき以下の計算式の値を足し、その後小数点以下を切り捨てる。   (kitasc-syosc-matsc-iknsc-uwasc)*_root.maxcombo+(iisc-syosc-matsc-iknsc-uwasc)*combo+(kitesc-iknsc)*fmaxcombo;   syosc=ショボーンの数、uwasc=ウワァンの数、iknsc=イクナイの数。maxcombo=通常矢印最大コンボ数、fmaxcombo=フリーズアロー最大コンボ数   タイミングを外すほどボーナス点が小さくなる。 --リプレイの概要について--  全体に触れると非常に長くなるため、流れのみを概略の形で説明する。  通常矢印・フリーズアローを問わず、原則として正しい位置から何フレームずれていたかを取得している。  なお、フリーズアローの離した地点はデータの形式上、7フレーム早いところまでしか追えない。  これについては現在いい案が思い浮かばないのでリプレイ公開当初からそのままとなっている。  また、何フレームずれていたかでは負の値が存在してしまうため、全体にショボーン判定+1を足しておく。  そうすることで、6フレーム早い(-6)であっても値は0となり、データがまとめやすい。  処理の流れはこうである。  <矢印判定時>   if(_root.replay!=true) _root.rep(j,rep_tim,""); //リプ関数   (rep_tim=main[curArr].count=ズレのフレーム数、j=右矢印、などの区別、""=矢印の種類の判別。通常か、フリーズか。)       //なお、判定用にchkという変数があるが、これは絶対値として利用されているため、新たに変数を作る必要があった。  <_root.rep()関数内の処理>   function rep(j,timing,head){ var tim=timing+8;            //負の値を無くす _root[head+"rep_chk"+j]+=tim+"X";    //「10」など2ケタの数字があるので、後で配列化できるように文字をつけて分けておく。   先ほどの「_root.rep(j,rep_tim,"")」に各々の文字が対応する。   これでリプレイデータの保存は終了である。  <リザルト画面での処理>   spiltを使い、2ケタの数字を文字に置き換える(16進数など)    rep2=rep2.split("10").join("a");・・・・・・・(16まで)   その後、先ほどのXでくっつける。    rep2=rep2.split("X").join("");   曲名・オプション設定をヘッダーに入れ、その後このデータを記述して出力する。   オプション設定はすべてIDを与えてあり、それによって判別できるようにしてあります。   また、通常のプレイ時にも同様の形をとり、同じ処理が出来るように関数ででまとめてあります。   ちなみに改行の挿入はこうなっています。特に解説はしませんが、ご了承ください。 rep_return = ""; rep_ret=int(chk_n/80); for(n=0; n<=rep_ret; n++){ var nn = 80*n; rep_return += _root.rep.substr(nn,80)+"\n"; } _root.rep=rep_return;  <読み込み時>   先ほどの方法を流用し、改行を取り除く。   また、オプション設定の読み込み、playボタンを押したときにおこなわれる処理をすべて行う。  <判定時>   16進数で保存したため、10進数に直す処理と、元の値に戻す(足した値を引く)作業が必要。   毎回charAt()で必要な文字をとりだしてから処理を行う。   基本的にはAutoPlayの流用で、   AutoPlayは0フレームになったら判定を行うが、これは各々記録した値のフレームになったら判定を行わせる、   というだけである。  フリーズアローの場合もほぼ同様だが、離し判定の場所がフリーズアローそのもののスプライト内にあることに注意。  また、1回あたり2つのデータが採られる。 仕様書なのでなんか偉そうに書いてみましたw こんな感じです。何かほかにも聞きたいことがございましたらなんでもお気軽にどうぞ。 リプレイデータの内部処理を書いてみましたが、なんだか仕様というより解説になりました。