ダラダラズ・グループ ダンおにソース仕様書 2009/12/30 Ver.4.71 (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となっていたバグ。     ・プレイ後にリプレイを見るとそのデータをコピーできなくなるバグ。  ・フリーズおにぎりが使えない(判定されない)バグ。     ・得点計算式が意図とは違うものになっていた問題。     --変更点     ・減点の計算式を若干変更。 -4.55 --バグフィクス     ・Stair,Traiangleのy座標がデフォルトのままになっていた問題。       →英語のスペルミスが原因というね・・・orz 恥ずかしい。     ・Sp.Motion設定時にフリーズアローが加速および減速しない問題。     --変更点     ・ソースのサイズを530x400に変更しました。(それに伴いレイアウト若干変更)     ・矢印消失時のエフェクトを若干変更しました。(やや重たい感覚になっていたのを解消) -4.56 --バグフィクス     ・ソースサイズを530x400にしたために、      曲終了後のフェードアウトが画面全体を覆わなくなっていた問題     ・フリーズアロー失敗時に、そのまま画面に残ってしまうことがあるバグ      影響範囲の作品すべて、この問題に関して修正してあります。     --変更点     ・曲終了後のフェードアウトで画面が完全に真っ黒になるようにした。     ・オプション設定で5倍速まで設定可能にした。     ・速度上限を7.5倍速までにした。     ・クソ重いので得点表示のグローを消しました。     ・上記に代わって視認性向上のため、得点表示の文字を太字にしました。     --追加点     ・BarDrainにAutoOnigiriを追加。得点は、総合得点を0.7倍する形。 -4.57 --バグフィクス     ・難易度切り替えのとき、初回時のみ2回押す必要があったバグを修正。      原因は変数リセットをしていなかったため。 -4.60 --アップデート     ・ティックルさんソースVer.3.5.1相当にアップデート。     ・5,7,7i,9,11key全対応、9,11keyにまだバグややあり。横幅変更必要なし(の予定)     ・開始位置を選べるゲージを搭載。     --変更点     ・ライフゲージを画面下部に移動させ、動作も変更。     ・矢印消失エフェクトの動く時間を短縮化。(20f→15f)     ・タイトル画面下部の著作表示のフォントを変更     ・オプション画面:BarDrainをB.D/Autoに変更。     --内部修正     ・曲の進捗ゲージの動作方法を変更。軽くなりました。     ・リプレイデータ取得を簡略化。(メモリ消費がわずかに減る程度)     ・リプレイデータを11keyまで拡張。     ・Appearanceの動作方式を軽量化。     --バグフィクス・細かい修正点     ・タイトル画面の自サイトリンクを現在のページに修正。    ・内部処理の整理によって、結果画面のグラフ表示が濃く表示されるようになった。     ・その他もろもろ (忘れた) -4.61 --9・11key関連のバグフィクス     ・矢印ID7以上のy座標異常を修正。     ・11keyのデフォルトのScroll設定を修正。     ・11keyプレイ時に歌詞表示がステップゾーンとかぶる問題を修正。     ・9keyの横幅問題を解決。なんとか横幅400のまま収まりました。 -4.62 --修正関連     ・判定を少し甘くしました。     ・エフェクトを若干変更しました。 -4.63 --バグフィクス     ・2譜面目より先が読み込まれないバグを修正。 -4.70 --アップデート     ・ティックルさんソースVer.3.10.0相当にアップデート。      (ライフゲージ動作の変更、「オブジェ」スプライトの廃止は行っていない)     --追加点     ・11L keyに対応。     ・11key系列のScrollにReverse系を追加。     ・SterAreaの「2step」とScroll系オプションを共存可能にした。     --バグフィクス     ・Dark設定で矢印を指定してプレイを開始すると、Dark設定を解除しても元に戻らなくなる問題。     ・11keyのDark設定で矢印を指定しても、5key部分の矢印が隠れない問題。     ・11keyでScrollをデフォルト(11k-Def)のままで開始すると、設定が「Default」になってしまう問題。     ・Scrollオプション関連のデータが謎(無駄)な扱いをされていた問題(?)。     ・その他おもに11key関連のバグフィクス。 -4.71 --バグフィクス     ・Darkの「more」設定で、変数表示が行われていなかった問題。     ・色変化設定が正しくできなかった問題。     ・「AutoPlay」設定時にプレイ回数が増えてしまう問題。     ・再プレイ時に設定を変更してもAutoMode関連のオプションは元の設定のままなっていた問題。     ・リプレイデータに譜面最終地点での速度が記録されていた問題。     ・フェードイン設定時にクリア回数が増えてしまう、およびハイスコアが更新されてしまう問題。     ・オプションボーナスが適用されていなかった問題。(Ver.4.70についても修正済み)     ・フリーズアローのリプレイ読み込みに問題があり、リプレイ再生がおかしくなっていた問題。(対象:Ver.4.60〜修正済み)     ・リザルト画面における速度表示の修正。 --既知のバグ--  とくになし ------------------------------- 【現在の仕様】 --判定--  単位はぴったりから±フレーム数。 ショボーン範囲を超えるとウワァン  矢印・デフォルトソース  3.5倍速以上 [イイ,マターリ,ショボーン] = [3,4,5] 0.5倍速以下 [7,8,9]  1.0倍速以下 [6,7,8] 1.5倍速以下 [5,7,8] 2.0倍速以下 [5,6,8]  2.5倍速以下 [4,5,7] 3.0倍速以下 [4,5,6] 3.5倍速以下 [3,5,6]  矢印・ダラダラズソース  3.5倍速以上 [イイ,マターリ,ショボーン] = [3,4,5] 0.5倍速以下 [4,5,6]  1.0倍速以下 [4,5,6] 1.5倍速以下 [4,5,6] 2.0倍速以下 [4,5,6]  2.5倍速以下 [3,4,5] 3.0倍速以下 [3,4,5] 3.5倍速以下 [3,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座標)÷215、Suddenの場合は215÷(y座標)となる。    215とはデフォルトの出現・消失場所。    Replaceは上記が両方起こるためボーナスの対象にしなかった。   ・BarDrain    No Recover 15    Death 30    AutoOnigiri 総得点を0.7倍する  ○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"]*(13*plus)+_root.kitasc*4+(_root.kitesc+_root.iisc)*2+_root.matsc+_root[head+"maxcombo"]*(26*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 こんな感じです。何かほかにも聞きたいことがございましたらなんでもお気軽にどうぞ。 リプレイデータの内部処理を書いてみましたが、なんだか仕様というより解説になりました。