OSDN Git Service

#xxxxx score.iniの保存時に、Auto演奏フラグとしてCapture設定の情報を保存しようとしてNullRef例外が発生していたのを修正。
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / ステージ / 07.演奏 / CStage演奏画面共通.cs
index 7fa8e14..0e70f24 100644 (file)
@@ -1,11 +1,13 @@
-using System;\r
+using System;\r
 using System.Collections.Generic;\r
 using System.Text;\r
+using System.Runtime;\r
 using System.Runtime.InteropServices;\r
 using System.Drawing;\r
 using System.Drawing.Imaging;\r
 using System.IO;\r
 using System.Diagnostics;\r
+using System.Threading;\r
 using SlimDX;\r
 using SlimDX.Direct3D9;\r
 using FDK;\r
@@ -15,658 +17,1000 @@ namespace DTXMania
        /// <summary>\r
        /// 演奏画面の共通クラス (ドラム演奏画面, ギター演奏画面の継承元)\r
        /// </summary>\r
-       internal abstract class CStage演奏画面共通 : CStage\r
+       internal partial class CStage演奏画面共通 : CStage\r
        {\r
-               // プロパティ\r
+               #region [Member_Activities]\r
+               CAct演奏AVI actAVI;\r
+               CAct演奏BGA actBGA;\r
+               CAct演奏チップファイアGB actChipFireGB;\r
+               CAct演奏Combo共通 actCombo;\r
+               CAct演奏Danger共通 actDANGER;\r
+               CActFIFOBlack actFI;\r
+               CActFIFOBlack actFO;\r
+               CActFIFOWhite actFOClear;\r
+               CAct演奏ゲージ共通 actGauge;\r
+               CAct演奏判定文字列共通 actJudgeString;\r
+               CAct演奏DrumsレーンフラッシュD actLaneFlushD;\r
+               CAct演奏レーンフラッシュGB共通 actLaneFlushGB;\r
+               CActオプションパネル actOptionPanel;\r
+               CAct演奏パネル文字列 actPanel;\r
+               CAct演奏演奏情報 actPlayInfo;\r
+               CAct演奏RGB共通 actRGB;\r
+               CAct演奏スコア共通 actScore;\r
+               CAct演奏ステージ失敗 actStageFailed;\r
+               CAct演奏WailingBonus共通 actWailingBonus;\r
+               CAct演奏スクロール速度 act譜面スクロール速度;\r
+               CAct演奏DrumsチップファイアD actChipFireD;\r
+               // #24074 2011.01.23 add ikanick\r
+               CAct演奏グラフ actGraph;\r
+               CAct演奏Drumsパッド actPad;\r
+               CAct演奏Lane actLane;\r
+               #endregion\r
 \r
-               public bool bAUTOでないチップが1つでもバーを通過した\r
+               bool bPAUSE;\r
+               STDGBSValue<bool> b演奏にMIDI入力を使った;\r
+               STDGBSValue<bool> b演奏にキーボードを使った;\r
+               STDGBSValue<bool> b演奏にジョイパッドを使った;\r
+               STDGBSValue<bool> b演奏にマウスを使った;\r
+\r
+               CCounter ctWailingチップ模様アニメ;\r
+               STDGBSValue<CCounter> ctチップ模様アニメ;\r
+\r
+               E演奏画面の戻り値 eフェードアウト完了時の戻り値;\r
+\r
+               STDGBSValue<CHitCountOfRank> nヒット数_Auto含まない;\r
+               STDGBSValue<CHitCountOfRank> nヒット数_Auto含む;\r
+               // #35411 2015.08.21 chnmr0 add\r
+               STDGBSValue<CHitCountOfRank> nヒット数_TargetGhost;\r
+               STDGBSValue<int> nコンボ数_TargetGhost;\r
+               STDGBSValue<int> n最大コンボ数_TargetGhost;\r
+               int n現在のトップChip = -1;\r
+               int[] n最後に再生したBGMの実WAV番号 = new int[50];\r
+               EChannel e最後に再生したHHのチャンネル番号;\r
+               // #23921 2011.1.4 yyagi: change "int" to "List<int>", for recording multiple wav No.\r
+               List<int> L最後に再生したHHの実WAV番号;\r
+               // #26388 2011.11.8 yyagi: change "n最後に再生した実WAV番号.GUITAR" and "n最後に再生した実WAV番号.BASS"\r
+               STPadValue<int> n最後に再生した実WAV番号;\r
+               // #24820 2013.1.21 yyagi まずは単純にAdd/Removeを1個のキューでまとめて管理するやり方で設計する\r
+               volatile Queue<STMixer> queueMixerSound;\r
+               DateTime dtLastQueueOperation;\r
+               bool bIsDirectSound;\r
+               double db再生速度;\r
+               bool bValidScore;\r
+               bool bフィルイン中; // drums only\r
+\r
+               STDGBSValue<Queue<CChip>> queWailing;\r
+               STDGBSValue<CChip> r現在の歓声Chip;\r
+               STPadValue<CChip> r空打ちドラムチップ = new STPadValue<CChip>();\r
+               CChip r現在の空うちギターChip;\r
+               ST空打ち r現在の空うちドラムChip;\r
+               CChip r現在の空うちベースChip;\r
+               CChip r次にくるギターChip;\r
+               CChip r次にくるベースChip;\r
+\r
+               CTexture txWailing枠;\r
+               CTexture txチップ;\r
+               CTexture txチップGB;\r
+               CTexture txヒットバー;\r
+               CTexture txヒットバーGB;\r
+               CTexture tx背景;\r
+\r
+               CInvisibleChip cInvisibleChip;\r
+               CWailingChip共通[] cWailingChip;\r
+\r
+               STDGBSValue<CScoreIni.C演奏記録> record;\r
+\r
+               public CStage演奏画面共通()\r
                {\r
-                       get;\r
-                       protected set;\r
+                       base.eステージID = CStage.Eステージ.演奏;\r
+                       base.eフェーズID = CStage.Eフェーズ.共通_通常状態;\r
+                       base.b活性化してない = true;\r
+                       base.list子Activities.Add(this.actPad = new CAct演奏Drumsパッド());\r
+                       base.list子Activities.Add(this.actChipFireD = new CAct演奏DrumsチップファイアD());\r
+                       base.list子Activities.Add(this.actChipFireGB = new CAct演奏チップファイアGB());\r
+                       base.list子Activities.Add(this.actStageFailed = new CAct演奏ステージ失敗());\r
+                       base.list子Activities.Add(this.actDANGER = new CAct演奏Danger共通());\r
+                       base.list子Activities.Add(this.actAVI = new CAct演奏AVI());\r
+                       base.list子Activities.Add(this.actBGA = new CAct演奏BGA());\r
+                       base.list子Activities.Add(this.actPanel = new CAct演奏パネル文字列());\r
+                       base.list子Activities.Add(this.act譜面スクロール速度 = new CAct演奏スクロール速度());\r
+                       base.list子Activities.Add(this.actWailingBonus = new CAct演奏WailingBonus共通());\r
+                       base.list子Activities.Add(this.actScore = new CAct演奏スコア共通());\r
+                       base.list子Activities.Add(this.actRGB = new CAct演奏RGB共通());\r
+                       base.list子Activities.Add(this.actLaneFlushD = new CAct演奏DrumsレーンフラッシュD());\r
+                       base.list子Activities.Add(this.actLaneFlushGB = new CAct演奏レーンフラッシュGB共通());\r
+                       base.list子Activities.Add(this.actJudgeString = new CAct演奏判定文字列共通());\r
+                       base.list子Activities.Add(this.actGauge = new CAct演奏ゲージ共通());\r
+                       base.list子Activities.Add(this.actGraph = new CAct演奏グラフ());\r
+                       base.list子Activities.Add(this.actCombo = new CAct演奏Combo共通());\r
+                       base.list子Activities.Add(this.actPlayInfo = new CAct演奏演奏情報());\r
+                       base.list子Activities.Add(this.actFI = new CActFIFOBlack());\r
+                       base.list子Activities.Add(this.actFO = new CActFIFOBlack());\r
+                       base.list子Activities.Add(this.actFOClear = new CActFIFOWhite());\r
+                       base.list子Activities.Add(this.actLane = new CAct演奏Lane());\r
+                       list子Activities.Add(actOptionPanel = new CActオプションパネル(EOptionPanelDirection.Vertical));\r
                }\r
 \r
-               // メソッド\r
-\r
-               public void t演奏結果を格納する・ドラム( out CScoreIni.C演奏記録 Drums )\r
+               #region [ PlayRecordSave ]\r
+               private void t演奏結果を格納する_ドラム()\r
                {\r
-                       Drums = new CScoreIni.C演奏記録();\r
-\r
-                       if ( CDTXMania.DTX.bチップがある.Drums && !CDTXMania.ConfigIni.bギタレボモード )\r
-                       {\r
-                               Drums.nスコア = this.actScore.Get( E楽器パート.DRUMS );\r
-                               Drums.dbゲーム型スキル値 = CScoreIni.tゲーム型スキルを計算して返す( CDTXMania.DTX.LEVEL.Drums, CDTXMania.DTX.n可視チップ数.Drums, this.nヒット数・Auto含まない.Drums.Perfect, this.actCombo.n現在のコンボ数.Drums最高値 );\r
-                               Drums.db演奏型スキル値 = CScoreIni.t演奏型スキルを計算して返す( CDTXMania.DTX.n可視チップ数.Drums, this.nヒット数・Auto含まない.Drums.Perfect, this.nヒット数・Auto含まない.Drums.Great, this.nヒット数・Auto含まない.Drums.Good, this.nヒット数・Auto含まない.Drums.Poor, this.nヒット数・Auto含まない.Drums.Miss );\r
-                               Drums.nPerfect数 = CDTXMania.ConfigIni.bドラムが全部オートプレイである ? this.nヒット数・Auto含む.Drums.Perfect : this.nヒット数・Auto含まない.Drums.Perfect;\r
-                               Drums.nGreat数 = CDTXMania.ConfigIni.bドラムが全部オートプレイである ? this.nヒット数・Auto含む.Drums.Great : this.nヒット数・Auto含まない.Drums.Great;\r
-                               Drums.nGood数 = CDTXMania.ConfigIni.bドラムが全部オートプレイである ? this.nヒット数・Auto含む.Drums.Good : this.nヒット数・Auto含まない.Drums.Good;\r
-                               Drums.nPoor数 = CDTXMania.ConfigIni.bドラムが全部オートプレイである ? this.nヒット数・Auto含む.Drums.Poor : this.nヒット数・Auto含まない.Drums.Poor;\r
-                               Drums.nMiss数 = CDTXMania.ConfigIni.bドラムが全部オートプレイである ? this.nヒット数・Auto含む.Drums.Miss : this.nヒット数・Auto含まない.Drums.Miss;\r
-                               Drums.nPerfect数・Auto含まない = this.nヒット数・Auto含まない.Drums.Perfect;\r
-                               Drums.nGreat数・Auto含まない = this.nヒット数・Auto含まない.Drums.Great;\r
-                               Drums.nGood数・Auto含まない = this.nヒット数・Auto含まない.Drums.Good;\r
-                               Drums.nPoor数・Auto含まない = this.nヒット数・Auto含まない.Drums.Poor;\r
-                               Drums.nMiss数・Auto含まない = this.nヒット数・Auto含まない.Drums.Miss;\r
-                               Drums.n最大コンボ数 = this.actCombo.n現在のコンボ数.Drums最高値;\r
-                               Drums.n全チップ数 = CDTXMania.DTX.n可視チップ数.Drums;\r
-                               for ( int i = 0; i < 10; i++ )\r
-                               {\r
-                                       Drums.bAutoPlay[ i ] = CDTXMania.ConfigIni.bAutoPlay[ i ];\r
-                               }\r
-                               Drums.bTight = CDTXMania.ConfigIni.bTight;\r
-                               for ( int i = 0; i < 3; i++ )\r
-                               {\r
-                                       Drums.bSudden[ i ] = CDTXMania.ConfigIni.bSudden[ i ];\r
-                                       Drums.bHidden[ i ] = CDTXMania.ConfigIni.bHidden[ i ];\r
-                                       Drums.bReverse[ i ] = CDTXMania.ConfigIni.bReverse[ i ];\r
-                                       Drums.eRandom[ i ] = CDTXMania.ConfigIni.eRandom[ i ];\r
-                                       Drums.bLight[ i ] = CDTXMania.ConfigIni.bLight[ i ];\r
-                                       Drums.bLeft[ i ] = CDTXMania.ConfigIni.bLeft[ i ];\r
-                                       Drums.f譜面スクロール速度[ i ] = ( (float) ( CDTXMania.ConfigIni.n譜面スクロール速度[ i ] + 1 ) ) * 0.5f;\r
-                               }\r
-                               Drums.eDark = CDTXMania.ConfigIni.eDark;\r
-                               Drums.n演奏速度分子 = CDTXMania.ConfigIni.n演奏速度;\r
+                       record.Drums = new CScoreIni.C演奏記録();\r
+                       CScoreIni.C演奏記録 Drums = Record.Drums;\r
+                       bool allauto = CDTXMania.Instance.ConfigIni.bIsAutoPlay(EPart.Drums);\r
+                       if (CDTXMania.Instance.DTX.bチップがある.Drums && CDTXMania.Instance.ConfigIni.bDrums有効)\r
+                       {\r
+                               Drums.nスコア = (long)this.actScore.Get(EPart.Drums);\r
+                               Drums.dbゲーム型スキル値 = CScoreIni.tゲーム型スキルを計算して返す(CDTXMania.Instance.DTX.LEVEL.Drums, CDTXMania.Instance.DTX.n可視チップ数.Drums, this.nヒット数_Auto含まない.Drums.Perfect,\r
+                                               this.actCombo.dgbコンボ数.Drums.n最高値,\r
+                                               EPart.Drums);\r
+                               Drums.db演奏型スキル値 = CScoreIni.t演奏型スキルを計算して返す(CDTXMania.Instance.DTX.n可視チップ数.Drums, this.nヒット数_Auto含まない.Drums.Perfect, this.nヒット数_Auto含まない.Drums.Great, this.nヒット数_Auto含まない.Drums.Good, this.nヒット数_Auto含まない.Drums.Poor, this.nヒット数_Auto含まない.Drums.Miss, EPart.Drums, true);\r
+                               Drums.nPerfect数 = allauto ? this.nヒット数_Auto含む.Drums.Perfect : this.nヒット数_Auto含まない.Drums.Perfect;\r
+                               Drums.nGreat数 = allauto ? this.nヒット数_Auto含む.Drums.Great : this.nヒット数_Auto含まない.Drums.Great;\r
+                               Drums.nGood数 = allauto ? this.nヒット数_Auto含む.Drums.Good : this.nヒット数_Auto含まない.Drums.Good;\r
+                               Drums.nPoor数 = allauto ? this.nヒット数_Auto含む.Drums.Poor : this.nヒット数_Auto含まない.Drums.Poor;\r
+                               Drums.nMiss数 = allauto ? this.nヒット数_Auto含む.Drums.Miss : this.nヒット数_Auto含まない.Drums.Miss;\r
+                               Drums.nPerfect数_Auto含まない = this.nヒット数_Auto含まない.Drums.Perfect;\r
+                               Drums.nGreat数_Auto含まない = this.nヒット数_Auto含まない.Drums.Great;\r
+                               Drums.nGood数_Auto含まない = this.nヒット数_Auto含まない.Drums.Good;\r
+                               Drums.nPoor数_Auto含まない = this.nヒット数_Auto含まない.Drums.Poor;\r
+                               Drums.nMiss数_Auto含まない = this.nヒット数_Auto含まない.Drums.Miss;\r
+                               Drums.n最大コンボ数 = this.actCombo.dgbコンボ数.Drums.n最高値;\r
+                               Drums.n全チップ数 = CDTXMania.Instance.DTX.n可視チップ数.Drums;\r
+                               for ( EPad i = EPad.Min; i < EPad.BassPadMax; i++ )\r
+                               {\r
+                                       Drums.bAutoPlay[i] = CDTXMania.Instance.ConfigIni.bAutoPlay[i];\r
+                               }\r
+                               Drums.bTight = CDTXMania.Instance.ConfigIni.bTight;\r
+                               for (EPart i = EPart.Drums; i <= EPart.Bass; i++)\r
+                               {\r
+                                       Drums.eSudHidInv[i] = CDTXMania.Instance.ConfigIni.eSudHidInv[i];\r
+                                       Drums.bReverse[i] = CDTXMania.Instance.ConfigIni.bReverse[i];\r
+                                       Drums.eRandom[i] = CDTXMania.Instance.ConfigIni.eRandom[i];\r
+                                       Drums.bLight[i] = CDTXMania.Instance.ConfigIni.bLight[i];\r
+                                       Drums.f譜面スクロール速度[i] = ((float)(CDTXMania.Instance.ConfigIni.nScrollSpeed[i] + 1)) * 0.5f;\r
+                               }\r
+                               Drums.eDark = CDTXMania.Instance.ConfigIni.eDark;\r
+                               Drums.n演奏速度分子 = CDTXMania.Instance.ConfigIni.nPlaySpeed;\r
                                Drums.n演奏速度分母 = 20;\r
-                               Drums.eHHGroup = CDTXMania.ConfigIni.eHHGroup;\r
-                               Drums.eFTGroup = CDTXMania.ConfigIni.eFTGroup;\r
-                               Drums.eCYGroup = CDTXMania.ConfigIni.eCYGroup;\r
-                               Drums.eHitSoundPriorityHH = CDTXMania.ConfigIni.eHitSoundPriorityHH;\r
-                               Drums.eHitSoundPriorityFT = CDTXMania.ConfigIni.eHitSoundPriorityFT;\r
-                               Drums.eHitSoundPriorityCY = CDTXMania.ConfigIni.eHitSoundPriorityCY;\r
-                               Drums.bGuitar有効 = CDTXMania.ConfigIni.bGuitar有効;\r
-                               Drums.bDrums有効 = CDTXMania.ConfigIni.bDrums有効;\r
-                               Drums.bSTAGEFAILED有効 = CDTXMania.ConfigIni.bSTAGEFAILED有効;\r
-                               Drums.eダメージレベル = CDTXMania.ConfigIni.eダメージレベル;\r
+                               Drums.e譜面レーンタイプ.Drums = CDTXMania.Instance.DTX.n使用レーン数.Drums;\r
+                               Drums.e譜面レーンタイプ.Guitar= CDTXMania.Instance.DTX.n使用レーン数.Guitar;\r
+                               Drums.e譜面レーンタイプ.Bass  = CDTXMania.Instance.DTX.n使用レーン数.Bass;\r
+                               Drums.eHHGroup = CDTXMania.Instance.ConfigIni.eHHGroup.Value;\r
+                               Drums.eFTGroup = CDTXMania.Instance.ConfigIni.eFTGroup.Value;\r
+                               Drums.eCYGroup = CDTXMania.Instance.ConfigIni.eCYGroup.Value;\r
+                               Drums.eHitSoundPriorityHH = CDTXMania.Instance.ConfigIni.eHitSoundPriorityHH.Value;\r
+                               Drums.eHitSoundPriorityFT = CDTXMania.Instance.ConfigIni.eHitSoundPriorityFT.Value;\r
+                               Drums.eHitSoundPriorityCY = CDTXMania.Instance.ConfigIni.eHitSoundPriorityCY.Value;\r
+                               Drums.bGuitar有効 = CDTXMania.Instance.ConfigIni.bGuitar有効;\r
+                               Drums.bDrums有効 = CDTXMania.Instance.ConfigIni.bDrums有効;\r
+                               Drums.bSTAGEFAILED有効 = CDTXMania.Instance.ConfigIni.bStageFailed;\r
+                               Drums.eダメージレベル = CDTXMania.Instance.ConfigIni.eDamageLevel;\r
+                               Drums.eMetronome = CDTXMania.Instance.ConfigIni.eClickType;\r
                                Drums.b演奏にキーボードを使用した = this.b演奏にキーボードを使った.Drums;\r
                                Drums.b演奏にMIDI入力を使用した = this.b演奏にMIDI入力を使った.Drums;\r
                                Drums.b演奏にジョイパッドを使用した = this.b演奏にジョイパッドを使った.Drums;\r
                                Drums.b演奏にマウスを使用した = this.b演奏にマウスを使った.Drums;\r
-                               Drums.nPerfectになる範囲ms = CDTXMania.nPerfect範囲ms;\r
-                               Drums.nGreatになる範囲ms = CDTXMania.nGreat範囲ms;\r
-                               Drums.nGoodになる範囲ms = CDTXMania.nGood範囲ms;\r
-                               Drums.nPoorになる範囲ms = CDTXMania.nPoor範囲ms;\r
+                               Drums.nPerfectになる範囲ms = CDTXMania.Instance.nPerfect範囲ms;\r
+                               Drums.nGreatになる範囲ms = CDTXMania.Instance.nGreat範囲ms;\r
+                               Drums.nGoodになる範囲ms = CDTXMania.Instance.nGood範囲ms;\r
+                               Drums.nPoorになる範囲ms = CDTXMania.Instance.nPoor範囲ms;\r
                                Drums.strDTXManiaのバージョン = CDTXMania.VERSION;\r
                                Drums.最終更新日時 = DateTime.Now.ToString();\r
-                               Drums.Hash = CScoreIni.t演奏セクションのMD5を求めて返す( Drums );\r
+                               // #35461 chnmr0 add\r
+                               Drums.nRisky = CDTXMania.Instance.ConfigIni.nRisky;\r
+                               // #35417 chnmr0 add\r
+                               Drums.bギターとベースを入れ替えた = CDTXMania.Instance.ConfigIni.bIsSwappedGuitarBass;\r
                        }\r
                }\r
-               public void t演奏結果を格納する・ギター( out CScoreIni.C演奏記録 Guitar )\r
+               private void t演奏結果を格納する_ギター()\r
                {\r
-                       Guitar = new CScoreIni.C演奏記録();\r
-\r
-                       if ( CDTXMania.DTX.bチップがある.Guitar )\r
-                       {\r
-                               Guitar.nスコア = this.actScore.Get( E楽器パート.GUITAR );\r
-                               Guitar.dbゲーム型スキル値 = CScoreIni.tゲーム型スキルを計算して返す( CDTXMania.DTX.LEVEL.Guitar, CDTXMania.DTX.n可視チップ数.Guitar, this.nヒット数・Auto含まない.Guitar.Perfect, this.actCombo.n現在のコンボ数.Guitar最高値 );\r
-                               Guitar.db演奏型スキル値 = CScoreIni.t演奏型スキルを計算して返す( CDTXMania.DTX.n可視チップ数.Guitar, this.nヒット数・Auto含まない.Guitar.Perfect, this.nヒット数・Auto含まない.Guitar.Great, this.nヒット数・Auto含まない.Guitar.Good, this.nヒット数・Auto含まない.Guitar.Poor, this.nヒット数・Auto含まない.Guitar.Miss );\r
-                               Guitar.nPerfect数 = CDTXMania.ConfigIni.bAutoPlay.Guitar ? this.nヒット数・Auto含む.Guitar.Perfect : this.nヒット数・Auto含まない.Guitar.Perfect;\r
-                               Guitar.nGreat数 = CDTXMania.ConfigIni.bAutoPlay.Guitar ? this.nヒット数・Auto含む.Guitar.Great : this.nヒット数・Auto含まない.Guitar.Great;\r
-                               Guitar.nGood数 = CDTXMania.ConfigIni.bAutoPlay.Guitar ? this.nヒット数・Auto含む.Guitar.Good : this.nヒット数・Auto含まない.Guitar.Good;\r
-                               Guitar.nPoor数 = CDTXMania.ConfigIni.bAutoPlay.Guitar ? this.nヒット数・Auto含む.Guitar.Poor : this.nヒット数・Auto含まない.Guitar.Poor;\r
-                               Guitar.nMiss数 = CDTXMania.ConfigIni.bAutoPlay.Guitar ? this.nヒット数・Auto含む.Guitar.Miss : this.nヒット数・Auto含まない.Guitar.Miss;\r
-                               Guitar.nPerfect数・Auto含まない = this.nヒット数・Auto含まない.Guitar.Perfect;\r
-                               Guitar.nGreat数・Auto含まない = this.nヒット数・Auto含まない.Guitar.Great;\r
-                               Guitar.nGood数・Auto含まない = this.nヒット数・Auto含まない.Guitar.Good;\r
-                               Guitar.nPoor数・Auto含まない = this.nヒット数・Auto含まない.Guitar.Poor;\r
-                               Guitar.nMiss数・Auto含まない = this.nヒット数・Auto含まない.Guitar.Miss;\r
-                               Guitar.n最大コンボ数 = this.actCombo.n現在のコンボ数.Guitar最高値;\r
-                               Guitar.n全チップ数 = CDTXMania.DTX.n可視チップ数.Guitar;\r
-                               for ( int i = 0; i < 10; i++ )\r
-                               {\r
-                                       Guitar.bAutoPlay[ i ] = CDTXMania.ConfigIni.bAutoPlay[ i ];\r
-                               }\r
-                               Guitar.bTight = CDTXMania.ConfigIni.bTight;\r
-                               for ( int i = 0; i < 3; i++ )\r
-                               {\r
-                                       Guitar.bSudden[ i ] = CDTXMania.ConfigIni.bSudden[ i ];\r
-                                       Guitar.bHidden[ i ] = CDTXMania.ConfigIni.bHidden[ i ];\r
-                                       Guitar.bReverse[ i ] = CDTXMania.ConfigIni.bReverse[ i ];\r
-                                       Guitar.eRandom[ i ] = CDTXMania.ConfigIni.eRandom[ i ];\r
-                                       Guitar.bLight[ i ] = CDTXMania.ConfigIni.bLight[ i ];\r
-                                       Guitar.bLeft[ i ] = CDTXMania.ConfigIni.bLeft[ i ];\r
-                                       Guitar.f譜面スクロール速度[ i ] = ( (float) ( CDTXMania.ConfigIni.n譜面スクロール速度[ i ] + 1 ) ) * 0.5f;\r
-                               }\r
-                               Guitar.eDark = CDTXMania.ConfigIni.eDark;\r
-                               Guitar.n演奏速度分子 = CDTXMania.ConfigIni.n演奏速度;\r
+                       record.Guitar = new CScoreIni.C演奏記録();\r
+                       CScoreIni.C演奏記録 Guitar = Record.Guitar;\r
+                       bool allauto = CDTXMania.Instance.ConfigIni.bIsAutoPlay(EPart.Guitar);\r
+                       if (CDTXMania.Instance.DTX.bチップがある.Guitar)\r
+                       {\r
+                               Guitar.nスコア = (long)this.actScore.Get(EPart.Guitar);\r
+                               Guitar.dbゲーム型スキル値 = CScoreIni.tゲーム型スキルを計算して返す(CDTXMania.Instance.DTX.LEVEL.Guitar, CDTXMania.Instance.DTX.n可視チップ数.Guitar, this.nヒット数_Auto含まない.Guitar.Perfect, this.actCombo.dgbコンボ数.Guitar.n最高値, EPart.Guitar);\r
+                               Guitar.db演奏型スキル値 = CScoreIni.t演奏型スキルを計算して返す(CDTXMania.Instance.DTX.n可視チップ数.Guitar, this.nヒット数_Auto含まない.Guitar.Perfect, this.nヒット数_Auto含まない.Guitar.Great, this.nヒット数_Auto含まない.Guitar.Good, this.nヒット数_Auto含まない.Guitar.Poor, this.nヒット数_Auto含まない.Guitar.Miss, EPart.Guitar, true);\r
+                               Guitar.nPerfect数 = allauto ? this.nヒット数_Auto含む.Guitar.Perfect : this.nヒット数_Auto含まない.Guitar.Perfect;\r
+                               Guitar.nGreat数 = allauto ? this.nヒット数_Auto含む.Guitar.Great : this.nヒット数_Auto含まない.Guitar.Great;\r
+                               Guitar.nGood数 = allauto ? this.nヒット数_Auto含む.Guitar.Good : this.nヒット数_Auto含まない.Guitar.Good;\r
+                               Guitar.nPoor数 = allauto ? this.nヒット数_Auto含む.Guitar.Poor : this.nヒット数_Auto含まない.Guitar.Poor;\r
+                               Guitar.nMiss数 = allauto ? this.nヒット数_Auto含む.Guitar.Miss : this.nヒット数_Auto含まない.Guitar.Miss;\r
+                               Guitar.nPerfect数_Auto含まない = this.nヒット数_Auto含まない.Guitar.Perfect;\r
+                               Guitar.nGreat数_Auto含まない = this.nヒット数_Auto含まない.Guitar.Great;\r
+                               Guitar.nGood数_Auto含まない = this.nヒット数_Auto含まない.Guitar.Good;\r
+                               Guitar.nPoor数_Auto含まない = this.nヒット数_Auto含まない.Guitar.Poor;\r
+                               Guitar.nMiss数_Auto含まない = this.nヒット数_Auto含まない.Guitar.Miss;\r
+                               Guitar.n最大コンボ数 = this.actCombo.dgbコンボ数.Guitar.n最高値;\r
+                               Guitar.n全チップ数 = CDTXMania.Instance.DTX.n可視チップ数.Guitar;\r
+                               for (EPad i = EPad.Min; i < EPad.BassPadMax; i++)\r
+                               {\r
+                                       Guitar.bAutoPlay[i] = CDTXMania.Instance.ConfigIni.bAutoPlay[i];\r
+                               }\r
+                               Guitar.bTight = CDTXMania.Instance.ConfigIni.bTight;\r
+                               for (EPart i = EPart.Drums; i <= EPart.Bass; i++)\r
+                               {\r
+                                       Guitar.eSudHidInv[i] = CDTXMania.Instance.ConfigIni.eSudHidInv[i];\r
+                                       Guitar.bReverse[i] = CDTXMania.Instance.ConfigIni.bReverse[i];\r
+                                       Guitar.eRandom[i] = CDTXMania.Instance.ConfigIni.eRandom[i];\r
+                                       Guitar.bLight[i] = CDTXMania.Instance.ConfigIni.bLight[i];\r
+                                       Guitar.f譜面スクロール速度[i] = ((float)(CDTXMania.Instance.ConfigIni.nScrollSpeed[i] + 1)) * 0.5f;\r
+                               }\r
+                               Guitar.eDark = CDTXMania.Instance.ConfigIni.eDark;\r
+                               Guitar.n演奏速度分子 = CDTXMania.Instance.ConfigIni.nPlaySpeed;\r
                                Guitar.n演奏速度分母 = 20;\r
-                               Guitar.eHHGroup = CDTXMania.ConfigIni.eHHGroup;\r
-                               Guitar.eFTGroup = CDTXMania.ConfigIni.eFTGroup;\r
-                               Guitar.eCYGroup = CDTXMania.ConfigIni.eCYGroup;\r
-                               Guitar.eHitSoundPriorityHH = CDTXMania.ConfigIni.eHitSoundPriorityHH;\r
-                               Guitar.eHitSoundPriorityFT = CDTXMania.ConfigIni.eHitSoundPriorityFT;\r
-                               Guitar.eHitSoundPriorityCY = CDTXMania.ConfigIni.eHitSoundPriorityCY;\r
-                               Guitar.bGuitar有効 = CDTXMania.ConfigIni.bGuitar有効;\r
-                               Guitar.bDrums有効 = CDTXMania.ConfigIni.bDrums有効;\r
-                               Guitar.bSTAGEFAILED有効 = CDTXMania.ConfigIni.bSTAGEFAILED有効;\r
-                               Guitar.eダメージレベル = CDTXMania.ConfigIni.eダメージレベル;\r
+                               Guitar.eHHGroup = CDTXMania.Instance.ConfigIni.eHHGroup;\r
+                               Guitar.eFTGroup = CDTXMania.Instance.ConfigIni.eFTGroup;\r
+                               Guitar.eCYGroup = CDTXMania.Instance.ConfigIni.eCYGroup;\r
+                               Guitar.e譜面レーンタイプ.Drums = CDTXMania.Instance.DTX.n使用レーン数.Drums;\r
+                               Guitar.e譜面レーンタイプ.Guitar = CDTXMania.Instance.DTX.n使用レーン数.Guitar;\r
+                               Guitar.e譜面レーンタイプ.Bass = CDTXMania.Instance.DTX.n使用レーン数.Bass;\r
+                               Guitar.eHitSoundPriorityHH = CDTXMania.Instance.ConfigIni.eHitSoundPriorityHH;\r
+                               Guitar.eHitSoundPriorityFT = CDTXMania.Instance.ConfigIni.eHitSoundPriorityFT;\r
+                               Guitar.eHitSoundPriorityCY = CDTXMania.Instance.ConfigIni.eHitSoundPriorityCY;\r
+                               Guitar.bGuitar有効 = CDTXMania.Instance.ConfigIni.bGuitar有効;\r
+                               Guitar.bDrums有効 = CDTXMania.Instance.ConfigIni.bDrums有効;\r
+                               Guitar.bSTAGEFAILED有効 = CDTXMania.Instance.ConfigIni.bStageFailed;\r
+                               Guitar.eダメージレベル = CDTXMania.Instance.ConfigIni.eDamageLevel;\r
+                               Guitar.eMetronome = CDTXMania.Instance.ConfigIni.eClickType;\r
                                Guitar.b演奏にキーボードを使用した = this.b演奏にキーボードを使った.Guitar;\r
                                Guitar.b演奏にMIDI入力を使用した = this.b演奏にMIDI入力を使った.Guitar;\r
                                Guitar.b演奏にジョイパッドを使用した = this.b演奏にジョイパッドを使った.Guitar;\r
                                Guitar.b演奏にマウスを使用した = this.b演奏にマウスを使った.Guitar;\r
-                               Guitar.nPerfectになる範囲ms = CDTXMania.nPerfect範囲ms;\r
-                               Guitar.nGreatになる範囲ms = CDTXMania.nGreat範囲ms;\r
-                               Guitar.nGoodになる範囲ms = CDTXMania.nGood範囲ms;\r
-                               Guitar.nPoorになる範囲ms = CDTXMania.nPoor範囲ms;\r
+                               Guitar.nPerfectになる範囲ms = CDTXMania.Instance.nPerfect範囲ms;\r
+                               Guitar.nGreatになる範囲ms = CDTXMania.Instance.nGreat範囲ms;\r
+                               Guitar.nGoodになる範囲ms = CDTXMania.Instance.nGood範囲ms;\r
+                               Guitar.nPoorになる範囲ms = CDTXMania.Instance.nPoor範囲ms;\r
                                Guitar.strDTXManiaのバージョン = CDTXMania.VERSION;\r
                                Guitar.最終更新日時 = DateTime.Now.ToString();\r
-                               Guitar.Hash = CScoreIni.t演奏セクションのMD5を求めて返す( Guitar );\r
+                               // #35417 chnmr0 add\r
+                               Guitar.bギターとベースを入れ替えた = CDTXMania.Instance.ConfigIni.bIsSwappedGuitarBass;\r
                        }\r
                }\r
-               public void t演奏結果を格納する・ベース( out CScoreIni.C演奏記録 Bass )\r
+               private void t演奏結果を格納する_ベース()\r
                {\r
-                       Bass = new CScoreIni.C演奏記録();\r
-\r
-                       if ( CDTXMania.DTX.bチップがある.Bass )\r
-                       {\r
-                               Bass.nスコア = this.actScore.Get( E楽器パート.BASS );\r
-                               Bass.dbゲーム型スキル値 = CScoreIni.tゲーム型スキルを計算して返す( CDTXMania.DTX.LEVEL.Bass, CDTXMania.DTX.n可視チップ数.Bass, this.nヒット数・Auto含まない.Bass.Perfect, this.actCombo.n現在のコンボ数.Bass最高値 );\r
-                               Bass.db演奏型スキル値 = CScoreIni.t演奏型スキルを計算して返す( CDTXMania.DTX.n可視チップ数.Bass, this.nヒット数・Auto含まない.Bass.Perfect, this.nヒット数・Auto含まない.Bass.Great, this.nヒット数・Auto含まない.Bass.Good, this.nヒット数・Auto含まない.Bass.Poor, this.nヒット数・Auto含まない.Bass.Miss );\r
-                               Bass.nPerfect数 = CDTXMania.ConfigIni.bAutoPlay.Bass ? this.nヒット数・Auto含む.Bass.Perfect : this.nヒット数・Auto含まない.Bass.Perfect;\r
-                               Bass.nGreat数 = CDTXMania.ConfigIni.bAutoPlay.Bass ? this.nヒット数・Auto含む.Bass.Great : this.nヒット数・Auto含まない.Bass.Great;\r
-                               Bass.nGood数 = CDTXMania.ConfigIni.bAutoPlay.Bass ? this.nヒット数・Auto含む.Bass.Good : this.nヒット数・Auto含まない.Bass.Good;\r
-                               Bass.nPoor数 = CDTXMania.ConfigIni.bAutoPlay.Bass ? this.nヒット数・Auto含む.Bass.Poor : this.nヒット数・Auto含まない.Bass.Poor;\r
-                               Bass.nMiss数 = CDTXMania.ConfigIni.bAutoPlay.Bass ? this.nヒット数・Auto含む.Bass.Miss : this.nヒット数・Auto含まない.Bass.Miss;\r
-                               Bass.nPerfect数・Auto含まない = this.nヒット数・Auto含まない.Bass.Perfect;\r
-                               Bass.nGreat数・Auto含まない = this.nヒット数・Auto含まない.Bass.Great;\r
-                               Bass.nGood数・Auto含まない = this.nヒット数・Auto含まない.Bass.Good;\r
-                               Bass.nPoor数・Auto含まない = this.nヒット数・Auto含まない.Bass.Poor;\r
-                               Bass.nMiss数・Auto含まない = this.nヒット数・Auto含まない.Bass.Miss;\r
-                               Bass.n最大コンボ数 = this.actCombo.n現在のコンボ数.Bass最高値;\r
-                               Bass.n全チップ数 = CDTXMania.DTX.n可視チップ数.Bass;\r
-                               for ( int i = 0; i < 10; i++ )\r
-                               {\r
-                                       Bass.bAutoPlay[ i ] = CDTXMania.ConfigIni.bAutoPlay[ i ];\r
-                               }\r
-                               Bass.bTight = CDTXMania.ConfigIni.bTight;\r
-                               for ( int i = 0; i < 3; i++ )\r
-                               {\r
-                                       Bass.bSudden[ i ] = CDTXMania.ConfigIni.bSudden[ i ];\r
-                                       Bass.bHidden[ i ] = CDTXMania.ConfigIni.bHidden[ i ];\r
-                                       Bass.bReverse[ i ] = CDTXMania.ConfigIni.bReverse[ i ];\r
-                                       Bass.eRandom[ i ] = CDTXMania.ConfigIni.eRandom[ i ];\r
-                                       Bass.bLight[ i ] = CDTXMania.ConfigIni.bLight[ i ];\r
-                                       Bass.bLeft[ i ] = CDTXMania.ConfigIni.bLeft[ i ];\r
-                                       Bass.f譜面スクロール速度[ i ] = ( (float) ( CDTXMania.ConfigIni.n譜面スクロール速度[ i ] + 1 ) ) * 0.5f;\r
-                               }\r
-                               Bass.eDark = CDTXMania.ConfigIni.eDark;\r
-                               Bass.n演奏速度分子 = CDTXMania.ConfigIni.n演奏速度;\r
+                       record.Bass = new CScoreIni.C演奏記録();\r
+                       CScoreIni.C演奏記録 Bass = Record.Bass;\r
+                       bool allauto = CDTXMania.Instance.ConfigIni.bIsAutoPlay(EPart.Bass);\r
+                       if (CDTXMania.Instance.DTX.bチップがある.Bass)\r
+                       {\r
+                               Bass.nスコア = (long)this.actScore.Get(EPart.Bass);\r
+                               Bass.dbゲーム型スキル値 = CScoreIni.tゲーム型スキルを計算して返す(CDTXMania.Instance.DTX.LEVEL.Bass, CDTXMania.Instance.DTX.n可視チップ数.Bass, this.nヒット数_Auto含まない.Bass.Perfect, this.actCombo.dgbコンボ数.Bass.n最高値, EPart.Bass);\r
+                               Bass.db演奏型スキル値 = CScoreIni.t演奏型スキルを計算して返す(CDTXMania.Instance.DTX.n可視チップ数.Bass, this.nヒット数_Auto含まない.Bass.Perfect, this.nヒット数_Auto含まない.Bass.Great, this.nヒット数_Auto含まない.Bass.Good, this.nヒット数_Auto含まない.Bass.Poor, this.nヒット数_Auto含まない.Bass.Miss, EPart.Bass, true);\r
+                               Bass.nPerfect数 = allauto ? this.nヒット数_Auto含む.Bass.Perfect : this.nヒット数_Auto含まない.Bass.Perfect;\r
+                               Bass.nGreat数 = allauto ? this.nヒット数_Auto含む.Bass.Great : this.nヒット数_Auto含まない.Bass.Great;\r
+                               Bass.nGood数 = allauto ? this.nヒット数_Auto含む.Bass.Good : this.nヒット数_Auto含まない.Bass.Good;\r
+                               Bass.nPoor数 = allauto ? this.nヒット数_Auto含む.Bass.Poor : this.nヒット数_Auto含まない.Bass.Poor;\r
+                               Bass.nMiss数 = allauto ? this.nヒット数_Auto含む.Bass.Miss : this.nヒット数_Auto含まない.Bass.Miss;\r
+                               Bass.nPerfect数_Auto含まない = this.nヒット数_Auto含まない.Bass.Perfect;\r
+                               Bass.nGreat数_Auto含まない = this.nヒット数_Auto含まない.Bass.Great;\r
+                               Bass.nGood数_Auto含まない = this.nヒット数_Auto含まない.Bass.Good;\r
+                               Bass.nPoor数_Auto含まない = this.nヒット数_Auto含まない.Bass.Poor;\r
+                               Bass.nMiss数_Auto含まない = this.nヒット数_Auto含まない.Bass.Miss;\r
+                               Bass.n最大コンボ数 = this.actCombo.dgbコンボ数.Bass.n最高値;\r
+                               Bass.n全チップ数 = CDTXMania.Instance.DTX.n可視チップ数.Bass;\r
+                               for (EPad i = EPad.Min; i < EPad.BassPadMax; i++)\r
+                               {\r
+                                       Bass.bAutoPlay[i] = CDTXMania.Instance.ConfigIni.bAutoPlay[i];\r
+                               }\r
+                               Bass.bTight = CDTXMania.Instance.ConfigIni.bTight;\r
+                               for (EPart i = EPart.Drums; i <= EPart.Bass; i++)\r
+                               {\r
+                                       Bass.eSudHidInv[i] = CDTXMania.Instance.ConfigIni.eSudHidInv[i];\r
+                                       Bass.bReverse[i] = CDTXMania.Instance.ConfigIni.bReverse[i];\r
+                                       Bass.eRandom[i] = CDTXMania.Instance.ConfigIni.eRandom[i];\r
+                                       Bass.bLight[i] = CDTXMania.Instance.ConfigIni.bLight[i];\r
+                                       Bass.f譜面スクロール速度[i] = ((float)(CDTXMania.Instance.ConfigIni.nScrollSpeed[i] + 1)) * 0.5f;\r
+                               }\r
+                               Bass.eDark = CDTXMania.Instance.ConfigIni.eDark;\r
+                               Bass.n演奏速度分子 = CDTXMania.Instance.ConfigIni.nPlaySpeed;\r
                                Bass.n演奏速度分母 = 20;\r
-                               Bass.eHHGroup = CDTXMania.ConfigIni.eHHGroup;\r
-                               Bass.eFTGroup = CDTXMania.ConfigIni.eFTGroup;\r
-                               Bass.eCYGroup = CDTXMania.ConfigIni.eCYGroup;\r
-                               Bass.eHitSoundPriorityHH = CDTXMania.ConfigIni.eHitSoundPriorityHH;\r
-                               Bass.eHitSoundPriorityFT = CDTXMania.ConfigIni.eHitSoundPriorityFT;\r
-                               Bass.eHitSoundPriorityCY = CDTXMania.ConfigIni.eHitSoundPriorityCY;\r
-                               Bass.bGuitar有効 = CDTXMania.ConfigIni.bGuitar有効;\r
-                               Bass.bDrums有効 = CDTXMania.ConfigIni.bDrums有効;\r
-                               Bass.bSTAGEFAILED有効 = CDTXMania.ConfigIni.bSTAGEFAILED有効;\r
-                               Bass.eダメージレベル = CDTXMania.ConfigIni.eダメージレベル;\r
-                               Bass.b演奏にキーボードを使用した = this.b演奏にキーボードを使った.Bass;                        // #24280 2011.1.29 yyagi\r
-                               Bass.b演奏にMIDI入力を使用した = this.b演奏にMIDI入力を使った.Bass;                          //\r
-                               Bass.b演奏にジョイパッドを使用した = this.b演奏にジョイパッドを使った.Bass;          //\r
-                               Bass.b演奏にマウスを使用した = this.b演奏にマウスを使った.Bass;                                    //\r
-                               Bass.nPerfectになる範囲ms = CDTXMania.nPerfect範囲ms;\r
-                               Bass.nGreatになる範囲ms = CDTXMania.nGreat範囲ms;\r
-                               Bass.nGoodになる範囲ms = CDTXMania.nGood範囲ms;\r
-                               Bass.nPoorになる範囲ms = CDTXMania.nPoor範囲ms;\r
+                               Bass.eHHGroup = CDTXMania.Instance.ConfigIni.eHHGroup;\r
+                               Bass.eFTGroup = CDTXMania.Instance.ConfigIni.eFTGroup;\r
+                               Bass.eCYGroup = CDTXMania.Instance.ConfigIni.eCYGroup;\r
+                               Bass.e譜面レーンタイプ.Drums = CDTXMania.Instance.DTX.n使用レーン数.Drums;\r
+                               Bass.e譜面レーンタイプ.Guitar = CDTXMania.Instance.DTX.n使用レーン数.Guitar;\r
+                               Bass.e譜面レーンタイプ.Bass = CDTXMania.Instance.DTX.n使用レーン数.Bass;\r
+                               Bass.eHitSoundPriorityHH = CDTXMania.Instance.ConfigIni.eHitSoundPriorityHH;\r
+                               Bass.eHitSoundPriorityFT = CDTXMania.Instance.ConfigIni.eHitSoundPriorityFT;\r
+                               Bass.eHitSoundPriorityCY = CDTXMania.Instance.ConfigIni.eHitSoundPriorityCY;\r
+                               Bass.bGuitar有効 = CDTXMania.Instance.ConfigIni.bGuitar有効;\r
+                               Bass.bDrums有効 = CDTXMania.Instance.ConfigIni.bDrums有効;\r
+                               Bass.bSTAGEFAILED有効 = CDTXMania.Instance.ConfigIni.bStageFailed;\r
+                               Bass.eダメージレベル = CDTXMania.Instance.ConfigIni.eDamageLevel;\r
+                               // #24280 2011.1.29 yyagi\r
+                               Bass.eMetronome = CDTXMania.Instance.ConfigIni.eClickType;\r
+                               Bass.b演奏にキーボードを使用した = this.b演奏にキーボードを使った.Bass;\r
+                               Bass.b演奏にMIDI入力を使用した = this.b演奏にMIDI入力を使った.Bass;\r
+                               Bass.b演奏にジョイパッドを使用した = this.b演奏にジョイパッドを使った.Bass;\r
+                               Bass.b演奏にマウスを使用した = this.b演奏にマウスを使った.Bass;\r
+                               Bass.nPerfectになる範囲ms = CDTXMania.Instance.nPerfect範囲ms;\r
+                               Bass.nGreatになる範囲ms = CDTXMania.Instance.nGreat範囲ms;\r
+                               Bass.nGoodになる範囲ms = CDTXMania.Instance.nGood範囲ms;\r
+                               Bass.nPoorになる範囲ms = CDTXMania.Instance.nPoor範囲ms;\r
                                Bass.strDTXManiaのバージョン = CDTXMania.VERSION;\r
                                Bass.最終更新日時 = DateTime.Now.ToString();\r
-                               Bass.Hash = CScoreIni.t演奏セクションのMD5を求めて返す( Bass );\r
+                               // #35417 chnmr0 add\r
+                               Bass.bギターとベースを入れ替えた = CDTXMania.Instance.ConfigIni.bIsSwappedGuitarBass;\r
                        }\r
                }\r
+               #endregion\r
 \r
                // CStage 実装\r
-\r
                public override void On活性化()\r
                {\r
-                       this.eフェードアウト完了時の戻り値 = E演奏画面の戻り値.継続;\r
-                       this.n現在のトップChip = ( CDTXMania.DTX.listChip.Count > 0 ) ? 0 : -1;\r
-                       this.L最後に再生したHHの実WAV番号 = new List<int>( 16 );\r
-                       this.n最後に再生したHHのチャンネル番号 = 0;\r
-                       this.n最後に再生したギターの実WAV番号 = -1;\r
-                       this.n最後に再生したベースの実WAV番号 = -1;\r
-                       for ( int i = 0; i < 50; i++ )\r
-                       {\r
-                               this.n最後に再生したBGMの実WAV番号[ i ] = -1;\r
-                       }\r
-                       this.r次にくるギターChip = null;\r
-                       this.r次にくるベースChip = null;\r
-                       for ( int j = 0; j < 10; j++ )\r
-                       {\r
-                               this.r現在の空うちドラムChip[ j ] = null;\r
-                       }\r
-                       this.r現在の空うちギターChip = null;\r
-                       this.r現在の空うちベースChip = null;\r
-                       for ( int k = 0; k < 3; k++ )\r
-                       {\r
-                               for ( int n = 0; n < 5; n++ )\r
+                       if (base.b活性化してない)\r
+                       {\r
+                               this.bフィルイン中 = false;\r
+                               this.dtLastQueueOperation = DateTime.MinValue;\r
+                               this.eフェードアウト完了時の戻り値 = E演奏画面の戻り値.継続;\r
+                               this.n現在のトップChip = (CDTXMania.Instance.DTX.listChip.Count > 0) ? 0 : -1;\r
+                               n最後に再生した実WAV番号 = new STPadValue<int>();\r
+                               this.L最後に再生したHHの実WAV番号 = new List<int>(16);\r
+                               this.e最後に再生したHHのチャンネル番号 = 0;\r
+                               this.n最後に再生した実WAV番号.GtPick = -1;\r
+                               this.n最後に再生した実WAV番号.BsPick = -1;\r
+                               for (int i = 0; i < 50; i++)\r
                                {\r
-                                       this.nヒット数・Auto含まない[ k ] = new STHITCOUNTOFRANK();\r
-                                       this.nヒット数・Auto含む[ k ] = new STHITCOUNTOFRANK();\r
+                                       this.n最後に再生したBGMの実WAV番号[i] = -1;\r
+                               }\r
+                               this.r次にくるギターChip = null;\r
+                               this.r次にくるベースChip = null;\r
+                               for (int j = 0; j < 10; j++)\r
+                               {\r
+                                       this.r現在の空うちドラムChip[j] = null;\r
+                               }\r
+                               this.r現在の空うちギターChip = null;\r
+                               this.r現在の空うちベースChip = null;\r
+                               cInvisibleChip = new CInvisibleChip(CDTXMania.Instance.ConfigIni.nChipDisplayTimeMs, CDTXMania.Instance.ConfigIni.nChipFadeoutTimeMs);\r
+                               this.n最大コンボ数_TargetGhost = new STDGBSValue<int>();\r
+\r
+                               for (EPart k = EPart.Drums; k <= EPart.Bass; k++)\r
+                               {\r
+                                       this.nヒット数_Auto含まない[k] = new CHitCountOfRank();\r
+                                       this.nヒット数_Auto含む[k] = new CHitCountOfRank();\r
+                                       this.nヒット数_TargetGhost[k] = new CHitCountOfRank();\r
+                                       this.queWailing[k] = new Queue<CChip>();\r
+                                       this.r現在の歓声Chip[k] = null;\r
+                                       if (CDTXMania.Instance.DTXVmode.Enabled)\r
+                                       {\r
+                                               CDTXMania.Instance.ConfigIni.nScrollSpeed[k] = CDTXMania.Instance.ConfigIni.nViewerScrollSpeed[k];\r
+                                       }\r
+\r
+                                       this.b演奏にキーボードを使った[k] = false;\r
+                                       this.b演奏にジョイパッドを使った[k] = false;\r
+                                       this.b演奏にMIDI入力を使った[k] = false;\r
+                                       this.b演奏にマウスを使った[k] = false;\r
                                }\r
-                               this.queWailing[ k ] = new Queue<CDTX.CChip>();\r
-                               this.r現在の歓声Chip[ k ] = null;\r
-                       }\r
-                       for ( int i = 0; i < 3; i++ )\r
-                       {\r
-                               this.b演奏にキーボードを使った[ i ] = false;\r
-                               this.b演奏にジョイパッドを使った[ i ] = false;\r
-                               this.b演奏にMIDI入力を使った[ i ] = false;\r
-                               this.b演奏にマウスを使った[ i ] = false;\r
-                       }\r
-                       this.bAUTOでないチップが1つでもバーを通過した = false;\r
-                       base.On活性化();\r
-                       this.tステータスパネルの選択();\r
-                       this.tパネル文字列の設定();\r
 \r
-                       this.nInputAdjustTimeMs.Drums = CDTXMania.ConfigIni.nInputAdjustTimeMs.Drums;           // #23580 2011.1.3 yyagi\r
-                       this.nInputAdjustTimeMs.Guitar = CDTXMania.ConfigIni.nInputAdjustTimeMs.Guitar;         //        2011.1.7 ikanick 修正\r
-                       this.nInputAdjustTimeMs.Bass = CDTXMania.ConfigIni.nInputAdjustTimeMs.Bass;                     //\r
-                       this.bIsAutoPlay = CDTXMania.ConfigIni.bAutoPlay;                                                                       // #24239 2011.1.23 yyagi\r
+                               cInvisibleChip.Reset();\r
+                               actGauge.Init(CDTXMania.Instance.ConfigIni.nRisky);\r
+                               // 効果音のストリームをミキサーから解除しておく\r
+                               CDTXMania.Instance.Skin.tRemoveMixerAll();\r
+                               queueMixerSound = new Queue<STMixer>(64);\r
+                               bIsDirectSound = (CDTXMania.Instance.Sound管理.GetCurrentSoundDeviceType() == "DirectSound");\r
+                               this.bPAUSE = false;\r
 \r
-                       if ( CDTXMania.ConfigIni.bIsSwappedGuitarBass ) // #24063 2011.1.24 yyagi Gt/Bsの譜面情報入れ替え\r
-                       {\r
-                               CDTXMania.DTX.SwapGuitarBassInfos();\r
+                               if (CDTXMania.Instance.DTXVmode.Enabled)\r
+                               {\r
+                                       db再生速度 = CDTXMania.Instance.DTX.dbDTXVPlaySpeed;\r
+                                       CDTXMania.Instance.ConfigIni.nPlaySpeed.Value = (int)(CDTXMania.Instance.DTX.dbDTXVPlaySpeed * 20 + 0.5);\r
+                               }\r
+                               else\r
+                               {\r
+                                       db再生速度 = ((double)CDTXMania.Instance.ConfigIni.nPlaySpeed) / 20.0;\r
+                               }\r
+\r
+                               bValidScore = (CDTXMania.Instance.DTXVmode.Enabled) ? false : true;\r
+\r
+                               cWailingChip = new CWailingChip共通[3];\r
+                               // 0:未使用, 1:Gutiar, 2:Bass\r
+                               cWailingChip[1] = new CWailingChip共通();\r
+                               cWailingChip[2] = new CWailingChip共通();\r
+\r
+                               #region [ 演奏開始前にmixer登録しておくべきサウンド(開幕してすぐに鳴らすことになるチップ音)を登録しておく ]\r
+                               foreach (CChip pChip in CDTXMania.Instance.DTX.listChip)\r
+                               {\r
+                                       //                              Debug.WriteLine( "CH=" + pChip.nチャンネル番号.ToString( "x2" ) + ", 整数値=" + pChip.n整数値 +  ", time=" + pChip.n発声時刻ms );\r
+                                       if (pChip.n発声時刻ms <= 0)\r
+                                       {\r
+                                               if (pChip.eチャンネル番号 == EChannel.MixerAdd)\r
+                                               {\r
+                                                       pChip.bHit = true;\r
+                                                       //                                              Trace.TraceInformation( "first [DA] BAR=" + pChip.n発声位置 / 384 + " ch=" + pChip.nチャンネル番号.ToString( "x2" ) + ", wav=" + pChip.n整数値 + ", time=" + pChip.n発声時刻ms );\r
+                                                       if (CDTXMania.Instance.DTX.listWAV.ContainsKey(pChip.n整数値_内部番号))\r
+                                                       {\r
+                                                               CDTX.CWAV wc = CDTXMania.Instance.DTX.listWAV[pChip.n整数値_内部番号];\r
+                                                               for (int i = 0; i < CDTXMania.Instance.ConfigIni.nPolyphonicSounds; i++)\r
+                                                               {\r
+                                                                       if (wc.rSound[i] != null)\r
+                                                                       {\r
+                                                                               CDTXMania.Instance.Sound管理.AddMixer(wc.rSound[i], db再生速度, pChip.b演奏終了後も再生が続くチップである);\r
+                                                                               //AddMixer( wc.rSound[ i ] );           // 最初はqueueを介さず直接ミキサー登録する\r
+                                                                       }\r
+                                                               }\r
+                                                       }\r
+                                               }\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               break;\r
+                                       }\r
+                               }\r
+                               #endregion\r
+\r
+                               if (CDTXMania.Instance.ConfigIni.bIsSwappedGuitarBass)  // #24063 2011.1.24 yyagi Gt/Bsの譜面情報入れ替え\r
+                               {\r
+                                       CDTXMania.Instance.DTX.SwapGuitarBassInfos();\r
+                               }\r
+\r
+\r
+                               for (EPart inst = EPart.Drums; inst <= EPart.Bass; ++inst)\r
+                               {\r
+                                       // MODIFY_BEGIN #25398 2011.06.07 FROM\r
+                                       if (CDTXMania.Instance.bコンパクトモード)\r
+                                       {\r
+                                               var score = new Cスコア();\r
+                                               CDTXMania.Instance.Songs管理.tScoreIniを読み込んで譜面情報を設定する(CDTXMania.Instance.strコンパクトモードファイル + ".score.ini", ref score);\r
+                                               this.actGraph.dbTarget[inst] = score.譜面情報.最大スキル[inst];\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               if (CDTXMania.Instance.ConfigIni.b楽器有効(inst))\r
+                                               {\r
+                                                       this.actGraph.dbTarget[inst] = CDTXMania.Instance.stage選曲.r確定されたスコア.譜面情報.最大スキル[inst];   // #24074 2011.01.23 add ikanick\r
+\r
+                                                       // ゴースト利用可のなとき、0で初期化\r
+                                                       if (CDTXMania.Instance.ConfigIni.eTargetGhost[inst] != ETargetGhostData.None)\r
+                                                       {\r
+                                                               if (CDTXMania.Instance.DTX.listTargetGhsotLag[inst] != null)\r
+                                                               {\r
+                                                                       this.actGraph.dbTarget[inst] = 0;\r
+                                                               }\r
+                                                       }\r
+                                               }\r
+                                       }\r
+                                       // MODIFY_END #25398\r
+                               }\r
+\r
+                               for (EPart part = EPart.Drums; part <= EPart.Bass; ++part)\r
+                               {\r
+                                       if (CDTXMania.Instance.ConfigIni.b楽器有効(part))\r
+                                       {\r
+                                               actOptionPanel.Pos[part] = new Coordinates.CXY(CDTXMania.Instance.ConfigIni.cdInstX[part][CDTXMania.Instance.ConfigIni.eActiveInst]\r
+                                                       - CDTXMania.Instance.Coordinates.ImgOptionPanel.W, 0);\r
+                                       }\r
+                               }\r
+\r
+                               base.On活性化();\r
+\r
+                               // PANELの設定は、base.On活性化()の後に(actPanelの活性化の後)行うこと。\r
+                               // さもないと、actPanelが活性化されていないため、パネル文字列の設定が機能しなくなる。\r
+                               string strLabel = (CDTXMania.Instance.stage選曲.r確定された曲 == null)?\r
+                                       null : CDTXMania.Instance.stage選曲.r確定された曲.ar難易度ラベル[ CDTXMania.Instance.stage選曲.n確定された曲の難易度 ];\r
+                               string strPanel = CDTXMania.Instance.DTX.TITLE;\r
+                               //string strSETDEFlabel = CDTXMania.Instance.stage選曲.r確定された曲.strタイトル;\r
+                               if ( !string.IsNullOrWhiteSpace( strLabel ) && !strPanel.ToLower().Contains(strLabel.ToLower() )\r
+                               //      && (strPanel == strSETDEFlabel)\r
+                               )\r
+                               {\r
+                                       strPanel += " (" + strLabel + ")";\r
+                               }\r
+                               this.actPanel.SetPanelString( strPanel );\r
                        }\r
                }\r
                public override void On非活性化()\r
                {\r
-                       this.L最後に再生したHHの実WAV番号.Clear();   // #23921 2011.1.4 yyagi\r
-                       this.L最後に再生したHHの実WAV番号 = null;    //\r
-                       for ( int i = 0; i < 3; i++ )\r
+                       if (b活性化してる)\r
                        {\r
-                               this.queWailing[ i ] = null;\r
+                               // #23921 2011.1.4 yyagi\r
+                               L最後に再生したHHの実WAV番号.Clear();\r
+                               L最後に再生したHHの実WAV番号 = null;\r
+                               for (EPart i = 0; i <= EPart.Bass; i++)\r
+                               {\r
+                                       queWailing[i].Clear();\r
+                                       queWailing[i] = null;\r
+                               }\r
+                               ctWailingチップ模様アニメ = null;\r
+                               ctチップ模様アニメ.Drums = null;\r
+                               ctチップ模様アニメ.Guitar = null;\r
+                               ctチップ模様アニメ.Bass = null;\r
+                               queueMixerSound.Clear();\r
+                               queueMixerSound = null;\r
+                               cInvisibleChip.Dispose();\r
+                               cInvisibleChip = null;\r
+                               base.On非活性化();\r
                        }\r
-                       this.ctWailingチップ模様アニメ = null;\r
-                       this.ctチップ模様アニメ.Drums = null;\r
-                       this.ctチップ模様アニメ.Guitar = null;\r
-                       this.ctチップ模様アニメ.Bass = null;\r
-                       base.On非活性化();\r
                }\r
                public override void OnManagedリソースの作成()\r
                {\r
-                       if ( !base.b活性化してない )\r
-                       {\r
-                               this.t背景テクスチャの生成();\r
-\r
-                               this.txWailing枠 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlay wailing cursor.png" ) );\r
-\r
+                       if (b活性化してる)\r
+                       {\r
+                               txチップ = TextureFactory.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenPlayDrums chips.png"));\r
+                               txチップGB = TextureFactory.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenPlayGuitar chips.png"));\r
+                               txヒットバー = TextureFactory.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenPlayDrums hit-bar.png"));\r
+                               txヒットバーGB = TextureFactory.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenPlayDrums hit-bar guitar.png"));\r
+                               txWailing枠 = TextureFactory.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenPlay wailing cursor.png"));\r
+                               t背景テクスチャの生成();\r
                                base.OnManagedリソースの作成();\r
                        }\r
+\r
                }\r
                public override void OnManagedリソースの解放()\r
                {\r
-                       if ( !base.b活性化してない )\r
-                       {\r
-                               CDTXMania.tテクスチャの解放( ref this.tx背景 );\r
-\r
-                               CDTXMania.tテクスチャの解放( ref this.txWailing枠 );\r
+                       if (b活性化してる)\r
+                       {\r
+                               TextureFactory.tテクスチャの解放(ref this.tx背景);\r
+                               TextureFactory.tテクスチャの解放(ref this.txWailing枠);\r
+                               TextureFactory.tテクスチャの解放(ref this.txヒットバーGB);\r
+                               TextureFactory.tテクスチャの解放(ref this.txヒットバー);\r
+                               TextureFactory.tテクスチャの解放(ref this.txチップGB);\r
+                               TextureFactory.tテクスチャの解放(ref this.txチップ);\r
                                base.OnManagedリソースの解放();\r
                        }\r
                }\r
-\r
-               // その他\r
-\r
-               #region [ protected ]\r
-               //-----------------\r
-               protected class STHITCOUNTOFRANK\r
+               public override int On進行描画()\r
                {\r
-                       // Fields\r
-                       public int Good;\r
-                       public int Great;\r
-                       public int Miss;\r
-                       public int Perfect;\r
-                       public int Poor;\r
-\r
-                       // Properties\r
-                       public int this[ int index ]\r
+                       if (b活性化してる)\r
                        {\r
-                               get\r
+                               bool bIsFinishedPlaying = false;\r
+                               bool bIsFinishedFadeout = false;\r
+\r
+                               if (b初めての進行描画)\r
                                {\r
-                                       switch ( index )\r
-                                       {\r
-                                               case 0:\r
-                                                       return this.Perfect;\r
+                                       PrepareAVITexture();\r
 \r
-                                               case 1:\r
-                                                       return this.Great;\r
+                                       CSound管理.rc演奏用タイマ.tリセット();\r
+                                       CDTXMania.Instance.Timer.tリセット();\r
+                                       if (CDTXMania.Instance.ConfigIni.bDrums有効)\r
+                                       {\r
+                                               ctチップ模様アニメ.Drums = new CCounter(0, 48, 10, CDTXMania.Instance.Timer);\r
+                                       }\r
+                                       if (CDTXMania.Instance.ConfigIni.bGuitar有効)\r
+                                       {\r
+                                               ctチップ模様アニメ.Guitar = new CCounter(0, 48, 20, CDTXMania.Instance.Timer);\r
+                                               ctチップ模様アニメ.Bass = new CCounter(0, 48, 20, CDTXMania.Instance.Timer);\r
+                                               ctWailingチップ模様アニメ = new CCounter(0, 4, 50, CDTXMania.Instance.Timer);\r
+                                       }\r
 \r
-                                               case 2:\r
-                                                       return this.Good;\r
+                                       // this.actChipFireD.Start( Eレーン.HH );    // #31554 2013.6.12 yyagi\r
+                                       // 初チップヒット時のもたつき回避。最初にactChipFireD.Start()するときにJITが掛かって?\r
+                                       // ものすごく待たされる(2回目以降と比べると2,3桁tick違う)。そこで最初の画面フェードインの間に\r
+                                       // 一発Start()を掛けてJITの結果を生成させておく。\r
 \r
-                                               case 3:\r
-                                                       return this.Poor;\r
+                                       base.eフェーズID = CStage.Eフェーズ.共通_フェードイン;\r
+                                       actFI.tフェードイン開始();\r
 \r
-                                               case 4:\r
-                                                       return this.Miss;\r
+                                       if (CDTXMania.Instance.DTXVmode.Enabled)\r
+                                       {\r
+                                               #region [ DTXV用の再生設定にする(全AUTOなど) ]\r
+                                               tDTXV用の設定();\r
+                                               #endregion\r
+                                               t演奏位置の変更(CDTXMania.Instance.DTXVmode.nStartBar);\r
                                        }\r
-                                       throw new IndexOutOfRangeException();\r
+\r
+                                       CDTXMania.Instance.Sound管理.tDisableUpdateBufferAutomatically();\r
+                                       b初めての進行描画 = false;\r
                                }\r
-                               set\r
+\r
+                               #region [ stage failed ]\r
+                               if (CDTXMania.Instance.ConfigIni.bStageFailed && (base.eフェーズID == CStage.Eフェーズ.共通_通常状態))\r
                                {\r
-                                       switch ( index )\r
+                                       if (actGauge.IsFailed)\r
                                        {\r
-                                               case 0:\r
-                                                       this.Perfect = value;\r
-                                                       return;\r
-\r
-                                               case 1:\r
-                                                       this.Great = value;\r
-                                                       return;\r
-\r
-                                               case 2:\r
-                                                       this.Good = value;\r
-                                                       return;\r
-\r
-                                               case 3:\r
-                                                       this.Poor = value;\r
-                                                       return;\r
-\r
-                                               case 4:\r
-                                                       this.Miss = value;\r
-                                                       return;\r
+                                               actStageFailed.Start();\r
+                                               CDTXMania.Instance.DTX.t全チップの再生停止();\r
+                                               base.eフェーズID = CStage.Eフェーズ.演奏_STAGE_FAILED;\r
                                        }\r
-                                       throw new IndexOutOfRangeException();\r
                                }\r
-                       }\r
-               }\r
+                               #endregion\r
 \r
-               [StructLayout( LayoutKind.Sequential )]\r
-               protected struct STKARAUCHI\r
-               {\r
-                       public CDTX.CChip HH;\r
-                       public CDTX.CChip SD;\r
-                       public CDTX.CChip BD;\r
-                       public CDTX.CChip HT;\r
-                       public CDTX.CChip LT;\r
-                       public CDTX.CChip FT;\r
-                       public CDTX.CChip CY;\r
-                       public CDTX.CChip HHO;\r
-                       public CDTX.CChip RD;\r
-                       public CDTX.CChip LC;\r
-                       public CDTX.CChip this[ int index ]\r
-                       {\r
-                               get\r
+                               // Background\r
+                               if (CDTXMania.Instance.ConfigIni.eDark == EDark.Off)\r
                                {\r
-                                       switch ( index )\r
+                                       if (tx背景 != null)\r
                                        {\r
-                                               case 0:\r
-                                                       return this.HH;\r
-\r
-                                               case 1:\r
-                                                       return this.SD;\r
-\r
-                                               case 2:\r
-                                                       return this.BD;\r
+                                               tx背景.t2D描画(CDTXMania.Instance.Device, 0, 0);\r
+                                       }\r
+                               }\r
 \r
-                                               case 3:\r
-                                                       return this.HT;\r
+                               // AVI / BGA\r
+                               if (base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED &&\r
+                                       base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト)\r
+                               {\r
+                                       actAVI.t進行描画(\r
+                                               CDTXMania.Instance.ConfigIni.cdMovieX[CDTXMania.Instance.ConfigIni.eActiveInst],\r
+                                               CDTXMania.Instance.ConfigIni.cdMovieY[CDTXMania.Instance.ConfigIni.eActiveInst],\r
+                                               CDTXMania.Instance.Coordinates.Movie.W,\r
+                                               CDTXMania.Instance.Coordinates.Movie.H);\r
+                                       actBGA.On進行描画();\r
+                                       #region [MIDIBGM 処理?]\r
+                                       if (base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED)\r
+                                       {\r
+                                               CStage.Eフェーズ eフェーズid1 = base.eフェーズID;\r
+                                       }\r
+                                       #endregion\r
+                                       actLane.On進行描画();\r
+                                       actLaneFlushGB.On進行描画();\r
+                                       actPanel.On進行描画();\r
+                                       actScore.On進行描画();\r
+                                       actOptionPanel.On進行描画();\r
+                                       actGauge.On進行描画();\r
+                                       actGraph.On進行描画();\r
+                                       actLaneFlushD.On進行描画();\r
+                                       actDANGER.t進行描画(actGauge.IsDanger);\r
+                                       act譜面スクロール速度.On進行描画();\r
+                                       t進行描画_判定ライン();\r
+                                       actWailingBonus.On進行描画();\r
+\r
+                                       // RGB, Judge, Combo (Priority Under Chip)\r
+                                       if (CDTXMania.Instance.ConfigIni.eJudgePriority == EJudgeDisplayPriority.Under)\r
+                                       {\r
+                                               actRGB.On進行描画();\r
+                                               actJudgeString.On進行描画();\r
+                                               actCombo.On進行描画();\r
+                                       }\r
+                                       t進行描画_チップアニメ();\r
+                                       bIsFinishedPlaying = t進行描画_チップ();\r
+                                       actPad.On進行描画();\r
 \r
-                                               case 4:\r
-                                                       return this.LT;\r
+                                       // RGB, Judge, Combo (Priority Over Chip)\r
+                                       if (CDTXMania.Instance.ConfigIni.eJudgePriority == EJudgeDisplayPriority.Over)\r
+                                       {\r
+                                               actRGB.On進行描画();\r
+                                               actJudgeString.On進行描画();\r
+                                               actCombo.On進行描画();\r
+                                       }\r
 \r
-                                               case 5:\r
-                                                       return this.FT;\r
+                                       actChipFireD.On進行描画();\r
+                                       actChipFireGB.On進行描画();\r
+                                       actPlayInfo.On進行描画();\r
 \r
-                                               case 6:\r
-                                                       return this.CY;\r
+                                       // Wailing\r
+                                       if ((CDTXMania.Instance.ConfigIni.eDark != EDark.Full) &&\r
+                                               CDTXMania.Instance.ConfigIni.bGuitar有効)\r
+                                       {\r
+                                               int GtWailingFrameX = CDTXMania.Instance.ConfigIni.GetLaneX(ELane.GtW) +\r
+                                                       (CDTXMania.Instance.ConfigIni.GetLaneW(ELane.GtW) - CDTXMania.Instance.Coordinates.ImgGtWailingFrame.W) / 2;\r
+                                               int BsWailingFrameX = CDTXMania.Instance.ConfigIni.GetLaneX(ELane.BsW) +\r
+                                                       (CDTXMania.Instance.ConfigIni.GetLaneW(ELane.BsW) - CDTXMania.Instance.Coordinates.ImgGtWailingFrame.W) / 2;\r
+                                               int GtWailingFrameY = C演奏判定ライン座標共通.n判定ラインY座標(EPart.Guitar, true, true);\r
+                                               int BsWailingFrameY = C演奏判定ライン座標共通.n判定ラインY座標(EPart.Bass, true, true);\r
+\r
+                                               if (txWailing枠 != null)\r
+                                               {\r
+                                                       if (CDTXMania.Instance.DTX.bチップがある.Guitar)\r
+                                                       {\r
+                                                               txWailing枠.t2D描画(CDTXMania.Instance.Device, GtWailingFrameX, GtWailingFrameY);\r
+                                                       }\r
+                                                       if (CDTXMania.Instance.DTX.bチップがある.Bass)\r
+                                                       {\r
+                                                               txWailing枠.t2D描画(CDTXMania.Instance.Device, BsWailingFrameX, BsWailingFrameY);\r
+                                                       }\r
+                                               }\r
+                                       }\r
+                               }\r
 \r
-                                               case 7:\r
-                                                       return this.HHO;\r
+                               // Stage Failed\r
+                               if (((base.eフェーズID == CStage.Eフェーズ.演奏_STAGE_FAILED) ||\r
+                                       (base.eフェーズID == CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト)) &&\r
+                                       ((actStageFailed.On進行描画() != 0) &&\r
+                                       (base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト)))\r
+                               {\r
+                                       eフェードアウト完了時の戻り値 = E演奏画面の戻り値.ステージ失敗;\r
+                                       base.eフェーズID = CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト;\r
+                                       actFO.tフェードアウト開始();\r
+                               }\r
 \r
-                                               case 8:\r
-                                                       return this.RD;\r
+                               bIsFinishedFadeout = this.t進行描画_フェードイン_アウト();\r
+                               if (bIsFinishedPlaying && (base.eフェーズID == CStage.Eフェーズ.共通_通常状態))\r
+                               {\r
+                                       if (CDTXMania.Instance.DTXVmode.Enabled)\r
+                                       {\r
+                                               if (CDTXMania.Instance.Timer.b停止していない)\r
+                                               {\r
+                                                       actPanel.Stop();\r
+                                                       CDTXMania.Instance.Timer.t一時停止();\r
+                                               }\r
+                                               Thread.Sleep(5);\r
+                                               // DTXCからの次のメッセージを待ち続ける\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               this.eフェードアウト完了時の戻り値 = E演奏画面の戻り値.ステージクリア;\r
+                                               base.eフェーズID = CStage.Eフェーズ.演奏_STAGE_CLEAR_フェードアウト;\r
+                                               this.actFOClear.tフェードアウト開始();\r
+                                               t演奏結果を格納する_ドラム();\r
+                                               t演奏結果を格納する_ギター();\r
+                                               t演奏結果を格納する_ベース();\r
+\r
+                                               if (CDTXMania.Instance.ConfigIni.bDrums有効)\r
+                                               {\r
+                                                       for (EPad pad = EPad.DrumsPadMin; pad < EPad.DrumsPadMax; pad++)\r
+                                                       {\r
+                                                               r空打ちドラムチップ[pad] = r空うちChip(EPart.Drums, pad);\r
+                                                               if (r空打ちドラムチップ[pad] == null)\r
+                                                               {\r
+                                                                       r空打ちドラムチップ[pad] = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(\r
+                                                                                       CSound管理.rc演奏用タイマ.n現在時刻,\r
+                                                                                       EnumConverter.ChannelFromPad(pad),\r
+                                                                                       CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs.Drums);\r
+                                                               }\r
+                                                       }\r
+                                               }\r
 \r
-                                               case 9:\r
-                                                       return this.LC;\r
+                                               if (CDTXMania.Instance.ConfigIni.bIsSwappedGuitarBass)      // #24063 2011.1.24 yyagi Gt/Bsを入れ替えていたなら、演奏結果も入れ替える\r
+                                               {\r
+                                                       CScoreIni.C演奏記録 t;\r
+                                                       t = record.Guitar;\r
+                                                       record.Guitar = record.Bass;\r
+                                                       record.Bass = t;\r
+\r
+                                                       // 譜面情報も元に戻す\r
+                                                       // #35417 2015.08.30 changed フラグにアクセスしている箇所が見つかったため有効化\r
+                                                       // #35417 2015.8.18 yyagi: AUTO系のフラグ入れ替えは削除可能!?。以後AUTOフラグに全くアクセスしておらず、意味がないため。\r
+                                                       // (直下でb全AUTOである にアクセスしているが、既に計算済みのクラスへのアクセスであり、ここでの交換対象ではない)\r
+                                                       CDTXMania.Instance.DTX.SwapGuitarBassInfos();\r
+                                                       // #24415 2011.2.27 yyagi\r
+                                                       // リザルト集計時のみ、Auto系のフラグも元に戻す。\r
+                                                       // これを戻すのは、リザルト集計後。\r
+                                                       // "case CStage.Eステージ.結果:"のところ。\r
+                                                       CDTXMania.Instance.ConfigIni.SwapGuitarBassInfos_AutoFlags();\r
+                                               }\r
                                        }\r
-                                       throw new IndexOutOfRangeException();\r
                                }\r
-                               set\r
+                               if (this.eフェードアウト完了時の戻り値 == E演奏画面の戻り値.再読込_再演奏)\r
                                {\r
-                                       switch ( index )\r
-                                       {\r
-                                               case 0:\r
-                                                       this.HH = value;\r
-                                                       return;\r
-\r
-                                               case 1:\r
-                                                       this.SD = value;\r
-                                                       return;\r
-\r
-                                               case 2:\r
-                                                       this.BD = value;\r
-                                                       return;\r
-\r
-                                               case 3:\r
-                                                       this.HT = value;\r
-                                                       return;\r
-\r
-                                               case 4:\r
-                                                       this.LT = value;\r
-                                                       return;\r
+                                       bIsFinishedFadeout = true;\r
+                               }\r
+                               if (bIsFinishedFadeout)\r
+                               {\r
+                                       return (int)this.eフェードアウト完了時の戻り値;\r
+                               }\r
 \r
-                                               case 5:\r
-                                                       this.FT = value;\r
-                                                       return;\r
+                               ManageMixerQueue();\r
 \r
-                                               case 6:\r
-                                                       this.CY = value;\r
-                                                       return;\r
+                               // キー入力\r
 \r
-                                               case 7:\r
-                                                       this.HHO = value;\r
-                                                       return;\r
+                               if (CDTXMania.Instance.act現在入力を占有中のプラグイン == null)\r
+                               {\r
+                                       this.tキー入力();\r
+                               }\r
+                       }\r
+                       return 0;\r
+               }\r
 \r
-                                               case 8:\r
-                                                       this.RD = value;\r
-                                                       return;\r
+               // その他\r
+               public STPadValue<CChip> GetNoChipDrums()\r
+               {\r
+                       return r空打ちドラムチップ;\r
+               }\r
+               public STDGBSValue<CScoreIni.C演奏記録> Record\r
+               {\r
+                       get\r
+                       {\r
+                               return record;\r
+                       }\r
+               }\r
+               public void AddMixer(CSound cs, bool _b演奏終了後も再生が続くチップである)\r
+               {\r
+                       STMixer stm = new STMixer()\r
+                       {\r
+                               bIsAdd = true,\r
+                               csound = cs,\r
+                               b演奏終了後も再生が続くチップである = _b演奏終了後も再生が続くチップである\r
+                       };\r
+                       queueMixerSound.Enqueue(stm);\r
+                       //              Debug.WriteLine( "★Queue: add " + Path.GetFileName( stm.csound.strファイル名 ));\r
+               }\r
+               public void RemoveMixer(CSound cs)\r
+               {\r
+                       STMixer stm = new STMixer()\r
+                       {\r
+                               bIsAdd = false,\r
+                               csound = cs,\r
+                               b演奏終了後も再生が続くチップである = false\r
+                       };\r
+                       queueMixerSound.Enqueue(stm);\r
+                       //              Debug.WriteLine( "★Queue: remove " + Path.GetFileName( stm.csound.strファイル名 ));\r
+               }\r
+               public void ManageMixerQueue()\r
+               {\r
+                       // もしサウンドの登録/削除が必要なら、実行する\r
+                       if (queueMixerSound.Count > 0)\r
+                       {\r
+                               //Debug.WriteLine( "☆queueLength=" + queueMixerSound.Count );\r
+                               DateTime dtnow = DateTime.Now;\r
+                               TimeSpan ts = dtnow - dtLastQueueOperation;\r
+                               int nInterval = ( CDTXMania.Instance.ConfigIni.bVSyncWait ) ? 7 : 1;\r
+                               int nMaxDequeueCount = ( CDTXMania.Instance.ConfigIni.bVSyncWait ) ? 2 : 1;\r
+                               if (ts.Milliseconds > nInterval)\r
+                               {\r
+                                       for (int i = 0; i < nMaxDequeueCount && queueMixerSound.Count > 0; i++)\r
+                                       {\r
+                                               dtLastQueueOperation = dtnow;\r
+                                               STMixer stm = queueMixerSound.Dequeue();\r
+                                               if (stm.bIsAdd)\r
+                                               {\r
+                                                       CDTXMania.Instance.Sound管理.AddMixer(stm.csound, db再生速度, stm.b演奏終了後も再生が続くチップである);\r
+                                               }\r
+                                               else\r
+                                               {\r
+                                                       CDTXMania.Instance.Sound管理.RemoveMixer(stm.csound);\r
+                                               }\r
+                                       }\r
+                               }\r
+                       }\r
+               }\r
 \r
-                                               case 9:\r
-                                                       this.LC = value;\r
-                                                       return;\r
+               /// <summary>\r
+               /// 演奏開始前に適切なサイズのAVIテクスチャを作成しておくことで、AVI再生開始時のもたつきをなくす\r
+               /// </summary>\r
+               protected void PrepareAVITexture()\r
+               {\r
+                       if (CDTXMania.Instance.ConfigIni.bAVI)\r
+                       {\r
+                               foreach (CChip pChip in CDTXMania.Instance.DTX.listChip)\r
+                               {\r
+                                       if (pChip.eチャンネル番号 == EChannel.Movie || pChip.eチャンネル番号 == EChannel.MovieFull)\r
+                                       {\r
+                                               // 最初に再生するAVIチップに合わせて、テクスチャを準備しておく\r
+                                               if (pChip.rAVI != null)\r
+                                               {\r
+                                                       this.actAVI.PrepareProperSizeTexture((int)pChip.rAVI.avi.nフレーム幅, (int)pChip.rAVI.avi.nフレーム高さ);\r
+                                               }\r
+                                               break;\r
                                        }\r
-                                       throw new IndexOutOfRangeException();\r
                                }\r
                        }\r
                }\r
 \r
-               protected CAct演奏AVI actAVI;\r
-               protected CAct演奏BGA actBGA;\r
-\r
-               protected CAct演奏チップファイアGB actChipFireGB;\r
-               protected CAct演奏Combo共通 actCombo;\r
-               protected CAct演奏Danger共通 actDANGER;\r
-               protected CActFIFOBlack actFI;\r
-               protected CActFIFOBlack actFO;\r
-               protected CActFIFOWhite actFOClear;\r
-               protected CAct演奏ゲージ共通 actGauge;\r
-\r
-               protected CAct演奏判定文字列共通 actJudgeString;\r
-               protected CAct演奏DrumsレーンフラッシュD actLaneFlushD;\r
-               protected CAct演奏レーンフラッシュGB共通 actLaneFlushGB;\r
-               protected CAct演奏パネル文字列 actPanel;\r
-               protected CAct演奏演奏情報 actPlayInfo;\r
-               protected CAct演奏RGB共通 actRGB;\r
-               protected CAct演奏スコア共通 actScore;\r
-               protected CAct演奏ステージ失敗 actStageFailed;\r
-               protected CAct演奏ステータスパネル共通 actStatusPanels;\r
-               protected CAct演奏WailingBonus共通 actWailingBonus;\r
-               protected CAct演奏スクロール速度 act譜面スクロール速度;\r
-               protected bool bPAUSE;\r
-               protected STDGBVALUE<bool> b演奏にMIDI入力を使った;\r
-               protected STDGBVALUE<bool> b演奏にキーボードを使った;\r
-               protected STDGBVALUE<bool> b演奏にジョイパッドを使った;\r
-               protected STDGBVALUE<bool> b演奏にマウスを使った;\r
-               protected CCounter ctWailingチップ模様アニメ;\r
-               protected STDGBVALUE<CCounter> ctチップ模様アニメ;\r
-\r
-               protected E演奏画面の戻り値 eフェードアウト完了時の戻り値;\r
-               protected readonly int[,] nBGAスコープチャンネルマップ = new int[ , ] { { 0xc4, 0xc7, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xe0 }, { 4, 7, 0x55, 0x56, 0x57, 0x58, 0x59, 0x60 } };\r
-               protected readonly int[] nチャンネル0Atoパッド08 = new int[] { 1, 2, 3, 4, 5, 7, 6, 1, 8, 0 };\r
-               protected readonly int[] nチャンネル0Atoレーン07 = new int[] { 1, 2, 3, 4, 5, 7, 6, 1, 7, 0 };\r
-               protected readonly int[] nパッド0Atoチャンネル0A = new int[] { 0x11, 0x12, 0x13, 20, 0x15, 0x17, 0x16, 0x18, 0x19, 0x1a };\r
-               protected readonly int[] nパッド0Atoパッド08 = new int[] { 1, 2, 3, 4, 5, 6, 7, 1, 8, 0 };\r
-               protected readonly int[] nパッド0Atoレーン07 = new int[] { 1, 2, 3, 4, 5, 6, 7, 1, 7, 0 };\r
-               protected STDGBVALUE<STHITCOUNTOFRANK> nヒット数・Auto含まない;\r
-               protected STDGBVALUE<STHITCOUNTOFRANK> nヒット数・Auto含む;\r
-               protected int n現在のトップChip = -1;\r
-               protected int[] n最後に再生したBGMの実WAV番号 = new int[ 50 ];\r
-               protected int n最後に再生したHHのチャンネル番号;\r
-               protected List<int> L最後に再生したHHの実WAV番号;            // #23921 2011.1.4 yyagi: change "int" to "List<int>", for recording multiple wav No.\r
-               protected int n最後に再生したギターの実WAV番号;\r
-               protected int n最後に再生したベースの実WAV番号;\r
-       \r
-               protected STDGBVALUE<Queue<CDTX.CChip>> queWailing;\r
-               protected STDGBVALUE<CDTX.CChip> r現在の歓声Chip;\r
-               protected CDTX.CChip r現在の空うちギターChip;\r
-               protected STKARAUCHI r現在の空うちドラムChip;\r
-               protected CDTX.CChip r現在の空うちベースChip;\r
-               protected CDTX.CChip r次にくるギターChip;\r
-               protected CDTX.CChip r次にくるベースChip;\r
-               protected CTexture txWailing枠;\r
-               protected CTexture txチップ;\r
-               protected CTexture txヒットバー;\r
-\r
-               protected CTexture tx背景;\r
-\r
-               protected STDGBVALUE<int> nInputAdjustTimeMs;           // #23580 2011.1.3 yyagi\r
-               protected CConfigIni.STAUTOPLAY bIsAutoPlay;            // #24239 2011.1.23 yyagi\r
-\r
-\r
-\r
-\r
-               protected E判定 e指定時刻からChipのJUDGEを返す( long nTime, CDTX.CChip pChip, int nInputAdjustTime )\r
+               protected EJudge e指定時刻からChipのJUDGEを返す(long nTime, CChip pChip, int nInputAdjustTime, bool saveLag = true)\r
                {\r
-                       if ( pChip != null )\r
+                       if (pChip != null)\r
                        {\r
-                               pChip.nLag = (int) ( nTime + nInputAdjustTime - pChip.n発声時刻ms );                // #23580 2011.1.3 yyagi: add "nInputAdjustTime" to add input timing adjust feature\r
-                               int nDeltaTime = Math.Abs( pChip.nLag );\r
+                               // #35411 2015.08.22 chnmr0 modified add check save lag flag for ghost\r
+                               int lag = (int)(nTime + nInputAdjustTime - pChip.n発声時刻ms);\r
+                               if (saveLag)\r
+                               {\r
+                                       pChip.nLag = lag;\r
+                                       // #23580 2011.1.3 yyagi: add "nInputAdjustTime" to add input timing adjust feature\r
+                                       if (pChip.e楽器パート != EPart.Unknown)\r
+                                       {\r
+                                               pChip.extendInfoForGhost = this.actCombo.dgbコンボ数[pChip.e楽器パート].n現在値 > 0 ? true : false;\r
+                                       }\r
+                               }\r
+                               // #35411 modify end\r
+\r
+                               int nDeltaTime = Math.Abs(lag);\r
                                //Debug.WriteLine("nAbsTime=" + (nTime - pChip.n発声時刻ms) + ", nDeltaTime=" + (nTime + nInputAdjustTime - pChip.n発声時刻ms));\r
-                               if ( nDeltaTime <= CDTXMania.nPerfect範囲ms )\r
+                               if (nDeltaTime <= CDTXMania.Instance.nPerfect範囲ms)\r
                                {\r
-                                       return E判定.Perfect;\r
+                                       return EJudge.Perfect;\r
                                }\r
-                               if ( nDeltaTime <= CDTXMania.nGreat範囲ms )\r
+                               if (nDeltaTime <= CDTXMania.Instance.nGreat範囲ms)\r
                                {\r
-                                       return E判定.Great;\r
+                                       return EJudge.Great;\r
                                }\r
-                               if ( nDeltaTime <= CDTXMania.nGood範囲ms )\r
+                               if (nDeltaTime <= CDTXMania.Instance.nGood範囲ms)\r
                                {\r
-                                       return E判定.Good;\r
+                                       return EJudge.Good;\r
                                }\r
-                               if ( nDeltaTime <= CDTXMania.nPoor範囲ms )\r
+                               if (nDeltaTime <= CDTXMania.Instance.nPoor範囲ms)\r
                                {\r
-                                       return E判定.Poor;\r
+                                       return EJudge.Poor;\r
                                }\r
                        }\r
-                       return E判定.Miss;\r
+                       return EJudge.Miss;\r
                }\r
-               protected CDTX.CChip r空うちChip( E楽器パート part, Eパッド pad )\r
+\r
+               protected CChip r空うちChip(EPart part, EPad pad)\r
                {\r
-                       switch ( part )\r
+                       switch (part)\r
                        {\r
-                               case E楽器パート.DRUMS:\r
-                                       switch ( pad )\r
+                               case EPart.Drums:\r
+                                       switch (pad)\r
                                        {\r
-                                               case Eパッド.HH:\r
-                                                       if ( this.r現在の空うちドラムChip.HH != null )\r
+                                               case EPad.HH:\r
+                                                       if (this.r現在の空うちドラムChip.HH != null)\r
                                                        {\r
                                                                return this.r現在の空うちドラムChip.HH;\r
                                                        }\r
-                                                       if ( CDTXMania.ConfigIni.eHHGroup != EHHGroup.ハイハットのみ打ち分ける )\r
+                                                       if (CDTXMania.Instance.ConfigIni.eHHGroup != EHHGroup.HO_HC)\r
                                                        {\r
-                                                               if ( CDTXMania.ConfigIni.eHHGroup == EHHGroup.左シンバルのみ打ち分ける )\r
+                                                               if (CDTXMania.Instance.ConfigIni.eHHGroup == EHHGroup.LC_HH)\r
                                                                {\r
                                                                        return this.r現在の空うちドラムChip.HHO;\r
                                                                }\r
-                                                               if ( this.r現在の空うちドラムChip.HHO != null )\r
+                                                               if (this.r現在の空うちドラムChip.HHO != null)\r
                                                                {\r
                                                                        return this.r現在の空うちドラムChip.HHO;\r
                                                                }\r
                                                        }\r
                                                        return this.r現在の空うちドラムChip.LC;\r
 \r
-                                               case Eパッド.SD:\r
+                                               case EPad.SD:\r
                                                        return this.r現在の空うちドラムChip.SD;\r
 \r
-                                               case Eパッド.BD:\r
+                                               case EPad.BD:\r
                                                        return this.r現在の空うちドラムChip.BD;\r
 \r
-                                               case Eパッド.HT:\r
+                                               case EPad.HT:\r
                                                        return this.r現在の空うちドラムChip.HT;\r
 \r
-                                               case Eパッド.LT:\r
-                                                       if ( this.r現在の空うちドラムChip.LT != null )\r
+                                               case EPad.LT:\r
+                                                       if (this.r現在の空うちドラムChip.LT != null)\r
                                                        {\r
                                                                return this.r現在の空うちドラムChip.LT;\r
                                                        }\r
-                                                       if ( CDTXMania.ConfigIni.eFTGroup == EFTGroup.共通 )\r
+                                                       if (CDTXMania.Instance.ConfigIni.eFTGroup == EFTGroup.Group)\r
                                                        {\r
                                                                return this.r現在の空うちドラムChip.FT;\r
                                                        }\r
                                                        return null;\r
 \r
-                                               case Eパッド.FT:\r
-                                                       if ( this.r現在の空うちドラムChip.FT != null )\r
+                                               case EPad.FT:\r
+                                                       if (this.r現在の空うちドラムChip.FT != null)\r
                                                        {\r
                                                                return this.r現在の空うちドラムChip.FT;\r
                                                        }\r
-                                                       if ( CDTXMania.ConfigIni.eFTGroup == EFTGroup.共通 )\r
+                                                       if (CDTXMania.Instance.ConfigIni.eFTGroup == EFTGroup.Group)\r
                                                        {\r
                                                                return this.r現在の空うちドラムChip.LT;\r
                                                        }\r
                                                        return null;\r
 \r
-                                               case Eパッド.CY:\r
-                                                       if ( this.r現在の空うちドラムChip.CY != null )\r
+                                               case EPad.CY:\r
+                                                       if (this.r現在の空うちドラムChip.CY != null)\r
                                                        {\r
                                                                return this.r現在の空うちドラムChip.CY;\r
                                                        }\r
-                                                       if ( CDTXMania.ConfigIni.eCYGroup == ECYGroup.共通 )\r
+                                                       if (CDTXMania.Instance.ConfigIni.eCYGroup == ECYGroup.Group)\r
                                                        {\r
                                                                return this.r現在の空うちドラムChip.RD;\r
                                                        }\r
                                                        return null;\r
 \r
-                                               case Eパッド.HHO:\r
-                                                       if ( this.r現在の空うちドラムChip.HHO != null )\r
+                                               case EPad.HHO:\r
+                                                       if (this.r現在の空うちドラムChip.HHO != null)\r
                                                        {\r
                                                                return this.r現在の空うちドラムChip.HHO;\r
                                                        }\r
-                                                       if ( CDTXMania.ConfigIni.eHHGroup != EHHGroup.ハイハットのみ打ち分ける )\r
+                                                       if (CDTXMania.Instance.ConfigIni.eHHGroup != EHHGroup.HO_HC)\r
                                                        {\r
-                                                               if ( CDTXMania.ConfigIni.eHHGroup == EHHGroup.左シンバルのみ打ち分ける )\r
+                                                               if (CDTXMania.Instance.ConfigIni.eHHGroup == EHHGroup.LC_HH)\r
                                                                {\r
                                                                        return this.r現在の空うちドラムChip.HH;\r
                                                                }\r
-                                                               if ( this.r現在の空うちドラムChip.HH != null )\r
+                                                               if (this.r現在の空うちドラムChip.HH != null)\r
                                                                {\r
                                                                        return this.r現在の空うちドラムChip.HH;\r
                                                                }\r
                                                        }\r
                                                        return this.r現在の空うちドラムChip.LC;\r
 \r
-                                               case Eパッド.RD:\r
-                                                       if ( this.r現在の空うちドラムChip.RD != null )\r
+                                               case EPad.RD:\r
+                                                       if (this.r現在の空うちドラムChip.RD != null)\r
                                                        {\r
                                                                return this.r現在の空うちドラムChip.RD;\r
                                                        }\r
-                                                       if ( CDTXMania.ConfigIni.eCYGroup == ECYGroup.共通 )\r
+                                                       if (CDTXMania.Instance.ConfigIni.eCYGroup == ECYGroup.Group)\r
                                                        {\r
                                                                return this.r現在の空うちドラムChip.CY;\r
                                                        }\r
                                                        return null;\r
 \r
-                                               case Eパッド.LC:\r
-                                                       if ( this.r現在の空うちドラムChip.LC != null )\r
+                                               case EPad.LC:\r
+                                                       if (this.r現在の空うちドラムChip.LC != null)\r
                                                        {\r
                                                                return this.r現在の空うちドラムChip.LC;\r
                                                        }\r
-                                                       if ( ( CDTXMania.ConfigIni.eHHGroup != EHHGroup.ハイハットのみ打ち分ける ) && ( CDTXMania.ConfigIni.eHHGroup != EHHGroup.全部共通 ) )\r
+                                                       if ((CDTXMania.Instance.ConfigIni.eHHGroup != EHHGroup.HO_HC) && (CDTXMania.Instance.ConfigIni.eHHGroup != EHHGroup.Group))\r
                                                        {\r
                                                                return null;\r
                                                        }\r
-                                                       if ( this.r現在の空うちドラムChip.HH != null )\r
+                                                       if (this.r現在の空うちドラムChip.HH != null)\r
                                                        {\r
                                                                return this.r現在の空うちドラムChip.HH;\r
                                                        }\r
@@ -674,142 +1018,81 @@ namespace DTXMania
                                        }\r
                                        break;\r
 \r
-                               case E楽器パート.GUITAR:\r
+                               case EPart.Guitar:\r
                                        return this.r現在の空うちギターChip;\r
 \r
-                               case E楽器パート.BASS:\r
+                               case EPart.Bass:\r
                                        return this.r現在の空うちベースChip;\r
                        }\r
                        return null;\r
                }\r
-               protected CDTX.CChip r指定時刻に一番近いChip・ヒット未済問わず不可視考慮( long nTime, int nChannel, int nInputAdjustTime )\r
-               {\r
-                       nTime += nInputAdjustTime;                                              // #24239 2011.1.23 yyagi InputAdjust\r
 \r
-                       int nIndex_InitialPositionSearchingToPast;\r
-                       if ( this.n現在のトップChip == -1 )                               // 演奏データとして1個もチップがない場合は\r
-                       {\r
-                               return null;\r
-                       }\r
-                       int count = CDTXMania.DTX.listChip.Count;\r
-                       int nIndex_InitialPositionSearchingToFuture = nIndex_InitialPositionSearchingToPast = this.n現在のトップChip;\r
-                       if ( this.n現在のトップChip >= count )                    // その時点で演奏すべきチップが既に全部無くなっていたら\r
-                       {\r
-                               nIndex_InitialPositionSearchingToFuture = nIndex_InitialPositionSearchingToPast = count - 1;\r
-                       }\r
-                       int nIndex_NearestChip_Future = nIndex_InitialPositionSearchingToFuture;\r
-                       while ( nIndex_NearestChip_Future < count )             // 未来方向への検索\r
-                       {\r
-                               CDTX.CChip chip = CDTXMania.DTX.listChip[ nIndex_NearestChip_Future ];\r
-                               if ( ( ( nChannel >= 0x11 ) && ( nChannel <= 0x1a ) ) && ( ( chip.nチャンネル番号 == nChannel ) || ( chip.nチャンネル番号 == ( nChannel + 0x20 ) ) ) )\r
-                               {\r
-                                       if ( chip.n発声時刻ms > nTime )\r
-                                       {\r
-                                               break;\r
-                                       }\r
-                                       nIndex_InitialPositionSearchingToPast = nIndex_NearestChip_Future;\r
-                               }\r
-                               else if ( ( ( nChannel == 0x2f ) && ( chip.e楽器パート == E楽器パート.GUITAR ) ) || ( ( ( nChannel >= 0x20 ) && ( nChannel <= 0x28 ) ) && ( chip.nチャンネル番号 == nChannel ) ) )\r
-                               {\r
-                                       if ( chip.n発声時刻ms > nTime )\r
-                                       {\r
-                                               break;\r
-                                       }\r
-                                       nIndex_InitialPositionSearchingToPast = nIndex_NearestChip_Future;\r
-                               }\r
-                               else if ( ( ( nChannel == 0xaf ) && ( chip.e楽器パート == E楽器パート.BASS ) ) || ( ( ( nChannel >= 0xa0 ) && ( nChannel <= 0xa8 ) ) && ( chip.nチャンネル番号 == nChannel ) ) )\r
-                               {\r
-                                       if ( chip.n発声時刻ms > nTime )\r
-                                       {\r
-                                               break;\r
-                                       }\r
-                                       nIndex_InitialPositionSearchingToPast = nIndex_NearestChip_Future;\r
-                               }\r
-                               nIndex_NearestChip_Future++;\r
-                       }\r
-                       int nIndex_NearestChip_Past = nIndex_InitialPositionSearchingToPast;\r
-                       while ( nIndex_NearestChip_Past >= 0 )                  // 過去方向への検索\r
-                       {\r
-                               CDTX.CChip chip2 = CDTXMania.DTX.listChip[ nIndex_NearestChip_Past ];\r
-                               if ( ( nChannel >= 0x11 ) && ( nChannel <= 0x1a ) )\r
-                               {\r
-                                       if ( ( chip2.nチャンネル番号 == nChannel ) || ( chip2.nチャンネル番号 == ( nChannel + 0x20 ) ) )\r
-                                       {\r
-                                               break;\r
-                                       }\r
-                               }\r
-                               else if ( ( ( nChannel == 0x2f ) && ( chip2.e楽器パート == E楽器パート.GUITAR ) ) || ( ( ( nChannel >= 0x20 ) && ( nChannel <= 0x28 ) ) && ( chip2.nチャンネル番号 == nChannel ) ) )\r
-                               {\r
-                                       if ( ( chip2.nチャンネル番号 >= 0x20 ) && ( chip2.nチャンネル番号 <= 0x28 ) )\r
-                                       {\r
-                                               break;\r
-                                       }\r
-                               }\r
-                               else if ( ( ( ( nChannel == 0xaf ) && ( chip2.e楽器パート == E楽器パート.BASS ) ) || ( ( ( nChannel >= 0xa0 ) && ( nChannel <= 0xa8 ) ) && ( chip2.nチャンネル番号 == nChannel ) ) ) && ( ( chip2.nチャンネル番号 >= 0xa0 ) && ( chip2.nチャンネル番号 <= 0xa8 ) ) )\r
-                               {\r
-                                       break;\r
-                               }\r
-                               nIndex_NearestChip_Past--;\r
-                       }\r
-                       if ( ( nIndex_NearestChip_Future == count ) && ( nIndex_NearestChip_Past < 0 ) )        // 検索対象が過去未来どちらにも見つからなかった場合\r
-                       {\r
-                               return null;\r
-                       }\r
-                       if ( nIndex_NearestChip_Future == count )                                                                                       // 検索対象が未来方向には見つからなかった(しかし過去方向には見つかった)場合\r
-                       {\r
-                               return CDTXMania.DTX.listChip[ nIndex_NearestChip_Past ];\r
-                       }\r
-                       if ( nIndex_NearestChip_Past < 0 )                                                                                                      // 検索対象が過去方向には見つからなかった(しかし未来方向には見つかった)場合\r
-                       {\r
-                               return CDTXMania.DTX.listChip[ nIndex_NearestChip_Future ];\r
-                       }\r
-                       CDTX.CChip nearestChip_Future = CDTXMania.DTX.listChip[ nIndex_NearestChip_Future ];\r
-                       CDTX.CChip nearestChip_Past   = CDTXMania.DTX.listChip[ nIndex_NearestChip_Past ];\r
-                       int nDiffTime_Future = Math.Abs( (int) ( nTime - nearestChip_Future.n発声時刻ms ) );\r
-                       int nDiffTIme_Past   = Math.Abs( (int) ( nTime - nearestChip_Past.n発声時刻ms ) );\r
-                       if ( nDiffTime_Future >= nDiffTIme_Past )\r
-                       {\r
-                               return nearestChip_Past;\r
-                       }\r
-                       return nearestChip_Future;\r
-               }\r
-               protected void tサウンド再生( CDTX.CChip rChip, long n再生開始システム時刻ms, E楽器パート part )\r
+               protected CChip r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(long nTime, EChannel eChannel, int nInputAdjustTime)\r
                {\r
-                       this.tサウンド再生( rChip, n再生開始システム時刻ms, part, CDTXMania.ConfigIni.n手動再生音量, false, false );\r
+                       return r指定時刻に一番近い未ヒットChip(nTime, eChannel, nInputAdjustTime, 0, HitState.DontCare);\r
                }\r
-               protected void tサウンド再生( CDTX.CChip rChip, long n再生開始システム時刻ms, E楽器パート part, int n音量 )\r
+\r
+               protected void tサウンド再生(CChip rChip, long n再生開始システム時刻ms, EPart part)\r
                {\r
-                       this.tサウンド再生( rChip, n再生開始システム時刻ms, part, n音量, false, false );\r
+                       this.tサウンド再生(rChip, n再生開始システム時刻ms, part, CDTXMania.Instance.ConfigIni.nChipVolume);\r
                }\r
-               protected void tサウンド再生( CDTX.CChip rChip, long n再生開始システム時刻ms, E楽器パート part, int n音量, bool bモニタ )\r
+\r
+               protected void tサウンド再生(CChip pChip, long n再生開始システム時刻ms, EPart part, int n音量, bool bモニタ = false, bool b音程をずらして再生 = false)\r
                {\r
-                       this.tサウンド再生( rChip, n再生開始システム時刻ms, part, n音量, bモニタ, false );\r
-               }\r
-               protected void tサウンド再生( CDTX.CChip pChip, long n再生開始システム時刻ms, E楽器パート part, int n音量, bool bモニタ, bool b音程をずらして再生 )\r
-               {\r
-                       if ( pChip != null )\r
-                       {\r
-                               switch ( part )\r
+                       // mute sound (auto)\r
+                       // 4A: HH\r
+                       // 4B: CY\r
+                       // 4C: RD\r
+                       // 4D: LC\r
+                       // 2A: Gt\r
+                       // AA: Bs\r
+                       //\r
+\r
+                       if (pChip != null)\r
+                       {\r
+                               bool overwrite = false;\r
+                               switch (part)\r
                                {\r
-                                       case E楽器パート.DRUMS:\r
+                                       case EPart.Drums:\r
+                                               #region [ DRUMS ]\r
                                                {\r
-                                                       int index = pChip.nチャンネル番号;\r
-                                                       if ( ( index >= 0x11 ) && ( index <= 0x1a ) )\r
+                                                       int index = -1;\r
+                                                       if (pChip.bDrums可視チップ_LP_LBD含まない)\r
+                                                       {\r
+                                                               index = pChip.nDrumsIndex;\r
+                                                       }\r
+                                                       else if (pChip.bDrums不可視チップ_LP_LBD含まない)\r
+                                                       {\r
+                                                               index = pChip.nDrumsIndexHidden;\r
+                                                       }\r
+                                                       // mute sound (auto)\r
+                                                       // 4A: 84: HH (HO/HC)\r
+                                                       // 4B: 85: CY\r
+                                                       // 4C: 86: RD\r
+                                                       // 4D: 87: LC\r
+                                                       // 2A: 88: Gt\r
+                                                       // AA: 89: Bs\r
+                                                       else if (EChannel.SE24 == pChip.eチャンネル番号)  // 仮に今だけ追加 HHは消音処理があるので overwriteフラグ系の処理は改めて不要\r
+                                                       {\r
+                                                               index = 0;\r
+                                                       }\r
+                                                       else if ((EChannel.SE25 <= pChip.eチャンネル番号) && (pChip.eチャンネル番号 <= EChannel.SE27))  // 仮に今だけ追加\r
                                                        {\r
-                                                               index -= 0x11;\r
+                                                               pChip.ConvertSE25_26_27toCY_RCY_LCY();\r
+                                                               index = pChip.nDrumsIndex;\r
+                                                               overwrite = true;\r
                                                        }\r
                                                        else\r
                                                        {\r
-                                                               if ( ( index < 0x31 ) || ( index > 0x3a ) )\r
-                                                               {\r
-                                                                       return;\r
-                                                               }\r
-                                                               index -= 0x31;\r
+                                                               return;\r
                                                        }\r
-                                                       int nLane = this.nチャンネル0Atoレーン07[ index ];\r
-                                                       if ( ( nLane == 1 ) &&  // 今回演奏するのがHC or HO\r
-                                                               ( index == 0 || ( index == 7 && this.n最後に再生したHHのチャンネル番号 != 0x18 && this.n最後に再生したHHのチャンネル番号 != 0x38 ) )\r
-                                                               // HCを演奏するか、またはHO演奏&以前HO演奏でない&以前不可視HO演奏でない\r
+                                                       EChannel actChannel = EChannel.HiHatClose + index;\r
+                                                       ELane nLane = EnumConverter.LaneFromChannel(actChannel);\r
+                                                       if ((nLane == ELane.HH) && // 今回演奏するのがHC or HO\r
+                                                                       (index == 0 || (index == 7 &&\r
+                                                                       this.e最後に再生したHHのチャンネル番号 != EChannel.HiHatOpen &&\r
+                                                                       this.e最後に再生したHHのチャンネル番号 != EChannel.HiHatOpen_Hidden))\r
+                                                       // HCを演奏するか、またはHO演奏&以前HO演奏でない&以前不可視HO演奏でない\r
                                                        )\r
                                                        // #24772 2011.4.4 yyagi\r
                                                        // == HH mute condition == \r
@@ -819,1130 +1102,2359 @@ namespace DTXMania
                                                        //                      HO      Yes     No\r
                                                        {\r
                                                                // #23921 2011.1.4 yyagi: 2種類以上のオープンハイハットが発音済みだと、最後のHHOしか消せない問題に対応。\r
-#if TEST_NOTEOFFMODE   // 2011.1.1 yyagi test\r
-                                                               if (CDTXMania.DTX.bHH演奏で直前のHHを消音する)\r
-                                                               {\r
-#endif\r
-                                                               for ( int i = 0; i < this.L最後に再生したHHの実WAV番号.Count; i++ )          // #23921 2011.1.4 yyagi\r
+                                                               for (int i = 0; i < this.L最後に再生したHHの実WAV番号.Count; i++)      // #23921 2011.1.4 yyagi\r
                                                                {\r
-                                                                       // CDTXMania.DTX.tWavの再生停止(this.L最後に再生したHHの実WAV番号);\r
-                                                                       CDTXMania.DTX.tWavの再生停止( this.L最後に再生したHHの実WAV番号[ i ] ); // #23921 yyagi ストック分全て消音する\r
+                                                                       CDTXMania.Instance.DTX.tWavの再生停止(this.L最後に再生したHHの実WAV番号[i]);    // #23921 yyagi ストック分全て消音する\r
                                                                }\r
                                                                this.L最後に再生したHHの実WAV番号.Clear();\r
-#if TEST_NOTEOFFMODE   // 2011.1.1 yyagi test\r
-                                                               }\r
-#endif\r
-                                                               //this.n最後に再生したHHの実WAV番号 = pChip.n整数値・内部番号;\r
-                                                               this.n最後に再生したHHのチャンネル番号 = pChip.nチャンネル番号;\r
+                                                               this.e最後に再生したHHのチャンネル番号 = pChip.eチャンネル番号;\r
                                                        }\r
-#if TEST_NOTEOFFMODE   // 2011.1.4 yyagi test\r
-                                                       if (CDTXMania.DTX.bHH演奏で直前のHHを消音する)\r
+                                                       if (index == 0 || index == 7)\r
                                                        {\r
-#endif\r
-                                                       if ( index == 0 || index == 7 || index == 0x20 || index == 0x27 )                       // #23921 HOまたは不可視HO演奏時はそのチップ番号をストックしておく\r
-                                                       {                                                                                                                                                       // #24772 HC, 不可視HCも消音キューに追加\r
-                                                               if ( this.L最後に再生したHHの実WAV番号.Count >= 16 ) // #23921 ただしストック数が16以上になるようなら、頭の1個を削って常に16未満に抑える\r
-                                                               {                                                                                                       // (ストックが増えてList<>のrealloc()が発生するのを予防する)\r
-                                                                       this.L最後に再生したHHの実WAV番号.RemoveAt( 0 );\r
+                                                               // #23921 HOまたは不可視HO演奏時はそのチップ番号をストックしておく\r
+                                                               // #24772 HC, 不可視HCも消音キューに追加\r
+                                                               if (this.L最後に再生したHHの実WAV番号.Count >= 16)\r
+                                                               {\r
+                                                                       // #23921 ただしストック数が16以上になるようなら、頭の1個を削って常に16未満に抑える\r
+                                                                       // (ストックが増えてList<>のrealloc()が発生するのを予防する)\r
+                                                                       this.L最後に再生したHHの実WAV番号.RemoveAt(0);\r
                                                                }\r
-                                                               if ( this.L最後に再生したHHの実WAV番号.IndexOf( pChip.n整数値・内部番号 ) < 0 )      // チップ音がまだストックされてなければ\r
+                                                               if (!this.L最後に再生したHHの実WAV番号.Contains(pChip.n整数値_内部番号))\r
                                                                {\r
-                                                                       this.L最後に再生したHHの実WAV番号.Add( pChip.n整数値・内部番号 );                    // ストックする\r
+                                                                       // チップ音がまだストックされてなければストックする                                                             \r
+                                                                       this.L最後に再生したHHの実WAV番号.Add(pChip.n整数値_内部番号);\r
                                                                }\r
                                                        }\r
-#if TEST_NOTEOFFMODE   // 2011.1.4 yyagi test\r
+                                                       if (overwrite)\r
+                                                       {\r
+\r
+                                                               CDTXMania.Instance.DTX.tWavの再生停止(this.n最後に再生した実WAV番号[EnumConverter.PadFromChannel(actChannel)]);\r
                                                        }\r
-#endif\r
-                                                       CDTXMania.DTX.tチップの再生( pChip, n再生開始システム時刻ms, nLane, n音量, bモニタ );\r
+                                                       CDTXMania.Instance.DTX.tチップの再生(pChip, n再生開始システム時刻ms, n音量, bモニタ);\r
+                                                       this.n最後に再生した実WAV番号[EnumConverter.PadFromLane(nLane)] = pChip.n整数値_内部番号;\r
+                                                       // nLaneでなくindexにすると、LC(1A-11=09)とギター(enumで09)がかぶってLC音が消されるので注意\r
                                                        return;\r
                                                }\r
-                                       case E楽器パート.GUITAR:\r
-#if TEST_NOTEOFFMODE   // 2011.1.1 yyagi test\r
-                                               if (CDTXMania.DTX.bGUITAR演奏で直前のGUITARを消音する) {\r
-#endif\r
-                                               CDTXMania.DTX.tWavの再生停止( this.n最後に再生したギターの実WAV番号 );\r
-#if TEST_NOTEOFFMODE\r
-                                               }\r
-#endif\r
-                                               CDTXMania.DTX.tチップの再生( pChip, n再生開始システム時刻ms, 8, n音量, bモニタ, b音程をずらして再生 );\r
-                                               this.n最後に再生したギターの実WAV番号 = pChip.n整数値・内部番号;\r
+                                       #endregion\r
+                                       case EPart.Guitar:\r
+                                               #region [ GUITAR ]\r
+                                               CDTXMania.Instance.DTX.tWavの再生停止(this.n最後に再生した実WAV番号.GtPick);\r
+                                               CDTXMania.Instance.DTX.tチップの再生(pChip, n再生開始システム時刻ms, n音量, bモニタ, b音程をずらして再生);\r
+                                               this.n最後に再生した実WAV番号.GtPick = pChip.n整数値_内部番号;\r
                                                return;\r
-\r
-                                       case E楽器パート.BASS:\r
-#if TEST_NOTEOFFMODE\r
-                                               if (CDTXMania.DTX.bBASS演奏で直前のBASSを消音する) {\r
-#endif\r
-                                               CDTXMania.DTX.tWavの再生停止( this.n最後に再生したベースの実WAV番号 );\r
-#if TEST_NOTEOFFMODE\r
-                                               }\r
-#endif\r
-                                               CDTXMania.DTX.tチップの再生( pChip, n再生開始システム時刻ms, 9, n音量, bモニタ, b音程をずらして再生 );\r
-                                               this.n最後に再生したベースの実WAV番号 = pChip.n整数値・内部番号;\r
+                                       #endregion\r
+                                       case EPart.Bass:\r
+                                               #region [ BASS ]\r
+                                               CDTXMania.Instance.DTX.tWavの再生停止(this.n最後に再生した実WAV番号.BsPick);\r
+                                               CDTXMania.Instance.DTX.tチップの再生(pChip, n再生開始システム時刻ms, n音量, bモニタ, b音程をずらして再生);\r
+                                               this.n最後に再生した実WAV番号.BsPick = pChip.n整数値_内部番号;\r
                                                return;\r
+                                       #endregion\r
+\r
+                                       default:\r
+                                               break;\r
                                }\r
                        }\r
                }\r
-               protected void tステータスパネルの選択()\r
-               {\r
-                       if ( CDTXMania.bコンパクトモード )\r
-                       {\r
-                               this.actStatusPanels.tラベル名からステータスパネルを決定する( null );\r
-                       }\r
-                       else if ( CDTXMania.stage選曲.r確定された曲 != null )\r
-                       {\r
-                               this.actStatusPanels.tラベル名からステータスパネルを決定する( CDTXMania.stage選曲.r確定された曲.ar難易度ラベル[ CDTXMania.stage選曲.n確定された曲の難易度 ] );\r
-                       }\r
-               }\r
-               protected abstract E判定 tチップのヒット処理( long nHitTime, CDTX.CChip pChip );\r
-               protected E判定 tチップのヒット処理( long nHitTime, CDTX.CChip pChip, E楽器パート screenmode )          // E楽器パート screenmode\r
+\r
+               protected EJudge tチップのヒット処理(long nHitTime, CChip pChip, bool bCorrectLane = true)\r
                {\r
                        pChip.bHit = true;\r
-                       bool bPChipIsAutoPlay = false;\r
-                       if ( (\r
-                                       ( ( pChip.e楽器パート == E楽器パート.DRUMS ) && CDTXMania.ConfigIni.bAutoPlay[ this.nチャンネル0Atoレーン07[ pChip.nチャンネル番号 - 0x11 ] ] ) ||\r
-                                       ( ( pChip.e楽器パート == E楽器パート.GUITAR ) && CDTXMania.ConfigIni.bAutoPlay.Guitar )\r
-                               ) ||\r
-                                       ( ( pChip.e楽器パート == E楽器パート.BASS ) && CDTXMania.ConfigIni.bAutoPlay.Bass )\r
-                         )\r
+                       if (pChip.e楽器パート != EPart.Unknown)\r
                        {\r
-                               bPChipIsAutoPlay = true;\r
+                               cInvisibleChip.StartSemiInvisible(pChip.e楽器パート);\r
                        }\r
-                       else\r
-                       {\r
-                               this.bAUTOでないチップが1つでもバーを通過した = true;\r
-                       }\r
-                       E判定 eJudgeResult = E判定.Auto;\r
-                       switch ( pChip.e楽器パート )\r
-                       {\r
-                               case E楽器パート.DRUMS:\r
-                                       {\r
-                                               int nInputAdjustTime = bPChipIsAutoPlay ? 0 : this.nInputAdjustTimeMs.Drums;\r
-                                               eJudgeResult = this.e指定時刻からChipのJUDGEを返す( nHitTime, pChip, nInputAdjustTime );\r
-                                               this.actJudgeString.Start( this.nチャンネル0Atoレーン07[ pChip.nチャンネル番号 - 0x11 ], bPChipIsAutoPlay ? E判定.Auto : eJudgeResult, pChip.nLag );\r
-                                       }\r
-                                       break;\r
+                       bool bPChipIsAutoPlay = pChip.bAssignAutoPlayState();// 2011.6.10 yyagi\r
+                       EJudge eJudgeResult = EJudge.Auto;\r
 \r
-                               case E楽器パート.GUITAR:\r
-                                       {\r
-                                               int nInputAdjustTime = bPChipIsAutoPlay ? 0 : this.nInputAdjustTimeMs.Guitar;\r
-                                               eJudgeResult = this.e指定時刻からChipのJUDGEを返す( nHitTime, pChip, nInputAdjustTime );\r
-                                               this.actJudgeString.Start( 10, bPChipIsAutoPlay ? E判定.Auto : eJudgeResult, pChip.nLag );\r
-                                               break;\r
-                                       }\r
+                       // ゴースト処理 #35411 2015.08.20 chnmr0\r
+                       bool bIsPerfectGhost = CDTXMania.Instance.ConfigIni.eAutoGhost[pChip.e楽器パート] == EAutoGhostData.Perfect ||\r
+                                                       CDTXMania.Instance.DTX.listAutoGhostLag[pChip.e楽器パート] == null;\r
+                       int nInputAdjustTime = bPChipIsAutoPlay && bIsPerfectGhost ? 0 : CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs[pChip.e楽器パート];\r
+                       eJudgeResult = (bCorrectLane) ? this.e指定時刻からChipのJUDGEを返す(nHitTime, pChip, nInputAdjustTime) : EJudge.Miss;\r
 \r
-                               case E楽器パート.BASS:\r
-                                       {\r
-                                               int nInputAdjustTime = bPChipIsAutoPlay ? 0 : this.nInputAdjustTimeMs.Bass;\r
-                                               eJudgeResult = this.e指定時刻からChipのJUDGEを返す( nHitTime, pChip, nInputAdjustTime );\r
-                                               this.actJudgeString.Start( 11, bPChipIsAutoPlay ? E判定.Auto : eJudgeResult, pChip.nLag );\r
-                                       }\r
-                                       break;\r
+                       if (pChip.e楽器パート != EPart.Unknown)\r
+                       {\r
+                               ELane nLane = ELane.Max;\r
+                               switch (pChip.e楽器パート)\r
+                               {\r
+                                       case EPart.Drums:\r
+                                               nLane = EnumConverter.LaneFromChannel(pChip.eチャンネル番号);\r
+                                               break;\r
+                                       case EPart.Guitar:\r
+                                               nLane = ELane.GtR;\r
+                                               break;\r
+                                       case EPart.Bass:\r
+                                               nLane = ELane.BsR;\r
+                                               break;\r
+                               }\r
+                               this.actJudgeString.Start(nLane, bPChipIsAutoPlay && bIsPerfectGhost ? EJudge.Auto : eJudgeResult, pChip.nLag);\r
                        }\r
-                       if ( !bPChipIsAutoPlay && ( pChip.e楽器パート != E楽器パート.UNKNOWN ) )\r
+\r
+                       // ダメージ\r
+                       if (!bPChipIsAutoPlay && (pChip.e楽器パート != EPart.Unknown))\r
                        {\r
-                               this.t判定にあわせてゲージを増減する( screenmode, pChip.e楽器パート, eJudgeResult );\r
+                               actGauge.Damage(pChip.e楽器パート, eJudgeResult);\r
                        }\r
 \r
-                       switch ( pChip.e楽器パート )\r
+                       // インビジブル\r
+                       if (eJudgeResult == EJudge.Poor || eJudgeResult == EJudge.Miss || eJudgeResult == EJudge.Bad)\r
                        {\r
-                               case E楽器パート.DRUMS:\r
-                                       switch ( eJudgeResult )\r
-                                       {\r
-                                               case E判定.Miss:\r
-                                               case E判定.Bad:\r
-                                                       this.nヒット数・Auto含む.Drums.Miss++;\r
-                                                       if ( !bPChipIsAutoPlay )\r
-                                                       {\r
-                                                               this.nヒット数・Auto含まない.Drums.Miss++;\r
-                                                       }\r
-                                                       break;\r
-                                               default:\r
-                                                       this.nヒット数・Auto含む.Drums[ (int) eJudgeResult ]++;\r
-                                                       if ( !bPChipIsAutoPlay )\r
-                                                       {\r
-                                                               this.nヒット数・Auto含まない.Drums[ (int) eJudgeResult ]++;\r
-                                                       }\r
-                                                       break;\r
-                                       }\r
+                               cInvisibleChip.ShowChipTemporally(pChip.e楽器パート);\r
+                       }\r
 \r
-                                       if ( CDTXMania.ConfigIni.bドラムが全部オートプレイである || !bPChipIsAutoPlay )\r
-                                       {\r
-                                               switch ( eJudgeResult )\r
+                       // コンボ\r
+                       if (pChip.e楽器パート != EPart.Unknown)\r
+                       {\r
+                               switch (eJudgeResult)\r
+                               {\r
+                                       case EJudge.Miss:\r
+                                       case EJudge.Bad:\r
+                                               this.nヒット数_Auto含む[pChip.e楽器パート].Miss++;\r
+                                               if (!bPChipIsAutoPlay)\r
                                                {\r
-                                                       case E判定.Perfect:\r
-                                                       case E判定.Great:\r
-                                                       case E判定.Good:\r
-                                                               this.actCombo.n現在のコンボ数.Drums++;\r
-                                                               break;\r
-\r
-                                                       default:\r
-                                                               this.actCombo.n現在のコンボ数.Drums = 0;\r
-                                                               break;\r
+                                                       this.nヒット数_Auto含まない[pChip.e楽器パート].Miss++;\r
                                                }\r
-                                       }\r
-                                       break;\r
-\r
-                               case E楽器パート.GUITAR:\r
-                                       switch ( eJudgeResult )\r
-                                       {\r
-                                               case E判定.Miss:\r
-                                               case E判定.Bad:\r
-                                                       this.nヒット数・Auto含む.Guitar.Miss++;\r
-                                                       if ( !bPChipIsAutoPlay )\r
-                                                       {\r
-                                                               this.nヒット数・Auto含まない.Guitar.Miss++;\r
-                                                       }\r
-                                                       break;\r
-                                               default:        // #24068 2011.1.10 ikanick changed\r
-                                                       // #24167 2011.1.16 yyagi changed\r
-                                                       this.nヒット数・Auto含む.Guitar[ (int) eJudgeResult ]++;\r
-                                                       if ( !bPChipIsAutoPlay )\r
-                                                       {\r
-                                                               this.nヒット数・Auto含まない.Guitar[ (int) eJudgeResult ]++;\r
-                                                       }\r
-                                                       break;\r
-                                       }\r
-                                       switch ( eJudgeResult )\r
-                                       {\r
-                                               case E判定.Perfect:\r
-                                               case E判定.Great:\r
-                                               case E判定.Good:\r
-                                                       this.actCombo.n現在のコンボ数.Guitar++;\r
-                                                       break;\r
+                                               break;\r
+                                       default:\r
+                                               // #24068 2011.1.10 ikanick changed (for Gt./Bs.)\r
+                                               // #24167 2011.1.16 yyagi changed  (for Gt./Bs.)\r
+                                               this.nヒット数_Auto含む[pChip.e楽器パート][(int)eJudgeResult]++;\r
+                                               if (!bPChipIsAutoPlay)\r
+                                               {\r
+                                                       this.nヒット数_Auto含まない[pChip.e楽器パート][(int)eJudgeResult]++;\r
+                                               }\r
+                                               break;\r
+                               }\r
 \r
-                                               default:\r
-                                                       this.actCombo.n現在のコンボ数.Guitar = 0;\r
-                                                       break;\r
-                                       }\r
-                                       break;\r
+                               bool incrementCombo = false;\r
 \r
-                               case E楽器パート.BASS:\r
-                                       switch ( eJudgeResult )\r
+                               if (pChip.e楽器パート == EPart.Drums)\r
+                               {\r
+                                       if (CDTXMania.Instance.ConfigIni.bIsAutoPlay(EPart.Drums) || !bPChipIsAutoPlay)\r
                                        {\r
-                                               case E判定.Miss:\r
-                                               case E判定.Bad:\r
-                                                       this.nヒット数・Auto含む.Bass.Miss++;\r
-                                                       if ( !bPChipIsAutoPlay )\r
-                                                       {\r
-                                                               this.nヒット数・Auto含まない.Bass.Miss++;\r
-                                                       }\r
-                                                       break;\r
-                                               default:        // #24068 2011.1.10 ikanick changed\r
-                                                       this.nヒット数・Auto含む.Bass[ (int) eJudgeResult ]++;\r
-                                                       if ( !bPChipIsAutoPlay )\r
-                                                       {\r
-                                                               this.nヒット数・Auto含まない.Bass[ (int) eJudgeResult ]++;\r
-                                                       }\r
-                                                       break;\r
+                                               // Dr. : 演奏したレーンだけコンボを増やす\r
+                                               incrementCombo = true;\r
                                        }\r
+                               }\r
+                               else if (pChip.e楽器パート == EPart.Guitar || pChip.e楽器パート == EPart.Bass)\r
+                               {\r
+                                       incrementCombo = true;\r
+                               }\r
 \r
-                                       switch ( eJudgeResult )\r
-                                       {\r
-                                               case E判定.Perfect:\r
-                                               case E判定.Great:\r
-                                               case E判定.Good:\r
-                                                       this.actCombo.n現在のコンボ数.Bass++;\r
-                                                       break;\r
-\r
-                                               default:\r
-                                                       this.actCombo.n現在のコンボ数.Bass = 0;\r
-                                                       break;\r
-                                       }\r
-                                       break;\r
+                if( incrementCombo == true )\r
+                {\r
+                    switch (eJudgeResult)\r
+                    {\r
+                        case EJudge.Perfect:\r
+                        case EJudge.Great:\r
+                        case EJudge.Good:\r
+                            this.actCombo.dgbコンボ数[pChip.e楽器パート].IncrementCombo();\r
+                            break;\r
 \r
-                               default:\r
-                                       break;\r
+                        default:\r
+                            this.actCombo.dgbコンボ数[pChip.e楽器パート].ResetCombo();\r
+                            break;\r
+                    }\r
+                }\r
                        }\r
-                       if ( ( !bPChipIsAutoPlay && ( pChip.e楽器パート != E楽器パート.UNKNOWN ) ) && ( eJudgeResult != E判定.Miss ) && ( eJudgeResult != E判定.Bad ) )\r
+\r
+                       // スコア\r
+                       if ((!bPChipIsAutoPlay && (pChip.e楽器パート != EPart.Unknown)) && (eJudgeResult != EJudge.Miss) && (eJudgeResult != EJudge.Bad))\r
                        {\r
-                               int nCombos = 0;\r
-                               switch ( pChip.e楽器パート )\r
+                               int nCombos = this.actCombo.dgbコンボ数[pChip.e楽器パート].n現在値;\r
+                               long nScoreDelta = 0;\r
+                               long[] nComboScoreDelta = new long[] { 350L, 200L, 50L, 0L };\r
+                               if ((nCombos <= 500) || (eJudgeResult == EJudge.Good))\r
                                {\r
-                                       case E楽器パート.DRUMS:\r
-                                               nCombos = this.actCombo.n現在のコンボ数.Drums;\r
-                                               break;\r
-                                       case E楽器パート.GUITAR:\r
-                                               nCombos = this.actCombo.n現在のコンボ数.Guitar;\r
-                                               break;\r
-                                       case E楽器パート.BASS:\r
-                                               nCombos = this.actCombo.n現在のコンボ数.Bass;\r
-                                               break;\r
+                                       nScoreDelta = nComboScoreDelta[(int)eJudgeResult] * nCombos;\r
                                }\r
-                               long nScore = this.actScore.Get( pChip.e楽器パート );\r
-                               long[] numArray = new long[] { 350L, 200L, 50L, 0L };\r
-                               if ( ( nCombos <= 500 ) || ( eJudgeResult == E判定.Good ) )\r
+                               else if ((eJudgeResult == EJudge.Perfect) || (eJudgeResult == EJudge.Great))\r
                                {\r
-                                       nScore += numArray[ (int) eJudgeResult ] * nCombos;\r
-                               }\r
-                               else if ( ( eJudgeResult == E判定.Perfect ) || ( eJudgeResult == E判定.Great ) )\r
+                                       nScoreDelta = nComboScoreDelta[(int)eJudgeResult] * 500L;\r
+                               }\r
+                               this.actScore.Add(pChip.e楽器パート, nScoreDelta);\r
+                       }\r
+\r
+                       // グラフ\r
+                       if (pChip.e楽器パート != EPart.Unknown)\r
+                       {\r
+                               EPart inst = pChip.e楽器パート;\r
+                               // #24074 2011.01.23 add ikanick\r
+                               this.actGraph.dbCurrent[inst] =\r
+                                               CScoreIni.t演奏型スキルを計算して返す(\r
+                                               CDTXMania.Instance.DTX.n可視チップ数[inst],\r
+                                               this.nヒット数_Auto含まない[inst].Perfect,\r
+                                               this.nヒット数_Auto含まない[inst].Great,\r
+                                               this.nヒット数_Auto含まない[inst].Good,\r
+                                               this.nヒット数_Auto含まない[inst].Poor,\r
+                                               this.nヒット数_Auto含まない[inst].Miss,\r
+                                               inst, true);\r
+\r
+                               // #35411 2015.09.07 add chnmr0\r
+                               if (\r
+                                               CDTXMania.Instance.DTX.listTargetGhsotLag[inst] != null &&\r
+                                               CDTXMania.Instance.ConfigIni.eTargetGhost[inst] == ETargetGhostData.Online &&\r
+                                               CDTXMania.Instance.DTX.n可視チップ数[inst] > 0)\r
                                {\r
-                                       nScore += numArray[ (int) eJudgeResult ] * 500L;\r
+                                       // Online Stats の計算式\r
+                                       this.actGraph.dbTarget[inst] = 100 *\r
+                                                                                                       (this.nヒット数_Auto含まない[inst].Perfect * 17 +\r
+                                                                                                        this.nヒット数_Auto含まない[inst].Great * 7 +\r
+                                                                                                        this.actCombo.dgbコンボ数[inst].n最高値 * 3) /\r
+                                                                                                        (20.0 * CDTXMania.Instance.DTX.n可視チップ数[inst]);\r
                                }\r
-                               this.actScore.Set( pChip.e楽器パート, nScore );\r
                        }\r
                        return eJudgeResult;\r
                }\r
-               protected abstract void tチップのヒット処理・BadならびにTight時のMiss( E楽器パート part );\r
-               protected abstract void tチップのヒット処理・BadならびにTight時のMiss( E楽器パート part, int nLane );\r
-               protected void tチップのヒット処理・BadならびにTight時のMiss( E楽器パート part, E楽器パート screenmode )\r
-               {\r
-                       this.tチップのヒット処理・BadならびにTight時のMiss( part, 0, screenmode );\r
-               }\r
-               protected void tチップのヒット処理・BadならびにTight時のMiss( E楽器パート part, int nLane, E楽器パート screenmode )\r
+\r
+               private void tチップのヒット処理_BadならびにTight時のMiss(EPart part, ELane nLane = ELane.LC)\r
                {\r
-                       this.bAUTOでないチップが1つでもバーを通過した = true;\r
-                       this.t判定にあわせてゲージを増減する( screenmode, part, E判定.Miss );\r
-                       switch ( part )\r
-                       {\r
-                               case E楽器パート.DRUMS:\r
-                                       if ( ( nLane >= 0 ) && ( nLane <= 7 ) )\r
-                                       {\r
-                                               this.actJudgeString.Start( nLane, CDTXMania.ConfigIni.bAutoPlay[ nLane ] ? E判定.Auto : E判定.Miss, 999 );\r
-                                       }\r
-                                       this.actCombo.n現在のコンボ数.Drums = 0;\r
+                       cInvisibleChip.StartSemiInvisible(part);\r
+                       cInvisibleChip.ShowChipTemporally(part);\r
+                       actGauge.Damage(part, EJudge.Miss);\r
+                       switch (part)\r
+                       {\r
+                               case EPart.Drums:\r
+                                       this.actJudgeString.Start(nLane, CDTXMania.Instance.ConfigIni.bAutoPlay[EnumConverter.PadFromLane(nLane)] ?\r
+                                                       EJudge.Auto : EJudge.Miss, 999);\r
+                                       this.actCombo.dgbコンボ数.Drums.ResetCombo();\r
                                        return;\r
 \r
-                               case E楽器パート.GUITAR:\r
-                                       this.actJudgeString.Start( 10, E判定.Bad, 999 );\r
-                                       this.actCombo.n現在のコンボ数.Guitar = 0;\r
+                               case EPart.Guitar:\r
+                                       this.actJudgeString.Start(ELane.GtR, EJudge.Bad, 999);\r
+                                       this.actCombo.dgbコンボ数.Guitar.ResetCombo();\r
                                        return;\r
 \r
-                               case E楽器パート.BASS:\r
-                                       this.actJudgeString.Start( 11, E判定.Bad, 999 );\r
-                                       this.actCombo.n現在のコンボ数.Bass = 0;\r
+                               case EPart.Bass:\r
+                                       this.actJudgeString.Start(ELane.BsR, EJudge.Bad, 999);\r
+                                       this.actCombo.dgbコンボ数.Bass.ResetCombo();\r
                                        break;\r
 \r
                                default:\r
                                        return;\r
                        }\r
                }\r
-       \r
-               protected CDTX.CChip r指定時刻に一番近い未ヒットChip( long nTime, int nChannelFlag, int nInputAdjustTime )\r
-               {\r
-                       return this.r指定時刻に一番近い未ヒットChip( nTime, nChannelFlag, nInputAdjustTime, 0 );\r
-               }\r
-               protected CDTX.CChip r指定時刻に一番近い未ヒットChip( long nTime, int nChannel, int nInputAdjustTime, int n検索範囲時間ms )\r
+\r
+               /// <summary>\r
+               /// 指定時刻に一番近いまだヒットしていないチップを返す。\r
+               /// </summary>\r
+               /// <param name="nTime">指定時刻</param>\r
+               /// <param name="search">検索するチャネル。Gt.WailingSound/Bs.WailingSoundを渡した場合、Open~RGBが検索対象になる。</param>\r
+               /// <param name="nInputAdjustTime"></param>\r
+               /// <param name="n検索範囲時間ms">指定時刻から検索する範囲ms</param>\r
+               /// <returns></returns>\r
+               protected CChip r指定時刻に一番近い未ヒットChip(long nTime, EChannel search, int nInputAdjustTime, int n検索範囲時間ms = 0, HitState hs = HitState.NotHit)\r
                {\r
-                       nTime += nInputAdjustTime;\r
+                       CChip ret = null;\r
 \r
-                       int nIndex_InitialPositionSearchingToPast;\r
-                       int nTimeDiff;\r
-                       if ( this.n現在のトップChip == -1 )                       // 演奏データとして1個もチップがない場合は\r
-                       {\r
-                               return null;\r
-                       }\r
-                       int count = CDTXMania.DTX.listChip.Count;\r
-                       int nIndex_InitialPositionSearchingToFuture = nIndex_InitialPositionSearchingToPast = this.n現在のトップChip;\r
-                       if ( this.n現在のトップChip >= count )            // その時点で演奏すべきチップが既に全部無くなっていたら\r
-                       {\r
-                               nIndex_InitialPositionSearchingToFuture = nIndex_InitialPositionSearchingToPast = count - 1;\r
-                       }\r
-                       int nIndex_NearestChip_Future = nIndex_InitialPositionSearchingToFuture;\r
-//                     while ( nIndex_NearestChip_Future < count )     // 未来方向への検索\r
-                       for ( ; nIndex_NearestChip_Future < count; nIndex_NearestChip_Future++ )\r
+                       nTime += nInputAdjustTime;\r
+                       if (this.n現在のトップChip >= 0 && this.n現在のトップChip <= CDTXMania.Instance.DTX.listChip.Count)\r
                        {\r
-                               CDTX.CChip chip = CDTXMania.DTX.listChip[ nIndex_NearestChip_Future ];\r
-                               if ( ( !chip.bHit && ( nChannel >= 0x11 ) ) && ( nChannel <= 0x1a ) )\r
+                               int idxFuture = -1;\r
+                               int idxPast = -1;\r
+                               int idxPastStart = CDTXMania.Instance.DTX.listChip.Count - 1;\r
+                               Func<CChip, Func<CChip, bool>, bool> Found = (chip, futureOrPast) =>\r
                                {\r
-                                       if ( ( chip.nチャンネル番号 == nChannel ) || ( chip.nチャンネル番号 == ( nChannel + 0x20 ) ) )\r
+                                       return futureOrPast(chip) &&\r
+                                                       ((hs == HitState.NotHit && !chip.bHit) || (hs == HitState.Hit && chip.bHit) || (hs == HitState.DontCare)) &&\r
+                                                       !chip.b空打ちチップである &&\r
+                                                       (\r
+                                                       ((search == chip.eチャンネル番号 || search + 0x20 == chip.eチャンネル番号) && chip.bDrums可視チップ_LP_LBD含まない) ||\r
+                                                       (search == chip.eチャンネル番号 && chip.bGuitar可視チップ_Wailing含む) ||\r
+                                                       (search == chip.eチャンネル番号 && chip.bBass可視チップ_Wailing含む) ||\r
+                                                       (search == EChannel.Guitar_WailingSound && chip.bGuitar可視チップ) ||\r
+                                                       (search == EChannel.Bass_WailingSound && chip.bBass可視チップ)\r
+                                                       );\r
+                               };\r
+                               Func<CChip, bool> Future = (chip) => { return chip.n発声時刻ms > nTime; };\r
+                               Func<CChip, bool> Past = (chip) => { return chip.n発声時刻ms <= nTime; };\r
+                               Func<CChip, bool> OutOfRange = (chip) => { return n検索範囲時間ms > 0 && Math.Abs(nTime - chip.n発声時刻ms) > n検索範囲時間ms; };\r
+\r
+                               // // 未来方向への検索\r
+                               for (int i = this.n現在のトップChip; i < CDTXMania.Instance.DTX.listChip.Count; ++i)\r
+                               {\r
+                                       CChip chip = CDTXMania.Instance.DTX.listChip[i];\r
+                                       if (Future(chip) && OutOfRange(chip))\r
                                        {\r
-                                               if ( chip.n発声時刻ms > nTime )\r
-                                               {\r
-                                                       break;\r
-                                               }\r
-                                               nIndex_InitialPositionSearchingToPast = nIndex_NearestChip_Future;\r
+                                               //break;\r
                                        }\r
-                               }\r
-                               else if ( !chip.bHit && ( ( ( nChannel == 0x2f ) && ( chip.e楽器パート == E楽器パート.GUITAR ) ) || ( ( ( nChannel >= 0x20 ) && ( nChannel <= 0x28 ) ) && ( chip.nチャンネル番号 == nChannel ) ) ) )\r
-                               {\r
-                                       if ( chip.n発声時刻ms > nTime )\r
+                                       if (Found(chip, Future))\r
                                        {\r
+                                               idxFuture = i;\r
+                                               idxPastStart = i;\r
                                                break;\r
                                        }\r
-                                       nIndex_InitialPositionSearchingToPast = nIndex_NearestChip_Future;\r
                                }\r
-                               else if ( !chip.bHit && ( ( ( nChannel == 0xaf ) && ( chip.e楽器パート == E楽器パート.BASS ) ) || ( ( ( nChannel >= 0xA0 ) && ( nChannel <= 0xa8 ) ) && ( chip.nチャンネル番号 == nChannel ) ) ) )\r
+\r
+                               // 過去方向への検索\r
+                               for (int i = idxPastStart; i >= 0; i--)\r
                                {\r
-                                       if ( chip.n発声時刻ms > nTime )\r
+                                       CChip chip = CDTXMania.Instance.DTX.listChip[i];\r
+                                       if (Past(chip) && OutOfRange(chip))\r
+                                       {\r
+                                               //break;\r
+                                       }\r
+                                       if (Found(chip, Past))\r
                                        {\r
+                                               idxPast = i;\r
                                                break;\r
                                        }\r
-                                       nIndex_InitialPositionSearchingToPast = nIndex_NearestChip_Future;\r
                                }\r
-//                             nIndex_NearestChip_Future++;\r
-                       }\r
-                       int nIndex_NearestChip_Past = nIndex_InitialPositionSearchingToPast;\r
-//                     while ( nIndex_NearestChip_Past >= 0 )          // 過去方向への検索\r
-                       for ( ; nIndex_NearestChip_Past >= 0; nIndex_NearestChip_Past-- )\r
-                       {\r
-                               CDTX.CChip chip = CDTXMania.DTX.listChip[ nIndex_NearestChip_Past ];\r
-                               if ( ( ( ( !chip.bHit && ( nChannel >= 0x11 ) ) && ( ( nChannel <= 0x1a ) && ( ( chip.nチャンネル番号 == nChannel ) || ( chip.nチャンネル番号 == ( nChannel + 0x20 ) ) ) ) ) || ( !chip.bHit && ( ( ( nChannel == 0x2f ) && ( chip.e楽器パート == E楽器パート.GUITAR ) ) || ( ( ( nChannel >= 0x20 ) && ( nChannel <= 0x2A ) ) && ( chip.nチャンネル番号 == nChannel ) ) ) ) ) || ( !chip.bHit && ( ( ( nChannel == 0xaf ) && ( chip.e楽器パート == E楽器パート.BASS ) ) || ( ( ( nChannel >= 0xA0 ) && ( nChannel <= 0xa8 ) ) && ( chip.nチャンネル番号 == nChannel ) ) ) ) )\r
+\r
+                               if (idxFuture < 0 && idxPast < 0)\r
                                {\r
-                                       break;\r
+                                       // 検索対象が過去未来どちらにも見つからなかった\r
                                }\r
-//                             nIndex_NearestChip_Past--;\r
-                       }\r
-                       if ( ( nIndex_NearestChip_Future == count ) && ( nIndex_NearestChip_Past < 0 ) )        // 検索対象が過去未来どちらにも見つからなかった場合\r
-                       {\r
-                               return null;\r
-                       }\r
-                       CDTX.CChip nearestChip; // = null;      // 以下のifブロックのいずれかで必ずnearestChipには非nullが代入されるので、null初期化を削除\r
-                       if ( nIndex_NearestChip_Future == count )                                                                                       // 検索対象が未来方向には見つからなかった(しかし過去方向には見つかった)場合\r
-                       {\r
-                               nearestChip = CDTXMania.DTX.listChip[ nIndex_NearestChip_Past ];\r
-//                             nTimeDiff = Math.Abs( (int) ( nTime - nearestChip.n発声時刻ms ) );\r
-                       }\r
-                       else if ( nIndex_NearestChip_Past < 0 )                                                                                         // 検索対象が過去方向には見つからなかった(しかし未来方向には見つかった)場合\r
-                       {\r
-                               nearestChip = CDTXMania.DTX.listChip[ nIndex_NearestChip_Future ];\r
-//                             nTimeDiff = Math.Abs( (int) ( nTime - nearestChip.n発声時刻ms ) );\r
-                       }\r
-                       else\r
-                       {\r
-                               int nTimeDiff_Future = Math.Abs( (int) ( nTime - CDTXMania.DTX.listChip[ nIndex_NearestChip_Future ].n発声時刻ms ) );\r
-                               int nTimeDiff_Past   = Math.Abs( (int) ( nTime - CDTXMania.DTX.listChip[ nIndex_NearestChip_Past   ].n発声時刻ms ) );\r
-                               if ( nTimeDiff_Future < nTimeDiff_Past )\r
+                               else if (idxPast >= 0)\r
+                               {\r
+                                       // 過去方向には見つかった\r
+                                       ret = CDTXMania.Instance.DTX.listChip[idxPast];\r
+                               }\r
+                               else if (idxFuture >= 0)\r
                                {\r
-                                       nearestChip = CDTXMania.DTX.listChip[ nIndex_NearestChip_Future ];\r
-//                                     nTimeDiff = Math.Abs( (int) ( nTime - nearestChip.n発声時刻ms ) );\r
+                                       // 未来方向には見つかった\r
+                                       ret = CDTXMania.Instance.DTX.listChip[idxFuture];\r
                                }\r
                                else\r
                                {\r
-                                       nearestChip = CDTXMania.DTX.listChip[ nIndex_NearestChip_Past ];\r
-//                                     nTimeDiff = Math.Abs( (int) ( nTime - nearestChip.n発声時刻ms ) );\r
+                                       // どちらにも見つかった\r
+                                       long nTimeDiff_Future = Math.Abs(nTime - CDTXMania.Instance.DTX.listChip[idxFuture].n発声時刻ms);\r
+                                       long nTimeDiff_Past = Math.Abs(nTime - CDTXMania.Instance.DTX.listChip[idxPast].n発声時刻ms);\r
+                                       if (nTimeDiff_Future < nTimeDiff_Past)\r
+                                       {\r
+                                               ret = CDTXMania.Instance.DTX.listChip[idxFuture];\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               ret = CDTXMania.Instance.DTX.listChip[idxPast];\r
+                                       }\r
+                               }\r
+\r
+                               if (ret != null)\r
+                               {\r
+                                       if (OutOfRange(ret))\r
+                                       {\r
+                                               // チップは見つかったが、検索範囲時間外だった場合\r
+                                               ret = null;\r
+                                       }\r
                                }\r
                        }\r
-                       nTimeDiff = Math.Abs( (int) ( nTime - nearestChip.n発声時刻ms ) );\r
-                       if ( ( n検索範囲時間ms > 0 ) && ( nTimeDiff > n検索範囲時間ms ) )                                   // チップは見つかったが、検索範囲時間外だった場合\r
-                       {\r
-                               return null;\r
-                       }\r
-                       return nearestChip;\r
-               }\r
-               protected CDTX.CChip r次にくるギターChipを更新して返す()\r
-               {\r
-                       int nInputAdjustTime = this.bIsAutoPlay.Guitar ? 0 : this.nInputAdjustTimeMs.Guitar;\r
-                       this.r次にくるギターChip = this.r指定時刻に一番近い未ヒットChip( CDTXMania.Timer.n現在時刻, 0x2f, nInputAdjustTime, 500 );\r
-                       return this.r次にくるギターChip;\r
-               }\r
-               protected CDTX.CChip r次にくるベースChipを更新して返す()\r
-               {\r
-                       int nInputAdjustTime = this.bIsAutoPlay.Bass ? 0 : this.nInputAdjustTimeMs.Bass;\r
-                       this.r次にくるベースChip = this.r指定時刻に一番近い未ヒットChip( CDTXMania.Timer.n現在時刻, 0xaf, nInputAdjustTime, 500 );\r
-                       return this.r次にくるベースChip;\r
+                       return ret;\r
                }\r
 \r
-               protected void ChangeInputAdjustTimeInPlaying( IInputDevice keyboard, int plusminus )           // #23580 2011.1.16 yyagi UI for InputAdjustTime in playing screen.\r
+               protected CChip r次に来る指定楽器Chipを更新して返す(EPart inst)\r
                {\r
-                       int part, offset = plusminus;\r
-                       if ( keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.LeftShift ) || keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.RightShift ) )      // Guitar InputAdjustTime\r
+                       CChip ret = null;\r
+                       int nInputAdjustTime;\r
+                       if (inst == EPart.Guitar)\r
                        {\r
-                               part = (int) E楽器パート.GUITAR;\r
+                               nInputAdjustTime = CDTXMania.Instance.ConfigIni.bAutoPlay.GtPick ?\r
+                                               0 : CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs.Guitar;\r
+                               ret = this.r指定時刻に一番近い未ヒットChip(CSound管理.rc演奏用タイマ.n現在時刻, EChannel.Guitar_WailingSound, nInputAdjustTime, 500);\r
+                               this.r次にくるギターChip = ret;\r
                        }\r
-                       else if ( keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.LeftAlt ) || keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.RightAlt ) )     // Bass InputAdjustTime\r
+                       else if (inst == EPart.Bass)\r
                        {\r
-                               part = (int) E楽器パート.BASS;\r
+                               nInputAdjustTime = CDTXMania.Instance.ConfigIni.bAutoPlay.BsPick ?\r
+                                               0 : CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs.Bass;\r
+                               ret = this.r指定時刻に一番近い未ヒットChip(CSound管理.rc演奏用タイマ.n現在時刻, EChannel.Bass_WailingSound, nInputAdjustTime, 500);\r
+                               this.r次にくるベースChip = ret;\r
                        }\r
-                       else    // Drums InputAdjustTime\r
+                       return ret;\r
+               }\r
+\r
+               protected void ChangeInputAdjustTimeInPlaying(IInputDevice keyboard, int plusminus)     // #23580 2011.1.16 yyagi UI for InputAdjustTime in playing screen.\r
+               {\r
+                       EPart part;\r
+                       int offset = plusminus;\r
+                       if (keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.LeftShift) || keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.RightShift))  // Guitar InputAdjustTime\r
                        {\r
-                               part = (int) E楽器パート.DRUMS;\r
+                               part = EPart.Guitar;\r
                        }\r
-                       if ( !keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.LeftControl ) && !keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.RightControl ) )\r
+                       else if (keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.LeftAlt) || keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.RightAlt)) // Bass InputAdjustTime\r
                        {\r
-                               offset *= 10;\r
+                               part = EPart.Bass;\r
                        }\r
-\r
-                       this.nInputAdjustTimeMs[ part ] += offset;\r
-                       if ( this.nInputAdjustTimeMs[ part ] > 0 )\r
+                       else\r
                        {\r
-                               this.nInputAdjustTimeMs[ part ] = 0;\r
+                               // Drums InputAdjustTime\r
+                               part = EPart.Drums;\r
                        }\r
-                       else if ( this.nInputAdjustTimeMs[ part ] < -99 )\r
+                       if (!keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.LeftControl) && !keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.RightControl))\r
                        {\r
-                               this.nInputAdjustTimeMs[ part ] = -99;\r
+                               offset *= 10;\r
                        }\r
-                       CDTXMania.ConfigIni.nInputAdjustTimeMs[ part ] = this.nInputAdjustTimeMs[ part ];\r
+\r
+                       CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs[part].Value = CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs[part] + offset;\r
                }\r
 \r
-               protected abstract void t入力処理・ドラム();\r
-//             protected abstract void t入力処理・ギター();\r
-//             protected abstract void t入力処理・ベース();\r
-               protected abstract void ドラムスクロール速度アップ();\r
-               protected abstract void ドラムスクロール速度ダウン();\r
-               protected void tキー入力()\r
+               private void t入力処理_ドラム()\r
                {\r
-                       IInputDevice keyboard = CDTXMania.Input管理.Keyboard;\r
-                       if ( keyboard.bキーが押された( (int) SlimDX.DirectInput.Key.F1 ) &&\r
-                               ( keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.RightShift ) || keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.LeftShift ) ) )\r
-                       {       // shift+f1 (pause)\r
-                               this.bPAUSE = !this.bPAUSE;\r
-                               if ( this.bPAUSE )\r
+                       for (EPad ePad = EPad.DrumsPadMin; ePad < EPad.DrumsPadMax; ePad++)        // #27029 2012.1.4 from: <10 to <=10; Eパッドの要素が1つ(HP)増えたため。\r
+                                                                                                                                                                                                                                                                                                                                //               2012.1.5 yyagi: (int)Eパッド.MAX に変更。Eパッドの要素数への依存を無くすため。\r
+                       {\r
+                               List<STInputEvent> listInputEvent = CDTXMania.Instance.Pad.GetEvents(ePad);\r
+\r
+                               if ((listInputEvent == null) || (listInputEvent.Count == 0))\r
                                {\r
-                                       CDTXMania.Timer.t一時停止();\r
-                                       CDTXMania.DTX.t全チップの再生一時停止();\r
+                                       continue;\r
                                }\r
-                               else\r
+\r
+                               this.t入力メソッド記憶(EPart.Drums);\r
+\r
+                               #region [ 打ち分けグループ調整 ]\r
+                               //-----------------------------\r
+                               EHHGroup eHHGroup = CDTXMania.Instance.ConfigIni.eHHGroup;\r
+                               EFTGroup eFTGroup = CDTXMania.Instance.ConfigIni.eFTGroup;\r
+                               ECYGroup eCYGroup = CDTXMania.Instance.ConfigIni.eCYGroup;\r
+\r
+                               if (!CDTXMania.Instance.DTX.bチップがある.Ride && (eCYGroup == ECYGroup.Off))\r
                                {\r
-                                       CDTXMania.Timer.t再開();\r
-                                       CDTXMania.DTX.t全チップの再生再開();\r
-                               }\r
-                       }\r
-                       if ( ( !this.bPAUSE && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED ) ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) )\r
-                       {\r
-                               this.t入力処理・ドラム();\r
-                               this.t入力処理・ギター();\r
-                               this.t入力処理・ベース();\r
-                               if ( keyboard.bキーが押された( (int) SlimDX.DirectInput.Key.UpArrow ) && ( keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.RightShift ) || keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.LeftShift ) ) )\r
-                               {       // shift (+ctrl) + UpArrow (BGMAdjust)\r
-                                       CDTXMania.DTX.t各自動再生音チップの再生時刻を変更する( ( keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.LeftControl ) || keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.RightControl ) ) ? 1 : 10 );\r
-                                       CDTXMania.DTX.tWave再生位置自動補正();\r
-                               }\r
-                               else if ( keyboard.bキーが押された( (int) SlimDX.DirectInput.Key.DownArrow ) && ( keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.RightShift ) || keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.LeftShift ) ) )\r
-                               {       // shift + DownArrow (BGMAdjust)\r
-                                       CDTXMania.DTX.t各自動再生音チップの再生時刻を変更する( ( keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.LeftControl ) || keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.RightControl ) ) ? -1 : -10 );\r
-                                       CDTXMania.DTX.tWave再生位置自動補正();\r
+                                       eCYGroup = ECYGroup.Group;\r
                                }\r
-                               else if ( keyboard.bキーが押された( (int) SlimDX.DirectInput.Key.UpArrow ) )\r
-                               {       // UpArrow(scrollspeed up)\r
-                                       ドラムスクロール速度アップ();\r
-                               }\r
-                               else if ( keyboard.bキーが押された( (int) SlimDX.DirectInput.Key.DownArrow ) )\r
-                               {       // DownArrow (scrollspeed down)\r
-                                       ドラムスクロール速度ダウン();\r
-                               }\r
-                               else if ( keyboard.bキーが押された( (int) SlimDX.DirectInput.Key.Delete ) )\r
-                               {       // del (debug info)\r
-                                       CDTXMania.ConfigIni.b演奏情報を表示する = !CDTXMania.ConfigIni.b演奏情報を表示する;\r
-                               }\r
-                               else if ( keyboard.bキーが押された( (int) SlimDX.DirectInput.Key.LeftArrow ) )           // #24243 2011.1.16 yyagi UI for InputAdjustTime in playing screen.\r
+                               if (!CDTXMania.Instance.DTX.bチップがある.HHOpen && (eHHGroup == EHHGroup.Off))\r
                                {\r
-                                       ChangeInputAdjustTimeInPlaying( keyboard, -1 );\r
+                                       eHHGroup = EHHGroup.LC_HH;\r
                                }\r
-                               else if ( keyboard.bキーが押された( (int) SlimDX.DirectInput.Key.RightArrow ) )          // #24243 2011.1.16 yyagi UI for InputAdjustTime in playing screen.\r
+                               if (!CDTXMania.Instance.DTX.bチップがある.HHOpen && (eHHGroup == EHHGroup.HO_HC))\r
                                {\r
-                                       ChangeInputAdjustTimeInPlaying( keyboard, +1 );\r
-                               }\r
-                               else if ( ( base.eフェーズID == CStage.Eフェーズ.共通_通常状態 ) && ( keyboard.bキーが押された( (int) SlimDX.DirectInput.Key.Escape ) || CDTXMania.Pad.b押されたGB( Eパッド.FT ) ) )\r
-                               {       // escape (exit)\r
-                                       this.actFO.tフェードアウト開始();\r
-                                       base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;\r
-                                       this.eフェードアウト完了時の戻り値 = E演奏画面の戻り値.演奏中断;\r
+                                       eHHGroup = EHHGroup.Group;\r
                                }\r
-                       }\r
-               }\r
-\r
-               protected void t入力メソッド記憶( E楽器パート part )\r
-               {\r
-                       if ( CDTXMania.Pad.st検知したデバイス.Keyboard )\r
-                       {\r
-                               this.b演奏にキーボードを使った[ (int) part ] = true;\r
-                       }\r
-                       if ( CDTXMania.Pad.st検知したデバイス.Joypad )\r
-                       {\r
-                               this.b演奏にジョイパッドを使った[ (int) part ] = true;\r
-                       }\r
-                       if ( CDTXMania.Pad.st検知したデバイス.MIDIIN )\r
-                       {\r
-                               this.b演奏にMIDI入力を使った[ (int) part ] = true;\r
-                       }\r
-                       if ( CDTXMania.Pad.st検知したデバイス.Mouse )\r
-                       {\r
-                               this.b演奏にマウスを使った[ (int) part ] = true;\r
-                       }\r
-               }\r
-\r
-\r
-               protected abstract void t進行描画・AVI();\r
-               protected void t進行描画・AVI(int x, int y)\r
-               {\r
-                       if ( ( ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) ) && ( !CDTXMania.ConfigIni.bストイックモード && CDTXMania.ConfigIni.bAVI有効 ) )\r
-                       {\r
-                               this.actAVI.t進行描画( x, y );\r
-                       }\r
-               }\r
-               protected abstract void t進行描画・BGA();\r
-               protected void t進行描画・BGA(int x, int y)\r
-               {\r
-                       if ( ( ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) ) && ( !CDTXMania.ConfigIni.bストイックモード && CDTXMania.ConfigIni.bBGA有効 ) )\r
-                       {\r
-                               this.actBGA.t進行描画( x, y );\r
-                       }\r
-               }\r
-               protected abstract void t進行描画・DANGER();\r
-               protected void t進行描画・MIDIBGM()\r
-               {\r
-                       if ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED )\r
-                       {\r
-                               CStage.Eフェーズ eフェーズid1 = base.eフェーズID;\r
-                       }\r
-               }\r
-               protected void t進行描画・RGBボタン()\r
-               {\r
-                       if ( CDTXMania.ConfigIni.eDark != Eダークモード.FULL )\r
-                       {\r
-                               this.actRGB.On進行描画();\r
-                       }\r
-               }\r
-               protected void t進行描画・STAGEFAILED()\r
-               {\r
-                       if ( ( ( base.eフェーズID == CStage.Eフェーズ.演奏_STAGE_FAILED ) || ( base.eフェーズID == CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) ) && ( ( this.actStageFailed.On進行描画() != 0 ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) ) )\r
-                       {\r
-                               this.eフェードアウト完了時の戻り値 = E演奏画面の戻り値.ステージ失敗;\r
-                               base.eフェーズID = CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト;\r
-                               this.actFO.tフェードアウト開始();\r
-                       }\r
-               }\r
-               protected void t進行描画・WailingBonus()\r
-               {\r
-                       if ( ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) )\r
-                       {\r
-                               this.actWailingBonus.On進行描画();\r
-                       }\r
-               }\r
-               protected abstract void t進行描画・Wailing枠();\r
-               protected void t進行描画・Wailing枠(int GtWailingFrameX, int BsWailingFrameX, int GtWailingFrameY, int BsWailingFrameY)\r
-               {\r
-                       if ( ( CDTXMania.ConfigIni.eDark != Eダークモード.FULL ) && CDTXMania.ConfigIni.bGuitar有効 )\r
-                       {\r
-                               if ( CDTXMania.DTX.bチップがある.Guitar && ( this.txWailing枠 != null ) )\r
+                               if (!CDTXMania.Instance.DTX.bチップがある.LeftCymbal && (eHHGroup == EHHGroup.Off))\r
                                {\r
-                                       this.txWailing枠.t2D描画( CDTXMania.app.Device, GtWailingFrameX, GtWailingFrameY );\r
+                                       eHHGroup = EHHGroup.HO_HC;\r
                                }\r
-                               if ( CDTXMania.DTX.bチップがある.Bass && ( this.txWailing枠 != null ) )\r
+                               if (!CDTXMania.Instance.DTX.bチップがある.LeftCymbal && (eHHGroup == EHHGroup.LC_HH))\r
                                {\r
-                                       this.txWailing枠.t2D描画( CDTXMania.app.Device, BsWailingFrameX, BsWailingFrameY );\r
+                                       eHHGroup = EHHGroup.Group;\r
                                }\r
-                       }\r
-               }\r
+                               //-----------------------------\r
+                               #endregion\r
 \r
+                               foreach (STInputEvent inputEvent in listInputEvent)\r
+                               {\r
+                                       if (!inputEvent.b押された)\r
+                                               continue;\r
 \r
-               protected void t進行描画・チップファイアGB()\r
-               {\r
-                       this.actChipFireGB.On進行描画();\r
-               }\r
-               protected abstract void t進行描画・パネル文字列();\r
-               protected void t進行描画・パネル文字列(int x, int y)\r
-               {\r
-                       if ( ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) )\r
-                       {\r
-                               this.actPanel.t進行描画( x, y );\r
-                       }\r
-               }\r
-               protected void tパネル文字列の設定()\r
-               {\r
-                       this.actPanel.SetPanelString( string.IsNullOrEmpty( CDTXMania.DTX.PANEL ) ? CDTXMania.DTX.TITLE : CDTXMania.DTX.PANEL );\r
-               }\r
-\r
+                                       long nTime = inputEvent.nTimeStamp - CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻;\r
+                                       EPad nPad09 = (ePad == EPad.HP) ? EPad.BD : ePad;      // #27029 2012.1.5 yyagi\r
+                                       int nInputAdjustTime = CDTXMania.Instance.ConfigIni.bAutoPlay[nPad09] ? 0 : CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs.Drums;\r
+                                       bool bHitted = false;\r
 \r
-               protected void t進行描画・ゲージ()\r
-               {\r
-                       if ( ( ( CDTXMania.ConfigIni.eDark != Eダークモード.HALF ) && ( CDTXMania.ConfigIni.eDark != Eダークモード.FULL ) ) && ( ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) ) )\r
-                       {\r
-                               this.actGauge.On進行描画();\r
+                                       #region [ (A) ヒットしていればヒット処理して次の inputEvent へ ]\r
+                                       //-----------------------------\r
+                                       switch (ePad)\r
+                                       {\r
+                                               case EPad.HH:\r
+                                                       #region [ HHとLC(groupingしている場合) のヒット処理 ]\r
+                                                       //-----------------------------\r
+                                                       {\r
+                                                               if (inputEvent.nVelocity <= CDTXMania.Instance.ConfigIni.nVelocityMin.HH)\r
+                                                                       continue;   // 電子ドラムによる意図的なクロストークを無効にする\r
+\r
+                                                               CChip chipHC = this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.HiHatClose, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1);    // HiHat Close\r
+                                                               CChip chipHO = this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.HiHatOpen, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1); // HiHat Open\r
+                                                               CChip chipLC = this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.LeftCymbal, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1);    // LC\r
+                                                               EJudge e判定HC = (chipHC != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipHC, nInputAdjustTime) : EJudge.Miss;\r
+                                                               EJudge e判定HO = (chipHO != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipHO, nInputAdjustTime) : EJudge.Miss;\r
+                                                               EJudge e判定LC = (chipLC != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipLC, nInputAdjustTime) : EJudge.Miss;\r
+                                                               switch (eHHGroup)\r
+                                                               {\r
+                                                                       case EHHGroup.HO_HC:\r
+                                                                               #region [ HCとLCのヒット処理 ]\r
+                                                                               //-----------------------------\r
+                                                                               if ((e判定HC != EJudge.Miss) && (e判定LC != EJudge.Miss))\r
+                                                                               {\r
+                                                                                       if (chipHC.n発声位置 < chipLC.n発声位置)\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HH, chipHC, inputEvent.nVelocity);\r
+                                                                                       }\r
+                                                                                       else if (chipHC.n発声位置 > chipLC.n発声位置)\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HH, chipLC, inputEvent.nVelocity);\r
+                                                                                       }\r
+                                                                                       else\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HH, chipHC, inputEvent.nVelocity);\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HH, chipLC, inputEvent.nVelocity);\r
+                                                                                       }\r
+                                                                                       bHitted = true;\r
+                                                                               }\r
+                                                                               else if (e判定HC != EJudge.Miss)\r
+                                                                               {\r
+                                                                                       this.tドラムヒット処理(nTime, EPad.HH, chipHC, inputEvent.nVelocity);\r
+                                                                                       bHitted = true;\r
+                                                                               }\r
+                                                                               else if (e判定LC != EJudge.Miss)\r
+                                                                               {\r
+                                                                                       this.tドラムヒット処理(nTime, EPad.HH, chipLC, inputEvent.nVelocity);\r
+                                                                                       bHitted = true;\r
+                                                                               }\r
+                                                                               if (!bHitted)\r
+                                                                                       break;\r
+                                                                               continue;\r
+                                                                       //-----------------------------\r
+                                                                       #endregion\r
+\r
+                                                                       case EHHGroup.LC_HH:\r
+                                                                               #region [ HCとHOのヒット処理 ]\r
+                                                                               //-----------------------------\r
+                                                                               if ((e判定HC != EJudge.Miss) && (e判定HO != EJudge.Miss))\r
+                                                                               {\r
+                                                                                       if (chipHC.n発声位置 < chipHO.n発声位置)\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HH, chipHC, inputEvent.nVelocity);\r
+                                                                                       }\r
+                                                                                       else if (chipHC.n発声位置 > chipHO.n発声位置)\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HH, chipHO, inputEvent.nVelocity);\r
+                                                                                       }\r
+                                                                                       else\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HH, chipHC, inputEvent.nVelocity);\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HH, chipHO, inputEvent.nVelocity);\r
+                                                                                       }\r
+                                                                                       bHitted = true;\r
+                                                                               }\r
+                                                                               else if (e判定HC != EJudge.Miss)\r
+                                                                               {\r
+                                                                                       this.tドラムヒット処理(nTime, EPad.HH, chipHC, inputEvent.nVelocity);\r
+                                                                                       bHitted = true;\r
+                                                                               }\r
+                                                                               else if (e判定HO != EJudge.Miss)\r
+                                                                               {\r
+                                                                                       this.tドラムヒット処理(nTime, EPad.HH, chipHO, inputEvent.nVelocity);\r
+                                                                                       bHitted = true;\r
+                                                                               }\r
+                                                                               if (!bHitted)\r
+                                                                                       break;\r
+                                                                               continue;\r
+                                                                       //-----------------------------\r
+                                                                       #endregion\r
+\r
+                                                                       case EHHGroup.Group:\r
+                                                                               #region [ HC,HO,LCのヒット処理 ]\r
+                                                                               //-----------------------------\r
+                                                                               if (((e判定HC != EJudge.Miss) && (e判定HO != EJudge.Miss)) && (e判定LC != EJudge.Miss))\r
+                                                                               {\r
+                                                                                       CChip chip;\r
+                                                                                       CChip[] chipArray = new CChip[] { chipHC, chipHO, chipLC };\r
+                                                                                       // ここから、chipArrayをn発生位置の小さい順に並び替える\r
+                                                                                       if (chipArray[1].n発声位置 > chipArray[2].n発声位置)\r
+                                                                                       {\r
+                                                                                               chip = chipArray[1];\r
+                                                                                               chipArray[1] = chipArray[2];\r
+                                                                                               chipArray[2] = chip;\r
+                                                                                       }\r
+                                                                                       if (chipArray[0].n発声位置 > chipArray[1].n発声位置)\r
+                                                                                       {\r
+                                                                                               chip = chipArray[0];\r
+                                                                                               chipArray[0] = chipArray[1];\r
+                                                                                               chipArray[1] = chip;\r
+                                                                                       }\r
+                                                                                       if (chipArray[1].n発声位置 > chipArray[2].n発声位置)\r
+                                                                                       {\r
+                                                                                               chip = chipArray[1];\r
+                                                                                               chipArray[1] = chipArray[2];\r
+                                                                                               chipArray[2] = chip;\r
+                                                                                       }\r
+                                                                                       this.tドラムヒット処理(nTime, EPad.HH, chipArray[0], inputEvent.nVelocity);\r
+                                                                                       if (chipArray[0].n発声位置 == chipArray[1].n発声位置)\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HH, chipArray[1], inputEvent.nVelocity);\r
+                                                                                       }\r
+                                                                                       if (chipArray[0].n発声位置 == chipArray[2].n発声位置)\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HH, chipArray[2], inputEvent.nVelocity);\r
+                                                                                       }\r
+                                                                                       bHitted = true;\r
+                                                                               }\r
+                                                                               else if ((e判定HC != EJudge.Miss) && (e判定HO != EJudge.Miss))\r
+                                                                               {\r
+                                                                                       if (chipHC.n発声位置 < chipHO.n発声位置)\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HH, chipHC, inputEvent.nVelocity);\r
+                                                                                       }\r
+                                                                                       else if (chipHC.n発声位置 > chipHO.n発声位置)\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HH, chipHO, inputEvent.nVelocity);\r
+                                                                                       }\r
+                                                                                       else\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HH, chipHC, inputEvent.nVelocity);\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HH, chipHO, inputEvent.nVelocity);\r
+                                                                                       }\r
+                                                                                       bHitted = true;\r
+                                                                               }\r
+                                                                               else if ((e判定HC != EJudge.Miss) && (e判定LC != EJudge.Miss))\r
+                                                                               {\r
+                                                                                       if (chipHC.n発声位置 < chipLC.n発声位置)\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HH, chipHC, inputEvent.nVelocity);\r
+                                                                                       }\r
+                                                                                       else if (chipHC.n発声位置 > chipLC.n発声位置)\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HH, chipLC, inputEvent.nVelocity);\r
+                                                                                       }\r
+                                                                                       else\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HH, chipHC, inputEvent.nVelocity);\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HH, chipLC, inputEvent.nVelocity);\r
+                                                                                       }\r
+                                                                                       bHitted = true;\r
+                                                                               }\r
+                                                                               else if ((e判定HO != EJudge.Miss) && (e判定LC != EJudge.Miss))\r
+                                                                               {\r
+                                                                                       if (chipHO.n発声位置 < chipLC.n発声位置)\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HH, chipHO, inputEvent.nVelocity);\r
+                                                                                       }\r
+                                                                                       else if (chipHO.n発声位置 > chipLC.n発声位置)\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HH, chipLC, inputEvent.nVelocity);\r
+                                                                                       }\r
+                                                                                       else\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HH, chipHO, inputEvent.nVelocity);\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HH, chipLC, inputEvent.nVelocity);\r
+                                                                                       }\r
+                                                                                       bHitted = true;\r
+                                                                               }\r
+                                                                               else if (e判定HC != EJudge.Miss)\r
+                                                                               {\r
+                                                                                       this.tドラムヒット処理(nTime, EPad.HH, chipHC, inputEvent.nVelocity);\r
+                                                                                       bHitted = true;\r
+                                                                               }\r
+                                                                               else if (e判定HO != EJudge.Miss)\r
+                                                                               {\r
+                                                                                       this.tドラムヒット処理(nTime, EPad.HH, chipHO, inputEvent.nVelocity);\r
+                                                                                       bHitted = true;\r
+                                                                               }\r
+                                                                               else if (e判定LC != EJudge.Miss)\r
+                                                                               {\r
+                                                                                       this.tドラムヒット処理(nTime, EPad.HH, chipLC, inputEvent.nVelocity);\r
+                                                                                       bHitted = true;\r
+                                                                               }\r
+                                                                               if (!bHitted)\r
+                                                                                       break;\r
+                                                                               continue;\r
+                                                                       //-----------------------------\r
+                                                                       #endregion\r
+\r
+                                                                       default:\r
+                                                                               #region [ 全部打ち分け時のヒット処理 ]\r
+                                                                               //-----------------------------\r
+                                                                               if (e判定HC != EJudge.Miss)\r
+                                                                               {\r
+                                                                                       this.tドラムヒット処理(nTime, EPad.HH, chipHC, inputEvent.nVelocity);\r
+                                                                                       bHitted = true;\r
+                                                                               }\r
+                                                                               if (!bHitted)\r
+                                                                                       break;\r
+                                                                               continue;\r
+                                                                               //-----------------------------\r
+                                                                               #endregion\r
+                                                               }\r
+                                                               if (!bHitted)\r
+                                                                       break;\r
+                                                               continue;\r
+                                                       }\r
+                                               //-----------------------------\r
+                                               #endregion\r
+\r
+                                               case EPad.SD:\r
+                                                       #region [ SDのヒット処理 ]\r
+                                                       //-----------------------------\r
+                                                       if (inputEvent.nVelocity <= CDTXMania.Instance.ConfigIni.nVelocityMin.SD)   // #23857 2010.12.12 yyagi: to support VelocityMin\r
+                                                               continue;   // 電子ドラムによる意図的なクロストークを無効にする\r
+                                                       if (!this.tドラムヒット処理(nTime, EPad.SD, this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.Snare, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1), inputEvent.nVelocity))\r
+                                                               break;\r
+                                                       continue;\r
+                                               //-----------------------------\r
+                                               #endregion\r
+\r
+                                               case EPad.BD:\r
+                                                       #region [ BDのヒット処理 ]\r
+                                                       //-----------------------------\r
+                                                       if (inputEvent.nVelocity <= CDTXMania.Instance.ConfigIni.nVelocityMin.BD)   // #23857 2010.12.12 yyagi: to support VelocityMin\r
+                                                               continue;   // 電子ドラムによる意図的なクロストークを無効にする\r
+                                                       if (!this.tドラムヒット処理(nTime, EPad.BD, this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.BassDrum, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1), inputEvent.nVelocity))\r
+                                                               break;\r
+                                                       continue;\r
+                                               //-----------------------------\r
+                                               #endregion\r
+\r
+                                               case EPad.HT:\r
+                                                       #region [ HTのヒット処理 ]\r
+                                                       //-----------------------------\r
+                                                       if (inputEvent.nVelocity <= CDTXMania.Instance.ConfigIni.nVelocityMin.HT)   // #23857 2010.12.12 yyagi: to support VelocityMin\r
+                                                               continue;   // 電子ドラムによる意図的なクロストークを無効にする\r
+                                                       if (this.tドラムヒット処理(nTime, EPad.HT, this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.HighTom, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1), inputEvent.nVelocity))\r
+                                                               continue;\r
+                                                       break;\r
+                                               //-----------------------------\r
+                                               #endregion\r
+\r
+                                               case EPad.LT:\r
+                                                       #region [ LTとFT(groupingしている場合)のヒット処理 ]\r
+                                                       //-----------------------------\r
+                                                       {\r
+                                                               if (inputEvent.nVelocity <= CDTXMania.Instance.ConfigIni.nVelocityMin.LT)   // #23857 2010.12.12 yyagi: to support VelocityMin\r
+                                                                       continue;   // 電子ドラムによる意図的なクロストークを無効にする\r
+                                                               CChip chipLT = this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.LowTom, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1);\r
+                                                               CChip chipFT = this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.FloorTom, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1);\r
+                                                               EJudge e判定LT = (chipLT != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipLT, nInputAdjustTime) : EJudge.Miss;\r
+                                                               EJudge e判定FT = (chipFT != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipFT, nInputAdjustTime) : EJudge.Miss;\r
+                                                               switch (eFTGroup)\r
+                                                               {\r
+                                                                       case EFTGroup.Off:\r
+                                                                               #region [ LTのヒット処理 ]\r
+                                                                               //-----------------------------\r
+                                                                               if (e判定LT != EJudge.Miss)\r
+                                                                               {\r
+                                                                                       this.tドラムヒット処理(nTime, EPad.LT, chipLT, inputEvent.nVelocity);\r
+                                                                                       bHitted = true;\r
+                                                                               }\r
+                                                                               break;\r
+                                                                       //-----------------------------\r
+                                                                       #endregion\r
+\r
+                                                                       case EFTGroup.Group:\r
+                                                                               #region [ LTとFTのヒット処理 ]\r
+                                                                               //-----------------------------\r
+                                                                               if ((e判定LT != EJudge.Miss) && (e判定FT != EJudge.Miss))\r
+                                                                               {\r
+                                                                                       if (chipLT.n発声位置 < chipFT.n発声位置)\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.LT, chipLT, inputEvent.nVelocity);\r
+                                                                                       }\r
+                                                                                       else if (chipLT.n発声位置 > chipFT.n発声位置)\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.LT, chipFT, inputEvent.nVelocity);\r
+                                                                                       }\r
+                                                                                       else\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.LT, chipLT, inputEvent.nVelocity);\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.LT, chipFT, inputEvent.nVelocity);\r
+                                                                                       }\r
+                                                                                       bHitted = true;\r
+                                                                               }\r
+                                                                               else if (e判定LT != EJudge.Miss)\r
+                                                                               {\r
+                                                                                       this.tドラムヒット処理(nTime, EPad.LT, chipLT, inputEvent.nVelocity);\r
+                                                                                       bHitted = true;\r
+                                                                               }\r
+                                                                               else if (e判定FT != EJudge.Miss)\r
+                                                                               {\r
+                                                                                       this.tドラムヒット処理(nTime, EPad.LT, chipFT, inputEvent.nVelocity);\r
+                                                                                       bHitted = true;\r
+                                                                               }\r
+                                                                               break;\r
+                                                                               //-----------------------------\r
+                                                                               #endregion\r
+                                                               }\r
+                                                               if (!bHitted)\r
+                                                                       break;\r
+                                                               continue;\r
+                                                       }\r
+                                               //-----------------------------\r
+                                               #endregion\r
+\r
+                                               case EPad.FT:\r
+                                                       #region [ FTとLT(groupingしている場合)のヒット処理 ]\r
+                                                       //-----------------------------\r
+                                                       {\r
+                                                               if (inputEvent.nVelocity <= CDTXMania.Instance.ConfigIni.nVelocityMin.FT)   // #23857 2010.12.12 yyagi: to support VelocityMin\r
+                                                                       continue;   // 電子ドラムによる意図的なクロストークを無効にする\r
+                                                               CChip chipLT = this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.LowTom, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1);\r
+                                                               CChip chipFT = this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.FloorTom, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1);\r
+                                                               EJudge e判定LT = (chipLT != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipLT, nInputAdjustTime) : EJudge.Miss;\r
+                                                               EJudge e判定FT = (chipFT != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipFT, nInputAdjustTime) : EJudge.Miss;\r
+                                                               switch (eFTGroup)\r
+                                                               {\r
+                                                                       case EFTGroup.Off:\r
+                                                                               #region [ FTのヒット処理 ]\r
+                                                                               //-----------------------------\r
+                                                                               if (e判定FT != EJudge.Miss)\r
+                                                                               {\r
+                                                                                       this.tドラムヒット処理(nTime, EPad.FT, chipFT, inputEvent.nVelocity);\r
+                                                                                       bHitted = true;\r
+                                                                               }\r
+                                                                               //-----------------------------\r
+                                                                               #endregion\r
+                                                                               break;\r
+\r
+                                                                       case EFTGroup.Group:\r
+                                                                               #region [ FTとLTのヒット処理 ]\r
+                                                                               //-----------------------------\r
+                                                                               if ((e判定LT != EJudge.Miss) && (e判定FT != EJudge.Miss))\r
+                                                                               {\r
+                                                                                       if (chipLT.n発声位置 < chipFT.n発声位置)\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.FT, chipLT, inputEvent.nVelocity);\r
+                                                                                       }\r
+                                                                                       else if (chipLT.n発声位置 > chipFT.n発声位置)\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.FT, chipFT, inputEvent.nVelocity);\r
+                                                                                       }\r
+                                                                                       else\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.FT, chipLT, inputEvent.nVelocity);\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.FT, chipFT, inputEvent.nVelocity);\r
+                                                                                       }\r
+                                                                                       bHitted = true;\r
+                                                                               }\r
+                                                                               else if (e判定LT != EJudge.Miss)\r
+                                                                               {\r
+                                                                                       this.tドラムヒット処理(nTime, EPad.FT, chipLT, inputEvent.nVelocity);\r
+                                                                                       bHitted = true;\r
+                                                                               }\r
+                                                                               else if (e判定FT != EJudge.Miss)\r
+                                                                               {\r
+                                                                                       this.tドラムヒット処理(nTime, EPad.FT, chipFT, inputEvent.nVelocity);\r
+                                                                                       bHitted = true;\r
+                                                                               }\r
+                                                                               //-----------------------------\r
+                                                                               #endregion\r
+                                                                               break;\r
+                                                               }\r
+                                                               if (!bHitted)\r
+                                                                       break;\r
+                                                               continue;\r
+                                                       }\r
+                                               //-----------------------------\r
+                                               #endregion\r
+\r
+                                               case EPad.CY:\r
+                                                       #region [ CY(とLCとRD:groupingしている場合)のヒット処理 ]\r
+                                                       //-----------------------------\r
+                                                       {\r
+                                                               if (inputEvent.nVelocity <= CDTXMania.Instance.ConfigIni.nVelocityMin.CY)   // #23857 2010.12.12 yyagi: to support VelocityMin\r
+                                                                       continue;   // 電子ドラムによる意図的なクロストークを無効にする\r
+                                                               CChip chipCY = this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.Cymbal, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1);\r
+                                                               CChip chipRD = this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.RideCymbal, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1);\r
+                                                               CChip chipLC = CDTXMania.Instance.ConfigIni.bCymbalFree ? this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.LeftCymbal, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1) : null;\r
+                                                               EJudge e判定CY = (chipCY != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipCY, nInputAdjustTime) : EJudge.Miss;\r
+                                                               EJudge e判定RD = (chipRD != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipRD, nInputAdjustTime) : EJudge.Miss;\r
+                                                               EJudge e判定LC = (chipLC != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipLC, nInputAdjustTime) : EJudge.Miss;\r
+                                                               CChip[] chipArray = new CChip[] { chipCY, chipRD, chipLC };\r
+                                                               EJudge[] e判定Array = new EJudge[] { e判定CY, e判定RD, e判定LC };\r
+                                                               const int NumOfChips = 3;   // chipArray.GetLength(0)\r
+\r
+                                                               // CY/RD/LC群を, n発生位置の小さい順に並べる + nullを大きい方に退かす\r
+                                                               SortChipsByNTime(chipArray, e判定Array, NumOfChips);\r
+                                                               switch (eCYGroup)\r
+                                                               {\r
+                                                                       case ECYGroup.Off:\r
+                                                                               if (!CDTXMania.Instance.ConfigIni.bCymbalFree)\r
+                                                                               {\r
+                                                                                       if (e判定CY != EJudge.Miss)\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.CY, chipCY, inputEvent.nVelocity);\r
+                                                                                               bHitted = true;\r
+                                                                                       }\r
+                                                                                       if (!bHitted)\r
+                                                                                               break;\r
+                                                                                       continue;\r
+                                                                               }\r
+                                                                               for (int i = 0; i < NumOfChips; i++)\r
+                                                                               {\r
+                                                                                       if ((e判定Array[i] != EJudge.Miss) && ((chipArray[i] == chipCY) || (chipArray[i] == chipLC)))\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.CY, chipArray[i], inputEvent.nVelocity);\r
+                                                                                               bHitted = true;\r
+                                                                                               break;\r
+                                                                                       }\r
+                                                                                       //num10++;\r
+                                                                               }\r
+                                                                               if (e判定CY != EJudge.Miss)\r
+                                                                               {\r
+                                                                                       this.tドラムヒット処理(nTime, EPad.CY, chipCY, inputEvent.nVelocity);\r
+                                                                                       bHitted = true;\r
+                                                                               }\r
+                                                                               if (!bHitted)\r
+                                                                                       break;\r
+                                                                               continue;\r
+\r
+                                                                       case ECYGroup.Group:\r
+                                                                               if (!CDTXMania.Instance.ConfigIni.bCymbalFree)\r
+                                                                               {\r
+                                                                                       for (int i = 0; i < NumOfChips; i++)\r
+                                                                                       {\r
+                                                                                               if ((e判定Array[i] != EJudge.Miss) && ((chipArray[i] == chipCY) || (chipArray[i] == chipRD)))\r
+                                                                                               {\r
+                                                                                                       this.tドラムヒット処理(nTime, EPad.CY, chipArray[i], inputEvent.nVelocity);\r
+                                                                                                       bHitted = true;\r
+                                                                                                       break;\r
+                                                                                               }\r
+                                                                                       }\r
+                                                                                       if (!bHitted)\r
+                                                                                               break;\r
+                                                                                       continue;\r
+                                                                               }\r
+                                                                               for (int i = 0; i < NumOfChips; i++)\r
+                                                                               {\r
+                                                                                       if (e判定Array[i] != EJudge.Miss)\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.CY, chipArray[i], inputEvent.nVelocity);\r
+                                                                                               bHitted = true;\r
+                                                                                               break;\r
+                                                                                       }\r
+                                                                               }\r
+                                                                               if (!bHitted)\r
+                                                                                       break;\r
+                                                                               continue;\r
+                                                               }\r
+                                                               if (!bHitted)\r
+                                                                       break;\r
+                                                               continue;\r
+                                                       }\r
+                                               //-----------------------------\r
+                                               #endregion\r
+\r
+                                               case EPad.HHO:\r
+                                                       #region [ HO(とHCとLC:groupingしている場合)のヒット処理 ]\r
+                                                       //-----------------------------\r
+                                                       {\r
+                                                               if (inputEvent.nVelocity <= CDTXMania.Instance.ConfigIni.nVelocityMin.HH)\r
+                                                                       continue;   // 電子ドラムによる意図的なクロストークを無効にする\r
+\r
+                                                               CChip chipHC = this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.HiHatClose, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1);\r
+                                                               CChip chipHO = this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.HiHatOpen, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1);\r
+                                                               CChip chipLC = this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.LeftCymbal, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1);\r
+                                                               EJudge e判定HC = (chipHC != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipHC, nInputAdjustTime) : EJudge.Miss;\r
+                                                               EJudge e判定HO = (chipHO != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipHO, nInputAdjustTime) : EJudge.Miss;\r
+                                                               EJudge e判定LC = (chipLC != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipLC, nInputAdjustTime) : EJudge.Miss;\r
+                                                               switch (eHHGroup)\r
+                                                               {\r
+                                                                       case EHHGroup.Off:\r
+                                                                               if (e判定HO != EJudge.Miss)\r
+                                                                               {\r
+                                                                                       this.tドラムヒット処理(nTime, EPad.HHO, chipHO, inputEvent.nVelocity);\r
+                                                                                       bHitted = true;\r
+                                                                               }\r
+                                                                               if (!bHitted)\r
+                                                                                       break;\r
+                                                                               continue;\r
+\r
+                                                                       case EHHGroup.HO_HC:\r
+                                                                               if ((e判定HO != EJudge.Miss) && (e判定LC != EJudge.Miss))\r
+                                                                               {\r
+                                                                                       if (chipHO.n発声位置 < chipLC.n発声位置)\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HHO, chipHO, inputEvent.nVelocity);\r
+                                                                                       }\r
+                                                                                       else if (chipHO.n発声位置 > chipLC.n発声位置)\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HHO, chipLC, inputEvent.nVelocity);\r
+                                                                                       }\r
+                                                                                       else\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HHO, chipHO, inputEvent.nVelocity);\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HHO, chipLC, inputEvent.nVelocity);\r
+                                                                                       }\r
+                                                                                       bHitted = true;\r
+                                                                               }\r
+                                                                               else if (e判定HO != EJudge.Miss)\r
+                                                                               {\r
+                                                                                       this.tドラムヒット処理(nTime, EPad.HHO, chipHO, inputEvent.nVelocity);\r
+                                                                                       bHitted = true;\r
+                                                                               }\r
+                                                                               else if (e判定LC != EJudge.Miss)\r
+                                                                               {\r
+                                                                                       this.tドラムヒット処理(nTime, EPad.HHO, chipLC, inputEvent.nVelocity);\r
+                                                                                       bHitted = true;\r
+                                                                               }\r
+                                                                               if (!bHitted)\r
+                                                                                       break;\r
+                                                                               continue;\r
+\r
+                                                                       case EHHGroup.LC_HH:\r
+                                                                               if ((e判定HC != EJudge.Miss) && (e判定HO != EJudge.Miss))\r
+                                                                               {\r
+                                                                                       if (chipHC.n発声位置 < chipHO.n発声位置)\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HHO, chipHC, inputEvent.nVelocity);\r
+                                                                                       }\r
+                                                                                       else if (chipHC.n発声位置 > chipHO.n発声位置)\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HHO, chipHO, inputEvent.nVelocity);\r
+                                                                                       }\r
+                                                                                       else\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HHO, chipHC, inputEvent.nVelocity);\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HHO, chipHO, inputEvent.nVelocity);\r
+                                                                                       }\r
+                                                                                       bHitted = true;\r
+                                                                               }\r
+                                                                               else if (e判定HC != EJudge.Miss)\r
+                                                                               {\r
+                                                                                       this.tドラムヒット処理(nTime, EPad.HHO, chipHC, inputEvent.nVelocity);\r
+                                                                                       bHitted = true;\r
+                                                                               }\r
+                                                                               else if (e判定HO != EJudge.Miss)\r
+                                                                               {\r
+                                                                                       this.tドラムヒット処理(nTime, EPad.HHO, chipHO, inputEvent.nVelocity);\r
+                                                                                       bHitted = true;\r
+                                                                               }\r
+                                                                               if (!bHitted)\r
+                                                                                       break;\r
+                                                                               continue;\r
+\r
+                                                                       case EHHGroup.Group:\r
+                                                                               if (((e判定HC != EJudge.Miss) && (e判定HO != EJudge.Miss)) && (e判定LC != EJudge.Miss))\r
+                                                                               {\r
+                                                                                       CChip chip;\r
+                                                                                       CChip[] chipArray = new CChip[] { chipHC, chipHO, chipLC };\r
+                                                                                       // ここから、chipArrayをn発生位置の小さい順に並び替える\r
+                                                                                       if (chipArray[1].n発声位置 > chipArray[2].n発声位置)\r
+                                                                                       {\r
+                                                                                               chip = chipArray[1];\r
+                                                                                               chipArray[1] = chipArray[2];\r
+                                                                                               chipArray[2] = chip;\r
+                                                                                       }\r
+                                                                                       if (chipArray[0].n発声位置 > chipArray[1].n発声位置)\r
+                                                                                       {\r
+                                                                                               chip = chipArray[0];\r
+                                                                                               chipArray[0] = chipArray[1];\r
+                                                                                               chipArray[1] = chip;\r
+                                                                                       }\r
+                                                                                       if (chipArray[1].n発声位置 > chipArray[2].n発声位置)\r
+                                                                                       {\r
+                                                                                               chip = chipArray[1];\r
+                                                                                               chipArray[1] = chipArray[2];\r
+                                                                                               chipArray[2] = chip;\r
+                                                                                       }\r
+                                                                                       this.tドラムヒット処理(nTime, EPad.HHO, chipArray[0], inputEvent.nVelocity);\r
+                                                                                       if (chipArray[0].n発声位置 == chipArray[1].n発声位置)\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HHO, chipArray[1], inputEvent.nVelocity);\r
+                                                                                       }\r
+                                                                                       if (chipArray[0].n発声位置 == chipArray[2].n発声位置)\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HHO, chipArray[2], inputEvent.nVelocity);\r
+                                                                                       }\r
+                                                                                       bHitted = true;\r
+                                                                               }\r
+                                                                               else if ((e判定HC != EJudge.Miss) && (e判定HO != EJudge.Miss))\r
+                                                                               {\r
+                                                                                       if (chipHC.n発声位置 < chipHO.n発声位置)\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HHO, chipHC, inputEvent.nVelocity);\r
+                                                                                       }\r
+                                                                                       else if (chipHC.n発声位置 > chipHO.n発声位置)\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HHO, chipHO, inputEvent.nVelocity);\r
+                                                                                       }\r
+                                                                                       else\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HHO, chipHC, inputEvent.nVelocity);\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HHO, chipHO, inputEvent.nVelocity);\r
+                                                                                       }\r
+                                                                                       bHitted = true;\r
+                                                                               }\r
+                                                                               else if ((e判定HC != EJudge.Miss) && (e判定LC != EJudge.Miss))\r
+                                                                               {\r
+                                                                                       if (chipHC.n発声位置 < chipLC.n発声位置)\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HHO, chipHC, inputEvent.nVelocity);\r
+                                                                                       }\r
+                                                                                       else if (chipHC.n発声位置 > chipLC.n発声位置)\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HHO, chipLC, inputEvent.nVelocity);\r
+                                                                                       }\r
+                                                                                       else\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HHO, chipHC, inputEvent.nVelocity);\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HHO, chipLC, inputEvent.nVelocity);\r
+                                                                                       }\r
+                                                                                       bHitted = true;\r
+                                                                               }\r
+                                                                               else if ((e判定HO != EJudge.Miss) && (e判定LC != EJudge.Miss))\r
+                                                                               {\r
+                                                                                       if (chipHO.n発声位置 < chipLC.n発声位置)\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HHO, chipHO, inputEvent.nVelocity);\r
+                                                                                       }\r
+                                                                                       else if (chipHO.n発声位置 > chipLC.n発声位置)\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HHO, chipLC, inputEvent.nVelocity);\r
+                                                                                       }\r
+                                                                                       else\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HHO, chipHO, inputEvent.nVelocity);\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.HHO, chipLC, inputEvent.nVelocity);\r
+                                                                                       }\r
+                                                                                       bHitted = true;\r
+                                                                               }\r
+                                                                               else if (e判定HC != EJudge.Miss)\r
+                                                                               {\r
+                                                                                       this.tドラムヒット処理(nTime, EPad.HHO, chipHC, inputEvent.nVelocity);\r
+                                                                                       bHitted = true;\r
+                                                                               }\r
+                                                                               else if (e判定HO != EJudge.Miss)\r
+                                                                               {\r
+                                                                                       this.tドラムヒット処理(nTime, EPad.HHO, chipHO, inputEvent.nVelocity);\r
+                                                                                       bHitted = true;\r
+                                                                               }\r
+                                                                               else if (e判定LC != EJudge.Miss)\r
+                                                                               {\r
+                                                                                       this.tドラムヒット処理(nTime, EPad.HHO, chipLC, inputEvent.nVelocity);\r
+                                                                                       bHitted = true;\r
+                                                                               }\r
+                                                                               if (!bHitted)\r
+                                                                                       break;\r
+                                                                               continue;\r
+                                                               }\r
+                                                               if (!bHitted)\r
+                                                                       break;\r
+                                                               continue;\r
+                                                       }\r
+                                               //-----------------------------\r
+                                               #endregion\r
+\r
+                                               case EPad.RD:\r
+                                                       #region [ RD(とCYとLC:groupingしている場合)のヒット処理 ]\r
+                                                       //-----------------------------\r
+                                                       {\r
+                                                               if (inputEvent.nVelocity <= CDTXMania.Instance.ConfigIni.nVelocityMin.RD)   // #23857 2010.12.12 yyagi: to support VelocityMin\r
+                                                                       continue;   // 電子ドラムによる意図的なクロストークを無効にする\r
+                                                               CChip chipCY = this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.Cymbal, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1);\r
+                                                               CChip chipRD = this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.RideCymbal, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1);\r
+                                                               CChip chipLC = CDTXMania.Instance.ConfigIni.bCymbalFree ? this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.LeftCymbal, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1) : null;\r
+                                                               EJudge e判定CY = (chipCY != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipCY, nInputAdjustTime) : EJudge.Miss;\r
+                                                               EJudge e判定RD = (chipRD != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipRD, nInputAdjustTime) : EJudge.Miss;\r
+                                                               EJudge e判定LC = (chipLC != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipLC, nInputAdjustTime) : EJudge.Miss;\r
+                                                               CChip[] chipArray = new CChip[] { chipCY, chipRD, chipLC };\r
+                                                               EJudge[] e判定Array = new EJudge[] { e判定CY, e判定RD, e判定LC };\r
+                                                               const int NumOfChips = 3;   // chipArray.GetLength(0)\r
+\r
+                                                               // HH/CY群を, n発生位置の小さい順に並べる + nullを大きい方に退かす\r
+                                                               SortChipsByNTime(chipArray, e判定Array, NumOfChips);\r
+                                                               switch (eCYGroup)\r
+                                                               {\r
+                                                                       case ECYGroup.Off:\r
+                                                                               if (e判定RD != EJudge.Miss)\r
+                                                                               {\r
+                                                                                       this.tドラムヒット処理(nTime, EPad.RD, chipRD, inputEvent.nVelocity);\r
+                                                                                       bHitted = true;\r
+                                                                               }\r
+                                                                               break;\r
+\r
+                                                                       case ECYGroup.Group:\r
+                                                                               if (!CDTXMania.Instance.ConfigIni.bCymbalFree)\r
+                                                                               {\r
+                                                                                       for (int i = 0; i < NumOfChips; i++)\r
+                                                                                       {\r
+                                                                                               if ((e判定Array[i] != EJudge.Miss) && ((chipArray[i] == chipCY) || (chipArray[i] == chipRD)))\r
+                                                                                               {\r
+                                                                                                       this.tドラムヒット処理(nTime, EPad.CY, chipArray[i], inputEvent.nVelocity);\r
+                                                                                                       bHitted = true;\r
+                                                                                                       break;\r
+                                                                                               }\r
+                                                                                       }\r
+                                                                                       break;\r
+                                                                               }\r
+                                                                               for (int i = 0; i < NumOfChips; i++)\r
+                                                                               {\r
+                                                                                       if (e判定Array[i] != EJudge.Miss)\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.CY, chipArray[i], inputEvent.nVelocity);\r
+                                                                                               bHitted = true;\r
+                                                                                               break;\r
+                                                                                       }\r
+                                                                               }\r
+                                                                               break;\r
+                                                               }\r
+                                                               if (bHitted)\r
+                                                               {\r
+                                                                       continue;\r
+                                                               }\r
+                                                               break;\r
+                                                       }\r
+                                               //-----------------------------\r
+                                               #endregion\r
+\r
+                                               case EPad.LC:\r
+                                                       #region [ LC(とHC/HOとCYと:groupingしている場合)のヒット処理 ]\r
+                                                       //-----------------------------\r
+                                                       {\r
+                                                               if (inputEvent.nVelocity <= CDTXMania.Instance.ConfigIni.nVelocityMin.LC)   // #23857 2010.12.12 yyagi: to support VelocityMin\r
+                                                                       continue;   // 電子ドラムによる意図的なクロストークを無効にする\r
+                                                               CChip chipHC = this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.HiHatClose, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1);    // HC\r
+                                                               CChip chipHO = this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.HiHatOpen, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1); // HO\r
+                                                               CChip chipLC = this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.LeftCymbal, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1);    // LC\r
+                                                               CChip chipCY = CDTXMania.Instance.ConfigIni.bCymbalFree ? this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.Cymbal, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1) : null;\r
+                                                               CChip chipRD = CDTXMania.Instance.ConfigIni.bCymbalFree ? this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.RideCymbal, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1) : null;\r
+                                                               EJudge e判定HC = (chipHC != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipHC, nInputAdjustTime) : EJudge.Miss;\r
+                                                               EJudge e判定HO = (chipHO != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipHO, nInputAdjustTime) : EJudge.Miss;\r
+                                                               EJudge e判定LC = (chipLC != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipLC, nInputAdjustTime) : EJudge.Miss;\r
+                                                               EJudge e判定CY = (chipCY != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipCY, nInputAdjustTime) : EJudge.Miss;\r
+                                                               EJudge e判定RD = (chipRD != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipRD, nInputAdjustTime) : EJudge.Miss;\r
+                                                               CChip[] chipArray = new CChip[] { chipHC, chipHO, chipLC, chipCY, chipRD };\r
+                                                               EJudge[] e判定Array = new EJudge[] { e判定HC, e判定HO, e判定LC, e判定CY, e判定RD };\r
+                                                               const int NumOfChips = 5;   // chipArray.GetLength(0)\r
+\r
+                                                               // HH/CY群を, n発生位置の小さい順に並べる + nullを大きい方に退かす\r
+                                                               SortChipsByNTime(chipArray, e判定Array, NumOfChips);\r
+                                                               switch (eHHGroup)\r
+                                                               {\r
+                                                                       case EHHGroup.Off:\r
+                                                                       case EHHGroup.LC_HH:\r
+                                                                               if (!CDTXMania.Instance.ConfigIni.bCymbalFree)\r
+                                                                               {\r
+                                                                                       if (e判定LC != EJudge.Miss)\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.LC, chipLC, inputEvent.nVelocity);\r
+                                                                                               bHitted = true;\r
+                                                                                       }\r
+                                                                                       if (!bHitted)\r
+                                                                                               break;\r
+                                                                                       continue;\r
+                                                                               }\r
+                                                                               for (int i = 0; i < NumOfChips; i++)\r
+                                                                               {\r
+                                                                                       if ((e判定Array[i] != EJudge.Miss) && (((chipArray[i] == chipLC) || (chipArray[i] == chipCY)) || ((chipArray[i] == chipRD) && (CDTXMania.Instance.ConfigIni.eCYGroup == ECYGroup.Group))))\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.LC, chipArray[i], inputEvent.nVelocity);\r
+                                                                                               bHitted = true;\r
+                                                                                               break;\r
+                                                                                       }\r
+                                                                               }\r
+                                                                               if (!bHitted)\r
+                                                                                       break;\r
+                                                                               continue;\r
+\r
+                                                                       case EHHGroup.HO_HC:\r
+                                                                       case EHHGroup.Group:\r
+                                                                               if (!CDTXMania.Instance.ConfigIni.bCymbalFree)\r
+                                                                               {\r
+                                                                                       for (int i = 0; i < NumOfChips; i++)\r
+                                                                                       {\r
+                                                                                               if ((e判定Array[i] != EJudge.Miss) && (((chipArray[i] == chipLC) || (chipArray[i] == chipHC)) || (chipArray[i] == chipHO)))\r
+                                                                                               {\r
+                                                                                                       this.tドラムヒット処理(nTime, EPad.LC, chipArray[i], inputEvent.nVelocity);\r
+                                                                                                       bHitted = true;\r
+                                                                                                       break;\r
+                                                                                               }\r
+                                                                                       }\r
+                                                                                       if (!bHitted)\r
+                                                                                               break;\r
+                                                                                       continue;\r
+                                                                               }\r
+                                                                               for (int i = 0; i < NumOfChips; i++)\r
+                                                                               {\r
+                                                                                       if ((e判定Array[i] != EJudge.Miss) && ((chipArray[i] != chipRD) || (CDTXMania.Instance.ConfigIni.eCYGroup == ECYGroup.Group)))\r
+                                                                                       {\r
+                                                                                               this.tドラムヒット処理(nTime, EPad.LC, chipArray[i], inputEvent.nVelocity);\r
+                                                                                               bHitted = true;\r
+                                                                                               break;\r
+                                                                                       }\r
+                                                                               }\r
+                                                                               if (!bHitted)\r
+                                                                                       break;\r
+                                                                               continue;\r
+                                                               }\r
+                                                               if (!bHitted)\r
+                                                                       break;\r
+\r
+                                                               break;\r
+                                                       }\r
+                                               //-----------------------------\r
+                                               #endregion\r
+\r
+                                               case EPad.HP:       // #27029 2012.1.4 from\r
+                                                       #region [ HPのヒット処理 ]\r
+                                                       //-----------------\r
+                                                       if (CDTXMania.Instance.ConfigIni.eBDGroup == EBDGroup.Group)\r
+                                                       {\r
+                                                               #region [ BDとみなしてヒット処理 ]\r
+                                                               //-----------------\r
+                                                               if (!this.tドラムヒット処理(nTime, EPad.BD, this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.BassDrum, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1), inputEvent.nVelocity))\r
+                                                                       break;\r
+                                                               continue;\r
+                                                               //-----------------\r
+                                                               #endregion\r
+                                                       }\r
+                                                       else\r
+                                                       {\r
+                                                               #region [ HPのヒット処理 ]\r
+                                                               //-----------------\r
+                                                               continue;   // 何もしない。この入力を完全に無視するので、break しないこと。\r
+                                                                                                               //-----------------\r
+                                                               #endregion\r
+                                                       }\r
+                                                       //-----------------\r
+                                                       #endregion\r
+                                       }\r
+                                       //-----------------------------\r
+                                       #endregion\r
+                                       #region [ (B) ヒットしてなかった場合は、レーンフラッシュ、パッドアニメ、空打ち音再生を実行 ]\r
+                                       //-----------------------------\r
+                                       EPad pad = ePad; // 以下、nPad の代わりに pad を用いる。(成りすまし用)\r
+\r
+                                       if (ePad == EPad.HP)\r
+                                       {\r
+                                               // #27029 2012.1.4 from: HP&BD 時の HiHatPedal の場合は BD に成りすます。\r
+                                               pad = EPad.BD;\r
+                                               //( HP|BD 時のHP入力はここまでこないので無視。)\r
+                                       }\r
+\r
+                                       // レーンフラッシュ\r
+                                       this.actLaneFlushD.Start(EnumConverter.LaneFromPad(pad), ((float)inputEvent.nVelocity) / 127f);\r
+\r
+                                       // パッド画像のヒット処理用\r
+\r
+                                       // パッドアニメ\r
+                                       this.actPad.Hit(pad);\r
+\r
+                                       // 空打ち音\r
+                                       if (CDTXMania.Instance.ConfigIni.bDrumsHitSound)\r
+                                       {\r
+                                               CChip rChip = this.r空うちChip(EPart.Drums, pad);\r
+                                               if (rChip != null)\r
+                                               {\r
+                                                       // (B1) 空打ち音が譜面で指定されているのでそれを再生する。\r
+                                                       this.tサウンド再生(rChip, CSound管理.rc演奏用タイマ.nシステム時刻, EPart.Drums, CDTXMania.Instance.ConfigIni.nChipVolume, CDTXMania.Instance.ConfigIni.bEmphasizePlaySound.Drums);\r
+                                               }\r
+                                               else\r
+                                               {\r
+                                                       #region [ (B2) 空打ち音が指定されていないので一番近いチップを探して再生する。]\r
+                                                       switch (pad)\r
+                                                       {\r
+                                                               case EPad.HH:\r
+                                                                       {\r
+                                                                               CChip chipHC = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(nTime, EChannel.HiHatClose, nInputAdjustTime);\r
+                                                                               CChip chipHO = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(nTime, EChannel.HiHatOpen, nInputAdjustTime);\r
+                                                                               CChip chipLC = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(nTime, EChannel.LeftCymbal, nInputAdjustTime);\r
+                                                                               switch (CDTXMania.Instance.ConfigIni.eHHGroup.Value)\r
+                                                                               {\r
+                                                                                       case EHHGroup.HO_HC:\r
+                                                                                               rChip = (chipHC != null) ? chipHC : chipLC;\r
+                                                                                               break;\r
+\r
+                                                                                       case EHHGroup.LC_HH:\r
+                                                                                               rChip = (chipHC != null) ? chipHC : chipHO;\r
+                                                                                               break;\r
+\r
+                                                                                       case EHHGroup.Group:\r
+                                                                                               if (chipHC != null)\r
+                                                                                               {\r
+                                                                                                       rChip = chipHC;\r
+                                                                                               }\r
+                                                                                               else if (chipHO == null)\r
+                                                                                               {\r
+                                                                                                       rChip = chipLC;\r
+                                                                                               }\r
+                                                                                               else if (chipLC == null)\r
+                                                                                               {\r
+                                                                                                       rChip = chipHO;\r
+                                                                                               }\r
+                                                                                               else if (chipHO.n発声位置 < chipLC.n発声位置)\r
+                                                                                               {\r
+                                                                                                       rChip = chipHO;\r
+                                                                                               }\r
+                                                                                               else\r
+                                                                                               {\r
+                                                                                                       rChip = chipLC;\r
+                                                                                               }\r
+                                                                                               break;\r
+\r
+                                                                                       default:\r
+                                                                                               rChip = chipHC;\r
+                                                                                               break;\r
+                                                                               }\r
+                                                                       }\r
+                                                                       break;\r
+\r
+                                                               case EPad.LT:\r
+                                                                       {\r
+                                                                               CChip chipLT = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(nTime, EChannel.LowTom, nInputAdjustTime);\r
+                                                                               CChip chipFT = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(nTime, EChannel.FloorTom, nInputAdjustTime);\r
+                                                                               if (CDTXMania.Instance.ConfigIni.eFTGroup != EFTGroup.Off)\r
+                                                                                       rChip = (chipLT != null) ? chipLT : chipFT;\r
+                                                                               else\r
+                                                                                       rChip = chipLT;\r
+                                                                       }\r
+                                                                       break;\r
+\r
+                                                               case EPad.FT:\r
+                                                                       {\r
+                                                                               CChip chipLT = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(nTime, EChannel.LowTom, nInputAdjustTime);\r
+                                                                               CChip chipFT = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(nTime, EChannel.FloorTom, nInputAdjustTime);\r
+                                                                               if (CDTXMania.Instance.ConfigIni.eFTGroup != EFTGroup.Off)\r
+                                                                                       rChip = (chipFT != null) ? chipFT : chipLT;\r
+                                                                               else\r
+                                                                                       rChip = chipFT;\r
+                                                                       }\r
+                                                                       break;\r
+\r
+                                                               case EPad.CY:\r
+                                                                       {\r
+                                                                               CChip chipCY = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(nTime, EChannel.Cymbal, nInputAdjustTime);\r
+                                                                               CChip chipRD = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(nTime, EChannel.RideCymbal, nInputAdjustTime);\r
+                                                                               if (CDTXMania.Instance.ConfigIni.eCYGroup != ECYGroup.Off)\r
+                                                                                       rChip = (chipCY != null) ? chipCY : chipRD;\r
+                                                                               else\r
+                                                                                       rChip = chipCY;\r
+                                                                       }\r
+                                                                       break;\r
+\r
+                                                               case EPad.HHO:\r
+                                                                       {\r
+                                                                               CChip chipHC = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(nTime, EChannel.HiHatClose, nInputAdjustTime);\r
+                                                                               CChip chipHO = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(nTime, EChannel.HiHatOpen, nInputAdjustTime);\r
+                                                                               CChip chipLC = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(nTime, EChannel.LeftCymbal, nInputAdjustTime);\r
+                                                                               switch (CDTXMania.Instance.ConfigIni.eHHGroup.Value)\r
+                                                                               {\r
+                                                                                       case EHHGroup.Off:\r
+                                                                                               rChip = chipHO;\r
+                                                                                               break;\r
+\r
+                                                                                       case EHHGroup.HO_HC:\r
+                                                                                               rChip = (chipHO != null) ? chipHO : chipLC;\r
+                                                                                               break;\r
+\r
+                                                                                       case EHHGroup.LC_HH:\r
+                                                                                               rChip = (chipHO != null) ? chipHO : chipHC;\r
+                                                                                               break;\r
+\r
+                                                                                       case EHHGroup.Group:\r
+                                                                                               if (chipHO != null)\r
+                                                                                               {\r
+                                                                                                       rChip = chipHO;\r
+                                                                                               }\r
+                                                                                               else if (chipHC == null)\r
+                                                                                               {\r
+                                                                                                       rChip = chipLC;\r
+                                                                                               }\r
+                                                                                               else if (chipLC == null)\r
+                                                                                               {\r
+                                                                                                       rChip = chipHC;\r
+                                                                                               }\r
+                                                                                               else if (chipHC.n発声位置 < chipLC.n発声位置)\r
+                                                                                               {\r
+                                                                                                       rChip = chipHC;\r
+                                                                                               }\r
+                                                                                               else\r
+                                                                                               {\r
+                                                                                                       rChip = chipLC;\r
+                                                                                               }\r
+                                                                                               break;\r
+                                                                               }\r
+                                                                       }\r
+                                                                       break;\r
+\r
+                                                               case EPad.RD:\r
+                                                                       {\r
+                                                                               CChip chipCY = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(nTime, EChannel.Cymbal, nInputAdjustTime);\r
+                                                                               CChip chipRD = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(nTime, EChannel.RideCymbal, nInputAdjustTime);\r
+                                                                               if (CDTXMania.Instance.ConfigIni.eCYGroup != ECYGroup.Off)\r
+                                                                                       rChip = (chipRD != null) ? chipRD : chipCY;\r
+                                                                               else\r
+                                                                                       rChip = chipRD;\r
+                                                                       }\r
+                                                                       break;\r
+\r
+                                                               case EPad.LC:\r
+                                                                       {\r
+                                                                               CChip chipHC = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(nTime, EChannel.HiHatClose, nInputAdjustTime);\r
+                                                                               CChip chipHO = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(nTime, EChannel.HiHatOpen, nInputAdjustTime);\r
+                                                                               CChip chipLC = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(nTime, EChannel.LeftCymbal, nInputAdjustTime);\r
+                                                                               switch (CDTXMania.Instance.ConfigIni.eHHGroup.Value)\r
+                                                                               {\r
+                                                                                       case EHHGroup.Off:\r
+                                                                                       case EHHGroup.LC_HH:\r
+                                                                                               rChip = chipLC;\r
+                                                                                               break;\r
+\r
+                                                                                       case EHHGroup.HO_HC:\r
+                                                                                       case EHHGroup.Group:\r
+                                                                                               if (chipLC != null)\r
+                                                                                               {\r
+                                                                                                       rChip = chipLC;\r
+                                                                                               }\r
+                                                                                               else if (chipHC == null)\r
+                                                                                               {\r
+                                                                                                       rChip = chipHO;\r
+                                                                                               }\r
+                                                                                               else if (chipHO == null)\r
+                                                                                               {\r
+                                                                                                       rChip = chipHC;\r
+                                                                                               }\r
+                                                                                               else if (chipHC.n発声位置 < chipHO.n発声位置)\r
+                                                                                               {\r
+                                                                                                       rChip = chipHC;\r
+                                                                                               }\r
+                                                                                               else\r
+                                                                                               {\r
+                                                                                                       rChip = chipHO;\r
+                                                                                               }\r
+                                                                                               break;\r
+                                                                               }\r
+                                                                       }\r
+                                                                       break;\r
+\r
+                                                               default:\r
+                                                                       rChip = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(nTime, EnumConverter.ChannelFromPad(pad), nInputAdjustTime);\r
+                                                                       break;\r
+                                                       }\r
+                                                       if (rChip != null)\r
+                                                       {\r
+                                                               // 空打ち音が見つかったので再生する。\r
+                                                               this.tサウンド再生(rChip, CSound管理.rc演奏用タイマ.nシステム時刻, EPart.Drums, CDTXMania.Instance.ConfigIni.nChipVolume, CDTXMania.Instance.ConfigIni.bEmphasizePlaySound.Drums);\r
+                                                       }\r
+                                                       //-----------------\r
+                                                       #endregion\r
+                                               }\r
+                                       }\r
+\r
+                                       // BAD or TIGHT 時の処理。\r
+                                       if (CDTXMania.Instance.ConfigIni.bTight)\r
+                                               this.tチップのヒット処理_BadならびにTight時のMiss(EPart.Drums, EnumConverter.LaneFromPad(pad));//nパッド0Atoレーン07[(int)pad]\r
+                                                                                                                                                                                                                                                                                                                                                                               //-----------------------------\r
+                                       #endregion\r
+                               }\r
+                       }\r
+               }\r
+\r
+               private void ドラムスクロール速度アップ()\r
+               {\r
+                       int scrollSpeed = CDTXMania.Instance.ConfigIni.nScrollSpeed.Drums;\r
+                       CDTXMania.Instance.ConfigIni.nScrollSpeed.Drums.Value = scrollSpeed + 1;\r
+                       float f = (float)CDTXMania.Instance.ConfigIni.nJudgeLinePosOffset.Drums / (scrollSpeed + 1);\r
+                       if (scrollSpeed < CDTXMania.Instance.ConfigIni.nScrollSpeed.Drums)\r
+                       {\r
+                               CDTXMania.Instance.ConfigIni.nJudgeLinePosOffset.Drums.Value = ((int)(f * (CDTXMania.Instance.ConfigIni.nScrollSpeed.Drums + 1) + 0.5));\r
                        }\r
                }\r
-               protected void t進行描画・コンボ()\r
+\r
+               private void ドラムスクロール速度ダウン()\r
                {\r
-                       this.actCombo.On進行描画();\r
+                       int scrollSpeed = CDTXMania.Instance.ConfigIni.nScrollSpeed.Drums;\r
+                       CDTXMania.Instance.ConfigIni.nScrollSpeed.Drums.Value = (scrollSpeed - 1);\r
+                       float f = (float)CDTXMania.Instance.ConfigIni.nJudgeLinePosOffset.Drums / (scrollSpeed + 1);\r
+                       if (scrollSpeed > CDTXMania.Instance.ConfigIni.nScrollSpeed.Drums)\r
+                       {\r
+                               CDTXMania.Instance.ConfigIni.nJudgeLinePosOffset.Drums.Value = ((int)(f * (CDTXMania.Instance.ConfigIni.nScrollSpeed.Drums + 1) + 0.5));\r
+                       }\r
                }\r
-               protected void t進行描画・スコア()\r
+\r
+               private int nStartTime_ = 0;\r
+\r
+               protected void tキー入力()\r
                {\r
-                       this.actScore.On進行描画();\r
+                       IInputDevice keyboard = CDTXMania.Instance.Input管理.Keyboard;\r
+                       if (keyboard.bキーが押された((int)SlimDX.DirectInput.Key.F1) &&\r
+                                       (keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.RightShift) || keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.LeftShift)))\r
+                       {   // shift+f1 (pause)\r
+                               this.bPAUSE = !this.bPAUSE;\r
+                               if (this.bPAUSE)\r
+                               {\r
+                                       nStartTime_ = (int)CSound管理.rc演奏用タイマ.n現在時刻;\r
+                                       CSound管理.rc演奏用タイマ.t一時停止();\r
+                                       CDTXMania.Instance.Timer.t一時停止();\r
+                                       CDTXMania.Instance.DTX.t全チップの再生一時停止();\r
+                                       CDTXMania.Instance.DTX.t全AVIの一時停止();\r
+                               }\r
+                               else\r
+                               {\r
+                                       CDTXMania.Instance.DTX.t全AVIの再生再開();\r
+                                       // CDTXMania.Instance.DTX.t全チップの再生再開();\r
+                                       #region [ PAUSE連打でのBGMずれ対策 (AVIはずれたままになるが無視・・・) ]\r
+\r
+                                       List<CSound> pausedCSound = new List<CSound>();\r
+                                       for (int i = this.n現在のトップChip; i >= 0; i--)\r
+                                       {\r
+                                               CChip pChip = CDTXMania.Instance.DTX.listChip[i];\r
+                                               int nDuration = pChip.GetDuration();\r
+\r
+                                               if ((pChip.n発声時刻ms + nDuration > 0) && (pChip.n発声時刻ms <= nStartTime_) && (nStartTime_ <= pChip.n発声時刻ms + nDuration))\r
+                                               {\r
+                                                       if (pChip.bWAVを使うチャンネルである && !pChip.b空打ちチップである) // wav系チャンネル、且つ、空打ちチップではない\r
+                                                       {\r
+                                                               CDTX.CWAV wc;\r
+                                                               bool b = CDTXMania.Instance.DTX.listWAV.TryGetValue(pChip.n整数値_内部番号, out wc);\r
+                                                               if (!b) continue;\r
+\r
+                                                               if ((wc.bIsBGMSound && CDTXMania.Instance.ConfigIni.bBGMPlay) || (!wc.bIsBGMSound))\r
+                                                               {\r
+                                                                       CDTXMania.Instance.DTX.tチップの再生(pChip, CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, CDTXMania.Instance.DTX.nモニタを考慮した音量(EPart.Unknown));\r
+                                                                       #region [ PAUSEする ]\r
+                                                                       int j = wc.n現在再生中のサウンド番号;\r
+                                                                       if (wc.rSound[j] != null)\r
+                                                                       {\r
+                                                                               wc.rSound[j].t再生を一時停止する();\r
+                                                                               wc.rSound[j].t再生位置を変更する(nStartTime_ - pChip.n発声時刻ms);\r
+                                                                               pausedCSound.Add(wc.rSound[j]);\r
+                                                                       }\r
+                                                                       #endregion\r
+                                                               }\r
+                                                       }\r
+                                               }\r
+                                       }\r
+                                       foreach (CSound cs in pausedCSound)\r
+                                       {\r
+                                               cs.tサウンドを再生する();\r
+                                       }\r
+\r
+                                       #endregion\r
+                                       CDTXMania.Instance.Timer.t再開();\r
+                                       CSound管理.rc演奏用タイマ.t再開();\r
+                               }\r
+                       }\r
+                       if ((!this.bPAUSE && (base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED)) && (base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト))\r
+                       {\r
+                               if (CDTXMania.Instance.ConfigIni.bDrums有効)\r
+                               {\r
+                                       this.t入力処理_ドラム();\r
+                               }\r
+                               if (CDTXMania.Instance.ConfigIni.bGuitar有効)\r
+                               {\r
+                                       this.t入力処理_ギターベース(EPart.Guitar);\r
+                                       this.t入力処理_ギターベース(EPart.Bass);\r
+                               }\r
+\r
+                               if (keyboard.bキーが押された((int)SlimDX.DirectInput.Key.UpArrow) && (keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.RightShift) || keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.LeftShift)))\r
+                               {   // shift (+ctrl) + UpArrow (BGMAdjust)\r
+                                       CDTXMania.Instance.DTX.t各自動再生音チップの再生時刻を変更する((keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.LeftControl) || keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.RightControl)) ? 1 : 10);\r
+                                       CDTXMania.Instance.DTX.tWave再生位置自動補正();\r
+                               }\r
+                               else if (keyboard.bキーが押された((int)SlimDX.DirectInput.Key.DownArrow) && (keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.RightShift) || keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.LeftShift)))\r
+                               {   // shift + DownArrow (BGMAdjust)\r
+                                       CDTXMania.Instance.DTX.t各自動再生音チップの再生時刻を変更する((keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.LeftControl) || keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.RightControl)) ? -1 : -10);\r
+                                       CDTXMania.Instance.DTX.tWave再生位置自動補正();\r
+                               }\r
+                               else if (keyboard.bキーが押された((int)SlimDX.DirectInput.Key.UpArrow))\r
+                               {   // UpArrow(scrollspeed up)\r
+                                       ドラムスクロール速度アップ();\r
+                               }\r
+                               else if (keyboard.bキーが押された((int)SlimDX.DirectInput.Key.DownArrow))\r
+                               {   // DownArrow (scrollspeed down)\r
+                                       ドラムスクロール速度ダウン();\r
+                               }\r
+                               else if (keyboard.bキーが押された((int)SlimDX.DirectInput.Key.Delete))\r
+                               {   // del (debug info)\r
+                                       CDTXMania.Instance.ConfigIni.bDebugInfo.Value = !CDTXMania.Instance.ConfigIni.bDebugInfo;\r
+                               }\r
+                               else if (keyboard.bキーが押された((int)SlimDX.DirectInput.Key.LeftArrow))      // #24243 2011.1.16 yyagi UI for InputAdjustTime in playing screen.\r
+                               {\r
+                                       ChangeInputAdjustTimeInPlaying(keyboard, -1);\r
+                               }\r
+                               else if (keyboard.bキーが押された((int)SlimDX.DirectInput.Key.RightArrow))     // #24243 2011.1.16 yyagi UI for InputAdjustTime in playing screen.\r
+                               {\r
+                                       ChangeInputAdjustTimeInPlaying(keyboard, +1);\r
+                               }\r
+                               else if (keyboard.bキーが押された((int)SlimDX.DirectInput.Key.F5))\r
+                               {\r
+                                       int nVal = CDTXMania.Instance.ConfigIni.nJudgeLinePosOffset.Drums - 1;\r
+                                       CDTXMania.Instance.ConfigIni.nJudgeLinePosOffset.Drums.Value =\r
+                                       CDTXMania.Instance.ConfigIni.nJudgeLinePosOffset.Guitar.Value =\r
+                                       CDTXMania.Instance.ConfigIni.nJudgeLinePosOffset.Bass.Value = nVal;\r
+                               }\r
+                               else if (keyboard.bキーが押された((int)SlimDX.DirectInput.Key.F6))\r
+                               {\r
+                                       int nVal = CDTXMania.Instance.ConfigIni.nJudgeLinePosOffset.Drums + 1;\r
+                                       CDTXMania.Instance.ConfigIni.nJudgeLinePosOffset.Drums.Value =\r
+                                       CDTXMania.Instance.ConfigIni.nJudgeLinePosOffset.Guitar.Value =\r
+                                       CDTXMania.Instance.ConfigIni.nJudgeLinePosOffset.Bass.Value = nVal;\r
+                               }\r
+                               else if ((base.eフェーズID == CStage.Eフェーズ.共通_通常状態) &&\r
+                                               (keyboard.bキーが押された((int)SlimDX.DirectInput.Key.Escape) ||\r
+                                               CDTXMania.Instance.Pad.bCancelPadIsPressedGB()))\r
+                               {\r
+                                       // escape (exit)\r
+                                       this.actFO.tフェードアウト開始();\r
+                                       base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;\r
+                                       this.eフェードアウト完了時の戻り値 = E演奏画面の戻り値.演奏中断;\r
+                               }\r
+                       }\r
                }\r
-               protected void t進行描画・ステータスパネル()\r
+\r
+               protected void t入力メソッド記憶(EPart part)\r
                {\r
-                       this.actStatusPanels.On進行描画();\r
+                       if (CDTXMania.Instance.Pad.st検知したデバイス.Keyboard)\r
+                       {\r
+                               this.b演奏にキーボードを使った[part] = true;\r
+                       }\r
+                       if (CDTXMania.Instance.Pad.st検知したデバイス.Joypad)\r
+                       {\r
+                               this.b演奏にジョイパッドを使った[part] = true;\r
+                       }\r
+                       if (CDTXMania.Instance.Pad.st検知したデバイス.MIDIIN)\r
+                       {\r
+                               this.b演奏にMIDI入力を使った[part] = true;\r
+                       }\r
+                       if (CDTXMania.Instance.Pad.st検知したデバイス.Mouse)\r
+                       {\r
+                               this.b演奏にマウスを使った[part] = true;\r
+                       }\r
                }\r
-               protected bool t進行描画・チップ( E楽器パート ePlayMode )\r
+\r
+               /// <summary>\r
+               /// チップに関連する処理を行う。\r
+               /// </summary>\r
+               /// <returns>演奏が終了したかどうかを示す値</returns>\r
+               protected bool t進行描画_チップ()\r
                {\r
-                       if ( ( base.eフェーズID == CStage.Eフェーズ.演奏_STAGE_FAILED ) || ( base.eフェーズID == CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) )\r
+                       if ((base.eフェーズID == CStage.Eフェーズ.演奏_STAGE_FAILED) || (base.eフェーズID == CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト))\r
                        {\r
                                return true;\r
                        }\r
-                       if ( ( this.n現在のトップChip == -1 ) || ( this.n現在のトップChip >= CDTXMania.DTX.listChip.Count ) )\r
+                       if ((this.n現在のトップChip == -1) || (this.n現在のトップChip >= CDTXMania.Instance.DTX.listChip.Count))\r
                        {\r
                                return true;\r
                        }\r
-                       int nCurrentTopChip = this.n現在のトップChip;\r
-                       if ( nCurrentTopChip == -1 )\r
+                       if (this.n現在のトップChip == -1)\r
                        {\r
                                return true;\r
                        }\r
 \r
-                       //double speed = 264.0; // BPM150の時の1小節の長さ[dot]\r
-                       double speed = 234.0;   // BPM150の時の1小節の長さ[dot]\r
-\r
-                       double ScrollSpeedDrums = ( this.act譜面スクロール速度.db現在の譜面スクロール速度.Drums + 1.0 ) * 0.5 * 37.5 * speed / 60000.0;\r
-                       double ScrollSpeedGuitar = ( this.act譜面スクロール速度.db現在の譜面スクロール速度.Guitar + 1.0 ) * 0.5 * 0.5 * 37.5 * speed / 60000.0;\r
-                       double ScrollSpeedBass = ( this.act譜面スクロール速度.db現在の譜面スクロール速度.Bass + 1.0 ) * 0.5 * 0.5 * 37.5 * speed / 60000.0;\r
-\r
-                       CDTX dTX = CDTXMania.DTX;\r
-                       CConfigIni configIni = CDTXMania.ConfigIni;\r
-                       while ( nCurrentTopChip < dTX.listChip.Count )\r
+                       //CDTX dTX = CDTXMania.Instance.DTX;\r
+                       //CConfigIni configIni = CDTXMania.Instance.ConfigIni;\r
+                       for (int nCurrentTopChip = this.n現在のトップChip; nCurrentTopChip < CDTXMania.Instance.DTX.listChip.Count; nCurrentTopChip++)\r
                        {\r
-                               CDTX.CChip pChip = dTX.listChip[ nCurrentTopChip ];\r
-                               pChip.nバーからの距離dot.Drums = (int) ( ( pChip.n発声時刻ms - CDTXMania.Timer.n現在時刻 ) * ScrollSpeedDrums );\r
-                               pChip.nバーからの距離dot.Guitar = (int) ( ( pChip.n発声時刻ms - CDTXMania.Timer.n現在時刻 ) * ScrollSpeedGuitar );\r
-                               pChip.nバーからの距離dot.Bass = (int) ( ( pChip.n発声時刻ms - CDTXMania.Timer.n現在時刻 ) * ScrollSpeedBass );\r
-                               if ( Math.Min( Math.Min( pChip.nバーからの距離dot.Drums, pChip.nバーからの距離dot.Guitar ), pChip.nバーからの距離dot.Bass ) > 450 )\r
+                               CChip pChip = CDTXMania.Instance.DTX.listChip[nCurrentTopChip];\r
+                               //Debug.WriteLine( "nCurrentTopChip=" + nCurrentTopChip + ", ch=" + pChip.nチャンネル番号.ToString("x2") + ", 発音位置=" + pChip.n発声位置 + ", 発声時刻ms=" + pChip.n発声時刻ms );\r
+                               pChip.CalcDistanceFromBar(CSound管理.rc演奏用タイマ.n現在時刻, this.act譜面スクロール速度.db現在の譜面スクロール速度);\r
+                               if (Math.Min(Math.Min(pChip.nバーからの距離dot.Drums, pChip.nバーからの距離dot.Guitar), pChip.nバーからの距離dot.Bass) > 450 * Scale.Y)\r
                                {\r
                                        break;\r
                                }\r
-                               if ( ( ( nCurrentTopChip == this.n現在のトップChip ) && ( pChip.nバーからの距離dot.Drums < -65 ) ) && pChip.bHit )\r
+                               // #28026 2012.4.5 yyagi; 信心ワールドエンドの曲終了後リザルトになかなか行かない問題の修正\r
+                               if ((CDTXMania.Instance.DTX.listChip[this.n現在のトップChip].nバーからの距離dot.Drums < -65 * Scale.Y) &&   // 小節線の消失処理などに影響するため、\r
+                                               (CDTXMania.Instance.DTX.listChip[this.n現在のトップChip].nバーからの距離dot.Guitar < -65 * Scale.Y) &&  // Drumsのスクロールスピードだけには依存させない。\r
+                                               (CDTXMania.Instance.DTX.listChip[this.n現在のトップChip].nバーからの距離dot.Bass < -65 * Scale.Y) &&\r
+                                               CDTXMania.Instance.DTX.listChip[this.n現在のトップChip].bHit)\r
                                {\r
-                                       this.n現在のトップChip++;\r
-                                       nCurrentTopChip = this.n現在のトップChip;\r
+                                       ++this.n現在のトップChip;\r
                                        continue;\r
                                }\r
+                               bool bPChipIsAutoPlay = pChip.bAssignAutoPlayState();\r
 \r
-                               bool bPChipIsAutoPlay = false;\r
-                               if ( (\r
-                                               ( ( pChip.e楽器パート == E楽器パート.DRUMS ) && CDTXMania.ConfigIni.bAutoPlay[ this.nチャンネル0Atoレーン07[ pChip.nチャンネル番号 - 0x11 ] ] ) ||\r
-                                               ( ( pChip.e楽器パート == E楽器パート.GUITAR ) && CDTXMania.ConfigIni.bAutoPlay.Guitar )\r
-                                       ) ||\r
-                                               ( ( pChip.e楽器パート == E楽器パート.BASS ) && CDTXMania.ConfigIni.bAutoPlay.Bass )\r
-                                 )\r
-                               //                              if ((pChip.e楽器パート == E楽器パート.DRUMS) && CDTXMania.ConfigIni.bAutoPlay[this.nチャンネル0Atoレーン07[pChip.nチャンネル番号 - 0x11]])\r
-                               {\r
-                                       bPChipIsAutoPlay = true;\r
-                               }\r
+                               int nInputAdjustTime = (bPChipIsAutoPlay || (pChip.e楽器パート == EPart.Unknown)) ? 0 : CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs[pChip.e楽器パート];\r
 \r
-                               int nInputAdjustTime = 0;\r
-                               if ( bPChipIsAutoPlay )\r
-                               {\r
-                                       //nInputAdjustTime = 0;\r
-                               }\r
-                               else if ( pChip.e楽器パート == E楽器パート.UNKNOWN )\r
+                               EPart inst = pChip.e楽器パート;\r
+                               if (((pChip.e楽器パート != EPart.Unknown) && !pChip.bHit) &&\r
+                                                               ((pChip.nバーからの距離dot[inst] < -40 * Scale.Y) &&\r
+                                               (this.e指定時刻からChipのJUDGEを返す(CSound管理.rc演奏用タイマ.n現在時刻, pChip, nInputAdjustTime) == EJudge.Miss)))\r
                                {\r
-                                       //nInputAdjustTime = 0;\r
+                                       this.tチップのヒット処理(CSound管理.rc演奏用タイマ.n現在時刻, pChip);    //チップ消失(Hitせずスルーした場合)\r
                                }\r
-                               else\r
+                               if (((pChip.e楽器パート != EPart.Unknown) && !pChip.bHit) &&\r
+                                               ((pChip.nバーからの距離dot[inst] + CDTXMania.Instance.ConfigIni.nJudgeLinePosOffset[inst] < 0)))\r
                                {\r
-                                       nInputAdjustTime = this.nInputAdjustTimeMs[ (int) pChip.e楽器パート ];\r
+                                       //Debug.WriteLine( "透明度=" + pChip.n透明度 );\r
+                                       pChip.n透明度 -= 12;       // チップが判定バーを越えたら、徐々に透明にする。VSyncWaitの有無で加減が変わるが・・\r
+                                       if (pChip.n透明度 < 0)\r
+                                       {\r
+                                               pChip.n透明度 = 0;\r
+                                       }\r
                                }\r
 \r
-                               if ( ( ( pChip.e楽器パート != E楽器パート.UNKNOWN ) && !pChip.bHit ) &&\r
-                                       ( ( pChip.nバーからの距離dot.Drums < 0 ) && ( this.e指定時刻からChipのJUDGEを返す( CDTXMania.Timer.n現在時刻, pChip, nInputAdjustTime ) == E判定.Miss ) ) )\r
-                               {\r
-                                       this.tチップのヒット処理( CDTXMania.Timer.n現在時刻, pChip );\r
-                               }\r
-                               switch ( pChip.nチャンネル番号 )\r
+                               // #35411 chnmr0 add (ターゲットゴースト)\r
+                               if (CDTXMania.Instance.ConfigIni.eTargetGhost[inst] != ETargetGhostData.None &&\r
+                                                                CDTXMania.Instance.DTX.listTargetGhsotLag[inst] != null &&\r
+                                                                pChip.e楽器パート != EPart.Unknown &&\r
+                                                                pChip.nバーからの距離dot[inst] < 0)\r
                                {\r
-                                       case 0x01:      // BGM\r
-                                               if ( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+                                       if (!pChip.bTargetGhost判定済み)\r
+                                       {\r
+                                               pChip.bTargetGhost判定済み = true;\r
+\r
+                                               int ghostLag = 128;\r
+                                               if (0 <= pChip.n楽器パートでの出現順 && pChip.n楽器パートでの出現順 < CDTXMania.Instance.DTX.listTargetGhsotLag[inst].Count)\r
                                                {\r
-                                                       pChip.bHit = true;\r
-                                                       if ( configIni.bBGM音を発声する )\r
+                                                       ghostLag = CDTXMania.Instance.DTX.listTargetGhsotLag[inst][pChip.n楽器パートでの出現順];\r
+                                                       // 上位8ビットが1ならコンボが途切れている(ギターBAD空打ちでコンボ数を再現するための措置)\r
+                                                       if (ghostLag > 255)\r
                                                        {\r
-                                                               dTX.tチップの再生( pChip, CDTXMania.Timer.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, 10, dTX.nモニタを考慮した音量( E楽器パート.UNKNOWN ) );\r
+                                                               this.nコンボ数_TargetGhost[inst] = 0;\r
                                                        }\r
+                                                       ghostLag = (ghostLag & 255) - 128;\r
                                                }\r
-                                               break;\r
-\r
-                                       case 0x03:      // BPM変更\r
-                                               if ( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+                                               else if (CDTXMania.Instance.ConfigIni.eTargetGhost[inst] == ETargetGhostData.Perfect)\r
                                                {\r
-                                                       pChip.bHit = true;\r
-                                                       this.actPlayInfo.dbBPM = ( pChip.n整数値 * ( ( (double) configIni.n演奏速度 ) / 20.0 ) ) + dTX.BASEBPM;\r
+                                                       ghostLag = 0;\r
                                                }\r
-                                               break;\r
 \r
-                                       case 0x04:      // レイヤーBGA\r
-                                       case 0x07:\r
-                                       case 0x55:\r
-                                       case 0x56:\r
-                                       case 0x57:\r
-                                       case 0x58:\r
-                                       case 0x59:\r
-                                       case 0x60:\r
-                                               if ( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+                                               if (ghostLag <= 127)\r
                                                {\r
-                                                       pChip.bHit = true;\r
-                                                       if ( configIni.bBGA有効 )\r
+                                                       EJudge eJudge = this.e指定時刻からChipのJUDGEを返す(pChip.n発声時刻ms + ghostLag, pChip, 0, false);\r
+                                                       this.nヒット数_TargetGhost[inst][(int)eJudge]++;\r
+                                                       if (eJudge == EJudge.Miss || eJudge == EJudge.Poor)\r
                                                        {\r
-                                                               switch ( pChip.eBGA種別 )\r
-                                                               {\r
-                                                                       case EBGA種別.BMPTEX:\r
-                                                                               if ( pChip.rBMPTEX != null )\r
-                                                                               {\r
-                                                                                       this.actBGA.Start( pChip.nチャンネル番号, null, pChip.rBMPTEX, pChip.rBMPTEX.tx画像.sz画像サイズ.Width, pChip.rBMPTEX.tx画像.sz画像サイズ.Height, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );\r
-                                                                               }\r
-                                                                               break;\r
-\r
-                                                                       case EBGA種別.BGA:\r
-                                                                               if ( ( pChip.rBGA != null ) && ( ( pChip.rBMP != null ) || ( pChip.rBMPTEX != null ) ) )\r
-                                                                               {\r
-                                                                                       this.actBGA.Start( pChip.nチャンネル番号, pChip.rBMP, pChip.rBMPTEX, pChip.rBGA.pt画像側右下座標.X - pChip.rBGA.pt画像側左上座標.X, pChip.rBGA.pt画像側右下座標.Y - pChip.rBGA.pt画像側左上座標.Y, 0, 0, pChip.rBGA.pt画像側左上座標.X, pChip.rBGA.pt画像側左上座標.Y, 0, 0, pChip.rBGA.pt表示座標.X, pChip.rBGA.pt表示座標.Y, 0, 0, 0 );\r
-                                                                               }\r
-                                                                               break;\r
-\r
-                                                                       case EBGA種別.BGAPAN:\r
-                                                                               if ( ( pChip.rBGAPan != null ) && ( ( pChip.rBMP != null ) || ( pChip.rBMPTEX != null ) ) )\r
-                                                                               {\r
-                                                                                       this.actBGA.Start( pChip.nチャンネル番号, pChip.rBMP, pChip.rBMPTEX, pChip.rBGAPan.sz開始サイズ.Width, pChip.rBGAPan.sz開始サイズ.Height, pChip.rBGAPan.sz終了サイズ.Width, pChip.rBGAPan.sz終了サイズ.Height, pChip.rBGAPan.pt画像側開始位置.X, pChip.rBGAPan.pt画像側開始位置.Y, pChip.rBGAPan.pt画像側終了位置.X, pChip.rBGAPan.pt画像側終了位置.Y, pChip.rBGAPan.pt表示側開始位置.X, pChip.rBGAPan.pt表示側開始位置.Y, pChip.rBGAPan.pt表示側終了位置.X, pChip.rBGAPan.pt表示側終了位置.Y, pChip.n総移動時間 );\r
-                                                                               }\r
-                                                                               break;\r
-\r
-                                                                       default:\r
-                                                                               if ( pChip.rBMP != null )\r
-                                                                               {\r
-                                                                                       this.actBGA.Start( pChip.nチャンネル番号, pChip.rBMP, null, pChip.rBMP.n幅, pChip.rBMP.n高さ, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );\r
-                                                                               }\r
-                                                                               break;\r
-                                                               }\r
+                                                               this.n最大コンボ数_TargetGhost[inst] = Math.Max(this.n最大コンボ数_TargetGhost[inst], this.nコンボ数_TargetGhost[inst]);\r
+                                                               this.nコンボ数_TargetGhost[inst] = 0;\r
                                                        }\r
-                                               }\r
-                                               break;\r
-\r
-                                       case 0x08:      // BPM変更(拡張)\r
-                                               if ( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
-                                               {\r
-                                                       pChip.bHit = true;\r
-                                                       if ( dTX.listBPM.ContainsKey( pChip.n整数値・内部番号 ) )\r
+                                                       else\r
                                                        {\r
-                                                               this.actPlayInfo.dbBPM = ( dTX.listBPM[ pChip.n整数値・内部番号 ].dbBPM値 * ( ( (double) configIni.n演奏速度 ) / 20.0 ) ) + dTX.BASEBPM;\r
+                                                               this.nコンボ数_TargetGhost[inst]++;\r
                                                        }\r
                                                }\r
-                                               break;\r
-\r
-                                       case 0x11:      // ドラム演奏\r
-                                       case 0x12:\r
-                                       case 0x13:\r
-                                       case 0x14:\r
-                                       case 0x15:\r
-                                       case 0x16:\r
-                                       case 0x17:\r
-                                       case 0x18:\r
-                                       case 0x19:\r
-                                       case 0x1a:\r
-                                               this.t進行描画・チップ・ドラムス( configIni, ref dTX, ref pChip );\r
-                                               break;\r
+                                       }\r
+                               }\r
 \r
-                                       case 0x1f:      // フィルインサウンド(ドラム)\r
-                                               if ( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+                               if (pChip[EChannel.BGM] && !pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
+                               {\r
+                                       pChip.bHit = true;\r
+                                       if (CDTXMania.Instance.ConfigIni.bBGMPlay)\r
+                                       {\r
+                                               //long t = CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms;\r
+                                               //Trace.TraceInformation( "BGM再生開始: 演奏タイマのn前回リセットしたときのシステム時刻=" + CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + ", pChip.n発生時刻ms=" + pChip.n発声時刻ms + ", 合計=" + t );\r
+                                               CDTXMania.Instance.DTX.tチップの再生(pChip, CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, CDTXMania.Instance.DTX.nモニタを考慮した音量(EPart.Unknown));\r
+                                       }\r
+                               }\r
+                               else if (pChip[EChannel.BPM] && !pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
+                               {\r
+                                       pChip.bHit = true;\r
+                                       this.actPlayInfo.dbBPM = (pChip.n整数値 * (((double)CDTXMania.Instance.ConfigIni.nPlaySpeed) / 20.0)) + CDTXMania.Instance.DTX.BASEBPM;\r
+                               }\r
+                               else if (pChip.bBGALayer && !pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
+                               {\r
+                                       pChip.bHit = true;\r
+                                       if (CDTXMania.Instance.ConfigIni.bBGA)\r
+                                       {\r
+                                               switch (pChip.eBGA種別)\r
                                                {\r
-                                                       pChip.bHit = true;\r
-                                                       this.r現在の歓声Chip.Drums = pChip;\r
-                                               }\r
-                                               break;\r
+                                                       case EBGAType.BMPTEX:\r
+                                                               if (pChip.rBMPTEX != null)\r
+                                                               {\r
+                                                                       this.actBGA.Start(pChip, null, pChip.rBMPTEX, pChip.rBMPTEX.tx画像.sz画像サイズ.Width, pChip.rBMPTEX.tx画像.sz画像サイズ.Height, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\r
+                                                               }\r
+                                                               break;\r
 \r
-                                       case 0x20:      // ギター演奏\r
-                                       case 0x21:\r
-                                       case 0x22:\r
-                                       case 0x23:\r
-                                       case 0x24:\r
-                                       case 0x25:\r
-                                       case 0x26:\r
-                                       case 0x27:\r
-                                               this.t進行描画・チップ・ギター( configIni, ref dTX, ref pChip );\r
-                                               break;\r
+                                                       case EBGAType.BGA:\r
+                                                               if ((pChip.rBGA != null) && ((pChip.rBMP != null) || (pChip.rBMPTEX != null)))\r
+                                                               {\r
+                                                                       this.actBGA.Start(pChip, pChip.rBMP, pChip.rBMPTEX, pChip.rBGA.pt画像側右下座標.X - pChip.rBGA.pt画像側左上座標.X, pChip.rBGA.pt画像側右下座標.Y - pChip.rBGA.pt画像側左上座標.Y, 0, 0, pChip.rBGA.pt画像側左上座標.X, pChip.rBGA.pt画像側左上座標.Y, 0, 0, pChip.rBGA.pt表示座標.X, pChip.rBGA.pt表示座標.Y, 0, 0, 0);\r
+                                                               }\r
+                                                               break;\r
 \r
-                                       case 0x28:      // ウェイリング(ギター)\r
-                                               this.t進行描画・チップ・ギター・ウェイリング( configIni, ref dTX, ref pChip );\r
-                                               break;\r
+                                                       case EBGAType.BGAPAN:\r
+                                                               if ((pChip.rBGAPan != null) && ((pChip.rBMP != null) || (pChip.rBMPTEX != null)))\r
+                                                               {\r
+                                                                       this.actBGA.Start(pChip, pChip.rBMP, pChip.rBMPTEX, pChip.rBGAPan.sz開始サイズ.Width, pChip.rBGAPan.sz開始サイズ.Height, pChip.rBGAPan.sz終了サイズ.Width, pChip.rBGAPan.sz終了サイズ.Height, pChip.rBGAPan.pt画像側開始位置.X, pChip.rBGAPan.pt画像側開始位置.Y, pChip.rBGAPan.pt画像側終了位置.X, pChip.rBGAPan.pt画像側終了位置.Y, pChip.rBGAPan.pt表示側開始位置.X, pChip.rBGAPan.pt表示側開始位置.Y, pChip.rBGAPan.pt表示側終了位置.X, pChip.rBGAPan.pt表示側終了位置.Y, pChip.n総移動時間);\r
+                                                               }\r
+                                                               break;\r
 \r
-                                       case 0x2f:      // ウェイリングサウンド(ギター)\r
-                                               if ( !pChip.bHit && ( pChip.nバーからの距離dot.Guitar < 0 ) )\r
-                                               {\r
-                                                       pChip.bHit = true;\r
-                                                       this.r現在の歓声Chip.Guitar = pChip;\r
+                                                       default:\r
+                                                               if (pChip.rBMP != null)\r
+                                                               {\r
+                                                                       this.actBGA.Start(pChip, pChip.rBMP, null, pChip.rBMP.n幅, pChip.rBMP.n高さ, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\r
+                                                               }\r
+                                                               break;\r
                                                }\r
-                                               break;\r
-\r
-                                       case 0x31:      // 不可視チップ配置(ドラム)\r
-                                       case 0x32:\r
-                                       case 0x33:\r
-                                       case 0x34:\r
-                                       case 0x35:\r
-                                       case 0x36:\r
-                                       case 0x37:\r
-                                       case 0x38:\r
-                                       case 0x39:\r
-                                       case 0x3a:\r
-                                               if ( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+                                       }\r
+                               }\r
+                               else if (pChip[EChannel.BPMEx] && !pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
+                               {\r
+                                       pChip.bHit = true;\r
+                                       if (CDTXMania.Instance.DTX.listBPM.ContainsKey(pChip.n整数値_内部番号))\r
+                                       {\r
+                                               this.actPlayInfo.dbBPM = (CDTXMania.Instance.DTX.listBPM[pChip.n整数値_内部番号].dbBPM値 *\r
+                                                               (((double)CDTXMania.Instance.ConfigIni.nPlaySpeed) / 20.0)) +\r
+                                                               CDTXMania.Instance.DTX.BASEBPM;\r
+                                       }\r
+                               }\r
+                               else if (pChip.bDrums可視チップ && pChip.b空打ちチップである)\r
+                               {\r
+                                       if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
+                                       {\r
+                                               pChip.bHit = true;\r
+                                               if (CDTXMania.Instance.ConfigIni.bDrums有効)\r
                                                {\r
-                                                       pChip.bHit = true;\r
+                                                       this.r現在の空うちドラムChip[(int)(EnumConverter.PadFromChannel(pChip.eチャンネル番号) - EPad.DrumsPadMin)] = pChip;\r
                                                }\r
-                                               break;\r
-\r
-                                       case 0x50:      // 小節線\r
+                                       }\r
+                               }\r
+                               else if (pChip.bDrums可視チップ_LP_LBD含まない)\r
+                               {\r
+                                       this.t進行描画_チップ_ドラムス(ref pChip);\r
+                               }\r
+                               else if (pChip[EChannel.DrumsFillin] && !pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
+                               {\r
+                                       pChip.bHit = true;\r
+                                       this.r現在の歓声Chip.Drums = pChip;\r
+                               }\r
+                               else if (pChip.bGuitar可視チップ)\r
+                               {\r
+                                       this.t進行描画_チップ_ギターベース(ref pChip, EPart.Guitar);\r
+                               }\r
+                               else if (pChip[EChannel.Guitar_Wailing])\r
+                               {\r
+                                       this.t進行描画_チップ_ウェイリング(ref pChip);\r
+                               }\r
+                               else if (pChip[EChannel.Guitar_WailingSound] && !pChip.bHit && (pChip.nバーからの距離dot.Guitar < 0))\r
+                               {\r
+                                       pChip.bHit = true;\r
+                                       this.r現在の歓声Chip.Guitar = pChip;\r
+                               }\r
+                               else if (pChip.bDrums不可視チップ && !pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
+                               {\r
+                                       pChip.bHit = true;\r
+                               }\r
+                               else if (pChip[EChannel.BarLine] || pChip[EChannel.BeatLine])// 小節線\r
+                               {\r
+                                       this.t進行描画_チップ_小節線_拍線(ref pChip);\r
+                               }\r
+                               else if (pChip[EChannel.MIDIChorus] && !pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
+                               {\r
+                                       pChip.bHit = true;\r
+                               }\r
+                               else if (pChip[EChannel.FillIn])\r
+                               {\r
+                                       this.t進行描画_チップ_フィルイン(ref pChip);\r
+                               }\r
+                               else if (pChip.bMovie && !pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
+                               {\r
+                                       pChip.bHit = true;\r
+                                       if (CDTXMania.Instance.ConfigIni.bAVI)\r
+                                       {\r
+                                               if (CDTXMania.Instance.DTX.bチップがある.BGA)\r
                                                {\r
-                                                       this.t進行描画・チップ・小節線( configIni, ref dTX, ref pChip );\r
-                                                       break;\r
+                                                       this.actAVI.bHasBGA = true;\r
                                                }\r
-                                       case 0x51:      // 拍線\r
-                                               if ( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+                                               if (pChip.eチャンネル番号 == EChannel.MovieFull || CDTXMania.Instance.ConfigIni.bFullAVI)\r
                                                {\r
-                                                       pChip.bHit = true;\r
+                                                       this.actAVI.bFullScreenMovie = true;\r
                                                }\r
-                                               if ( ( ePlayMode == E楽器パート.DRUMS ) && ( configIni.eDark != Eダークモード.FULL ) && pChip.b可視 && ( this.txチップ != null ) )\r
+                                               switch (pChip.eAVI種別)\r
                                                {\r
-                                                       this.txチップ.t2D描画( CDTXMania.app.Device, 0x23, configIni.bReverse.Drums ? ( ( 0x38 + pChip.nバーからの距離dot.Drums ) - 1 ) : ( ( 0x1a6 - pChip.nバーからの距離dot.Drums ) - 1 ), new Rectangle( 0, 0x1bf, 0x128, 1 ) );\r
-                                               }\r
-                                               break;\r
+                                                       case EAVIType.AVI:\r
+                                                               {\r
+                                                                       int startWidth = !this.actAVI.bFullScreenMovie ? 278 : SampleFramework.GameWindowSize.Width;\r
+                                                                       int startHeight = !this.actAVI.bFullScreenMovie ? 355 : SampleFramework.GameWindowSize.Height;\r
+                                                                       this.actAVI.Start(pChip.eチャンネル番号, pChip.rAVI, startWidth, startHeight, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, pChip.n発声時刻ms);\r
+                                                               }\r
+                                                               break;\r
 \r
-                                       case 0x52:      // MIDIコーラス\r
-                                               if ( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
-                                               {\r
-                                                       pChip.bHit = true;\r
+                                                       case EAVIType.AVIPAN:\r
+                                                               if (pChip.rAVIPan != null)\r
+                                                               {\r
+                                                                       this.actAVI.Start(pChip.eチャンネル番号, pChip.rAVI, pChip.rAVIPan.sz開始サイズ.Width, pChip.rAVIPan.sz開始サイズ.Height, pChip.rAVIPan.sz終了サイズ.Width, pChip.rAVIPan.sz終了サイズ.Height, pChip.rAVIPan.pt動画側開始位置.X, pChip.rAVIPan.pt動画側開始位置.Y, pChip.rAVIPan.pt動画側終了位置.X, pChip.rAVIPan.pt動画側終了位置.Y, pChip.rAVIPan.pt表示側開始位置.X, pChip.rAVIPan.pt表示側開始位置.Y, pChip.rAVIPan.pt表示側終了位置.X, pChip.rAVIPan.pt表示側終了位置.Y, pChip.n総移動時間, pChip.n発声時刻ms);\r
+                                                               }\r
+                                                               break;\r
                                                }\r
-                                               break;\r
-\r
-                                       case 0x53:      // フィルイン\r
-                                               this.t進行描画・チップ・フィルイン( configIni, ref dTX, ref pChip );\r
-                                               break;\r
+                                       }\r
+                               }\r
+                               else if (pChip.bSE && !pChip.bOverrideSE && !pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
+                               {\r
+                                       pChip.bHit = true;\r
+                                       if (CDTXMania.Instance.ConfigIni.bBGMPlay)\r
+                                       {\r
+                                               CDTXMania.Instance.DTX.tWavの再生停止(this.n最後に再生したBGMの実WAV番号[pChip.eチャンネル番号 - EChannel.SE01]);\r
+                                               CDTXMania.Instance.DTX.tチップの再生(pChip, CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, CDTXMania.Instance.DTX.nモニタを考慮した音量(EPart.Unknown));\r
+                                               this.n最後に再生したBGMの実WAV番号[pChip.eチャンネル番号 - EChannel.SE01] = pChip.n整数値_内部番号;\r
+                                       }\r
+                               }\r
+                               else if (pChip.bOverrideSE && !pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
+                               {\r
+                                       // override sound\r
+                                       // mute sound (auto)\r
+                                       // 4A: 84: HH (HO/HC)\r
+                                       // 4B: 85: CY\r
+                                       // 4C: 86: RD\r
+                                       // 4D: 87: LC\r
+                                       // 2A: 88: Gt\r
+                                       // AA: 89: Bs\r
+\r
+                                       //      CDTXMania.Instance.DTX.tWavの再生停止( this.n最後に再生した実WAV番号.Guitar );\r
+                                       //      CDTXMania.Instance.DTX.tチップの再生( pChip, n再生開始システム時刻ms, 8, n音量, bモニタ, b音程をずらして再生 );\r
+                                       //      this.n最後に再生した実WAV番号.Guitar = pChip.n整数値_内部番号;\r
+\r
+                                       //      protected void tサウンド再生( CDTX.CChip pChip, long n再生開始システム時刻ms, E楽器パート part, int n音量, bool bモニタ, bool b音程をずらして再生 )\r
+                                       pChip.bHit = true;\r
+                                       EPart[] p = { EPart.Drums, EPart.Drums, EPart.Drums, EPart.Drums, EPart.Guitar, EPart.Bass };\r
+\r
+                                       EPart pp = p[pChip.eチャンネル番号 - EChannel.SE24];\r
+\r
+                                       //                                                      if ( pp == E楽器パート.DRUMS ) {                   // pChip.nチャンネル番号= ..... HHとか、ドラムの場合は変える。\r
+                                       //                                                              //            HC    CY    RD    LC\r
+                                       //                                                              int[] ch = { 0x11, 0x16, 0x19, 0x1A };\r
+                                       //                                                              pChip.nチャンネル番号 = ch[ pChip.nチャンネル番号 - 0x84 ]; \r
+                                       //                                                      }\r
+                                       this.tサウンド再生(pChip, CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, pp, CDTXMania.Instance.DTX.nモニタを考慮した音量(pp));\r
+                               }\r
+\r
+                               else if (pChip.bBass可視チップ)\r
+                               {\r
+                                       this.t進行描画_チップ_ギターベース(ref pChip, EPart.Bass);\r
+                               }\r
+                               else if (pChip[EChannel.Bass_Wailing])\r
+                               {\r
+                                       this.t進行描画_チップ_ウェイリング(ref pChip);\r
+                               }\r
+                               else if (pChip[EChannel.Bass_WailingSound] && !pChip.bHit && (pChip.nバーからの距離dot.Bass < 0))\r
+                               {\r
+                                       pChip.bHit = true;\r
+                                       this.r現在の歓声Chip.Bass = pChip;\r
+                               }\r
+                               else if (pChip[EChannel.Guitar_NoChip] && !pChip.bHit && (pChip.nバーからの距離dot.Guitar < 0))\r
+                               {\r
+                                       pChip.bHit = true;\r
+                                       this.r現在の空うちギターChip = pChip;\r
+                                       pChip.ConvertGBNoChip();\r
+                               }\r
+                               else if (pChip[EChannel.Bass_NoChip] && !pChip.bHit && (pChip.nバーからの距離dot.Bass < 0))\r
+                               {\r
+                                       pChip.bHit = true;\r
+                                       this.r現在の空うちベースChip = pChip;\r
+                                       pChip.ConvertGBNoChip();\r
+                               }\r
+                               else if (pChip.bBGALayerSwap && !pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
+                               {\r
+                                       pChip.bHit = true;\r
+                                       if ((CDTXMania.Instance.ConfigIni.bBGA && (pChip.eBGA種別 == EBGAType.BMP)) || (pChip.eBGA種別 == EBGAType.BMPTEX))\r
+                                       {\r
+                                               this.actBGA.ChangeScope(pChip);\r
+                                       }\r
+                               }\r
+                               else if (pChip[EChannel.MixerAdd] && !pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
+                               {\r
+                                       //Debug.WriteLine( "[DA(AddMixer)] BAR=" + pChip.n発声位置 / 384 + " ch=" + pChip.nチャンネル番号.ToString( "x2" ) + ", wav=" + pChip.n整数値.ToString( "x2" ) + ", time=" + pChip.n発声時刻ms );\r
+                                       pChip.bHit = true;\r
+                                       if (CDTXMania.Instance.DTX.listWAV.ContainsKey(pChip.n整数値_内部番号))    // 参照が遠いので後日最適化する\r
+                                       {\r
+                                               CDTX.CWAV wc = CDTXMania.Instance.DTX.listWAV[pChip.n整数値_内部番号];\r
+                                               //Debug.Write( "[AddMixer] BAR=" + pChip.n発声位置 / 384 + ", wav=" + Path.GetFileName( wc.strファイル名 ) + ", time=" + pChip.n発声時刻ms );\r
 \r
-                                       case 0x54:      // 動画再生\r
-                                               if ( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+                                               for (int i = 0; i < CDTXMania.Instance.ConfigIni.nPolyphonicSounds; i++)\r
                                                {\r
-                                                       pChip.bHit = true;\r
-                                                       if ( configIni.bAVI有効 )\r
+                                                       if (wc.rSound[i] != null)\r
                                                        {\r
-                                                               switch ( pChip.eAVI種別 )\r
-                                                               {\r
-                                                                       case EAVI種別.AVI:\r
-                                                                               if ( pChip.rAVI != null )\r
-                                                                               {\r
-                                                                                       this.actAVI.Start( pChip.nチャンネル番号, pChip.rAVI, 0x116, 0x163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, pChip.n発声時刻ms );\r
-                                                                               }\r
-                                                                               break;\r
-\r
-                                                                       case EAVI種別.AVIPAN:\r
-                                                                               if ( pChip.rAVIPan != null )\r
-                                                                               {\r
-                                                                                       this.actAVI.Start( pChip.nチャンネル番号, pChip.rAVI, pChip.rAVIPan.sz開始サイズ.Width, pChip.rAVIPan.sz開始サイズ.Height, pChip.rAVIPan.sz終了サイズ.Width, pChip.rAVIPan.sz終了サイズ.Height, pChip.rAVIPan.pt動画側開始位置.X, pChip.rAVIPan.pt動画側開始位置.Y, pChip.rAVIPan.pt動画側終了位置.X, pChip.rAVIPan.pt動画側終了位置.Y, pChip.rAVIPan.pt表示側開始位置.X, pChip.rAVIPan.pt表示側開始位置.Y, pChip.rAVIPan.pt表示側終了位置.X, pChip.rAVIPan.pt表示側終了位置.Y, pChip.n総移動時間, pChip.n発声時刻ms );\r
-                                                                               }\r
-                                                                               break;\r
-                                                               }\r
+                                                               //CDTXMania.Instance.Sound管理.AddMixer( wc.rSound[ i ] );\r
+                                                               AddMixer(wc.rSound[i], pChip.b演奏終了後も再生が続くチップである);\r
                                                        }\r
+                                                       //else\r
+                                                       //{\r
+                                                       //    Debug.WriteLine( ", nPoly=" + i + ", Mix=" + CDTXMania.Instance.Sound管理.GetMixingStreams() );\r
+                                                       //    break;\r
+                                                       //}\r
+                                                       //if ( i == nPolyphonicSounds - 1 )\r
+                                                       //{\r
+                                                       //    Debug.WriteLine( ", nPoly=" + nPolyphonicSounds + ", Mix=" + CDTXMania.Instance.Sound管理.GetMixingStreams() );\r
+                                                       //}\r
                                                }\r
-                                               break;\r
-\r
-                                       case 0x61:\r
-                                       case 0x62:\r
-                                       case 0x63:\r
-                                       case 0x64:      // 自動再生(BGM, SE)\r
-                                       case 0x65:\r
-                                       case 0x66:\r
-                                       case 0x67:\r
-                                       case 0x68:\r
-                                       case 0x69:\r
-                                       case 0x70:\r
-                                       case 0x71:\r
-                                       case 0x72:\r
-                                       case 0x73:\r
-                                       case 0x74:\r
-                                       case 0x75:\r
-                                       case 0x76:\r
-                                       case 0x77:\r
-                                       case 0x78:\r
-                                       case 0x79:\r
-                                       case 0x80:\r
-                                       case 0x81:\r
-                                       case 0x82:\r
-                                       case 0x83:\r
-                                       case 0x84:\r
-                                       case 0x85:\r
-                                       case 0x86:\r
-                                       case 0x87:\r
-                                       case 0x88:\r
-                                       case 0x89:\r
-                                       case 0x90:\r
-                                       case 0x91:\r
-                                       case 0x92:\r
-                                               if ( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+                                       }\r
+                               }\r
+                               else if (pChip[EChannel.MixerRemove] && !pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
+                               {\r
+                                       //Debug.WriteLine( "[DB(RemoveMixer)] BAR=" + pChip.n発声位置 / 384 + " ch=" + pChip.nチャンネル番号.ToString( "x2" ) + ", wav=" + pChip.n整数値.ToString( "x2" ) + ", time=" + pChip.n発声時刻ms );\r
+                                       pChip.bHit = true;\r
+                                       if (CDTXMania.Instance.DTX.listWAV.ContainsKey(pChip.n整数値_内部番号))    // 参照が遠いので後日最適化する\r
+                                       {\r
+                                               CDTX.CWAV wc = CDTXMania.Instance.DTX.listWAV[pChip.n整数値_内部番号];\r
+                                               //Debug.Write( "[DelMixer] BAR=" + pChip.n発声位置 / 384 +  ", wav=" + Path.GetFileName( wc.strファイル名 ) + ", time=" + pChip.n発声時刻ms );\r
+                                               for (int i = 0; i < CDTXMania.Instance.ConfigIni.nPolyphonicSounds; i++)\r
                                                {\r
-                                                       pChip.bHit = true;\r
-                                                       if ( configIni.bBGM音を発声する )\r
+                                                       if (wc.rSound[i] != null)\r
                                                        {\r
-                                                               dTX.tWavの再生停止( this.n最後に再生したBGMの実WAV番号[ pChip.nチャンネル番号 - 0x61 ] );\r
-                                                               dTX.tチップの再生( pChip, CDTXMania.Timer.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, 10, dTX.nモニタを考慮した音量( E楽器パート.UNKNOWN ) );\r
-                                                               this.n最後に再生したBGMの実WAV番号[ pChip.nチャンネル番号 - 0x61 ] = pChip.n整数値・内部番号;\r
+                                                               //CDTXMania.Instance.Sound管理.RemoveMixer( wc.rSound[ i ] );\r
+                                                               if (!wc.rSound[i].b演奏終了後も再生が続くチップである)   // #32248 2013.10.16 yyagi\r
+                                                               {                                                           // DTX終了後も再生が続くチップの0xDB登録をなくすことはできず。\r
+                                                                       RemoveMixer(wc.rSound[i]);                          // (ミキサー解除のタイミングが遅延する場合の対応が面倒なので。)\r
+                                                               }                                                           // そこで、代わりにフラグをチェックしてミキサー削除ロジックへの遷移をカットする。\r
                                                        }\r
+                                                       //else\r
+                                                       //{\r
+                                                       //    Debug.WriteLine( ", nPoly=" + i + ", Mix=" + CDTXMania.Instance.Sound管理.GetMixingStreams() );\r
+                                                       //    break;\r
+                                                       //}\r
+                                                       //if ( i == nPolyphonicSounds - 1 )\r
+                                                       //{\r
+                                                       //    Debug.WriteLine( ", nPoly=" + nPolyphonicSounds + ", Mix=" + CDTXMania.Instance.Sound管理.GetMixingStreams() );\r
+                                                       //}\r
                                                }\r
-                                               break;\r
+                                       }\r
+                               }\r
+                               else if ( pChip[ EChannel.Click ] && !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+                               {\r
+                                       pChip.bHit = true;\r
+                                       if ( CDTXMania.Instance.ConfigIni.eClickType != EClickType.Off )\r
+                                       {\r
+                                               switch (pChip.n整数値)\r
+                                               {\r
+                                                       case 1:\r
+                                                               CDTXMania.Instance.Skin.soundClickHigh.t再生する();\r
+                                                               break;\r
+                                                       case 2:\r
+                                                               CDTXMania.Instance.Skin.soundClickLow.t再生する();\r
+                                                               break;\r
+                                               }\r
+                                       }\r
+                               }\r
+                               else if ( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+                               {\r
+                                       // other chips\r
+                                       pChip.bHit = true;\r
+                               }\r
+                       }\r
+                       return false;\r
+               }\r
 \r
-                                       case 0xa0:      // ベース演奏\r
-                                       case 0xa1:\r
-                                       case 0xa2:\r
-                                       case 0xa3:\r
-                                       case 0xa4:\r
-                                       case 0xa5:\r
-                                       case 0xa6:\r
-                                       case 0xa7:\r
-                                               this.t進行描画・チップ・ベース( configIni, ref dTX, ref pChip );\r
-                                               break;\r
+               public void t再読込()\r
+               {\r
+                       CDTXMania.Instance.DTX.t全チップの再生停止とミキサーからの削除();\r
+                       this.eフェードアウト完了時の戻り値 = E演奏画面の戻り値.再読込_再演奏;\r
+                       base.eフェーズID = CStage.Eフェーズ.演奏_再読込;\r
+                       this.bPAUSE = false;\r
 \r
-                                       case 0xa8:      // ウェイリング(ベース)\r
-                                               this.t進行描画・チップ・ベース・ウェイリング( configIni, ref dTX, ref pChip );\r
-                                               break;\r
+                       // #34048 2014.7.16 yyagi\r
+                       #region [ 読み込み画面に遷移する前に、設定変更した可能性があるパラメータをConfigIniクラスに書き戻す ]\r
+                       for (EPart i = EPart.Drums; i <= EPart.Bass; i++)\r
+                       {\r
+                               CDTXMania.Instance.ConfigIni.nViewerScrollSpeed[i] = CDTXMania.Instance.ConfigIni.nScrollSpeed[i];\r
+                       }\r
+                       CDTXMania.Instance.ConfigIni.bDebugInfo = CDTXMania.Instance.ConfigIni.bViewerShowDebugStatus;\r
+                       #endregion\r
+               }\r
 \r
-                                       case 0xaf:      // ウェイリングサウンド(ベース)\r
-                                               if ( !pChip.bHit && ( pChip.nバーからの距離dot.Bass < 0 ) )\r
-                                               {\r
-                                                       pChip.bHit = true;\r
-                                                       this.r現在の歓声Chip.Bass = pChip;\r
-                                               }\r
-                                               break;\r
+               public void t停止()\r
+               {\r
+                       CDTXMania.Instance.DTX.t全チップの再生停止とミキサーからの削除();\r
+                       this.actAVI.Stop();\r
+                       this.actBGA.Stop();\r
+                       this.actPanel.Stop();               // PANEL表示停止\r
+                       CDTXMania.Instance.Timer.t一時停止();       // 再生時刻カウンタ停止\r
 \r
-                                       case 0xb1:      // 空打ち音設定(ドラム)\r
-                                       case 0xb2:\r
-                                       case 0xb3:\r
-                                       case 0xb4:\r
-                                       case 0xb5:\r
-                                       case 0xb6:\r
-                                       case 0xb7:\r
-                                       case 0xb8:\r
-                                       case 0xb9:\r
-                                       case 0xbc:\r
-                                               this.t進行描画・チップ・空打ち音設定・ドラム( configIni, ref dTX, ref pChip );\r
-                                               break;\r
+                       this.n現在のトップChip = CDTXMania.Instance.DTX.listChip.Count - 1;   // 終端にシーク\r
 \r
-                                       case 0xba:      // 空打ち音設定(ギター)\r
-                                               if ( !pChip.bHit && ( pChip.nバーからの距離dot.Guitar < 0 ) )\r
-                                               {\r
-                                                       pChip.bHit = true;\r
-                                                       this.r現在の空うちギターChip = pChip;\r
-                                                       pChip.nチャンネル番号 = 0x20;\r
-                                               }\r
-                                               break;\r
+                       // 自分自身のOn活性化()相当の処理もすべき。\r
+               }\r
 \r
-                                       case 0xbb:      // 空打ち音設定(ベース)\r
-                                               if ( !pChip.bHit && ( pChip.nバーからの距離dot.Bass < 0 ) )\r
-                                               {\r
-                                                       pChip.bHit = true;\r
-                                                       this.r現在の空うちベースChip = pChip;\r
-                                                       pChip.nチャンネル番号 = 0xA0;\r
-                                               }\r
-                                               break;\r
+               /// <summary>\r
+               /// 演奏位置を変更する。\r
+               /// </summary>\r
+               /// <param name="nStartBar">演奏開始小節番号</param>\r
+               /// <param name="bResetHitStatus">演奏済み情報(bHit)をクリアするかどうか</param>\r
+               public void t演奏位置の変更(int nStartBar)\r
+               {\r
+                       // まず全サウンドオフにする\r
+                       CDTXMania.Instance.DTX.t全チップの再生停止();\r
+                       this.actAVI.Stop();\r
+                       this.actBGA.Stop();\r
 \r
-                                       case 0xc4:\r
-                                       case 0xc7:\r
-                                       case 0xd5:\r
-                                       case 0xd6:      // BGA画像入れ替え\r
-                                       case 0xd7:\r
-                                       case 0xd8:\r
-                                       case 0xd9:\r
-                                       case 0xe0:\r
-                                               if ( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
-                                               {\r
-                                                       pChip.bHit = true;\r
-                                                       if ( ( configIni.bBGA有効 && ( pChip.eBGA種別 == EBGA種別.BMP ) ) || ( pChip.eBGA種別 == EBGA種別.BMPTEX ) )\r
-                                                       {\r
-                                                               for ( int i = 0; i < 8; i++ )\r
-                                                               {\r
-                                                                       if ( this.nBGAスコープチャンネルマップ[ 0, i ] == pChip.nチャンネル番号 )\r
-                                                                       {\r
-                                                                               this.actBGA.ChangeScope( this.nBGAスコープチャンネルマップ[ 1, i ], pChip.rBMP, pChip.rBMPTEX );\r
-                                                                       }\r
-                                                               }\r
-                                                       }\r
-                                               }\r
-                                               break;\r
+                       #region [ 再生開始小節の変更 ]\r
+                       // +1が必要\r
+                       nStartBar++;\r
 \r
-                                       default:\r
-                                               if ( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
-                                               {\r
-                                                       pChip.bHit = true;\r
-                                               }\r
-                                               break;\r
+                       #region [ 演奏済みフラグのついたChipをリセットする ]\r
+                       for (int i = 0; i < CDTXMania.Instance.DTX.listChip.Count; i++)\r
+                       {\r
+                               CChip pChip = CDTXMania.Instance.DTX.listChip[i];\r
+                               if (pChip.bHit)\r
+                               {\r
+                                       CChip p = (CChip)pChip.Clone();\r
+                                       p.bHit = false;\r
+                                       CDTXMania.Instance.DTX.listChip[i] = p;\r
                                }\r
-\r
-                               nCurrentTopChip++;\r
                        }\r
-                       return false;\r
-               }\r
-               protected abstract void t進行描画・チップ・ドラムス( CConfigIni configIni, ref CDTX dTX, ref CDTX.CChip pChip );\r
-               protected abstract void t進行描画・チップ・ギター( CConfigIni configIni, ref CDTX dTX, ref CDTX.CChip pChip );\r
-               protected virtual void t進行描画・チップ・ギター・ウェイリング( CConfigIni configIni, ref CDTX dTX, ref CDTX.CChip pChip )\r
-               {\r
-                       if ( configIni.bGuitar有効 )\r
+                       #endregion\r
+\r
+                       #region [ 処理を開始するチップの特定 ]\r
+                       //for ( int i = this.n現在のトップChip; i < CDTXMania.Instance.DTX.listChip.Count; i++ )\r
+                       bool bSuccessSeek = false;\r
+                       for (int i = 0; i < CDTXMania.Instance.DTX.listChip.Count; i++)\r
                        {\r
-                               if ( configIni.bSudden.Guitar )\r
+                               CChip pChip = CDTXMania.Instance.DTX.listChip[i];\r
+                               if (pChip.n発声位置 < 384 * nStartBar)\r
                                {\r
-                                       pChip.b可視 = pChip.nバーからの距離dot.Guitar < 200;\r
+                                       continue;\r
                                }\r
-                               if ( configIni.bHidden.Guitar && ( pChip.nバーからの距離dot.Guitar < 100 ) )\r
+                               else\r
                                {\r
-                                       pChip.b可視 = false;\r
+                                       bSuccessSeek = true;\r
+                                       this.n現在のトップChip = i;\r
+                                       break;\r
                                }\r
-                               //\r
-                               // ここにチップ更新処理が入る(overrideで入れる)。といっても座標とチップサイズが違うだけで処理はまるまる同じ。\r
-                               //\r
-                               if ( !pChip.bHit && ( pChip.nバーからの距離dot.Guitar < 0 ) )\r
+                       }\r
+                       if (!bSuccessSeek)\r
+                       {\r
+                               // this.n現在のトップChip = CDTXMania.Instance.DTX.listChip.Count - 1;\r
+                               this.n現在のトップChip = 0;       // 対象小節が存在しないなら、最初から再生\r
+                       }\r
+                       #endregion\r
+\r
+                       #region [ 演奏開始の発声時刻msを取得し、タイマに設定 ]\r
+                       int nStartTime = CDTXMania.Instance.DTX.listChip[this.n現在のトップChip].n発声時刻ms;\r
+\r
+                       CSound管理.rc演奏用タイマ.tリセット();  // これでPAUSE解除されるので、次のPAUSEチェックは不要\r
+                                                                                                                                       //if ( !this.bPAUSE )\r
+                                                                                                                                       //{\r
+                       CSound管理.rc演奏用タイマ.t一時停止();\r
+                       //}\r
+                       CSound管理.rc演奏用タイマ.n現在時刻 = nStartTime;\r
+                       #endregion\r
+\r
+                       List<CSound> pausedCSound = new List<CSound>();\r
+\r
+                       #region [ BGMやギターなど、演奏開始のタイミングで再生がかかっているサウンドのの途中再生開始 ] // (CDTXのt入力・行解析・チップ配置()で小節番号が+1されているのを削っておくこと)\r
+                       for (int i = this.n現在のトップChip; i >= 0; i--)\r
+                       {\r
+                               CChip pChip = CDTXMania.Instance.DTX.listChip[i];\r
+                               int nDuration = pChip.GetDuration();\r
+\r
+                               if ((pChip.n発声時刻ms + nDuration > 0) && (pChip.n発声時刻ms <= nStartTime) && (nStartTime <= pChip.n発声時刻ms + nDuration))\r
                                {\r
-                                       if ( pChip.nバーからの距離dot.Guitar < -234 )    // #25253 2011.5.29 yyagi: Don't set pChip.bHit=true for wailing at once. It need to 1sec-delay (234pix per 1sec). \r
+                                       if (pChip.bWAVを使うチャンネルである && !pChip.b空打ちチップである) // wav系チャンネル、且つ、空打ちチップではない\r
                                        {\r
-                                               pChip.bHit = true;\r
-                                       }\r
-                                       if ( configIni.bAutoPlay.Guitar )\r
-                                       {\r
-                                               pChip.bHit = true;                                                      // #25253 2011.5.29 yyagi: Set pChip.bHit=true if autoplay.\r
-                                               this.actWailingBonus.Start( E楽器パート.GUITAR, this.r現在の歓声Chip.Guitar );\r
+                                               CDTX.CWAV wc;\r
+                                               bool b = CDTXMania.Instance.DTX.listWAV.TryGetValue(pChip.n整数値_内部番号, out wc);\r
+                                               if (!b) continue;\r
+\r
+                                               if ((wc.bIsBGMSound && CDTXMania.Instance.ConfigIni.bBGMPlay) || (!wc.bIsBGMSound))\r
+                                               {\r
+                                                       CDTXMania.Instance.DTX.tチップの再生(pChip, CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, CDTXMania.Instance.DTX.nモニタを考慮した音量(EPart.Unknown));\r
+                                                       #region [ PAUSEする ]\r
+                                                       int j = wc.n現在再生中のサウンド番号;\r
+                                                       if (wc.rSound[j] != null)\r
+                                                       {\r
+                                                               wc.rSound[j].t再生を一時停止する();\r
+                                                               wc.rSound[j].t再生位置を変更する(nStartTime - pChip.n発声時刻ms);\r
+                                                               pausedCSound.Add(wc.rSound[j]);\r
+                                                       }\r
+                                                       #endregion\r
+                                               }\r
                                        }\r
                                }\r
-                               return;\r
                        }\r
-                       pChip.bHit = true;\r
+                       #endregion\r
+                       #region [ 演奏開始時点で既に表示されているBGAとAVIの、シークと再生 ]\r
+                       this.actBGA.SkipStart(nStartTime);\r
+                       this.actAVI.SkipStart(nStartTime);\r
+                       #endregion\r
+                       #region [ PAUSEしていたサウンドを一斉に再生再開する(ただしタイマを止めているので、ここではまだ再生開始しない) ]\r
+                       foreach (CSound cs in pausedCSound)\r
+                       {\r
+                               cs.tサウンドを再生する();\r
+                       }\r
+                       pausedCSound.Clear();\r
+                       pausedCSound = null;\r
+                       #endregion\r
+                       #region [ タイマを再開して、PAUSEから復帰する ]\r
+                       CSound管理.rc演奏用タイマ.n現在時刻 = nStartTime;\r
+                       CDTXMania.Instance.Timer.tリセット();                       // これでPAUSE解除されるので、3行先の再開()は不要\r
+                       CDTXMania.Instance.Timer.n現在時刻 = nStartTime;                // Debug表示のTime: 表記を正しくするために必要\r
+                       CSound管理.rc演奏用タイマ.t再開();\r
+                       //CDTXMania.Instance.Timer.t再開();\r
+                       this.bPAUSE = false;                                // システムがPAUSE状態だったら、強制解除\r
+                       this.actPanel.Start();\r
+                       #endregion\r
+                       #endregion\r
+               }\r
+\r
 \r
+               /// <summary>\r
+               /// DTXV用の設定をする。(全AUTOなど)\r
+               /// 元の設定のバックアップなどはしないので、あとでConfig.iniを上書き保存しないこと。\r
+               /// </summary>\r
+               protected void tDTXV用の設定()\r
+               {\r
+                       for (EPad i = EPad.Min; i < EPad.Max; ++i)\r
+                       {\r
+                               CDTXMania.Instance.ConfigIni.bAutoPlay[i].Value = true;\r
+                       }\r
+                       CDTXMania.Instance.ConfigIni.bAVI.Value = true;\r
+                       CDTXMania.Instance.ConfigIni.bBGA.Value = true;\r
+                       for (EPart i = EPart.Drums; i <= EPart.Bass; i++)\r
+                       {\r
+                               CDTXMania.Instance.ConfigIni.bGraph[i].Value = false;\r
+                               CDTXMania.Instance.ConfigIni.eSudHidInv[i].Value = ESudHidInv.Off;\r
+                               CDTXMania.Instance.ConfigIni.bLight[i].Value = false;\r
+                               CDTXMania.Instance.ConfigIni.bReverse[i].Value = false;\r
+                               CDTXMania.Instance.ConfigIni.eRandom[i].Value = ERandom.Off;\r
+                               CDTXMania.Instance.ConfigIni.nMinComboDisp[i].Value = 65535;\r
+                               CDTXMania.Instance.ConfigIni.bDisplayJudge[i].Value = false;\r
+                               CDTXMania.Instance.ConfigIni.bDisplayCombo[i].Value = false;\r
+                       }\r
+                       CDTXMania.Instance.ConfigIni.eDark.Value = EDark.Off;\r
+                       CDTXMania.Instance.ConfigIni.bDebugInfo.Value = CDTXMania.Instance.ConfigIni.bViewerShowDebugStatus;\r
+                       CDTXMania.Instance.ConfigIni.bFillin.Value = true;\r
+                       CDTXMania.Instance.ConfigIni.bScoreIni.Value = false;\r
+                       CDTXMania.Instance.ConfigIni.bStageFailed.Value = false;\r
+                       CDTXMania.Instance.ConfigIni.bTight.Value = false;\r
+                       CDTXMania.Instance.ConfigIni.bStoicMode.Value = false;\r
+                       CDTXMania.Instance.ConfigIni.bDrumsHitSound.Value = true;\r
+                       CDTXMania.Instance.ConfigIni.bBGMPlay.Value = true;\r
+                       CDTXMania.Instance.ConfigIni.nRisky.Value = 0;\r
+                       CDTXMania.Instance.ConfigIni.nShowLagType.Value = EShowLagType.Off;\r
                }\r
-               protected abstract void t進行描画・チップ・フィルイン( CConfigIni configIni, ref CDTX dTX, ref CDTX.CChip pChip );\r
-               protected abstract void t進行描画・チップ・小節線( CConfigIni configIni, ref CDTX dTX, ref CDTX.CChip pChip );\r
-               protected abstract void t進行描画・チップ・ベース( CConfigIni configIni, ref CDTX dTX, ref CDTX.CChip pChip );\r
-               protected virtual void t進行描画・チップ・ベース・ウェイリング( CConfigIni configIni, ref CDTX dTX, ref CDTX.CChip pChip )\r
+\r
+               private void t進行描画_チップ_ウェイリング(ref CChip pChip)\r
                {\r
-                       if ( configIni.bGuitar有効 )\r
+                       if (CDTXMania.Instance.ConfigIni.bGuitar有効)\r
                        {\r
-                               if ( configIni.bSudden.Bass)\r
+                               EPart indexInst = pChip.bGuitar可視チップ_Wailing含む ? EPart.Guitar : EPart.Bass;\r
+                               #region [ Sud Hid Inv 処理 ]\r
+                               if (\r
+                                       CDTXMania.Instance.ConfigIni.eSudHidInv[indexInst] == ESudHidInv.FullInv ||\r
+                                       CDTXMania.Instance.ConfigIni.eSudHidInv[indexInst] == ESudHidInv.SemiInv)\r
                                {\r
-                                       pChip.b可視 = pChip.nバーからの距離dot.Bass < 200;\r
+                                       cInvisibleChip.SetInvisibleStatus(ref pChip);\r
                                }\r
-                               if ( configIni.bHidden.Bass && ( pChip.nバーからの距離dot.Bass < 100 ) )\r
+                               else\r
                                {\r
-                                       pChip.b可視 = false;\r
+                                       if (CDTXMania.Instance.ConfigIni.eSudHidInv[indexInst] == ESudHidInv.Sudden ||\r
+                                               CDTXMania.Instance.ConfigIni.eSudHidInv[indexInst] == ESudHidInv.SudHid)\r
+                                       {\r
+                                               pChip.b可視 = (pChip.nバーからの距離dot[indexInst] < CDTXMania.Instance.ConfigIni.nSuddenFrom[indexInst]);\r
+                                       }\r
+                                       if (CDTXMania.Instance.ConfigIni.eSudHidInv[indexInst] == ESudHidInv.Hidden ||\r
+                                               CDTXMania.Instance.ConfigIni.eSudHidInv[indexInst] == ESudHidInv.SudHid)\r
+                                       {\r
+                                               pChip.b可視 = pChip.nバーからの距離dot[indexInst] >= CDTXMania.Instance.ConfigIni.nHiddenFrom[indexInst];\r
+                                       }\r
                                }\r
-                               //\r
-                               // ここにチップ更新処理が入る(overrideで入れる)。といっても座標とチップサイズが違うだけで処理はまるまる同じ。\r
-                               //\r
-                               if ( !pChip.bHit && ( pChip.nバーからの距離dot.Bass < 0 ) )\r
+                               #endregion\r
+                               cWailingChip[(int)indexInst].t進行描画_チップ_ウェイリング(ref pChip, ref txチップGB, ref ctWailingチップ模様アニメ);\r
+\r
+                               if (!pChip.bHit && (pChip.nバーからの距離dot[indexInst] < 0))\r
                                {\r
-                                       if ( pChip.nバーからの距離dot.Bass < -234 )              // #25253 2011.5.29 yyagi: Don't set pChip.bHit=true for wailing at once. It need to 1sec-delay (234pix per 1sec).\r
+                                       if (pChip.nバーからの距離dot[indexInst] < -234 * Scale.Y)  // #25253 2011.5.29 yyagi: Don't set pChip.bHit=true for wailing at once. It need to 1sec-delay (234pix per 1sec). \r
                                        {\r
                                                pChip.bHit = true;\r
                                        }\r
-                                       //\r
-                                       // ここにチップ更新処理が入る(overrideで入れる)。といっても座標とチップサイズが違うだけで処理はまるまる同じ。\r
-                                       //\r
-                                       \r
-                                       if ( configIni.bAutoPlay.Bass )\r
+                                       bool autoW = (indexInst == EPart.Guitar) ? CDTXMania.Instance.ConfigIni.bAutoPlay.GtWail : CDTXMania.Instance.ConfigIni.bAutoPlay.BsWail;\r
+                                       if (autoW)\r
                                        {\r
-                                               this.actWailingBonus.Start( E楽器パート.BASS, this.r現在の歓声Chip.Bass );\r
-                                               pChip.bHit = true;                                                      // #25253 2011.5.29 yyagi: Set pChip.bHit=true if autoplay.\r
+                                               // #25253 2011.5.29 yyagi: Set pChip.bHit=true if autoplay.\r
+                                               // pChip.bHit = true;\r
+                                               // this.actWailingBonus.Start( inst, this.r現在の歓声Chip[indexInst] );\r
+                                               // #23886 2012.5.22 yyagi; To support auto Wailing; Don't do wailing for ALL wailing chips. Do wailing for queued wailing chip.\r
+                                               // wailing chips are queued when 1) manually wailing and not missed at that time 2) AutoWailing=ON and not missed at that time\r
+                                               long nTimeStamp_Wailed = pChip.n発声時刻ms + CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻;\r
+                                               DoWailingFromQueue(indexInst, nTimeStamp_Wailed, autoW);\r
                                        }\r
+                                       cInvisibleChip.StartSemiInvisible(indexInst);\r
                                }\r
                                return;\r
                        }\r
                        pChip.bHit = true;\r
                }\r
-               protected abstract void t進行描画・チップ・空打ち音設定・ドラム( CConfigIni configIni, ref CDTX dTX, ref CDTX.CChip pChip );\r
-               protected void t進行描画チップアニメ()\r
+\r
+               protected void t進行描画_チップアニメ()\r
                {\r
-                       for ( int i = 0; i < 3; i++ )                   // drums: 0-3 gt/bs: 1-3\r
+                       for (EPart i = EPart.Drums; i <= EPart.Bass; i++)            // 0=drums, 1=guitar, 2=bass\r
                        {\r
-                               if ( this.ctチップ模様アニメ[ i ] != null )\r
+                               if (this.ctチップ模様アニメ[i] != null)\r
                                {\r
-                                       this.ctチップ模様アニメ[ i ].t進行Loop();\r
+                                       this.ctチップ模様アニメ[i].t進行Loop();\r
                                }\r
                        }\r
-                       this.ctWailingチップ模様アニメ.t進行Loop();\r
+                       if (this.ctWailingチップ模様アニメ != null)\r
+                       {\r
+                               this.ctWailingチップ模様アニメ.t進行Loop();\r
+                       }\r
                }\r
 \r
-               protected bool t進行描画・フェードイン・アウト()\r
+               protected bool t進行描画_フェードイン_アウト()\r
                {\r
-                       switch ( base.eフェーズID )\r
+                       switch (base.eフェーズID)\r
                        {\r
                                case CStage.Eフェーズ.共通_フェードイン:\r
-                                       if ( this.actFI.On進行描画() != 0 )\r
+                                       if (this.actFI.On進行描画() != 0)\r
                                        {\r
                                                base.eフェーズID = CStage.Eフェーズ.共通_通常状態;\r
                                        }\r
@@ -1950,550 +3462,412 @@ namespace DTXMania
 \r
                                case CStage.Eフェーズ.共通_フェードアウト:\r
                                case CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト:\r
-                                       if ( this.actFO.On進行描画() != 0 )\r
+                                       if (this.actFO.On進行描画() != 0)\r
                                        {\r
                                                return true;\r
                                        }\r
                                        break;\r
 \r
                                case CStage.Eフェーズ.演奏_STAGE_CLEAR_フェードアウト:\r
-                                       if ( this.actFOClear.On進行描画() == 0 )\r
+                                       if (this.actFOClear.On進行描画() == 0)\r
                                        {\r
                                                break;\r
                                        }\r
                                        return true;\r
-               \r
+\r
                        }\r
                        return false;\r
                }\r
-               protected void t進行描画・レーンフラッシュD()\r
-               {\r
-                       if ( ( ( CDTXMania.ConfigIni.eDark != Eダークモード.HALF ) && ( CDTXMania.ConfigIni.eDark != Eダークモード.FULL ) ) && ( ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) ) )\r
-                       {\r
-                               this.actLaneFlushD.On進行描画();\r
-                       }\r
-               }\r
-               protected void t進行描画・レーンフラッシュGB()\r
-               {\r
-                       if ( ( ( CDTXMania.ConfigIni.eDark != Eダークモード.HALF ) && ( CDTXMania.ConfigIni.eDark != Eダークモード.FULL ) ) && CDTXMania.ConfigIni.bGuitar有効 )\r
-                       {\r
-                               this.actLaneFlushGB.On進行描画();\r
-                       }\r
-               }\r
-               protected abstract void t進行描画・演奏情報();\r
-               protected void t進行描画・演奏情報(int x, int y)\r
-               {\r
-                       if ( !CDTXMania.ConfigIni.b演奏情報を表示しない )\r
-                       {\r
-                               this.actPlayInfo.t進行描画( x, y );\r
-                       }\r
-               }\r
-               protected void t進行描画・背景()\r
+\r
+               protected virtual void t入力処理_ギターベース(EPart inst)\r
                {\r
-                       if ( CDTXMania.ConfigIni.eDark == Eダークモード.OFF )\r
-                       {\r
-                               if ( this.tx背景 != null )\r
+                       #region [ スクロール速度変更 ]\r
+                       int scrollSpeed = CDTXMania.Instance.ConfigIni.nScrollSpeed[inst];\r
+                       bool scrollSpeedChanged = false;\r
+                       float f = (float)CDTXMania.Instance.ConfigIni.nJudgeLinePosOffset[inst] / (scrollSpeed + 1);\r
+                       if (\r
+                               CDTXMania.Instance.Pad.b押されている(inst == EPart.Guitar ? EPad.GtDecide : EPad.BsDecide) &&\r
+                               CDTXMania.Instance.Pad.b押された(inst == EPart.Guitar ? EPad.GtB : EPad.BsB)\r
+                               )\r
+                       {\r
+                               CDTXMania.Instance.ConfigIni.nScrollSpeed[inst].Value = scrollSpeed + 1;\r
+                               if (scrollSpeed < CDTXMania.Instance.ConfigIni.nScrollSpeed[inst])\r
                                {\r
-                                       this.tx背景.t2D描画( CDTXMania.app.Device, 0, 0 );\r
+                                       scrollSpeedChanged = true;\r
                                }\r
                        }\r
-                       else\r
-                       {\r
-                               CDTXMania.app.Device.Clear( ClearFlags.ZBuffer | ClearFlags.Target, Color.Black, 0f, 0 );\r
-                       }\r
-               }\r
-\r
-               protected void t進行描画・判定ライン()\r
-               {\r
-                       if ( CDTXMania.ConfigIni.eDark != Eダークモード.FULL )\r
+                       if (\r
+                               CDTXMania.Instance.Pad.b押されている(inst == EPart.Guitar ? EPad.GtDecide : EPad.BsDecide) &&\r
+                               CDTXMania.Instance.Pad.b押された(inst == EPart.Guitar ? EPad.GtR : EPad.BsR)\r
+                               )\r
                        {\r
-                               int y = CDTXMania.ConfigIni.bReverse.Drums ? 0x35 : 0x1a3;\r
-                               for ( int i = 0x20; i < 0x14f; i += 8 )\r
+                               CDTXMania.Instance.ConfigIni.nScrollSpeed[inst].Value = scrollSpeed - 1;\r
+                               if (scrollSpeed > CDTXMania.Instance.ConfigIni.nScrollSpeed[inst])\r
                                {\r
-                                       if ( this.txヒットバー != null )\r
-                                       {\r
-                                               this.txヒットバー.t2D描画( CDTXMania.app.Device, i, y, new Rectangle( 0, 0, ( ( i + 8 ) >= 0x14f ) ? ( 7 - ( ( i + 8 ) - 0x14f ) ) : 8, 8 ) );\r
-                                       }\r
+                                       scrollSpeedChanged = true;\r
                                }\r
                        }\r
-               }\r
-               protected void t進行描画・判定文字列()\r
-               {\r
-                       this.actJudgeString.On進行描画();\r
-               }\r
-               protected void t進行描画・判定文字列1・通常位置指定の場合()\r
-               {\r
-                       if ( ( (E判定文字表示位置) CDTXMania.ConfigIni.判定文字表示位置.Drums ) != E判定文字表示位置.判定ライン上または横 )\r
+                       if (scrollSpeedChanged)\r
                        {\r
-                               this.actJudgeString.On進行描画();\r
+                               // 判定ラインも付随\r
+                               CDTXMania.Instance.ConfigIni.nJudgeLinePosOffset[inst].Value = (int)(f * CDTXMania.Instance.ConfigIni.nScrollSpeed[inst] + 0.5);\r
                        }\r
-               }\r
-               protected void t進行描画・判定文字列2・判定ライン上指定の場合()\r
-               {\r
-                       if ( ( (E判定文字表示位置) CDTXMania.ConfigIni.判定文字表示位置.Drums ) == E判定文字表示位置.判定ライン上または横 )\r
+                       #endregion\r
+\r
+                       if (!CDTXMania.Instance.ConfigIni.bGuitar有効 || !CDTXMania.Instance.DTX.bチップがある[inst])\r
                        {\r
-                               this.actJudgeString.On進行描画();\r
+                               return;\r
                        }\r
-               }\r
-\r
-               protected void t進行描画・譜面スクロール速度()\r
-               {\r
-                       this.act譜面スクロール速度.On進行描画();\r
-               }\r
-\r
-               protected abstract void t背景テクスチャの生成();\r
-               protected void t背景テクスチャの生成( string DefaultBgFilename, Rectangle bgrect, string bgfilename )\r
-               {\r
-                       Bitmap image = null;\r
-                       bool flag = true;\r
 \r
-                       if ( bgfilename != null && File.Exists( bgfilename ) )\r
-                       {\r
-                               try\r
-                               {\r
-                                       Bitmap bitmap2 = null;\r
-                                       bitmap2 = new Bitmap( bgfilename );\r
-                                       if ( ( bitmap2.Size.Width == 0 ) && ( bitmap2.Size.Height == 0 ) )\r
-                                       {\r
-                                               this.tx背景 = null;\r
-                                               return;\r
-                                       }\r
-                                       Bitmap bitmap3 = new Bitmap( 640, 480 );\r
-                                       Graphics graphics = Graphics.FromImage( bitmap3 );\r
-                                       for ( int i = 0; i < 480; i += bitmap2.Size.Height )\r
-                                       {\r
-                                               for ( int j = 0; j < 640; j += bitmap2.Size.Width )\r
-                                               {\r
-                                                       graphics.DrawImage( bitmap2, j, i, bitmap2.Width, bitmap2.Height );\r
-                                               }\r
-                                       }\r
-                                       graphics.Dispose();\r
-                                       bitmap2.Dispose();\r
-                                       image = new Bitmap( CSkin.Path( DefaultBgFilename ) );\r
-                                       graphics = Graphics.FromImage( image );\r
-                                       ColorMatrix matrix2 = new ColorMatrix();\r
-                                       matrix2.Matrix00 = 1f;\r
-                                       matrix2.Matrix11 = 1f;\r
-                                       matrix2.Matrix22 = 1f;\r
-                                       matrix2.Matrix33 = ( (float) CDTXMania.ConfigIni.n背景の透過度 ) / 255f;\r
-                                       matrix2.Matrix44 = 1f;\r
-                                       ColorMatrix newColorMatrix = matrix2;\r
-                                       ImageAttributes imageAttr = new ImageAttributes();\r
-                                       imageAttr.SetColorMatrix( newColorMatrix );\r
-                                       graphics.DrawImage( bitmap3, new Rectangle( 0, 0, 640, 480 ), 0, 0, 640, 480, GraphicsUnit.Pixel, imageAttr );\r
-                                       imageAttr.Dispose();\r
-                                       graphics.DrawImage( bitmap3, bgrect, bgrect.X, bgrect.Y, bgrect.Width, bgrect.Height, GraphicsUnit.Pixel );\r
-                                       graphics.Dispose();\r
-                                       bitmap3.Dispose();\r
-                                       flag = false;\r
-                               }\r
-                               catch\r
+                       int R = (inst == EPart.Guitar) ? 0 : 3;\r
+                       int G = R + 1;\r
+                       int B = R + 2;\r
+                       bool autoW = (inst == EPart.Guitar) ? CDTXMania.Instance.ConfigIni.bAutoPlay.GtWail : CDTXMania.Instance.ConfigIni.bAutoPlay.BsWail;\r
+                       bool autoR = (inst == EPart.Guitar) ? CDTXMania.Instance.ConfigIni.bAutoPlay.GtR : CDTXMania.Instance.ConfigIni.bAutoPlay.BsR;\r
+                       bool autoG = (inst == EPart.Guitar) ? CDTXMania.Instance.ConfigIni.bAutoPlay.GtG : CDTXMania.Instance.ConfigIni.bAutoPlay.BsG;\r
+                       bool autoB = (inst == EPart.Guitar) ? CDTXMania.Instance.ConfigIni.bAutoPlay.GtB : CDTXMania.Instance.ConfigIni.bAutoPlay.BsB;\r
+                       bool autoPick = (inst == EPart.Guitar) ? CDTXMania.Instance.ConfigIni.bAutoPlay.GtPick : CDTXMania.Instance.ConfigIni.bAutoPlay.BsPick;\r
+                       int nAutoW = (autoW) ? 8 : 0;\r
+                       int nAutoR = (autoR) ? 4 : 0;\r
+                       int nAutoG = (autoG) ? 2 : 0;\r
+                       int nAutoB = (autoB) ? 1 : 0;\r
+                       int nAutoMask = nAutoW | nAutoR | nAutoG | nAutoB;\r
+\r
+                       CChip chip = this.r次に来る指定楽器Chipを更新して返す(inst);\r
+                       if (chip != null)\r
+                       {\r
+                               if ((chip.bGuitarBass_R) && autoR)\r
                                {\r
-                                       Trace.TraceError( "背景画像の読み込みに失敗しました。({0})", new object[] { bgfilename } );\r
+                                       this.actLaneFlushGB.Start(R);\r
+                                       this.actRGB.Push(R);\r
                                }\r
-                       }\r
-                       if ( flag )\r
-                       {\r
-                               bgfilename = CSkin.Path( DefaultBgFilename );\r
-                               try\r
+                               if ((chip.bGuitarBass_G) && autoG)\r
                                {\r
-                                       image = new Bitmap( bgfilename );\r
+                                       this.actLaneFlushGB.Start(G);\r
+                                       this.actRGB.Push(G);\r
                                }\r
-                               catch\r
+                               if ((chip.bGuitarBass_B) && autoB)\r
                                {\r
-                                       Trace.TraceError( "背景画像の読み込みに失敗しました。({0})", new object[] { bgfilename } );\r
-                                       this.tx背景 = null;\r
-                                       return;\r
+                                       this.actLaneFlushGB.Start(B);\r
+                                       this.actRGB.Push(B);\r
                                }\r
                        }\r
-                       if ( ( CDTXMania.DTX.listBMP.Count > 0 ) || ( CDTXMania.DTX.listBMPTEX.Count > 0 ) )\r
-                       {\r
-                               Graphics graphics2 = Graphics.FromImage( image );\r
-                               graphics2.FillRectangle( Brushes.Black, bgrect.X, bgrect.Y, bgrect.Width, bgrect.Height );\r
-                               graphics2.Dispose();\r
-                       }\r
-                       try\r
-                       {\r
-                               this.tx背景 = new CTexture( CDTXMania.app.Device, image, CDTXMania.TextureFormat );\r
-                       }\r
-                       catch ( CTextureCreateFailedException )\r
+\r
+                       int pressingR = CDTXMania.Instance.Pad.b押されている(inst == EPart.Guitar ? EPad.GtR : EPad.BsR) ? 4 : 0;\r
+                       this.t入力メソッド記憶(inst);\r
+                       int pressingG = CDTXMania.Instance.Pad.b押されている(inst == EPart.Guitar ? EPad.GtG : EPad.BsG) ? 2 : 0;\r
+                       this.t入力メソッド記憶(inst);\r
+                       int pressingB = CDTXMania.Instance.Pad.b押されている(inst == EPart.Guitar ? EPad.GtB : EPad.BsB) ? 1 : 0;\r
+                       this.t入力メソッド記憶(inst);\r
+                       int pressingRGB = pressingR | pressingG | pressingB;\r
+                       if (pressingR != 0)\r
                        {\r
-                               Trace.TraceError( "背景テクスチャの生成に失敗しました。" );\r
-                               this.tx背景 = null;\r
+                               this.actLaneFlushGB.Start(R);\r
+                               this.actRGB.Push(R);\r
                        }\r
-                       image.Dispose();\r
-               }\r
-\r
-               protected virtual void t入力処理・ギター()\r
-               {\r
-                       if ( CDTXMania.Pad.b押されている( E楽器パート.GUITAR, Eパッド.Decide ) && CDTXMania.Pad.b押された( E楽器パート.GUITAR, Eパッド.B ) )\r
+                       if (pressingG != 0)\r
                        {\r
-                               CDTXMania.ConfigIni.n譜面スクロール速度.Guitar = Math.Min( CDTXMania.ConfigIni.n譜面スクロール速度.Guitar + 1, 0x7cf );\r
+                               this.actLaneFlushGB.Start(G);\r
+                               this.actRGB.Push(G);\r
                        }\r
-                       if ( CDTXMania.Pad.b押されている( E楽器パート.GUITAR, Eパッド.Decide ) && CDTXMania.Pad.b押された( E楽器パート.GUITAR, Eパッド.R ) )\r
+                       if (pressingB != 0)\r
                        {\r
-                               CDTXMania.ConfigIni.n譜面スクロール速度.Guitar = Math.Max( CDTXMania.ConfigIni.n譜面スクロール速度.Guitar - 1, 0 );\r
+                               this.actLaneFlushGB.Start(B);\r
+                               this.actRGB.Push(B);\r
                        }\r
-\r
-                       if ( CDTXMania.ConfigIni.bGuitar有効 && CDTXMania.DTX.bチップがある.Guitar )\r
+                       // auto pickだとここから先に行かないので注意\r
+                       List<STInputEvent> events = CDTXMania.Instance.Pad.GetEvents(inst == EPart.Guitar ? EPad.GtPick : EPad.BsPick);\r
+                       if ((events != null) && (events.Count > 0))\r
                        {\r
-                               if ( bIsAutoPlay.Guitar )\r
+                               foreach (STInputEvent eventPick in events)\r
                                {\r
-                                       CDTX.CChip chip = this.r次にくるギターChipを更新して返す();\r
-                                       if ( chip != null )\r
+                                       if (!eventPick.b押された)\r
+                                       {\r
+                                               continue;\r
+                                       }\r
+                                       this.t入力メソッド記憶(inst);\r
+                                       long nTime = eventPick.nTimeStamp - CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻;\r
+                                       EChannel chWailingSound = (inst == EPart.Guitar) ? EChannel.Guitar_WailingSound : EChannel.Bass_WailingSound;\r
+\r
+                                       // WailingSound チャンネルでE楽器パート.GUITARなチップ全てにヒットする\r
+                                       CChip pChip = this.r指定時刻に一番近い未ヒットChip(\r
+                                                       nTime, chWailingSound,\r
+                                                       CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs[inst],\r
+                                                       CDTXMania.Instance.nPoor範囲ms + 1);\r
+\r
+                                       EJudge e判定 = this.e指定時刻からChipのJUDGEを返す(nTime, pChip,\r
+                                                       CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs[inst]);\r
+                                       //Trace.TraceInformation("ch={0:x2}, mask1={1:x1}, mask2={2:x2}", pChip.nチャンネル番号,  ( pChip.nチャンネル番号 & ~nAutoMask ) & 0x0F, ( flagRGB & ~nAutoMask) & 0x0F );\r
+                                       if (\r
+                                                       (pChip != null) &&\r
+                                                       ((((int)pChip.eチャンネル番号 & ~nAutoMask) & 0x0F) == ((pressingRGB & ~nAutoMask) & 0x0F)) &&\r
+                                                       (e判定 != EJudge.Miss))\r
                                        {\r
-                                               if ( ( chip.nチャンネル番号 & 4 ) != 0 )\r
+                                               bool bChipHasR = pChip.bGuitarBass_R;\r
+                                               bool bChipHasG = pChip.bGuitarBass_G;\r
+                                               bool bChipHasB = pChip.bGuitarBass_B;\r
+                                               bool bChipHasW = pChip.bGuitarBass_Wailing;\r
+                                               bool bChipIsO = pChip.bGuitarBass_Open;\r
+                                               bool bSuccessOPEN = bChipIsO && (autoR || pressingR == 0) && (autoG || pressingG == 0) && (autoB || pressingB == 0);\r
+                                               if ((bChipHasR && (autoR || pressingR != 0)) || bSuccessOPEN)\r
                                                {\r
-                                                       this.actLaneFlushGB.Start( 0 );\r
-                                                       this.actRGB.Push( 0 );\r
+                                                       this.actChipFireGB.Start(R);\r
                                                }\r
-                                               if ( ( chip.nチャンネル番号 & 2 ) != 0 )\r
+                                               if ((bChipHasG && (autoG || pressingG != 0)) || bSuccessOPEN)\r
                                                {\r
-                                                       this.actLaneFlushGB.Start( 1 );\r
-                                                       this.actRGB.Push( 1 );\r
+                                                       this.actChipFireGB.Start(G);\r
                                                }\r
-                                               if ( ( chip.nチャンネル番号 & 1 ) != 0 )\r
+                                               if ((bChipHasB && (autoB || pressingB != 0)) || bSuccessOPEN)\r
                                                {\r
-                                                       this.actLaneFlushGB.Start( 2 );\r
-                                                       this.actRGB.Push( 2 );\r
+                                                       this.actChipFireGB.Start(B);\r
                                                }\r
+                                               this.tチップのヒット処理(nTime, pChip);\r
+                                               this.tサウンド再生(pChip, CSound管理.rc演奏用タイマ.nシステム時刻, inst, CDTXMania.Instance.ConfigIni.nChipVolume, CDTXMania.Instance.ConfigIni.bEmphasizePlaySound[inst], e判定 == EJudge.Poor);\r
+                                               EChannel chWailingChip = (inst == EPart.Guitar) ? EChannel.Guitar_Wailing : EChannel.Bass_Wailing;\r
+                                               CChip item = this.r指定時刻に一番近い未ヒットChip(nTime, chWailingChip, CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs[inst], 140);\r
+                                               if (item != null)\r
+                                               {\r
+                                                       this.queWailing[inst].Enqueue(item);\r
+                                               }\r
+                                               continue;\r
                                        }\r
-                               }\r
-                               else\r
-                               {\r
-                                       int flagR = CDTXMania.Pad.b押されている( E楽器パート.GUITAR, Eパッド.R ) ? 4 : 0;\r
-                                       this.t入力メソッド記憶( E楽器パート.GUITAR );\r
-                                       int flagG = CDTXMania.Pad.b押されている( E楽器パート.GUITAR, Eパッド.G ) ? 2 : 0;\r
-                                       this.t入力メソッド記憶( E楽器パート.GUITAR );\r
-                                       int flagB = CDTXMania.Pad.b押されている( E楽器パート.GUITAR, Eパッド.B ) ? 1 : 0;\r
-                                       this.t入力メソッド記憶( E楽器パート.GUITAR );\r
-                                       int flagRGB = flagR | flagG | flagB;\r
-                                       if ( flagR != 0 )\r
+\r
+                                       // 以下、間違いレーンでのピック時\r
+                                       CChip NoChipPicked = (inst == EPart.Guitar) ? this.r現在の空うちギターChip : this.r現在の空うちベースChip;\r
+                                       if ((NoChipPicked != null) || ((NoChipPicked = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(nTime, chWailingSound, CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs[inst])) != null))\r
                                        {\r
-                                               this.actLaneFlushGB.Start( 0 );\r
-                                               this.actRGB.Push( 0 );\r
+                                               this.tサウンド再生(NoChipPicked, CSound管理.rc演奏用タイマ.nシステム時刻, inst, CDTXMania.Instance.ConfigIni.nChipVolume, CDTXMania.Instance.ConfigIni.bEmphasizePlaySound[inst], true);\r
                                        }\r
-                                       if ( flagG != 0 )\r
+                                       if (!CDTXMania.Instance.ConfigIni.bLight[inst])\r
                                        {\r
-                                               this.actLaneFlushGB.Start( 1 );\r
-                                               this.actRGB.Push( 1 );\r
+                                               this.tチップのヒット処理_BadならびにTight時のMiss(inst);\r
                                        }\r
-                                       if ( flagB != 0 )\r
+                               }\r
+                       }\r
+                       List<STInputEvent> list = CDTXMania.Instance.Pad.GetEvents(inst == EPart.Guitar ? EPad.GtWail : EPad.BsWail);\r
+                       if ((list != null) && (list.Count > 0))\r
+                       {\r
+                               foreach (STInputEvent eventWailed in list)\r
+                               {\r
+                                       if (!eventWailed.b押された)\r
                                        {\r
-                                               this.actLaneFlushGB.Start( 2 );\r
-                                               this.actRGB.Push( 2 );\r
+                                               continue;\r
                                        }\r
-                                       List<STInputEvent> events = CDTXMania.Pad.GetEvents( E楽器パート.GUITAR, Eパッド.Pick );\r
-                                       if ( ( events != null ) && ( events.Count > 0 ) )\r
+                                       DoWailingFromQueue(inst, eventWailed.nTimeStamp, autoW);\r
+                               }\r
+                       }\r
+               }\r
+\r
+               private void DoWailingFromQueue(EPart inst, long nTimeStamp_Wailed, bool autoW)\r
+               {\r
+                       long nTimeWailed = nTimeStamp_Wailed - CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻;\r
+                       CChip chipWailing;\r
+                       while ((this.queWailing[inst].Count > 0) && ((chipWailing = this.queWailing[inst].Dequeue()) != null))\r
+                       {\r
+                               if ((nTimeWailed - chipWailing.n発声時刻ms) <= 1000)        // #24245 2011.1.26 yyagi: 800 -> 1000\r
+                               {\r
+                                       chipWailing.bHit = true;\r
+                                       this.actWailingBonus.Start(inst, this.r現在の歓声Chip[inst]);\r
+                                       if (!autoW)\r
                                        {\r
-                                               foreach ( STInputEvent event2 in events )\r
-                                               {\r
-                                                       CDTX.CChip chip4;\r
-                                                       if ( !event2.b押された )\r
-                                                       {\r
-                                                               continue;\r
-                                                       }\r
-                                                       this.t入力メソッド記憶( E楽器パート.GUITAR );\r
-                                                       long nTime = event2.nTimeStamp - CDTXMania.Timer.n前回リセットした時のシステム時刻;\r
-                                                       CDTX.CChip pChip = this.r指定時刻に一番近い未ヒットChip( nTime, 0x2f, this.nInputAdjustTimeMs.Guitar );\r
-                                                       E判定 e判定 = this.e指定時刻からChipのJUDGEを返す( nTime, pChip, this.nInputAdjustTimeMs.Guitar );\r
-                                                       if ( ( ( pChip != null ) && ( ( pChip.nチャンネル番号 & 15 ) == flagRGB ) ) && ( e判定 != E判定.Miss ) )\r
-                                                       {\r
-                                                               if ( ( flagR != 0 ) || ( flagRGB == 0 ) )\r
-                                                               {\r
-                                                                       this.actChipFireGB.Start( 0 );\r
-                                                               }\r
-                                                               if ( ( flagG != 0 ) || ( flagRGB == 0 ) )\r
-                                                               {\r
-                                                                       this.actChipFireGB.Start( 1 );\r
-                                                               }\r
-                                                               if ( ( flagB != 0 ) || ( flagRGB == 0 ) )\r
-                                                               {\r
-                                                                       this.actChipFireGB.Start( 2 );\r
-                                                               }\r
-                                                               this.tチップのヒット処理( nTime, pChip );\r
-                                                               this.tサウンド再生( pChip, CDTXMania.Timer.nシステム時刻, E楽器パート.GUITAR, CDTXMania.ConfigIni.n手動再生音量, CDTXMania.ConfigIni.b演奏音を強調する.Guitar, e判定 == E判定.Poor );\r
-                                                               CDTX.CChip item = this.r指定時刻に一番近い未ヒットChip( nTime, 40, this.nInputAdjustTimeMs.Guitar, 140 );\r
-                                                               if ( item != null )\r
-                                                               {\r
-                                                                       this.queWailing.Guitar.Enqueue( item );\r
-                                                               }\r
-                                                               continue;\r
-                                                       }\r
-                                                       if ( ( ( chip4 = this.r現在の空うちギターChip ) != null ) || ( ( chip4 = this.r指定時刻に一番近いChip・ヒット未済問わず不可視考慮( nTime, 0x2f, this.nInputAdjustTimeMs.Guitar ) ) != null ) )\r
-                                                       {\r
-                                                               this.tサウンド再生( chip4, CDTXMania.Timer.nシステム時刻, E楽器パート.GUITAR, CDTXMania.ConfigIni.n手動再生音量, CDTXMania.ConfigIni.b演奏音を強調する.Guitar, true );\r
-                                                       }\r
-                                                       if ( !CDTXMania.ConfigIni.bLight.Guitar )\r
-                                                       {\r
-                                                               this.tチップのヒット処理・BadならびにTight時のMiss( E楽器パート.GUITAR );\r
-                                                       }\r
-                                               }\r
+                                               int nCombo = (this.actCombo.dgbコンボ数[inst].n現在値 < 500) ? this.actCombo.dgbコンボ数[inst].n現在値 : 500;\r
+                                               // #24245 2011.1.26 yyagi changed DRUMS->BASS, add nCombo conditions\r
+                                               this.actScore.Add(inst, nCombo * 3000L);\r
                                        }\r
-                                       List<STInputEvent> list2 = CDTXMania.Pad.GetEvents( E楽器パート.GUITAR, Eパッド.Wail );\r
-                                       if ( ( list2 != null ) && ( list2.Count > 0 ) )\r
+                               }\r
+                       }\r
+               }\r
+\r
+\r
+\r
+               // t入力処理・ドラム()からメソッドを抽出したもの。\r
+               /// <summary>\r
+               /// chipArrayの中を, n発生位置の小さい順に並べる + nullを大きい方に退かす。セットでe判定Arrayも並べ直す。\r
+               /// </summary>\r
+               /// <param name="chipArray">ソート対象chip群</param>\r
+               /// <param name="e判定Array">ソート対象e判定群</param>\r
+               /// <param name="NumOfChips">チップ数</param>\r
+               private static void SortChipsByNTime(CChip[] chipArray, EJudge[] e判定Array, int NumOfChips)\r
+               {\r
+                       for (int i = 0; i < NumOfChips - 1; i++)\r
+                       {\r
+                               for (int j = NumOfChips - 1; j > i; j--)\r
+                               {\r
+                                       if ((chipArray[j - 1] == null) || ((chipArray[j] != null) && (chipArray[j - 1].n発声位置 > chipArray[j].n発声位置)))\r
                                        {\r
-                                               foreach ( STInputEvent event3 in list2 )\r
-                                               {\r
-                                                       CDTX.CChip chip5;\r
-                                                       if ( !event3.b押された )\r
-                                                       {\r
-                                                               continue;\r
-                                                       }\r
-                                                       long num6 = event3.nTimeStamp - CDTXMania.Timer.n前回リセットした時のシステム時刻;\r
-                                                       while ( ( this.queWailing.Guitar.Count > 0 ) && ( ( chip5 = this.queWailing.Guitar.Dequeue() ) != null ) )\r
-                                                       {\r
-                                                               if ( ( num6 - chip5.n発声時刻ms ) <= 1000 )         // #24245 2011.1.26 yyagi: 800 -> 1000\r
-                                                               {\r
-                                                                       chip5.bHit = true;\r
-                                                                       this.actWailingBonus.Start( E楽器パート.GUITAR, this.r現在の歓声Chip.Guitar );\r
-                                                                       if ( !bIsAutoPlay.Guitar )\r
-                                                                       {\r
-                                                                               int nCombo = ( this.actCombo.n現在のコンボ数.Guitar < 500 ) ? this.actCombo.n現在のコンボ数.Guitar : 500;\r
-                                                                               this.actScore.Set( E楽器パート.GUITAR, this.actScore.Get( E楽器パート.GUITAR ) + ( nCombo * 3000L ) );                // #24245 2011.1.26 yyagi changed DRUMS->GUITAR, add nCombo conditions\r
-                                                                       }\r
-                                                               }\r
-                                                       }\r
-                                               }\r
+                                               // swap\r
+                                               CChip chipTemp = chipArray[j - 1];\r
+                                               chipArray[j - 1] = chipArray[j];\r
+                                               chipArray[j] = chipTemp;\r
+                                               EJudge e判定Temp = e判定Array[j - 1];\r
+                                               e判定Array[j - 1] = e判定Array[j];\r
+                                               e判定Array[j] = e判定Temp;\r
                                        }\r
                                }\r
                        }\r
                }\r
-               protected virtual void t入力処理・ベース()\r
+               private bool tドラムヒット処理(long nHitTime, EPad type, CChip pChip, int n強弱度合い0to127)\r
                {\r
-                       if ( CDTXMania.Pad.b押されている( E楽器パート.BASS, Eパッド.Decide ) && CDTXMania.Pad.b押された( E楽器パート.BASS, Eパッド.B ) )\r
+                       if (pChip == null)\r
                        {\r
-                               CDTXMania.ConfigIni.n譜面スクロール速度.Bass = Math.Min( CDTXMania.ConfigIni.n譜面スクロール速度.Bass + 1, 0x7cf );\r
+                               return false;\r
                        }\r
-                       if ( CDTXMania.Pad.b押されている( E楽器パート.BASS, Eパッド.Decide ) && CDTXMania.Pad.b押された( E楽器パート.BASS, Eパッド.R ) )\r
+                       // Ech定義 channel = pChip.eチャンネル番号;\r
+                       int index = -1;\r
+                       if (pChip.bDrums可視チップ_LP_LBD含まない)\r
                        {\r
-                               CDTXMania.ConfigIni.n譜面スクロール速度.Bass = Math.Max( CDTXMania.ConfigIni.n譜面スクロール速度.Bass - 1, 0 );\r
+                               index = pChip.nDrumsIndex;\r
                        }\r
-\r
-                       if ( CDTXMania.ConfigIni.bGuitar有効 && CDTXMania.DTX.bチップがある.Bass )\r
+                       else if (pChip.bDrums不可視チップ_LP_LBD含まない)\r
+                       {\r
+                               index = pChip.nDrumsIndexHidden;\r
+                       }\r
+                       ELane eLane = EnumConverter.LaneFromChannel(index + EChannel.HiHatClose);// nチャンネル0Atoレーン07[index];\r
+                       EPad ePad = EnumConverter.PadFromChannel(index + EChannel.HiHatClose); //nチャンネル0Atoパッド08[index];\r
+                       bool bPChipIsAutoPlay = CDTXMania.Instance.ConfigIni.bAutoPlay[ePad];\r
+                       int nInputAdjustTime = bPChipIsAutoPlay ? 0 : CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs.Drums;\r
+                       EJudge e判定 = this.e指定時刻からChipのJUDGEを返す(nHitTime, pChip, nInputAdjustTime);\r
+                       if (e判定 == EJudge.Miss)\r
+                       {\r
+                               return false;\r
+                       }\r
+                       this.tチップのヒット処理(nHitTime, pChip);\r
+                       this.actLaneFlushD.Start(eLane, ((float)n強弱度合い0to127) / 127f);\r
+                       this.actPad.Hit(ePad);\r
+                       if ((e判定 != EJudge.Poor) && (e判定 != EJudge.Miss))\r
+                       {\r
+                               bool flag = this.bフィルイン中;\r
+                               bool flag2 = this.bフィルイン中 && this.bフィルイン区間の最後のChipである(pChip);\r
+                               // bool flag3 = flag2;\r
+                               // #31602 2013.6.24 yyagi 判定ラインの表示位置をずらしたら、チップのヒットエフェクトの表示もずらすために、nJudgeLine..を追加\r
+                               this.actChipFireD.Start(eLane, flag, flag2, flag2);\r
+                       }\r
+                       if (CDTXMania.Instance.ConfigIni.bDrumsHitSound)\r
                        {\r
-                               if ( bIsAutoPlay.Bass )\r
+                               CChip rChip = null;\r
+                               bool bIsChipsoundPriorToPad = true;\r
+                               if (((type == EPad.HH) || (type == EPad.HHO)) || (type == EPad.LC))\r
                                {\r
-                                       CDTX.CChip chip = this.r次にくるベースChipを更新して返す();\r
-                                       if ( chip != null )\r
-                                       {\r
-                                               if ( ( chip.nチャンネル番号 & 4 ) != 0 )\r
-                                               {\r
-                                                       this.actLaneFlushGB.Start( 3 );\r
-                                                       this.actRGB.Push( 3 );\r
-                                               }\r
-                                               if ( ( chip.nチャンネル番号 & 2 ) != 0 )\r
-                                               {\r
-                                                       this.actLaneFlushGB.Start( 4 );\r
-                                                       this.actRGB.Push( 4 );\r
-                                               }\r
-                                               if ( ( chip.nチャンネル番号 & 1 ) != 0 )\r
-                                               {\r
-                                                       this.actLaneFlushGB.Start( 5 );\r
-                                                       this.actRGB.Push( 5 );\r
-                                               }\r
-                                       }\r
+                                       bIsChipsoundPriorToPad = CDTXMania.Instance.ConfigIni.eHitSoundPriorityHH == EHitSoundPriority.Chip;\r
+                               }\r
+                               else if ((type == EPad.LT) || (type == EPad.FT))\r
+                               {\r
+                                       bIsChipsoundPriorToPad = CDTXMania.Instance.ConfigIni.eHitSoundPriorityFT == EHitSoundPriority.Chip;\r
+                               }\r
+                               else if ((type == EPad.CY) || (type == EPad.RD))\r
+                               {\r
+                                       bIsChipsoundPriorToPad = CDTXMania.Instance.ConfigIni.eHitSoundPriorityCY == EHitSoundPriority.Chip;\r
+                               }\r
+                               if (bIsChipsoundPriorToPad)\r
+                               {\r
+                                       rChip = pChip;\r
                                }\r
                                else\r
                                {\r
-                                       int flagR = CDTXMania.Pad.b押されている( E楽器パート.BASS, Eパッド.R ) ? 4 : 0;\r
-                                       this.t入力メソッド記憶( E楽器パート.BASS );\r
-                                       int flagG = CDTXMania.Pad.b押されている( E楽器パート.BASS, Eパッド.G ) ? 2 : 0;\r
-                                       this.t入力メソッド記憶( E楽器パート.BASS );\r
-                                       int flagB = CDTXMania.Pad.b押されている( E楽器パート.BASS, Eパッド.B ) ? 1 : 0;\r
-                                       this.t入力メソッド記憶( E楽器パート.BASS );\r
-                                       int flagRGB = flagR | flagG | flagB;\r
-                                       if ( flagR != 0 )\r
-                                       {\r
-                                               this.actLaneFlushGB.Start( 3 );\r
-                                               this.actRGB.Push( 3 );\r
-                                       }\r
-                                       if ( flagG != 0 )\r
+                                       EPad hH = type;\r
+                                       if (!CDTXMania.Instance.DTX.bチップがある.HHOpen && (type == EPad.HHO))\r
                                        {\r
-                                               this.actLaneFlushGB.Start( 4 );\r
-                                               this.actRGB.Push( 4 );\r
+                                               hH = EPad.HH;\r
                                        }\r
-                                       if ( flagB != 0 )\r
+                                       if (!CDTXMania.Instance.DTX.bチップがある.Ride && (type == EPad.RD))\r
                                        {\r
-                                               this.actLaneFlushGB.Start( 5 );\r
-                                               this.actRGB.Push( 5 );\r
+                                               hH = EPad.CY;\r
                                        }\r
-                                       List<STInputEvent> events = CDTXMania.Pad.GetEvents( E楽器パート.BASS, Eパッド.Pick );\r
-                                       if ( ( events != null ) && ( events.Count > 0 ) )\r
+                                       if (!CDTXMania.Instance.DTX.bチップがある.LeftCymbal && (type == EPad.LC))\r
                                        {\r
-                                               foreach ( STInputEvent event2 in events )\r
-                                               {\r
-                                                       CDTX.CChip chip4;\r
-                                                       if ( !event2.b押された )\r
-                                                       {\r
-                                                               continue;\r
-                                                       }\r
-                                                       this.t入力メソッド記憶( E楽器パート.BASS );\r
-                                                       long nTime = event2.nTimeStamp - CDTXMania.Timer.n前回リセットした時のシステム時刻;\r
-                                                       CDTX.CChip pChip = this.r指定時刻に一番近い未ヒットChip( nTime, 0xaf, this.nInputAdjustTimeMs.Bass );\r
-                                                       E判定 e判定 = this.e指定時刻からChipのJUDGEを返す( nTime, pChip, this.nInputAdjustTimeMs.Bass );\r
-                                                       if ( ( ( pChip != null ) && ( ( pChip.nチャンネル番号 & 15 ) == flagRGB ) ) && ( e判定 != E判定.Miss ) )\r
-                                                       {\r
-                                                               if ( ( flagR != 0 ) || ( flagRGB == 0 ) )\r
-                                                               {\r
-                                                                       this.actChipFireGB.Start( 3 );\r
-                                                               }\r
-                                                               if ( ( flagG != 0 ) || ( flagRGB == 0 ) )\r
-                                                               {\r
-                                                                       this.actChipFireGB.Start( 4 );\r
-                                                               }\r
-                                                               if ( ( flagB != 0 ) || ( flagRGB == 0 ) )\r
-                                                               {\r
-                                                                       this.actChipFireGB.Start( 5 );\r
-                                                               }\r
-                                                               this.tチップのヒット処理( nTime, pChip );\r
-                                                               this.tサウンド再生( pChip, CDTXMania.Timer.nシステム時刻, E楽器パート.BASS, CDTXMania.ConfigIni.n手動再生音量, CDTXMania.ConfigIni.b演奏音を強調する.Bass, e判定 == E判定.Poor );\r
-                                                               CDTX.CChip item = this.r指定時刻に一番近い未ヒットChip( nTime, 0xa8, this.nInputAdjustTimeMs.Bass, 140 );\r
-                                                               if ( item != null )\r
-                                                               {\r
-                                                                       this.queWailing.Bass.Enqueue( item );\r
-                                                               }\r
-                                                               continue;\r
-                                                       }\r
-                                                       if ( ( ( chip4 = this.r現在の空うちベースChip ) != null ) || ( ( chip4 = this.r指定時刻に一番近いChip・ヒット未済問わず不可視考慮( nTime, 0xaf, this.nInputAdjustTimeMs.Bass ) ) != null ) )\r
-                                                       {\r
-                                                               this.tサウンド再生( chip4, CDTXMania.Timer.nシステム時刻, E楽器パート.BASS, CDTXMania.ConfigIni.n手動再生音量, CDTXMania.ConfigIni.b演奏音を強調する.Bass, true );\r
-                                                       }\r
-                                                       if ( !CDTXMania.ConfigIni.bLight.Bass )\r
-                                                       {\r
-                                                               this.tチップのヒット処理・BadならびにTight時のMiss( E楽器パート.BASS );\r
-                                                       }\r
-                                               }\r
+                                               hH = EPad.HH;\r
                                        }\r
-                                       List<STInputEvent> list2 = CDTXMania.Pad.GetEvents( E楽器パート.BASS, Eパッド.Wail );\r
-                                       if ( ( list2 != null ) && ( list2.Count > 0 ) )\r
+                                       rChip = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(nHitTime, EnumConverter.ChannelFromPad(hH), nInputAdjustTime);\r
+                                       if (rChip == null)\r
                                        {\r
-                                               foreach ( STInputEvent event3 in list2 )\r
-                                               {\r
-                                                       CDTX.CChip chip5;\r
-                                                       if ( !event3.b押された )\r
-                                                       {\r
-                                                               continue;\r
-                                                       }\r
-                                                       long num6 = event3.nTimeStamp - CDTXMania.Timer.n前回リセットした時のシステム時刻;\r
-                                                       while ( ( this.queWailing.Bass.Count > 0 ) && ( ( chip5 = this.queWailing.Bass.Dequeue() ) != null ) )\r
-                                                       {\r
-                                                               if ( ( num6 - chip5.n発声時刻ms ) <= 1000 )         // #24245 2011.1.26 yyagi: 800 -> 1000\r
-                                                               {\r
-                                                                       chip5.bHit = true;\r
-                                                                       this.actWailingBonus.Start( E楽器パート.BASS, this.r現在の歓声Chip.Bass );\r
-                                                                       if ( !bIsAutoPlay.Bass )\r
-                                                                       {\r
-                                                                               int nCombo = ( this.actCombo.n現在のコンボ数.Bass < 500 ) ? this.actCombo.n現在のコンボ数.Bass : 500;\r
-                                                                               this.actScore.Set( E楽器パート.BASS, this.actScore.Get( E楽器パート.BASS ) + ( nCombo * 3000L ) );            // #24245 2011.1.26 yyagi changed DRUMS->BASS, add nCombo conditions\r
-                                                                       }\r
-                                                               }\r
-                                                       }\r
-                                               }\r
+                                               rChip = pChip;\r
                                        }\r
                                }\r
+                               this.tサウンド再生(rChip, CSound管理.rc演奏用タイマ.nシステム時刻, EPart.Drums, CDTXMania.Instance.ConfigIni.nChipVolume, CDTXMania.Instance.ConfigIni.bEmphasizePlaySound.Drums);\r
                        }\r
+                       return true;\r
                }\r
 \r
-#if true               // DAMAGELEVELTUNING\r
-#region [ DAMAGELEVELTUNING ]\r
-               // ----------------------------------\r
-               public float[ , ] fDamageGaugeDelta = {                 // #23625 2011.1.10 ickw_284: tuned damage/recover factors\r
-                       // drums,   guitar,  bass\r
-                       {  0.004f,  0.006f,  0.006f  },\r
-                       {  0.002f,  0.003f,  0.003f  },\r
-                       {  0.000f,  0.000f,  0.000f  },\r
-                       { -0.020f, -0.030f,     -0.030f  },\r
-                       { -0.050f, -0.050f, -0.050f  }\r
-               };\r
-               public float[] fDamageLevelFactor = {\r
-                       0.5f, 1.0f, 1.5f\r
-               };\r
-               // ----------------------------------\r
-#endregion\r
-#endif\r
-\r
-               protected void t判定にあわせてゲージを増減する( E楽器パート screenmode, E楽器パート part, E判定 e今回の判定 )\r
+               protected bool bフィルイン区間の最後のChipである(CChip pChip)\r
                {\r
-                       double fDamage;\r
-\r
-#if true       // DAMAGELEVELTUNING\r
-                       switch ( e今回の判定 )\r
+                       if (pChip == null)\r
                        {\r
-                               case E判定.Perfect:\r
-                               case E判定.Great:\r
-                               case E判定.Good:\r
-                               case E判定.Poor:\r
-                                       fDamage = fDamageGaugeDelta[ (int) e今回の判定, (int) part ];\r
-                                       break;\r
-                               case E判定.Miss:\r
-                                       fDamage = fDamageGaugeDelta[ (int) e今回の判定, (int) part ];\r
-                                       switch ( CDTXMania.ConfigIni.eダメージレベル )\r
-                                       {\r
-                                               case Eダメージレベル.少ない:\r
-                                               case Eダメージレベル.普通:\r
-                                               case Eダメージレベル.大きい:\r
-                                                       fDamage *= fDamageLevelFactor[ (int) CDTXMania.ConfigIni.eダメージレベル ];\r
-                                                       break;\r
-                                       }\r
-                                       break;\r
-\r
-                               default:\r
-                                       fDamage = 0.0f;\r
-                                       break;\r
+                               return false;\r
                        }\r
-#else                                                                                                  // before applying #23625 modifications\r
-                       switch (e今回の判定)\r
+                       int num = pChip.n発声位置;\r
+                       for (int i = CDTXMania.Instance.DTX.listChip.IndexOf(pChip) + 1; i < CDTXMania.Instance.DTX.listChip.Count; i++)\r
                        {\r
-                               case E判定.Perfect:\r
-                                       fDamage = ( part == E楽器パート.DRUMS ) ? 0.01 : 0.015;\r
-                                       break;\r
-\r
-                               case E判定.Great:\r
-                                       fDamage = ( part == E楽器パート.DRUMS ) ? 0.006 : 0.009;\r
-                                       break;\r
-\r
-                               case E判定.Good:\r
-                                       fDamage = ( part == E楽器パート.DRUMS ) ? 0.002 : 0.003;\r
-                                       break;\r
+                               pChip = CDTXMania.Instance.DTX.listChip[i];\r
+                               if ((pChip[EChannel.FillIn]) && (pChip.n整数値 == 2))\r
+                               {\r
+                                       return true;\r
+                               }\r
+                               if ((pChip.bDrums可視チップ_LP_LBD含まない) && (pChip.n発声位置 - num) > 0x18)\r
+                               {\r
+                                       return false;\r
+                               }\r
+                       }\r
+                       return true;\r
+               }\r
 \r
-                               case E判定.Poor:\r
-                                       fDamage = ( part == E楽器パート.DRUMS ) ? 0.0 : 0.0;\r
-                                       break;\r
+               private void t進行描画_チップ_フィルイン(ref CChip pChip)\r
+               {\r
+                       if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
+                       {\r
+                               pChip.bHit = true;\r
 \r
-                               case E判定.Miss:\r
-                                       fDamage = ( part == E楽器パート.DRUMS ) ? -0.035 : -0.035;\r
-                                       switch( CDTXMania.ConfigIni.eダメージレベル )\r
+                               if (CDTXMania.Instance.ConfigIni.bDrums有効)\r
+                               {\r
+                                       switch (pChip.n整数値)\r
                                        {\r
-                                               case Eダメージレベル.少ない:\r
-                                                       fDamage *= 0.6;\r
-                                                       break;\r
-\r
-                                               case Eダメージレベル.普通:\r
-                                                       fDamage *= 1.0;\r
+                                               case 0x01:  // フィルイン開始\r
+                                                       if (CDTXMania.Instance.ConfigIni.bFillin)\r
+                                                       {\r
+                                                               this.bフィルイン中 = true;\r
+                                                       }\r
                                                        break;\r
 \r
-                                               case Eダメージレベル.大きい:\r
-                                                       fDamage *= 1.6;\r
+                                               case 0x02:  // フィルイン終了\r
+                                                       if (CDTXMania.Instance.ConfigIni.bFillin)\r
+                                                       {\r
+                                                               this.bフィルイン中 = false;\r
+                                                       }\r
+                                                       if (((this.actCombo.dgbコンボ数.Drums.n現在値 > 0) || CDTXMania.Instance.ConfigIni.bIsAutoPlay(EPart.Drums)) && CDTXMania.Instance.ConfigIni.bAudience)\r
+                                                       {\r
+                                                               if (this.r現在の歓声Chip.Drums != null)\r
+                                                               {\r
+                                                                       CDTXMania.Instance.DTX.tチップの再生(this.r現在の歓声Chip.Drums, CSound管理.rc演奏用タイマ.nシステム時刻, CDTXMania.Instance.DTX.nモニタを考慮した音量(EPart.Unknown));\r
+                                                               }\r
+                                                               else\r
+                                                               {\r
+                                                                       CDTXMania.Instance.Skin.sound歓声音.n位置_次に鳴るサウンド = 0;\r
+                                                                       CDTXMania.Instance.Skin.sound歓声音.t再生する();\r
+                                                               }\r
+                                                       }\r
                                                        break;\r
-                                       }\r
-                                       break;\r
-\r
-                               default:\r
-                                       fDamage = 0.0;\r
-                                       break;\r
-                       }\r
+#if TEST_NOTEOFFMODE  // 2011.1.1 yyagi TEST\r
+                                                               case 0x04:      // HH消音あり(従来同等)\r
+                                                                       CDTXMania.Instance.DTX.b演奏で直前の音を消音する.HH = true;\r
+                                                                       break;\r
+                                                               case 0x05:      // HH消音無し\r
+                                                                       CDTXMania.Instance.DTX.b演奏で直前の音を消音する.HH = false;\r
+                                                                       break;\r
+                                                               case 0x06:      // ギター消音あり(従来同等)\r
+                                                                       CDTXMania.Instance.DTX.b演奏で直前の音を消音する.Gutiar = true;\r
+                                                                       break;\r
+                                                               case 0x07:      // ギター消音無し\r
+                                                                       CDTXMania.Instance.DTX.b演奏で直前の音を消音する.Gutiar = false;\r
+                                                                       break;\r
+                                                               case 0x08:      // ベース消音あり(従来同等)\r
+                                                                       CDTXMania.Instance.DTX.b演奏で直前の音を消音する.Bass = true;\r
+                                                                       break;\r
+                                                               case 0x09:      // ベース消音無し\r
+                                                                       CDTXMania.Instance.DTX.b演奏で直前の音を消音する.Bass = false;\r
+                                                                       break;\r
 #endif\r
-                       if ( screenmode == E楽器パート.DRUMS )                     // ドラム演奏画面なら、ギター/ベースのダメージも全部ドラムのゲージに集約する\r
-                       {\r
-                               part = E楽器パート.DRUMS;\r
+                                       }\r
+                               }\r
                        }\r
-                       this.actGauge.db現在のゲージ値[ (int) part ] += fDamage;\r
-\r
-                       if ( this.actGauge.db現在のゲージ値[ (int) part ] > 1.0 )\r
-                               this.actGauge.db現在のゲージ値[ (int) part ] = 1.0;\r
                }\r
-               //-----------------\r
-               #endregion\r
        }\r
 }\r