OSDN Git Service

10905adde0e9614939c249f371f00ddbfb6cff06
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / ステージ / 07.演奏 / ギター画面 / CStage演奏ギター画面.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Text;\r
4 using System.Runtime.InteropServices;\r
5 using System.Drawing;\r
6 using System.Drawing.Imaging;\r
7 using System.IO;\r
8 using System.Diagnostics;\r
9 using SlimDX.Direct3D9;\r
10 using FDK;\r
11 \r
12 namespace DTXMania\r
13 {\r
14         internal class CStage演奏ギター画面 : CStage\r
15         {\r
16                 // プロパティ\r
17 \r
18                 public bool bAUTOでないチップが1つでもバーを通過した\r
19                 {\r
20                         get;\r
21                         private set;\r
22                 }\r
23 \r
24 \r
25                 // コンストラクタ\r
26 \r
27                 public CStage演奏ギター画面()\r
28                 {\r
29                         base.eステージID = CStage.Eステージ.演奏;\r
30                         base.eフェーズID = CStage.Eフェーズ.共通_通常状態;\r
31                         base.b活性化してない = true;\r
32                         base.list子Activities.Add( this.actStageFailed = new CAct演奏ステージ失敗() );\r
33                         base.list子Activities.Add( this.actAVI = new CAct演奏AVI() );\r
34                         base.list子Activities.Add( this.actBGA = new CAct演奏BGA() );\r
35                         base.list子Activities.Add( this.actPanel = new CAct演奏パネル文字列() );\r
36                         base.list子Activities.Add( this.act譜面スクロール速度 = new CAct演奏スクロール速度() );\r
37                         base.list子Activities.Add( this.actStatusPanels = new CAct演奏Guitarステータスパネル() );\r
38                         base.list子Activities.Add( this.actWailingBonus = new CAct演奏GuitarWailingBonus() );\r
39                         base.list子Activities.Add( this.actScore = new CAct演奏Guitarスコア() );\r
40                         base.list子Activities.Add( this.actRGB = new CAct演奏GuitarRGB() );\r
41                         base.list子Activities.Add( this.actLaneFlushGB = new CAct演奏GuitarレーンフラッシュGB() );\r
42                         base.list子Activities.Add( this.actJudgeString = new CAct演奏Guitar判定文字列() );\r
43                         base.list子Activities.Add( this.actGauge = new CAct演奏Guitarゲージ() );\r
44                         base.list子Activities.Add( this.actCombo = new CAct演奏Guitarコンボ() );\r
45                         base.list子Activities.Add( this.actChipFire = new CAct演奏Guitarチップファイア() );\r
46                         base.list子Activities.Add( this.actPlayInfo = new CAct演奏演奏情報() );\r
47                         base.list子Activities.Add( this.actFI = new CActFIFOBlack() );\r
48                         base.list子Activities.Add( this.actFO = new CActFIFOBlack() );\r
49                         base.list子Activities.Add( this.actFOClear = new CActFIFOWhite() );\r
50                 }\r
51 \r
52 \r
53                 // メソッド\r
54 \r
55                 public void t演奏結果を格納する( out CScoreIni.C演奏記録 Drums, out CScoreIni.C演奏記録 Guitar, out CScoreIni.C演奏記録 Bass )\r
56                 {\r
57                         Drums = new CScoreIni.C演奏記録();\r
58                         Guitar = new CScoreIni.C演奏記録();\r
59                         Bass = new CScoreIni.C演奏記録();\r
60                         if( CDTXMania.DTX.bチップがある.Guitar )\r
61                         {\r
62                                 Guitar.nスコア = this.actScore.Get( E楽器パート.GUITAR );\r
63                                 Guitar.dbゲーム型スキル値 = CScoreIni.tゲーム型スキルを計算して返す( CDTXMania.DTX.LEVEL.Guitar, CDTXMania.DTX.n可視チップ数.Guitar, this.nヒット数・Auto含まない.Guitar.Perfect, this.actCombo.n現在のコンボ数.Guitar最高値 );\r
64                                 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
65                                 Guitar.nPerfect数 = CDTXMania.ConfigIni.bAutoPlay.Guitar ? this.nヒット数・Auto含む.Guitar.Perfect : this.nヒット数・Auto含まない.Guitar.Perfect;\r
66                                 Guitar.nGreat数 = CDTXMania.ConfigIni.bAutoPlay.Guitar ? this.nヒット数・Auto含む.Guitar.Great : this.nヒット数・Auto含まない.Guitar.Great;\r
67                                 Guitar.nGood数 = CDTXMania.ConfigIni.bAutoPlay.Guitar ? this.nヒット数・Auto含む.Guitar.Good : this.nヒット数・Auto含まない.Guitar.Good;\r
68                                 Guitar.nPoor数 = CDTXMania.ConfigIni.bAutoPlay.Guitar ? this.nヒット数・Auto含む.Guitar.Poor : this.nヒット数・Auto含まない.Guitar.Poor;\r
69                                 Guitar.nMiss数 = CDTXMania.ConfigIni.bAutoPlay.Guitar ? this.nヒット数・Auto含む.Guitar.Miss : this.nヒット数・Auto含まない.Guitar.Miss;\r
70                                 Guitar.n最大コンボ数 = this.actCombo.n現在のコンボ数.Guitar最高値;\r
71                                 Guitar.n全チップ数 = CDTXMania.DTX.n可視チップ数.Guitar;\r
72                                 for( int i = 0; i < 10; i++ )\r
73                                 {\r
74                                         Guitar.bAutoPlay[ i ] = CDTXMania.ConfigIni.bAutoPlay[ i ];\r
75                                 }\r
76                                 Guitar.bTight = CDTXMania.ConfigIni.bTight;\r
77                                 for( int j = 0; j < 3; j++ )\r
78                                 {\r
79                                         Guitar.bSudden[ j ] = CDTXMania.ConfigIni.bSudden[ j ];\r
80                                         Guitar.bHidden[ j ] = CDTXMania.ConfigIni.bHidden[ j ];\r
81                                         Guitar.bReverse[ j ] = CDTXMania.ConfigIni.bReverse[ j ];\r
82                                         Guitar.eRandom[ j ] = CDTXMania.ConfigIni.eRandom[ j ];\r
83                                         Guitar.bLight[ j ] = CDTXMania.ConfigIni.bLight[ j ];\r
84                                         Guitar.bLeft[ j ] = CDTXMania.ConfigIni.bLeft[ j ];\r
85                                         Guitar.f譜面スクロール速度[ j ] = ( (float) ( CDTXMania.ConfigIni.n譜面スクロール速度[ j ] + 1 ) ) * 0.5f;\r
86                                 }\r
87                                 Guitar.eDark = CDTXMania.ConfigIni.eDark;\r
88                                 Guitar.n演奏速度分子 = CDTXMania.ConfigIni.n演奏速度;\r
89                                 Guitar.n演奏速度分母 = 20;\r
90                                 Guitar.eHHGroup = CDTXMania.ConfigIni.eHHGroup;\r
91                                 Guitar.eFTGroup = CDTXMania.ConfigIni.eFTGroup;\r
92                                 Guitar.eCYGroup = CDTXMania.ConfigIni.eCYGroup;\r
93                                 Guitar.eHitSoundPriorityHH = CDTXMania.ConfigIni.eHitSoundPriorityHH;\r
94                                 Guitar.eHitSoundPriorityFT = CDTXMania.ConfigIni.eHitSoundPriorityFT;\r
95                                 Guitar.eHitSoundPriorityCY = CDTXMania.ConfigIni.eHitSoundPriorityCY;\r
96                                 Guitar.bGuitar有効 = CDTXMania.ConfigIni.bGuitar有効;\r
97                                 Guitar.bDrums有効 = CDTXMania.ConfigIni.bDrums有効;\r
98                                 Guitar.bSTAGEFAILED有効 = CDTXMania.ConfigIni.bSTAGEFAILED有効;\r
99                                 Guitar.eダメージレベル = CDTXMania.ConfigIni.eダメージレベル;\r
100                                 Guitar.b演奏にキーボードを使用した = this.b演奏にキーボードを使った.Guitar;\r
101                                 Guitar.b演奏にMIDI入力を使用した = this.b演奏にMIDI入力を使った.Guitar;\r
102                                 Guitar.b演奏にジョイパッドを使用した = this.b演奏にジョイパッドを使った.Guitar;\r
103                                 Guitar.b演奏にマウスを使用した = this.b演奏にマウスを使った.Guitar;\r
104                                 Guitar.nPerfectになる範囲ms = CDTXMania.nPerfect範囲ms;\r
105                                 Guitar.nGreatになる範囲ms = CDTXMania.nGreat範囲ms;\r
106                                 Guitar.nGoodになる範囲ms = CDTXMania.nGood範囲ms;\r
107                                 Guitar.nPoorになる範囲ms = CDTXMania.nPoor範囲ms;\r
108                                 Guitar.strDTXManiaのバージョン = CDTXMania.VERSION;\r
109                                 Guitar.最終更新日時 = DateTime.Now.ToString();\r
110                                 Guitar.Hash = CScoreIni.t演奏セクションのMD5を求めて返す( Guitar );\r
111                         }\r
112                         if( CDTXMania.DTX.bチップがある.Bass )\r
113                         {\r
114                                 Bass.nスコア = this.actScore.Get( E楽器パート.BASS );\r
115                                 Bass.dbゲーム型スキル値 = CScoreIni.tゲーム型スキルを計算して返す( CDTXMania.DTX.LEVEL.Bass, CDTXMania.DTX.n可視チップ数.Bass, this.nヒット数・Auto含まない.Bass.Perfect, this.actCombo.n現在のコンボ数.Bass最高値 );\r
116                                 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
117                                 Bass.nPerfect数 = CDTXMania.ConfigIni.bAutoPlay.Bass ? this.nヒット数・Auto含む.Bass.Perfect : this.nヒット数・Auto含まない.Bass.Perfect;\r
118                                 Bass.nGreat数 = CDTXMania.ConfigIni.bAutoPlay.Bass ? this.nヒット数・Auto含む.Bass.Great : this.nヒット数・Auto含まない.Bass.Great;\r
119                                 Bass.nGood数 = CDTXMania.ConfigIni.bAutoPlay.Bass ? this.nヒット数・Auto含む.Bass.Good : this.nヒット数・Auto含まない.Bass.Good;\r
120                                 Bass.nPoor数 = CDTXMania.ConfigIni.bAutoPlay.Bass ? this.nヒット数・Auto含む.Bass.Poor : this.nヒット数・Auto含まない.Bass.Poor;\r
121                                 Bass.nMiss数 = CDTXMania.ConfigIni.bAutoPlay.Bass ? this.nヒット数・Auto含む.Bass.Miss : this.nヒット数・Auto含まない.Bass.Miss;\r
122                                 Bass.n最大コンボ数 = this.actCombo.n現在のコンボ数.Bass最高値;\r
123                                 Bass.n全チップ数 = CDTXMania.DTX.n可視チップ数.Bass;\r
124                                 for( int k = 0; k < 10; k++ )\r
125                                 {\r
126                                         Bass.bAutoPlay[ k ] = CDTXMania.ConfigIni.bAutoPlay[ k ];\r
127                                 }\r
128                                 Bass.bTight = CDTXMania.ConfigIni.bTight;\r
129                                 for( int m = 0; m < 3; m++ )\r
130                                 {\r
131                                         Bass.bSudden[ m ] = CDTXMania.ConfigIni.bSudden[ m ];\r
132                                         Bass.bHidden[ m ] = CDTXMania.ConfigIni.bHidden[ m ];\r
133                                         Bass.bReverse[ m ] = CDTXMania.ConfigIni.bReverse[ m ];\r
134                                         Bass.eRandom[ m ] = CDTXMania.ConfigIni.eRandom[ m ];\r
135                                         Bass.bLight[ m ] = CDTXMania.ConfigIni.bLight[ m ];\r
136                                         Bass.bLeft[ m ] = CDTXMania.ConfigIni.bLeft[ m ];\r
137                                         Bass.f譜面スクロール速度[ m ] = ( (float) ( CDTXMania.ConfigIni.n譜面スクロール速度[ m ] + 1 ) ) * 0.5f;\r
138                                 }\r
139                                 Bass.eDark = CDTXMania.ConfigIni.eDark;\r
140                                 Bass.n演奏速度分子 = CDTXMania.ConfigIni.n演奏速度;\r
141                                 Bass.n演奏速度分母 = 20;\r
142                                 Bass.eHHGroup = CDTXMania.ConfigIni.eHHGroup;\r
143                                 Bass.eFTGroup = CDTXMania.ConfigIni.eFTGroup;\r
144                                 Bass.eCYGroup = CDTXMania.ConfigIni.eCYGroup;\r
145                                 Bass.eHitSoundPriorityHH = CDTXMania.ConfigIni.eHitSoundPriorityHH;\r
146                                 Bass.eHitSoundPriorityFT = CDTXMania.ConfigIni.eHitSoundPriorityFT;\r
147                                 Bass.eHitSoundPriorityCY = CDTXMania.ConfigIni.eHitSoundPriorityCY;\r
148                                 Bass.bGuitar有効 = CDTXMania.ConfigIni.bGuitar有効;\r
149                                 Bass.bDrums有効 = CDTXMania.ConfigIni.bDrums有効;\r
150                                 Bass.bSTAGEFAILED有効 = CDTXMania.ConfigIni.bSTAGEFAILED有効;\r
151                                 Bass.eダメージレベル = CDTXMania.ConfigIni.eダメージレベル;\r
152                                 Bass.b演奏にキーボードを使用した = this.b演奏にキーボードを使った.Guitar;\r
153                                 Bass.b演奏にMIDI入力を使用した = this.b演奏にMIDI入力を使った.Guitar;\r
154                                 Bass.b演奏にジョイパッドを使用した = this.b演奏にジョイパッドを使った.Guitar;\r
155                                 Bass.b演奏にマウスを使用した = this.b演奏にマウスを使った.Guitar;\r
156                                 Bass.nPerfectになる範囲ms = CDTXMania.nPerfect範囲ms;\r
157                                 Bass.nGreatになる範囲ms = CDTXMania.nGreat範囲ms;\r
158                                 Bass.nGoodになる範囲ms = CDTXMania.nGood範囲ms;\r
159                                 Bass.nPoorになる範囲ms = CDTXMania.nPoor範囲ms;\r
160                                 Bass.strDTXManiaのバージョン = CDTXMania.VERSION;\r
161                                 Bass.最終更新日時 = DateTime.Now.ToString();\r
162                                 Bass.Hash = CScoreIni.t演奏セクションのMD5を求めて返す( Bass );\r
163                         }\r
164                 }\r
165                 \r
166 \r
167                 // CStage 実装\r
168 \r
169                 public override void On活性化()\r
170                 {\r
171                         this.eフェードアウト完了時の戻り値 = E演奏画面の戻り値.継続;\r
172                         this.n現在のトップChip = ( CDTXMania.DTX.listChip.Count > 0 ) ? 0 : -1;\r
173                         this.n最後に再生したHHの実WAV番号 = -1;\r
174                         this.n最後に再生したHHのチャンネル番号 = 0;\r
175                         this.n最後に再生したギターの実WAV番号 = -1;\r
176                         this.n最後に再生したベースの実WAV番号 = -1;\r
177                         for( int i = 0; i < 50; i++ )\r
178                         {\r
179                                 this.n最後に再生したBGMの実WAV番号[ i ] = -1;\r
180                         }\r
181                         this.r次にくるギターChip = null;\r
182                         this.r次にくるベースChip = null;\r
183                         for( int j = 0; j < 10; j++ )\r
184                         {\r
185                                 this.r現在の空うちドラムChip[ j ] = null;\r
186                         }\r
187                         this.r現在の空うちギターChip = null;\r
188                         this.r現在の空うちベースChip = null;\r
189                         for( int k = 0; k < 3; k++ )\r
190                         {\r
191                                 for( int n = 0; n < 5; n++ )\r
192                                 {\r
193                                         this.nヒット数・Auto含まない[ k ] = new STHITCOUNTOFRANK();\r
194                                         this.nヒット数・Auto含む[ k ] = new STHITCOUNTOFRANK();\r
195                                 }\r
196                                 this.queWailing[ k ] = new Queue<CDTX.CChip>();\r
197                         }\r
198                         for( int m = 0; m < 3; m++ )\r
199                         {\r
200                                 this.b演奏にキーボードを使った[ m ] = false;\r
201                                 this.b演奏にジョイパッドを使った[ m ] = false;\r
202                                 this.b演奏にMIDI入力を使った[ m ] = false;\r
203                                 this.b演奏にマウスを使った[ m ] = false;\r
204                         }\r
205                         this.bAUTOでないチップが1つでもバーを通過した = false;\r
206                         base.On活性化();\r
207                         this.tステータスパネルの選択();\r
208                         this.tパネル文字列の設定();\r
209                 }\r
210                 public override void OnManagedリソースの作成()\r
211                 {\r
212                         if( !base.b活性化してない )\r
213                         {\r
214                                 this.t背景テクスチャの生成();\r
215                                 this.txチップ = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlayGuitar chips.png" ) );\r
216                                 this.txヒットバー = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlayGuitar hit-bar.png" ) );\r
217                                 this.txWailing枠 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlay wailing cursor.png" ) );\r
218                                 base.OnManagedリソースの作成();\r
219                         }\r
220                 }\r
221                 public override void OnManagedリソースの解放()\r
222                 {\r
223                         if( !base.b活性化してない )\r
224                         {\r
225                                 CDTXMania.tテクスチャの解放( ref this.tx背景 );\r
226                                 CDTXMania.tテクスチャの解放( ref this.txチップ );\r
227                                 CDTXMania.tテクスチャの解放( ref this.txヒットバー );\r
228                                 CDTXMania.tテクスチャの解放( ref this.txWailing枠 );\r
229                                 base.OnManagedリソースの解放();\r
230                         }\r
231                 }\r
232                 public override int On進行描画()\r
233                 {\r
234                         if( !base.b活性化してない )\r
235                         {\r
236                                 bool flag = false;\r
237                                 bool flag2 = false;\r
238 \r
239                                 if( base.b初めての進行描画 )\r
240                                 {\r
241                                         CDTXMania.Timer.tリセット();\r
242                                         this.ctチップ模様アニメ.Guitar = new CCounter( 0, 0x17, 20, CDTXMania.Timer );\r
243                                         this.ctチップ模様アニメ.Bass = new CCounter( 0, 0x17, 20, CDTXMania.Timer );\r
244                                         this.ctWailingチップ模様アニメ = new CCounter( 0, 4, 50, CDTXMania.Timer );\r
245                                         base.eフェーズID = CStage.Eフェーズ.共通_フェードイン;\r
246                                         this.actFI.tフェードイン開始();\r
247                                         base.b初めての進行描画 = false;\r
248                                 }\r
249                                 if( CDTXMania.ConfigIni.bSTAGEFAILED有効 && ( base.eフェーズID == CStage.Eフェーズ.共通_通常状態 ) )\r
250                                 {\r
251 //                                      bool flag3 = ( CDTXMania.ConfigIni.bAutoPlay.Guitar || !CDTXMania.DTX.bチップがある.Guitar ) || ( this.actGauge.db現在のゲージ値.Guitar <= -0.1 );                         // #23630\r
252 //                                      bool flag4 = ( CDTXMania.ConfigIni.bAutoPlay.Bass || !CDTXMania.DTX.bチップがある.Bass ) || ( this.actGauge.db現在のゲージ値.Bass <= -0.1 );                                       // #23630\r
253                                         bool bFailedGuitar = (!CDTXMania.ConfigIni.bAutoPlay.Guitar && ((!CDTXMania.DTX.bチップがある.Guitar) || (this.actGauge.db現在のゲージ値.Guitar <= -0.1)));                // #23630 2011.11.9 yyagi: separated AutoPlay condition: not to be failed at once\r
254                                         bool bFailedBass   = (!CDTXMania.ConfigIni.bAutoPlay.Bass   && ((!CDTXMania.DTX.bチップがある.Bass)   || (this.actGauge.db現在のゲージ値.Bass   <= -0.1)));                // #23630 \r
255                                         if (bFailedGuitar && bFailedBass)\r
256                                         {\r
257                                                 this.actStageFailed.Start();\r
258                                                 CDTXMania.DTX.t全チップの再生停止();\r
259                                                 base.eフェーズID = CStage.Eフェーズ.演奏_STAGE_FAILED;\r
260                                         }\r
261                                 }\r
262                                 this.t進行描画・背景();\r
263                                 this.t進行描画・MIDIBGM();\r
264                                 this.t進行描画・パネル文字列();\r
265                                 this.t進行描画・スコア();\r
266                                 this.t進行描画・AVI();\r
267                                 this.t進行描画・BGA();\r
268                                 this.t進行描画・ステータスパネル();\r
269                                 this.t進行描画・レーンフラッシュGB();\r
270                                 this.t進行描画・ギターベース判定ライン();\r
271                                 this.t進行描画・ゲージ();\r
272                                 this.t進行描画・DANGER();\r
273                                 this.t進行描画・RGBボタン();\r
274                                 this.t進行描画・判定文字列();\r
275                                 this.t進行描画・コンボ();\r
276                                 this.t進行描画・WailingBonus();\r
277                                 this.t進行描画・譜面スクロール速度();\r
278                                 this.t進行描画・チップアニメ();\r
279                                 flag = this.t進行描画・チップ();\r
280                                 this.t進行描画・演奏情報();\r
281                                 this.t進行描画・Wailing枠();\r
282                                 this.t進行描画・チップファイアGB();\r
283                                 this.t進行描画・STAGEFAILED();\r
284                                 flag2 = this.t進行描画・フェードイン・アウト();\r
285                                 if( flag && ( base.eフェーズID == CStage.Eフェーズ.共通_通常状態 ) )\r
286                                 {\r
287                                         this.eフェードアウト完了時の戻り値 = E演奏画面の戻り値.ステージクリア;\r
288                                         base.eフェーズID = CStage.Eフェーズ.演奏_STAGE_CLEAR_フェードアウト;\r
289                                         this.actFOClear.tフェードアウト開始();\r
290                                 }\r
291                                 if( flag2 )\r
292                                 {\r
293                                         return (int) this.eフェードアウト完了時の戻り値;\r
294                                 }\r
295 \r
296                                 // キー入力\r
297 \r
298                                 if( CDTXMania.act現在入力を占有中のプラグイン == null )\r
299                                 {\r
300                                         IInputDevice keyboard = CDTXMania.Input管理.Keyboard;\r
301                                         if( keyboard.bキーが押された( 0x36 ) && ( keyboard.bキーが押されている( 120 ) || keyboard.bキーが押されている( 0x4e ) ) )\r
302                                         {\r
303                                                 this.bPAUSE = !this.bPAUSE;\r
304                                                 if( this.bPAUSE )\r
305                                                 {\r
306                                                         CDTXMania.Timer.t一時停止();\r
307                                                         CDTXMania.DTX.t全チップの再生一時停止();\r
308                                                 }\r
309                                                 else\r
310                                                 {\r
311                                                         CDTXMania.Timer.t再開();\r
312                                                         CDTXMania.DTX.t全チップの再生再開();\r
313                                                 }\r
314                                         }\r
315                                         if( ( !this.bPAUSE && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED ) ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) )\r
316                                         {\r
317                                                 this.t入力処理・ギター();\r
318                                                 this.t入力処理・ベース();\r
319                                                 if( keyboard.bキーが押された( 0x84 ) && ( keyboard.bキーが押されている( 120 ) || keyboard.bキーが押されている( 0x4e ) ) )\r
320                                                 {\r
321                                                         CDTXMania.DTX.t各自動再生音チップの再生時刻を変更する( ( keyboard.bキーが押されている( 0x4b ) || keyboard.bキーが押されている( 0x74 ) ) ? 1 : 10 );\r
322                                                         CDTXMania.DTX.tWave再生位置自動補正();\r
323                                                 }\r
324                                                 else if( keyboard.bキーが押された( 50 ) && ( keyboard.bキーが押されている( 120 ) || keyboard.bキーが押されている( 0x4e ) ) )\r
325                                                 {\r
326                                                         CDTXMania.DTX.t各自動再生音チップの再生時刻を変更する( ( keyboard.bキーが押されている( 0x4b ) || keyboard.bキーが押されている( 0x74 ) ) ? -1 : -10 );\r
327                                                         CDTXMania.DTX.tWave再生位置自動補正();\r
328                                                 }\r
329                                                 else if( keyboard.bキーが押された( 0x31 ) )\r
330                                                 {\r
331                                                         CDTXMania.ConfigIni.b演奏情報を表示する = !CDTXMania.ConfigIni.b演奏情報を表示する;\r
332                                                 }\r
333                                                 else if( ( base.eフェーズID == CStage.Eフェーズ.共通_通常状態 ) && ( keyboard.bキーが押された( 0x35 ) || CDTXMania.Pad.b押されたGB( Eパッド.FT ) ) )\r
334                                                 {\r
335                                                         this.actFO.tフェードアウト開始();\r
336                                                         base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;\r
337                                                         this.eフェードアウト完了時の戻り値 = E演奏画面の戻り値.演奏中断;\r
338                                                 }\r
339                                         }\r
340                                 }\r
341                         }\r
342                         return 0;\r
343                 }\r
344                 \r
345 \r
346                 // その他\r
347 \r
348                 #region [ private ]\r
349                 //-----------------\r
350                 private class STHITCOUNTOFRANK\r
351                 {\r
352                         // Fields\r
353                         public int Good;\r
354                         public int Great;\r
355                         public int Miss;\r
356                         public int Perfect;\r
357                         public int Poor;\r
358 \r
359                         // Properties\r
360                         public int this[ int index ]\r
361                         {\r
362                                 get\r
363                                 {\r
364                                         switch( index )\r
365                                         {\r
366                                                 case 0:\r
367                                                         return this.Perfect;\r
368 \r
369                                                 case 1:\r
370                                                         return this.Great;\r
371 \r
372                                                 case 2:\r
373                                                         return this.Good;\r
374 \r
375                                                 case 3:\r
376                                                         return this.Poor;\r
377 \r
378                                                 case 4:\r
379                                                         return this.Miss;\r
380                                         }\r
381                                         throw new IndexOutOfRangeException();\r
382                                 }\r
383                                 set\r
384                                 {\r
385                                         switch( index )\r
386                                         {\r
387                                                 case 0:\r
388                                                         this.Perfect = value;\r
389                                                         return;\r
390 \r
391                                                 case 1:\r
392                                                         this.Great = value;\r
393                                                         return;\r
394 \r
395                                                 case 2:\r
396                                                         this.Good = value;\r
397                                                         return;\r
398 \r
399                                                 case 3:\r
400                                                         this.Poor = value;\r
401                                                         return;\r
402 \r
403                                                 case 4:\r
404                                                         this.Miss = value;\r
405                                                         return;\r
406                                         }\r
407                                         throw new IndexOutOfRangeException();\r
408                                 }\r
409                         }\r
410                 }\r
411 \r
412                 [StructLayout( LayoutKind.Sequential )]\r
413                 private struct STKARAUCHI\r
414                 {\r
415                         public CDTX.CChip HH;\r
416                         public CDTX.CChip SD;\r
417                         public CDTX.CChip BD;\r
418                         public CDTX.CChip HT;\r
419                         public CDTX.CChip LT;\r
420                         public CDTX.CChip FT;\r
421                         public CDTX.CChip CY;\r
422                         public CDTX.CChip HHO;\r
423                         public CDTX.CChip RD;\r
424                         public CDTX.CChip LC;\r
425                         public CDTX.CChip this[ int index ]\r
426                         {\r
427                                 get\r
428                                 {\r
429                                         switch( index )\r
430                                         {\r
431                                                 case 0:\r
432                                                         return this.HH;\r
433 \r
434                                                 case 1:\r
435                                                         return this.SD;\r
436 \r
437                                                 case 2:\r
438                                                         return this.BD;\r
439 \r
440                                                 case 3:\r
441                                                         return this.HT;\r
442 \r
443                                                 case 4:\r
444                                                         return this.LT;\r
445 \r
446                                                 case 5:\r
447                                                         return this.FT;\r
448 \r
449                                                 case 6:\r
450                                                         return this.CY;\r
451 \r
452                                                 case 7:\r
453                                                         return this.HHO;\r
454 \r
455                                                 case 8:\r
456                                                         return this.RD;\r
457 \r
458                                                 case 9:\r
459                                                         return this.LC;\r
460                                         }\r
461                                         throw new IndexOutOfRangeException();\r
462                                 }\r
463                                 set\r
464                                 {\r
465                                         switch( index )\r
466                                         {\r
467                                                 case 0:\r
468                                                         this.HH = value;\r
469                                                         return;\r
470 \r
471                                                 case 1:\r
472                                                         this.SD = value;\r
473                                                         return;\r
474 \r
475                                                 case 2:\r
476                                                         this.BD = value;\r
477                                                         return;\r
478 \r
479                                                 case 3:\r
480                                                         this.HT = value;\r
481                                                         return;\r
482 \r
483                                                 case 4:\r
484                                                         this.LT = value;\r
485                                                         return;\r
486 \r
487                                                 case 5:\r
488                                                         this.FT = value;\r
489                                                         return;\r
490 \r
491                                                 case 6:\r
492                                                         this.CY = value;\r
493                                                         return;\r
494 \r
495                                                 case 7:\r
496                                                         this.HHO = value;\r
497                                                         return;\r
498 \r
499                                                 case 8:\r
500                                                         this.RD = value;\r
501                                                         return;\r
502 \r
503                                                 case 9:\r
504                                                         this.LC = value;\r
505                                                         return;\r
506                                         }\r
507                                         throw new IndexOutOfRangeException();\r
508                                 }\r
509                         }\r
510                 }\r
511 \r
512                 private CAct演奏AVI actAVI;\r
513                 private CAct演奏BGA actBGA;\r
514                 private CAct演奏Guitarチップファイア actChipFire;\r
515                 private CAct演奏Guitarコンボ actCombo;\r
516                 private CActFIFOBlack actFI;\r
517                 private CActFIFOBlack actFO;\r
518                 private CActFIFOWhite actFOClear;\r
519                 private CAct演奏Guitarゲージ actGauge;\r
520                 private CAct演奏Guitar判定文字列 actJudgeString;\r
521                 private CAct演奏GuitarレーンフラッシュGB actLaneFlushGB;\r
522                 private CAct演奏パネル文字列 actPanel;\r
523                 private CAct演奏演奏情報 actPlayInfo;\r
524                 private CAct演奏GuitarRGB actRGB;\r
525                 private CAct演奏Guitarスコア actScore;\r
526                 private CAct演奏ステージ失敗 actStageFailed;\r
527                 private CAct演奏Guitarステータスパネル actStatusPanels;\r
528                 private CAct演奏GuitarWailingBonus actWailingBonus;\r
529                 private CAct演奏スクロール速度 act譜面スクロール速度;\r
530                 private bool bPAUSE;\r
531                 private STDGBVALUE<bool> b演奏にMIDI入力を使った;\r
532                 private STDGBVALUE<bool> b演奏にキーボードを使った;\r
533                 private STDGBVALUE<bool> b演奏にジョイパッドを使った;\r
534                 private STDGBVALUE<bool> b演奏にマウスを使った;\r
535                 private CCounter ctWailingチップ模様アニメ;\r
536                 private STDGBVALUE<CCounter> ctチップ模様アニメ;\r
537                 private E演奏画面の戻り値 eフェードアウト完了時の戻り値;\r
538                 private readonly int[,] nBGAスコープチャンネルマップ = new int[ , ] { { 0xc4, 0xc7, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xe0 }, { 4, 7, 0x55, 0x56, 0x57, 0x58, 0x59, 0x60 } };\r
539                 private readonly int[] nチャンネル0Atoパッド08 = new int[] { 1, 2, 3, 4, 5, 7, 6, 1, 8, 0 };\r
540                 private readonly int[] nチャンネル0Atoレーン07 = new int[] { 1, 2, 3, 4, 5, 7, 6, 1, 7, 0 };\r
541                 private readonly int[] nパッド0Atoチャンネル0A = new int[] { 0x11, 0x12, 0x13, 20, 0x15, 0x17, 0x16, 0x18, 0x19, 0x1a };\r
542                 private readonly int[] nパッド0Atoパッド08 = new int[] { 1, 2, 3, 4, 5, 6, 7, 1, 8, 0 };\r
543                 private readonly int[] nパッド0Atoレーン07 = new int[] { 1, 2, 3, 4, 5, 6, 7, 1, 7, 0 };\r
544                 private STDGBVALUE<STHITCOUNTOFRANK> nヒット数・Auto含まない;\r
545                 private STDGBVALUE<STHITCOUNTOFRANK> nヒット数・Auto含む;\r
546                 private int n現在のトップChip = -1;\r
547                 private int[] n最後に再生したBGMの実WAV番号 = new int[ 50 ];\r
548                 private int n最後に再生したHHのチャンネル番号;\r
549                 private int n最後に再生したHHの実WAV番号;\r
550                 private int n最後に再生したギターの実WAV番号;\r
551                 private int n最後に再生したベースの実WAV番号;\r
552                 private STDGBVALUE<Queue<CDTX.CChip>> queWailing;\r
553                 private STDGBVALUE<CDTX.CChip> r現在の歓声Chip;\r
554                 private CDTX.CChip r現在の空うちギターChip;\r
555                 private STKARAUCHI r現在の空うちドラムChip;\r
556                 private CDTX.CChip r現在の空うちベースChip;\r
557                 private CDTX.CChip r次にくるギターChip;\r
558                 private CDTX.CChip r次にくるベースChip;\r
559                 private CTexture txWailing枠;\r
560                 private CTexture txチップ;\r
561                 private CTexture txヒットバー;\r
562                 private CTexture tx背景;\r
563 \r
564                 private E判定 e指定時刻からChipのJUDGEを返す( long nTime, CDTX.CChip pChip )\r
565                 {\r
566                         if( pChip != null )\r
567                         {\r
568                                 int num = Math.Abs( (int) ( nTime - pChip.n発声時刻ms ) );\r
569                                 if( num <= CDTXMania.nPerfect範囲ms )\r
570                                 {\r
571                                         return E判定.Perfect;\r
572                                 }\r
573                                 if( num <= CDTXMania.nGreat範囲ms )\r
574                                 {\r
575                                         return E判定.Great;\r
576                                 }\r
577                                 if( num <= CDTXMania.nGood範囲ms )\r
578                                 {\r
579                                         return E判定.Good;\r
580                                 }\r
581                                 if( num <= CDTXMania.nPoor範囲ms )\r
582                                 {\r
583                                         return E判定.Poor;\r
584                                 }\r
585                         }\r
586                         return E判定.Miss;\r
587                 }\r
588                 private CDTX.CChip r空うちChip( E楽器パート part, Eパッド pad )\r
589                 {\r
590                         switch( part )\r
591                         {\r
592                                 case E楽器パート.GUITAR:\r
593                                         return this.r現在の空うちギターChip;\r
594 \r
595                                 case E楽器パート.BASS:\r
596                                         return this.r現在の空うちベースChip;\r
597                         }\r
598                         return null;\r
599                 }\r
600                 private CDTX.CChip r指定時刻に一番近いChip・ヒット未済問わず不可視考慮( long nTime, int nChannelFlag )\r
601                 {\r
602                         int num5;\r
603                         if( this.n現在のトップChip == -1 )\r
604                         {\r
605                                 return null;\r
606                         }\r
607                         int count = CDTXMania.DTX.listChip.Count;\r
608                         int num4 = num5 = this.n現在のトップChip;\r
609                         if( this.n現在のトップChip >= count )\r
610                         {\r
611                                 num4 = num5 = count - 1;\r
612                         }\r
613                         int num2 = num4;\r
614                         while( num2 < count )\r
615                         {\r
616                                 CDTX.CChip chip = CDTXMania.DTX.listChip[ num2 ];\r
617                                 if( ( ( nChannelFlag >= 0x11 ) && ( nChannelFlag <= 0x1a ) ) && ( ( chip.nチャンネル番号 == nChannelFlag ) || ( chip.nチャンネル番号 == ( nChannelFlag + 0x20 ) ) ) )\r
618                                 {\r
619                                         if( chip.n発声時刻ms > nTime )\r
620                                         {\r
621                                                 break;\r
622                                         }\r
623                                         num5 = num2;\r
624                                 }\r
625                                 else if( ( ( nChannelFlag == 0x2f ) && ( chip.e楽器パート == E楽器パート.GUITAR ) ) || ( ( ( nChannelFlag >= 0x20 ) && ( nChannelFlag <= 40 ) ) && ( chip.nチャンネル番号 == nChannelFlag ) ) )\r
626                                 {\r
627                                         if( chip.n発声時刻ms > nTime )\r
628                                         {\r
629                                                 break;\r
630                                         }\r
631                                         num5 = num2;\r
632                                 }\r
633                                 else if( ( ( nChannelFlag == 0xaf ) && ( chip.e楽器パート == E楽器パート.BASS ) ) || ( ( ( nChannelFlag >= 160 ) && ( nChannelFlag <= 0xa8 ) ) && ( chip.nチャンネル番号 == nChannelFlag ) ) )\r
634                                 {\r
635                                         if( chip.n発声時刻ms > nTime )\r
636                                         {\r
637                                                 break;\r
638                                         }\r
639                                         num5 = num2;\r
640                                 }\r
641                                 num2++;\r
642                         }\r
643                         int num3 = num5;\r
644                         while( num3 >= 0 )\r
645                         {\r
646                                 CDTX.CChip chip2 = CDTXMania.DTX.listChip[ num3 ];\r
647                                 if( ( nChannelFlag >= 0x11 ) && ( nChannelFlag <= 0x1a ) )\r
648                                 {\r
649                                         if( ( chip2.nチャンネル番号 == nChannelFlag ) || ( chip2.nチャンネル番号 == ( nChannelFlag + 0x20 ) ) )\r
650                                         {\r
651                                                 break;\r
652                                         }\r
653                                 }\r
654                                 else if( ( ( nChannelFlag == 0x2f ) && ( chip2.e楽器パート == E楽器パート.GUITAR ) ) || ( ( ( nChannelFlag >= 0x20 ) && ( nChannelFlag <= 40 ) ) && ( chip2.nチャンネル番号 == nChannelFlag ) ) )\r
655                                 {\r
656                                         if( ( chip2.nチャンネル番号 >= 0x20 ) && ( chip2.nチャンネル番号 <= 40 ) )\r
657                                         {\r
658                                                 break;\r
659                                         }\r
660                                 }\r
661                                 else if( ( ( ( nChannelFlag == 0xaf ) && ( chip2.e楽器パート == E楽器パート.BASS ) ) || ( ( ( nChannelFlag >= 160 ) && ( nChannelFlag <= 0xa8 ) ) && ( chip2.nチャンネル番号 == nChannelFlag ) ) ) && ( ( chip2.nチャンネル番号 >= 160 ) && ( chip2.nチャンネル番号 <= 0xa8 ) ) )\r
662                                 {\r
663                                         break;\r
664                                 }\r
665                                 num3--;\r
666                         }\r
667                         if( ( num2 == count ) && ( num3 < 0 ) )\r
668                         {\r
669                                 return null;\r
670                         }\r
671                         if( num2 == count )\r
672                         {\r
673                                 return CDTXMania.DTX.listChip[ num3 ];\r
674                         }\r
675                         if( num3 < 0 )\r
676                         {\r
677                                 return CDTXMania.DTX.listChip[ num2 ];\r
678                         }\r
679                         CDTX.CChip chip3 = CDTXMania.DTX.listChip[ num2 ];\r
680                         CDTX.CChip chip4 = CDTXMania.DTX.listChip[ num3 ];\r
681                         int num6 = Math.Abs( (int) ( nTime - chip3.n発声時刻ms ) );\r
682                         int num7 = Math.Abs( (int) ( nTime - chip4.n発声時刻ms ) );\r
683                         if( num6 >= num7 )\r
684                         {\r
685                                 return chip4;\r
686                         }\r
687                         return chip3;\r
688                 }\r
689                 private CDTX.CChip r指定時刻に一番近い未ヒットChip( long nTime, int nChannelFlag )\r
690                 {\r
691                         return this.r指定時刻に一番近い未ヒットChip( nTime, nChannelFlag, 0 );\r
692                 }\r
693                 private CDTX.CChip r指定時刻に一番近い未ヒットChip( long nTime, int nChannelFlag, int n検索範囲時間ms )\r
694                 {\r
695                         int num5;\r
696                         int num6;\r
697                         if( this.n現在のトップChip == -1 )\r
698                         {\r
699                                 return null;\r
700                         }\r
701                         int count = CDTXMania.DTX.listChip.Count;\r
702                         int num4 = num5 = this.n現在のトップChip;\r
703                         if( this.n現在のトップChip >= count )\r
704                         {\r
705                                 num4 = num5 = count - 1;\r
706                         }\r
707                         int num2 = num4;\r
708                         while( num2 < count )\r
709                         {\r
710                                 CDTX.CChip chip = CDTXMania.DTX.listChip[ num2 ];\r
711                                 if( ( !chip.bHit && ( nChannelFlag >= 0x11 ) ) && ( nChannelFlag <= 0x1a ) )\r
712                                 {\r
713                                         if( ( chip.nチャンネル番号 == nChannelFlag ) || ( chip.nチャンネル番号 == ( nChannelFlag + 0x20 ) ) )\r
714                                         {\r
715                                                 if( chip.n発声時刻ms > nTime )\r
716                                                 {\r
717                                                         break;\r
718                                                 }\r
719                                                 num5 = num2;\r
720                                         }\r
721                                 }\r
722                                 else if( !chip.bHit && ( ( ( nChannelFlag == 0x2f ) && ( chip.e楽器パート == E楽器パート.GUITAR ) ) || ( ( ( nChannelFlag >= 0x20 ) && ( nChannelFlag <= 40 ) ) && ( chip.nチャンネル番号 == nChannelFlag ) ) ) )\r
723                                 {\r
724                                         if( chip.n発声時刻ms > nTime )\r
725                                         {\r
726                                                 break;\r
727                                         }\r
728                                         num5 = num2;\r
729                                 }\r
730                                 else if( !chip.bHit && ( ( ( nChannelFlag == 0xaf ) && ( chip.e楽器パート == E楽器パート.BASS ) ) || ( ( ( nChannelFlag >= 160 ) && ( nChannelFlag <= 0xa8 ) ) && ( chip.nチャンネル番号 == nChannelFlag ) ) ) )\r
731                                 {\r
732                                         if( chip.n発声時刻ms > nTime )\r
733                                         {\r
734                                                 break;\r
735                                         }\r
736                                         num5 = num2;\r
737                                 }\r
738                                 num2++;\r
739                         }\r
740                         int num3 = num5;\r
741                         while( num3 >= 0 )\r
742                         {\r
743                                 CDTX.CChip chip2 = CDTXMania.DTX.listChip[ num3 ];\r
744                                 if( ( ( ( !chip2.bHit && ( nChannelFlag >= 0x11 ) ) && ( ( nChannelFlag <= 0x1a ) && ( ( chip2.nチャンネル番号 == nChannelFlag ) || ( chip2.nチャンネル番号 == ( nChannelFlag + 0x20 ) ) ) ) ) || ( !chip2.bHit && ( ( ( nChannelFlag == 0x2f ) && ( chip2.e楽器パート == E楽器パート.GUITAR ) ) || ( ( ( nChannelFlag >= 0x20 ) && ( nChannelFlag <= 40 ) ) && ( chip2.nチャンネル番号 == nChannelFlag ) ) ) ) ) || ( !chip2.bHit && ( ( ( nChannelFlag == 0xaf ) && ( chip2.e楽器パート == E楽器パート.BASS ) ) || ( ( ( nChannelFlag >= 160 ) && ( nChannelFlag <= 0xa8 ) ) && ( chip2.nチャンネル番号 == nChannelFlag ) ) ) ) )\r
745                                 {\r
746                                         break;\r
747                                 }\r
748                                 num3--;\r
749                         }\r
750                         if( ( num2 == count ) && ( num3 < 0 ) )\r
751                         {\r
752                                 return null;\r
753                         }\r
754                         CDTX.CChip chip3 = null;\r
755                         if( num2 == count )\r
756                         {\r
757                                 chip3 = CDTXMania.DTX.listChip[ num3 ];\r
758                                 num6 = Math.Abs( (int) ( nTime - chip3.n発声時刻ms ) );\r
759                         }\r
760                         else if( num3 < 0 )\r
761                         {\r
762                                 chip3 = CDTXMania.DTX.listChip[ num2 ];\r
763                                 num6 = Math.Abs( (int) ( nTime - chip3.n発声時刻ms ) );\r
764                         }\r
765                         else\r
766                         {\r
767                                 int num7 = Math.Abs( (int) ( nTime - CDTXMania.DTX.listChip[ num2 ].n発声時刻ms ) );\r
768                                 int num8 = Math.Abs( (int) ( nTime - CDTXMania.DTX.listChip[ num3 ].n発声時刻ms ) );\r
769                                 if( num7 < num8 )\r
770                                 {\r
771                                         chip3 = CDTXMania.DTX.listChip[ num2 ];\r
772                                         num6 = Math.Abs( (int) ( nTime - chip3.n発声時刻ms ) );\r
773                                 }\r
774                                 else\r
775                                 {\r
776                                         chip3 = CDTXMania.DTX.listChip[ num3 ];\r
777                                         num6 = Math.Abs( (int) ( nTime - chip3.n発声時刻ms ) );\r
778                                 }\r
779                         }\r
780                         if( ( n検索範囲時間ms > 0 ) && ( num6 > n検索範囲時間ms ) )\r
781                         {\r
782                                 return null;\r
783                         }\r
784                         return chip3;\r
785                 }\r
786                 private CDTX.CChip r次にくるギターChipを更新して返す()\r
787                 {\r
788                         this.r次にくるギターChip = this.r指定時刻に一番近い未ヒットChip( CDTXMania.Timer.n現在時刻, 0x2f, 500 );\r
789                         return this.r次にくるギターChip;\r
790                 }\r
791                 private CDTX.CChip r次にくるベースChipを更新して返す()\r
792                 {\r
793                         this.r次にくるベースChip = this.r指定時刻に一番近い未ヒットChip( CDTXMania.Timer.n現在時刻, 0xaf, 500 );\r
794                         return this.r次にくるベースChip;\r
795                 }\r
796                 private void tサウンド再生( CDTX.CChip rChip, long n再生開始システム時刻ms, E楽器パート part )\r
797                 {\r
798                         this.tサウンド再生( rChip, n再生開始システム時刻ms, part, CDTXMania.ConfigIni.n手動再生音量, false, false );\r
799                 }\r
800                 private void tサウンド再生( CDTX.CChip rChip, long n再生開始システム時刻ms, E楽器パート part, int n音量 )\r
801                 {\r
802                         this.tサウンド再生( rChip, n再生開始システム時刻ms, part, n音量, false, false );\r
803                 }\r
804                 private void tサウンド再生( CDTX.CChip rChip, long n再生開始システム時刻ms, E楽器パート part, int n音量, bool bモニタ )\r
805                 {\r
806                         this.tサウンド再生( rChip, n再生開始システム時刻ms, part, n音量, bモニタ, false );\r
807                 }\r
808                 private void tサウンド再生( CDTX.CChip pChip, long n再生開始システム時刻ms, E楽器パート part, int n音量, bool bモニタ, bool b音程をずらして再生 )\r
809                 {\r
810                         if( pChip != null )\r
811                         {\r
812                                 switch( part )\r
813                                 {\r
814                                         case E楽器パート.DRUMS:\r
815                                                 if( CDTXMania.ConfigIni.bドラム打音を発声する )\r
816                                                 {\r
817                                                         int index = pChip.nチャンネル番号;\r
818                                                         if( ( index >= 0x11 ) && ( index <= 0x1a ) )\r
819                                                         {\r
820                                                                 index -= 0x11;\r
821                                                         }\r
822                                                         else\r
823                                                         {\r
824                                                                 if( ( index < 0x31 ) || ( index > 0x3a ) )\r
825                                                                 {\r
826                                                                         return;\r
827                                                                 }\r
828                                                                 index -= 0x31;\r
829                                                         }\r
830                                                         int nLane = this.nチャンネル0Atoレーン07[ index ];\r
831                                                         if( ( nLane == 1 ) && ( ( index == 0 ) || ( ( ( index == 7 ) && ( this.n最後に再生したHHのチャンネル番号 != 0x18 ) ) && ( this.n最後に再生したHHのチャンネル番号 != 0x38 ) ) ) )\r
832                                                         {\r
833                                                                 CDTXMania.DTX.tWavの再生停止( this.n最後に再生したHHの実WAV番号 );\r
834                                                                 this.n最後に再生したHHの実WAV番号 = pChip.n整数値・内部番号;\r
835                                                                 this.n最後に再生したHHのチャンネル番号 = pChip.nチャンネル番号;\r
836                                                         }\r
837                                                         CDTXMania.DTX.tチップの再生( pChip, n再生開始システム時刻ms, nLane, n音量, bモニタ );\r
838                                                         return;\r
839                                                 }\r
840                                                 return;\r
841 \r
842                                         case E楽器パート.GUITAR:\r
843                                                 CDTXMania.DTX.tWavの再生停止( this.n最後に再生したギターの実WAV番号 );\r
844                                                 CDTXMania.DTX.tチップの再生( pChip, n再生開始システム時刻ms, 8, n音量, bモニタ, b音程をずらして再生 );\r
845                                                 this.n最後に再生したギターの実WAV番号 = pChip.n整数値・内部番号;\r
846                                                 return;\r
847 \r
848                                         case E楽器パート.BASS:\r
849                                                 CDTXMania.DTX.tWavの再生停止( this.n最後に再生したベースの実WAV番号 );\r
850                                                 CDTXMania.DTX.tチップの再生( pChip, n再生開始システム時刻ms, 9, n音量, bモニタ, b音程をずらして再生 );\r
851                                                 this.n最後に再生したベースの実WAV番号 = pChip.n整数値・内部番号;\r
852                                                 return;\r
853                                 }\r
854                         }\r
855                 }\r
856                 private void tステータスパネルの選択()\r
857                 {\r
858                         if( CDTXMania.bコンパクトモード )\r
859                         {\r
860                                 this.actStatusPanels.tラベル名からステータスパネルを決定する( null );\r
861                         }\r
862                         else if( CDTXMania.stage選曲.r確定された曲 != null )\r
863                         {\r
864                                 this.actStatusPanels.tラベル名からステータスパネルを決定する( CDTXMania.stage選曲.r確定された曲.ar難易度ラベル[ CDTXMania.stage選曲.n確定された曲の難易度 ] );\r
865                         }\r
866                 }\r
867                 private E判定 tチップのヒット処理( long nHitTime, CDTX.CChip pChip )\r
868                 {\r
869                         pChip.bHit = true;\r
870                         E判定 e判定 = this.e指定時刻からChipのJUDGEを返す( nHitTime, pChip );\r
871                         bool flag = false;\r
872                         if( ( ( pChip.e楽器パート == E楽器パート.GUITAR ) && CDTXMania.ConfigIni.bAutoPlay.Guitar ) || ( ( pChip.e楽器パート == E楽器パート.BASS ) && CDTXMania.ConfigIni.bAutoPlay.Bass ) )\r
873                         {\r
874                                 flag = true;\r
875                         }\r
876                         else\r
877                         {\r
878                                 this.bAUTOでないチップが1つでもバーを通過した = true;\r
879                         }\r
880                         switch( pChip.e楽器パート )\r
881                         {\r
882                                 case E楽器パート.GUITAR:\r
883                                         this.actJudgeString.Start( 10, flag ? E判定.Auto : e判定 );\r
884                                         break;\r
885 \r
886                                 case E楽器パート.BASS:\r
887                                         this.actJudgeString.Start( 11, flag ? E判定.Auto : e判定 );\r
888                                         break;\r
889                         }\r
890                         if( !flag )\r
891                         {\r
892                                 this.t判定にあわせてゲージを増減する( pChip.e楽器パート, e判定 );\r
893                         }\r
894                         int num = 0;\r
895                         switch( pChip.e楽器パート )\r
896                         {\r
897                                 case E楽器パート.DRUMS:\r
898                                         if( ( e判定 != E判定.Miss ) && ( e判定 != E判定.Bad ) )\r
899                                         {\r
900                                                 STHITCOUNTOFRANK sthitcountofrank;\r
901                                                 int num4;\r
902                                                 ( sthitcountofrank = this.nヒット数・Auto含む.Drums )[ num4 = (int) e判定 ] = sthitcountofrank[ num4 ] + 1;\r
903                                         }\r
904                                         else\r
905                                         {\r
906                                                 this.nヒット数・Auto含む.Drums.Miss++;\r
907                                         }\r
908                                         goto Label_0299;\r
909 \r
910                                 case E楽器パート.GUITAR:\r
911                                         if( ( e判定 != E判定.Miss ) && ( e判定 != E判定.Bad ) )\r
912                                         {\r
913                                                 STHITCOUNTOFRANK sthitcountofrank2;\r
914                                                 int num5;\r
915                                                 ( sthitcountofrank2 = this.nヒット数・Auto含む.Guitar )[ num5 = (int) e判定 ] = sthitcountofrank2[ num5 ] + 1;\r
916                                                 break;\r
917                                         }\r
918                                         this.nヒット数・Auto含む.Guitar.Miss++;\r
919                                         break;\r
920 \r
921                                 case E楽器パート.BASS:\r
922                                         if( ( e判定 != E判定.Miss ) && ( e判定 != E判定.Bad ) )\r
923                                         {\r
924                                                 STHITCOUNTOFRANK sthitcountofrank4;\r
925                                                 int num7;\r
926                                                 ( sthitcountofrank4 = this.nヒット数・Auto含む.Bass )[ num7 = (int) e判定 ] = sthitcountofrank4[ num7 ] + 1;\r
927                                         }\r
928                                         else\r
929                                         {\r
930                                                 this.nヒット数・Auto含む.Bass.Miss++;\r
931                                         }\r
932                                         if( !flag )\r
933                                         {\r
934                                                 STHITCOUNTOFRANK sthitcountofrank5;\r
935                                                 int num8;\r
936                                                 switch( e判定 )\r
937                                                 {\r
938                                                         case E判定.Miss:\r
939                                                         case E判定.Bad:\r
940                                                                 this.nヒット数・Auto含まない.Bass.Miss++;\r
941                                                                 goto Label_0264;\r
942                                                 }\r
943                                                 ( sthitcountofrank5 = this.nヒット数・Auto含まない.Bass )[ num8 = (int) e判定 ] = sthitcountofrank5[ num8 ] + 1;\r
944                                         }\r
945                                         goto Label_0264;\r
946 \r
947                                 default:\r
948                                         goto Label_0299;\r
949                         }\r
950                         if( !flag )\r
951                         {\r
952                                 STHITCOUNTOFRANK sthitcountofrank3;\r
953                                 int num6;\r
954                                 switch( e判定 )\r
955                                 {\r
956                                         case E判定.Miss:\r
957                                         case E判定.Bad:\r
958                                                 this.nヒット数・Auto含まない.Guitar.Miss++;\r
959                                                 goto Label_019F;\r
960                                 }\r
961                                 ( sthitcountofrank3 = this.nヒット数・Auto含まない.Guitar )[ num6 = (int) e判定 ] = sthitcountofrank3[ num6 ] + 1;\r
962                         }\r
963                 Label_019F:\r
964                         num = this.actCombo.n現在のコンボ数.Guitar;\r
965                         switch( e判定 )\r
966                         {\r
967                                 case E判定.Perfect:\r
968                                 case E判定.Great:\r
969                                 case E判定.Good:\r
970                                         num++;\r
971                                         break;\r
972 \r
973                                 default:\r
974                                         num = 0;\r
975                                         break;\r
976                         }\r
977                         this.actCombo.n現在のコンボ数.Guitar = num;\r
978                         goto Label_0299;\r
979                 Label_0264:\r
980                         num = this.actCombo.n現在のコンボ数.Bass;\r
981                         switch( e判定 )\r
982                         {\r
983                                 case E判定.Perfect:\r
984                                 case E判定.Great:\r
985                                 case E判定.Good:\r
986                                         num++;\r
987                                         break;\r
988 \r
989                                 default:\r
990                                         num = 0;\r
991                                         break;\r
992                         }\r
993                         this.actCombo.n現在のコンボ数.Bass = num;\r
994                 Label_0299:\r
995                         if( ( !flag && ( e判定 != E判定.Miss ) ) && ( e判定 != E判定.Bad ) )\r
996                         {\r
997                                 int guitar = 0;\r
998                                 if( pChip.e楽器パート == E楽器パート.GUITAR )\r
999                                 {\r
1000                                         guitar = this.actCombo.n現在のコンボ数.Guitar;\r
1001                                 }\r
1002                                 if( pChip.e楽器パート == E楽器パート.BASS )\r
1003                                 {\r
1004                                         guitar = this.actCombo.n現在のコンボ数.Bass;\r
1005                                 }\r
1006                                 long nScore = this.actScore.Get( pChip.e楽器パート );\r
1007                                 long[] numArray = new long[] { 350L, 200L, 50L, 0L };\r
1008                                 if( ( guitar <= 500 ) || ( e判定 == E判定.Good ) )\r
1009                                 {\r
1010                                         nScore += numArray[ (int) e判定 ] * guitar;\r
1011                                 }\r
1012                                 else if( ( e判定 == E判定.Perfect ) || ( e判定 == E判定.Great ) )\r
1013                                 {\r
1014                                         nScore += numArray[ (int) e判定 ] * 500L;\r
1015                                 }\r
1016                                 this.actScore.Set( pChip.e楽器パート, nScore );\r
1017                         }\r
1018                         return e判定;\r
1019                 }\r
1020                 private void tチップのヒット処理・BadならびにTight時のMiss( E楽器パート part )\r
1021                 {\r
1022                         this.tチップのヒット処理・BadならびにTight時のMiss( part, 0 );\r
1023                 }\r
1024                 private void tチップのヒット処理・BadならびにTight時のMiss( E楽器パート part, int nLane )\r
1025                 {\r
1026                         this.t判定にあわせてゲージを増減する( part, E判定.Miss );\r
1027                         switch( part )\r
1028                         {\r
1029                                 case E楽器パート.DRUMS:\r
1030                                         break;\r
1031 \r
1032                                 case E楽器パート.GUITAR:\r
1033                                         this.actJudgeString.Start( 10, E判定.Bad );\r
1034                                         this.actCombo.n現在のコンボ数.Guitar = 0;\r
1035                                         return;\r
1036 \r
1037                                 case E楽器パート.BASS:\r
1038                                         this.actJudgeString.Start( 11, E判定.Bad );\r
1039                                         this.actCombo.n現在のコンボ数.Bass = 0;\r
1040                                         break;\r
1041 \r
1042                                 default:\r
1043                                         return;\r
1044                         }\r
1045                 }\r
1046                 private void tパネル文字列の設定()\r
1047                 {\r
1048                         this.actPanel.SetPanelString( string.IsNullOrEmpty( CDTXMania.DTX.PANEL ) ? CDTXMania.DTX.TITLE : CDTXMania.DTX.PANEL );\r
1049                 }\r
1050                 private void t進行描画・AVI()\r
1051                 {\r
1052                         if( ( ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) ) && ( !CDTXMania.ConfigIni.bストイックモード && CDTXMania.ConfigIni.bAVI有効 ) )\r
1053                         {\r
1054                                 this.actAVI.t進行描画( 0xb5, 50 );\r
1055                         }\r
1056                 }\r
1057                 private void t進行描画・BGA()\r
1058                 {\r
1059                         if( ( ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) ) && ( !CDTXMania.ConfigIni.bストイックモード && CDTXMania.ConfigIni.bBGA有効 ) )\r
1060                         {\r
1061                                 this.actBGA.t進行描画( 0xb5, 50 );\r
1062                         }\r
1063                 }\r
1064                 private void t進行描画・DANGER()\r
1065                 {\r
1066                 }\r
1067                 private void t進行描画・MIDIBGM()\r
1068                 {\r
1069                         if( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED )\r
1070                         {\r
1071                                 CStage.Eフェーズ eフェーズid1 = base.eフェーズID;\r
1072                         }\r
1073                 }\r
1074                 private void t進行描画・RGBボタン()\r
1075                 {\r
1076                         if( CDTXMania.ConfigIni.eDark != Eダークモード.FULL )\r
1077                         {\r
1078                                 this.actRGB.On進行描画();\r
1079                         }\r
1080                 }\r
1081                 private void t進行描画・STAGEFAILED()\r
1082                 {\r
1083                         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
1084                         {\r
1085                                 this.eフェードアウト完了時の戻り値 = E演奏画面の戻り値.ステージ失敗;\r
1086                                 base.eフェーズID = CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト;\r
1087                                 this.actFO.tフェードアウト開始();\r
1088                         }\r
1089                 }\r
1090                 private void t進行描画・WailingBonus()\r
1091                 {\r
1092                         if( ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) )\r
1093                         {\r
1094                                 this.actWailingBonus.On進行描画();\r
1095                         }\r
1096                 }\r
1097                 private void t進行描画・Wailing枠()\r
1098                 {\r
1099                         if( ( CDTXMania.ConfigIni.eDark != Eダークモード.FULL ) && CDTXMania.ConfigIni.bGuitar有効 )\r
1100                         {\r
1101                                 if( CDTXMania.DTX.bチップがある.Guitar && ( this.txWailing枠 != null ) )\r
1102                                 {\r
1103                                         this.txWailing枠.t2D描画( CDTXMania.app.Device, 0x8b, CDTXMania.ConfigIni.bReverse.Guitar ? 340 : 11 );\r
1104                                 }\r
1105                                 if( CDTXMania.DTX.bチップがある.Bass && ( this.txWailing枠 != null ) )\r
1106                                 {\r
1107                                         this.txWailing枠.t2D描画( CDTXMania.app.Device, 0x251, CDTXMania.ConfigIni.bReverse.Bass ? 340 : 11 );\r
1108                                 }\r
1109                         }\r
1110                 }\r
1111                 private void t進行描画・ギターベース判定ライン()\r
1112                 {\r
1113                         if( ( CDTXMania.ConfigIni.eDark != Eダークモード.FULL ) && CDTXMania.ConfigIni.bGuitar有効 )\r
1114                         {\r
1115                                 if( CDTXMania.DTX.bチップがある.Guitar )\r
1116                                 {\r
1117                                         int y = ( CDTXMania.ConfigIni.bReverse.Guitar ? 0x171 : 40 ) - 3;\r
1118                                         for( int i = 0; i < 4; i++ )\r
1119                                         {\r
1120                                                 if( this.txヒットバー != null )\r
1121                                                 {\r
1122                                                         this.txヒットバー.t2D描画( CDTXMania.app.Device, 0x17 + ( 0x1c * i ), y, new Rectangle( 0, i * 8, 0x1c, 8 ) );\r
1123                                                 }\r
1124                                         }\r
1125                                 }\r
1126                                 if( CDTXMania.DTX.bチップがある.Bass )\r
1127                                 {\r
1128                                         int num3 = ( CDTXMania.ConfigIni.bReverse.Bass ? 0x171 : 40 ) - 3;\r
1129                                         for( int j = 0; j < 4; j++ )\r
1130                                         {\r
1131                                                 if( this.txヒットバー != null )\r
1132                                                 {\r
1133                                                         this.txヒットバー.t2D描画( CDTXMania.app.Device, 0x1dd + ( 0x1c * j ), num3, new Rectangle( 0, j * 8, 0x1c, 8 ) );\r
1134                                                 }\r
1135                                         }\r
1136                                 }\r
1137                         }\r
1138                 }\r
1139                 private void t進行描画・ゲージ()\r
1140                 {\r
1141                         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
1142                         {\r
1143                                 this.actGauge.On進行描画();\r
1144                         }\r
1145                 }\r
1146                 private void t進行描画・コンボ()\r
1147                 {\r
1148                         this.actCombo.On進行描画();\r
1149                 }\r
1150                 private void t進行描画・スコア()\r
1151                 {\r
1152                         this.actScore.On進行描画();\r
1153                 }\r
1154                 private void t進行描画・ステータスパネル()\r
1155                 {\r
1156                         this.actStatusPanels.On進行描画();\r
1157                 }\r
1158                 private bool t進行描画・チップ()\r
1159                 {\r
1160                         if( ( base.eフェーズID == CStage.Eフェーズ.演奏_STAGE_FAILED ) || ( base.eフェーズID == CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) )\r
1161                         {\r
1162                                 return true;\r
1163                         }\r
1164                         if( ( this.n現在のトップChip == -1 ) || ( this.n現在のトップChip >= CDTXMania.DTX.listChip.Count ) )\r
1165                         {\r
1166                                 return true;\r
1167                         }\r
1168                         int num = this.n現在のトップChip;\r
1169                         if( num == -1 )\r
1170                         {\r
1171                                 return true;\r
1172                         }\r
1173 \r
1174                         //double speed = 264.0; // BPM150の時の1小節の長さ[dot]\r
1175                         double speed = 234.0;   // BPM150の時の1小節の長さ[dot]\r
1176 \r
1177                         double num2 = ( ( ( ( this.act譜面スクロール速度.db現在の譜面スクロール速度.Drums + 1.0 ) * 0.5 ) * 37.5 ) * speed ) / 60000.0;\r
1178                         double num3 = ( ( ( ( ( this.act譜面スクロール速度.db現在の譜面スクロール速度.Guitar + 1.0 ) * 0.5 ) * 0.5 ) * 37.5 ) * speed ) / 60000.0;\r
1179                         double num4 = ( ( ( ( ( this.act譜面スクロール速度.db現在の譜面スクロール速度.Bass + 1.0 ) * 0.5 ) * 0.5 ) * 37.5 ) * speed ) / 60000.0;\r
1180 \r
1181                         CDTX dTX = CDTXMania.DTX;\r
1182                         CConfigIni configIni = CDTXMania.ConfigIni;\r
1183                         while( num < dTX.listChip.Count )\r
1184                         {\r
1185                                 CDTX.CChip pChip = dTX.listChip[ num ];\r
1186                                 pChip.nバーからの距離dot.Drums = (int) ( ( pChip.n発声時刻ms - CDTXMania.Timer.n現在時刻 ) * num2 );\r
1187                                 pChip.nバーからの距離dot.Guitar = (int) ( ( pChip.n発声時刻ms - CDTXMania.Timer.n現在時刻 ) * num3 );\r
1188                                 pChip.nバーからの距離dot.Bass = (int) ( ( pChip.n発声時刻ms - CDTXMania.Timer.n現在時刻 ) * num4 );\r
1189                                 if( Math.Min( Math.Min( pChip.nバーからの距離dot.Drums, pChip.nバーからの距離dot.Guitar ), pChip.nバーからの距離dot.Bass ) > 450 )\r
1190                                 {\r
1191                                         break;\r
1192                                 }\r
1193                                 if( ( ( num == this.n現在のトップChip ) && ( pChip.nバーからの距離dot.Drums < -65 ) ) && pChip.bHit )\r
1194                                 {\r
1195                                         this.n現在のトップChip++;\r
1196                                         num = this.n現在のトップChip;\r
1197                                         continue;\r
1198                                 }\r
1199                                 if( ( ( pChip.e楽器パート != E楽器パート.UNKNOWN ) && !pChip.bHit ) && ( ( pChip.nバーからの距離dot.Drums < 0 ) && ( this.e指定時刻からChipのJUDGEを返す( CDTXMania.Timer.n現在時刻, pChip ) == E判定.Miss ) ) )\r
1200                                 {\r
1201                                         this.tチップのヒット処理( CDTXMania.Timer.n現在時刻, pChip );\r
1202                                 }\r
1203                                 switch( pChip.nチャンネル番号 )\r
1204                                 {\r
1205                                         case 1:\r
1206                                                 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
1207                                                 {\r
1208                                                         pChip.bHit = true;\r
1209                                                         if( configIni.bBGM音を発声する )\r
1210                                                         {\r
1211                                                                 dTX.tチップの再生( pChip, CDTXMania.Timer.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, 10, dTX.nモニタを考慮した音量( E楽器パート.UNKNOWN ) );\r
1212                                                         }\r
1213                                                 }\r
1214                                                 break;\r
1215 \r
1216                                         case 3:\r
1217                                                 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
1218                                                 {\r
1219                                                         pChip.bHit = true;\r
1220                                                         this.actPlayInfo.dbBPM = ( pChip.n整数値 * ( ( (double) configIni.n演奏速度 ) / 20.0 ) ) + dTX.BASEBPM;\r
1221                                                 }\r
1222                                                 break;\r
1223 \r
1224                                         case 4:\r
1225                                         case 7:\r
1226                                         case 0x55:\r
1227                                         case 0x56:\r
1228                                         case 0x57:\r
1229                                         case 0x58:\r
1230                                         case 0x59:\r
1231                                         case 0x60:\r
1232                                                 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
1233                                                 {\r
1234                                                         pChip.bHit = true;\r
1235                                                         if( configIni.bBGA有効 )\r
1236                                                         {\r
1237                                                                 switch( pChip.eBGA種別 )\r
1238                                                                 {\r
1239                                                                         case EBGA種別.BMPTEX:\r
1240                                                                                 if( pChip.rBMPTEX != null )\r
1241                                                                                 {\r
1242                                                                                         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
1243                                                                                 }\r
1244                                                                                 break;\r
1245 \r
1246                                                                         case EBGA種別.BGA:\r
1247                                                                                 if( ( pChip.rBGA != null ) && ( ( pChip.rBMP != null ) || ( pChip.rBMPTEX != null ) ) )\r
1248                                                                                 {\r
1249                                                                                         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
1250                                                                                 }\r
1251                                                                                 break;\r
1252 \r
1253                                                                         case EBGA種別.BGAPAN:\r
1254                                                                                 if( ( pChip.rBGAPan != null ) && ( ( pChip.rBMP != null ) || ( pChip.rBMPTEX != null ) ) )\r
1255                                                                                 {\r
1256                                                                                         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
1257                                                                                 }\r
1258                                                                                 break;\r
1259 \r
1260                                                                         default:\r
1261                                                                                 if( pChip.rBMP != null )\r
1262                                                                                 {\r
1263                                                                                         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
1264                                                                                 }\r
1265                                                                                 break;\r
1266                                                                 }\r
1267                                                         }\r
1268                                                 }\r
1269                                                 break;\r
1270 \r
1271                                         case 8:\r
1272                                                 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
1273                                                 {\r
1274                                                         pChip.bHit = true;\r
1275                                                         if( dTX.listBPM.ContainsKey( pChip.n整数値・内部番号 ) )\r
1276                                                         {\r
1277                                                                 this.actPlayInfo.dbBPM = ( dTX.listBPM[ pChip.n整数値・内部番号 ].dbBPM値 * ( ( (double) configIni.n演奏速度 ) / 20.0 ) ) + dTX.BASEBPM;\r
1278                                                         }\r
1279                                                 }\r
1280                                                 break;\r
1281 \r
1282                                         case 0x11:\r
1283                                         case 0x12:\r
1284                                         case 0x13:\r
1285                                         case 0x14:\r
1286                                         case 0x15:\r
1287                                         case 0x16:\r
1288                                         case 0x17:\r
1289                                         case 0x18:\r
1290                                         case 0x19:\r
1291                                         case 0x1a:\r
1292                                                 {\r
1293                                                         int num1 = this.nチャンネル0Atoレーン07[ pChip.nチャンネル番号 - 0x11 ];\r
1294                                                         if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
1295                                                         {\r
1296                                                                 pChip.bHit = true;\r
1297                                                                 this.tサウンド再生( pChip, CDTXMania.Timer.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, E楽器パート.DRUMS, dTX.nモニタを考慮した音量( E楽器パート.DRUMS ) );\r
1298                                                         }\r
1299                                                         break;\r
1300                                                 }\r
1301                                         case 0x1f:\r
1302                                                 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
1303                                                 {\r
1304                                                         pChip.bHit = true;\r
1305                                                         this.r現在の歓声Chip.Drums = pChip;\r
1306                                                 }\r
1307                                                 break;\r
1308 \r
1309                                         case 0x20:\r
1310                                         case 0x21:\r
1311                                         case 0x22:\r
1312                                         case 0x23:\r
1313                                         case 0x24:\r
1314                                         case 0x25:\r
1315                                         case 0x26:\r
1316                                         case 0x27:\r
1317                                                 if( configIni.bGuitar有効 )\r
1318                                                 {\r
1319                                                         if( configIni.bSudden.Guitar )\r
1320                                                         {\r
1321                                                                 pChip.b可視 = pChip.nバーからの距離dot.Guitar < 200;\r
1322                                                         }\r
1323                                                         if( configIni.bHidden.Guitar && ( pChip.nバーからの距離dot.Guitar < 100 ) )\r
1324                                                         {\r
1325                                                                 pChip.b可視 = false;\r
1326                                                         }\r
1327                                                         if( !pChip.bHit && pChip.b可視 )\r
1328                                                         {\r
1329                                                                 int num6 = configIni.bReverse.Guitar ? ( 0x171 - pChip.nバーからの距離dot.Guitar ) : ( 40 + pChip.nバーからの距離dot.Guitar );\r
1330                                                                 if( ( num6 > 0 ) && ( num6 < 0x199 ) )\r
1331                                                                 {\r
1332                                                                         int num7 = this.ctチップ模様アニメ.Guitar.n現在の値;\r
1333                                                                         if( pChip.nチャンネル番号 == 0x20 )\r
1334                                                                         {\r
1335                                                                                 if( this.txチップ != null )\r
1336                                                                                 {\r
1337                                                                                         this.txチップ.t2D描画( CDTXMania.app.Device, 0x1a, num6 - 4, new Rectangle( 0, 0xc0 + ( ( num7 % 5 ) * 8 ), 0x67, 8 ) );\r
1338                                                                                 }\r
1339                                                                         }\r
1340                                                                         else if( !configIni.bLeft.Guitar )\r
1341                                                                         {\r
1342                                                                                 Rectangle rectangle = new Rectangle( 0, num7 * 8, 0x20, 8 );\r
1343                                                                                 if( ( ( pChip.nチャンネル番号 & 4 ) != 0 ) && ( this.txチップ != null ) )\r
1344                                                                                 {\r
1345                                                                                         this.txチップ.t2D描画( CDTXMania.app.Device, 0x1a, num6 - 4, rectangle );\r
1346                                                                                 }\r
1347                                                                                 rectangle.X += 0x20;\r
1348                                                                                 if( ( ( pChip.nチャンネル番号 & 2 ) != 0 ) && ( this.txチップ != null ) )\r
1349                                                                                 {\r
1350                                                                                         this.txチップ.t2D描画( CDTXMania.app.Device, 0x3e, num6 - 4, rectangle );\r
1351                                                                                 }\r
1352                                                                                 rectangle.X += 0x20;\r
1353                                                                                 if( ( ( pChip.nチャンネル番号 & 1 ) != 0 ) && ( this.txチップ != null ) )\r
1354                                                                                 {\r
1355                                                                                         this.txチップ.t2D描画( CDTXMania.app.Device, 0x62, num6 - 4, rectangle );\r
1356                                                                                 }\r
1357                                                                         }\r
1358                                                                         else\r
1359                                                                         {\r
1360                                                                                 Rectangle rectangle2 = new Rectangle( 0, num7 * 8, 0x20, 8 );\r
1361                                                                                 if( ( ( pChip.nチャンネル番号 & 4 ) != 0 ) && ( this.txチップ != null ) )\r
1362                                                                                 {\r
1363                                                                                         this.txチップ.t2D描画( CDTXMania.app.Device, 0x62, num6 - 4, rectangle2 );\r
1364                                                                                 }\r
1365                                                                                 rectangle2.X += 0x20;\r
1366                                                                                 if( ( ( pChip.nチャンネル番号 & 2 ) != 0 ) && ( this.txチップ != null ) )\r
1367                                                                                 {\r
1368                                                                                         this.txチップ.t2D描画( CDTXMania.app.Device, 0x3e, num6 - 4, rectangle2 );\r
1369                                                                                 }\r
1370                                                                                 rectangle2.X += 0x20;\r
1371                                                                                 if( ( ( pChip.nチャンネル番号 & 1 ) != 0 ) && ( this.txチップ != null ) )\r
1372                                                                                 {\r
1373                                                                                         this.txチップ.t2D描画( CDTXMania.app.Device, 0x1a, num6 - 4, rectangle2 );\r
1374                                                                                 }\r
1375                                                                         }\r
1376                                                                 }\r
1377                                                         }\r
1378                                                         if( ( configIni.bAutoPlay.Guitar && !pChip.bHit ) && ( pChip.nバーからの距離dot.Guitar < 0 ) )\r
1379                                                         {\r
1380                                                                 pChip.bHit = true;\r
1381                                                                 if( ( ( pChip.nチャンネル番号 & 4 ) != 0 ) || ( pChip.nチャンネル番号 == 0x20 ) )\r
1382                                                                 {\r
1383                                                                         this.actChipFire.Start( 0 );\r
1384                                                                 }\r
1385                                                                 if( ( ( pChip.nチャンネル番号 & 2 ) != 0 ) || ( pChip.nチャンネル番号 == 0x20 ) )\r
1386                                                                 {\r
1387                                                                         this.actChipFire.Start( 1 );\r
1388                                                                 }\r
1389                                                                 if( ( ( pChip.nチャンネル番号 & 1 ) != 0 ) || ( pChip.nチャンネル番号 == 0x20 ) )\r
1390                                                                 {\r
1391                                                                         this.actChipFire.Start( 2 );\r
1392                                                                 }\r
1393                                                                 this.tサウンド再生( pChip, CDTXMania.Timer.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, E楽器パート.GUITAR, dTX.nモニタを考慮した音量( E楽器パート.GUITAR ) );\r
1394                                                                 this.r次にくるギターChip = null;\r
1395                                                                 this.tチップのヒット処理( pChip.n発声時刻ms, pChip );\r
1396                                                         }\r
1397                                                         break;\r
1398                                                 }\r
1399                                                 if( !pChip.bHit && ( pChip.nバーからの距離dot.Guitar < 0 ) )\r
1400                                                 {\r
1401                                                         pChip.bHit = true;\r
1402                                                         this.tサウンド再生( pChip, CDTXMania.Timer.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, E楽器パート.GUITAR, dTX.nモニタを考慮した音量( E楽器パート.GUITAR ) );\r
1403                                                 }\r
1404                                                 break;\r
1405 \r
1406                                         case 40:\r
1407                                                 if( configIni.bGuitar有効 )\r
1408                                                 {\r
1409                                                         if( configIni.bSudden.Guitar )\r
1410                                                         {\r
1411                                                                 pChip.b可視 = pChip.nバーからの距離dot.Guitar < 200;\r
1412                                                         }\r
1413                                                         if( configIni.bHidden.Guitar && ( pChip.nバーからの距離dot.Guitar < 100 ) )\r
1414                                                         {\r
1415                                                                 pChip.b可視 = false;\r
1416                                                         }\r
1417                                                         if( !pChip.bHit && pChip.b可視 )\r
1418                                                         {\r
1419                                                                 int num10 = 0x19;\r
1420                                                                 int num11 = configIni.bReverse.Guitar ? ( 0x171 - pChip.nバーからの距離dot.Guitar ) : ( 40 + pChip.nバーからの距離dot.Guitar );\r
1421                                                                 int num12 = num11;\r
1422                                                                 int num13 = 0;\r
1423                                                                 if( ( num12 < ( 0x199 + num10 ) ) && ( num12 > -num10 ) )\r
1424                                                                 {\r
1425                                                                         int num14 = this.ctWailingチップ模様アニメ.n現在の値;\r
1426                                                                         Rectangle rectangle5 = new Rectangle( 0x60 + ( num14 * 20 ), 0, 20, 50 );\r
1427                                                                         if( num12 < num10 )\r
1428                                                                         {\r
1429                                                                                 rectangle5.Y += num10 - num12;\r
1430                                                                                 rectangle5.Height -= num10 - num12;\r
1431                                                                                 num13 = num10 - num12;\r
1432                                                                         }\r
1433                                                                         if( num12 > ( 0x199 - num10 ) )\r
1434                                                                         {\r
1435                                                                                 rectangle5.Height -= num12 - ( 0x199 - num10 );\r
1436                                                                         }\r
1437                                                                         if( ( rectangle5.Bottom > rectangle5.Top ) && ( this.txチップ != null ) )\r
1438                                                                         {\r
1439                                                                                 this.txチップ.t2D描画( CDTXMania.app.Device, 0x8b, ( num11 - num10 ) + num13, rectangle5 );\r
1440                                                                         }\r
1441                                                                 }\r
1442                                                         }\r
1443                                                         if( !pChip.bHit && ( pChip.nバーからの距離dot.Guitar < 0 ) )\r
1444                                                         {\r
1445                                                                 pChip.bHit = true;\r
1446                                                                 if( configIni.bAutoPlay.Guitar )\r
1447                                                                 {\r
1448                                                                         this.actWailingBonus.Start( E楽器パート.GUITAR, this.r現在の歓声Chip.Guitar );\r
1449                                                                 }\r
1450                                                         }\r
1451                                                         break;\r
1452                                                 }\r
1453                                                 pChip.bHit = true;\r
1454                                                 break;\r
1455 \r
1456                                         case 0x2f:\r
1457                                                 if( !pChip.bHit && ( pChip.nバーからの距離dot.Guitar < 0 ) )\r
1458                                                 {\r
1459                                                         pChip.bHit = true;\r
1460                                                         this.r現在の歓声Chip.Guitar = pChip;\r
1461                                                 }\r
1462                                                 break;\r
1463 \r
1464                                         case 0x31:\r
1465                                         case 50:\r
1466                                         case 0x33:\r
1467                                         case 0x34:\r
1468                                         case 0x35:\r
1469                                         case 0x36:\r
1470                                         case 0x37:\r
1471                                         case 0x38:\r
1472                                         case 0x39:\r
1473                                         case 0x3a:\r
1474                                                 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
1475                                                 {\r
1476                                                         pChip.bHit = true;\r
1477                                                 }\r
1478                                                 break;\r
1479 \r
1480                                         case 80:\r
1481                                                 {\r
1482                                                         int num20 = pChip.n発声位置 / 0x180;\r
1483                                                         if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
1484                                                         {\r
1485                                                                 pChip.bHit = true;\r
1486                                                                 this.actPlayInfo.n小節番号 = num20 - 1;\r
1487                                                                 if( configIni.bWave再生位置自動調整機能有効 )\r
1488                                                                 {\r
1489                                                                         dTX.tWave再生位置自動補正();\r
1490                                                                 }\r
1491                                                         }\r
1492                                                         if( ( pChip.b可視 && configIni.bGuitar有効 ) && ( configIni.eDark != Eダークモード.FULL ) )\r
1493                                                         {\r
1494                                                                 int y = configIni.bReverse.Guitar ? ( ( 0x171 - pChip.nバーからの距離dot.Guitar ) - 1 ) : ( ( 40 + pChip.nバーからの距離dot.Guitar ) - 1 );\r
1495                                                                 if( ( dTX.bチップがある.Guitar && ( y > 0 ) ) && ( ( y < 0x199 ) && ( this.txチップ != null ) ) )\r
1496                                                                 {\r
1497                                                                         this.txチップ.t2D描画( CDTXMania.app.Device, 0x1a, y, new Rectangle( 0, 0xeb, 0x68, 1 ) );\r
1498                                                                 }\r
1499                                                                 y = configIni.bReverse.Bass ? ( ( 0x171 - pChip.nバーからの距離dot.Bass ) - 1 ) : ( ( 40 + pChip.nバーからの距離dot.Bass ) - 1 );\r
1500                                                                 if( ( dTX.bチップがある.Bass && ( y > 0 ) ) && ( ( y < 0x199 ) && ( this.txチップ != null ) ) )\r
1501                                                                 {\r
1502                                                                         this.txチップ.t2D描画( CDTXMania.app.Device, 480, y, new Rectangle( 0, 0xeb, 0x68, 1 ) );\r
1503                                                                 }\r
1504                                                         }\r
1505                                                         break;\r
1506                                                 }\r
1507                                         case 0x51:\r
1508                                                 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
1509                                                         pChip.bHit = true;\r
1510                                                 break;\r
1511 \r
1512                                         case 0x52:\r
1513                                                 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
1514                                                 {\r
1515                                                         pChip.bHit = true;\r
1516                                                 }\r
1517                                                 break;\r
1518 \r
1519                                         case 0x53:\r
1520                                                 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
1521                                                 {\r
1522                                                         pChip.bHit = true;\r
1523                                                 }\r
1524                                                 break;\r
1525 \r
1526                                         case 0x54:\r
1527                                                 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
1528                                                 {\r
1529                                                         pChip.bHit = true;\r
1530                                                         if( configIni.bAVI有効 )\r
1531                                                         {\r
1532                                                                 switch( pChip.eAVI種別 )\r
1533                                                                 {\r
1534                                                                         case EAVI種別.AVI:\r
1535                                                                                 if( pChip.rAVI != null )\r
1536                                                                                 {\r
1537                                                                                         this.actAVI.Start( pChip.nチャンネル番号, pChip.rAVI, 0x116, 0x163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, pChip.n発声時刻ms );\r
1538                                                                                 }\r
1539                                                                                 break;\r
1540 \r
1541                                                                         case EAVI種別.AVIPAN:\r
1542                                                                                 if( pChip.rAVIPan != null )\r
1543                                                                                 {\r
1544                                                                                         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
1545                                                                                 }\r
1546                                                                                 break;\r
1547                                                                 }\r
1548                                                         }\r
1549                                                 }\r
1550                                                 break;\r
1551 \r
1552                                         case 0x61:\r
1553                                         case 0x62:\r
1554                                         case 0x63:\r
1555                                         case 0x64:\r
1556                                         case 0x65:\r
1557                                         case 0x66:\r
1558                                         case 0x67:\r
1559                                         case 0x68:\r
1560                                         case 0x69:\r
1561                                         case 0x70:\r
1562                                         case 0x71:\r
1563                                         case 0x72:\r
1564                                         case 0x73:\r
1565                                         case 0x74:\r
1566                                         case 0x75:\r
1567                                         case 0x76:\r
1568                                         case 0x77:\r
1569                                         case 0x78:\r
1570                                         case 0x79:\r
1571                                         case 0x80:\r
1572                                         case 0x81:\r
1573                                         case 0x82:\r
1574                                         case 0x83:\r
1575                                         case 0x84:\r
1576                                         case 0x85:\r
1577                                         case 0x86:\r
1578                                         case 0x87:\r
1579                                         case 0x88:\r
1580                                         case 0x89:\r
1581                                         case 0x90:\r
1582                                         case 0x91:\r
1583                                         case 0x92:\r
1584                                                 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
1585                                                 {\r
1586                                                         pChip.bHit = true;\r
1587                                                         if( configIni.bBGM音を発声する )\r
1588                                                         {\r
1589                                                                 dTX.tWavの再生停止( this.n最後に再生したBGMの実WAV番号[ pChip.nチャンネル番号 - 0x61 ] );\r
1590                                                                 dTX.tチップの再生( pChip, CDTXMania.Timer.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, 10, dTX.nモニタを考慮した音量( E楽器パート.UNKNOWN ) );\r
1591                                                                 this.n最後に再生したBGMの実WAV番号[ pChip.nチャンネル番号 - 0x61 ] = pChip.n整数値・内部番号;\r
1592                                                         }\r
1593                                                 }\r
1594                                                 break;\r
1595 \r
1596                                         case 160:\r
1597                                         case 0xa1:\r
1598                                         case 0xa2:\r
1599                                         case 0xa3:\r
1600                                         case 0xa4:\r
1601                                         case 0xa5:\r
1602                                         case 0xa6:\r
1603                                         case 0xa7:\r
1604                                                 if( configIni.bGuitar有効 )\r
1605                                                 {\r
1606                                                         if( configIni.bSudden.Bass )\r
1607                                                         {\r
1608                                                                 pChip.b可視 = pChip.nバーからの距離dot.Bass < 200;\r
1609                                                         }\r
1610                                                         if( configIni.bHidden.Bass && ( pChip.nバーからの距離dot.Bass < 100 ) )\r
1611                                                         {\r
1612                                                                 pChip.b可視 = false;\r
1613                                                         }\r
1614                                                         if( !pChip.bHit && pChip.b可視 )\r
1615                                                         {\r
1616                                                                 int num8 = configIni.bReverse.Bass ? ( 0x171 - pChip.nバーからの距離dot.Bass ) : ( 40 + pChip.nバーからの距離dot.Bass );\r
1617                                                                 if( ( num8 > 0 ) && ( num8 < 0x199 ) )\r
1618                                                                 {\r
1619                                                                         int num9 = this.ctチップ模様アニメ.Bass.n現在の値;\r
1620                                                                         if( pChip.nチャンネル番号 == 160 )\r
1621                                                                         {\r
1622                                                                                 if( this.txチップ != null )\r
1623                                                                                 {\r
1624                                                                                         this.txチップ.t2D描画( CDTXMania.app.Device, 480, num8 - 4, new Rectangle( 0, 0xc0 + ( ( num9 % 5 ) * 8 ), 0x67, 8 ) );\r
1625                                                                                 }\r
1626                                                                         }\r
1627                                                                         else if( !configIni.bLeft.Bass )\r
1628                                                                         {\r
1629                                                                                 Rectangle rectangle3 = new Rectangle( 0, num9 * 8, 0x20, 8 );\r
1630                                                                                 if( ( ( pChip.nチャンネル番号 & 4 ) != 0 ) && ( this.txチップ != null ) )\r
1631                                                                                 {\r
1632                                                                                         this.txチップ.t2D描画( CDTXMania.app.Device, 480, num8 - 4, rectangle3 );\r
1633                                                                                 }\r
1634                                                                                 rectangle3.X += 0x20;\r
1635                                                                                 if( ( ( pChip.nチャンネル番号 & 2 ) != 0 ) && ( this.txチップ != null ) )\r
1636                                                                                 {\r
1637                                                                                         this.txチップ.t2D描画( CDTXMania.app.Device, 0x204, num8 - 4, rectangle3 );\r
1638                                                                                 }\r
1639                                                                                 rectangle3.X += 0x20;\r
1640                                                                                 if( ( ( pChip.nチャンネル番号 & 1 ) != 0 ) && ( this.txチップ != null ) )\r
1641                                                                                 {\r
1642                                                                                         this.txチップ.t2D描画( CDTXMania.app.Device, 0x228, num8 - 4, rectangle3 );\r
1643                                                                                 }\r
1644                                                                         }\r
1645                                                                         else\r
1646                                                                         {\r
1647                                                                                 Rectangle rectangle4 = new Rectangle( 0, num9 * 8, 0x20, 8 );\r
1648                                                                                 if( ( ( pChip.nチャンネル番号 & 4 ) != 0 ) && ( this.txチップ != null ) )\r
1649                                                                                 {\r
1650                                                                                         this.txチップ.t2D描画( CDTXMania.app.Device, 0x228, num8 - 4, rectangle4 );\r
1651                                                                                 }\r
1652                                                                                 rectangle4.X += 0x20;\r
1653                                                                                 if( ( ( pChip.nチャンネル番号 & 2 ) != 0 ) && ( this.txチップ != null ) )\r
1654                                                                                 {\r
1655                                                                                         this.txチップ.t2D描画( CDTXMania.app.Device, 0x204, num8 - 4, rectangle4 );\r
1656                                                                                 }\r
1657                                                                                 rectangle4.X += 0x20;\r
1658                                                                                 if( ( ( pChip.nチャンネル番号 & 1 ) != 0 ) && ( this.txチップ != null ) )\r
1659                                                                                 {\r
1660                                                                                         this.txチップ.t2D描画( CDTXMania.app.Device, 480, num8 - 4, rectangle4 );\r
1661                                                                                 }\r
1662                                                                         }\r
1663                                                                 }\r
1664                                                         }\r
1665                                                         if( ( configIni.bAutoPlay.Bass && !pChip.bHit ) && ( pChip.nバーからの距離dot.Bass < 0 ) )\r
1666                                                         {\r
1667                                                                 pChip.bHit = true;\r
1668                                                                 if( ( ( pChip.nチャンネル番号 & 4 ) != 0 ) || ( pChip.nチャンネル番号 == 160 ) )\r
1669                                                                 {\r
1670                                                                         this.actChipFire.Start( 3 );\r
1671                                                                 }\r
1672                                                                 if( ( ( pChip.nチャンネル番号 & 2 ) != 0 ) || ( pChip.nチャンネル番号 == 160 ) )\r
1673                                                                 {\r
1674                                                                         this.actChipFire.Start( 4 );\r
1675                                                                 }\r
1676                                                                 if( ( ( pChip.nチャンネル番号 & 1 ) != 0 ) || ( pChip.nチャンネル番号 == 160 ) )\r
1677                                                                 {\r
1678                                                                         this.actChipFire.Start( 5 );\r
1679                                                                 }\r
1680                                                                 this.tサウンド再生( pChip, CDTXMania.Timer.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, E楽器パート.BASS, dTX.nモニタを考慮した音量( E楽器パート.BASS ) );\r
1681                                                                 this.r次にくるベースChip = null;\r
1682                                                                 this.tチップのヒット処理( pChip.n発声時刻ms, pChip );\r
1683                                                         }\r
1684                                                         break;\r
1685                                                 }\r
1686                                                 if( !pChip.bHit && ( pChip.nバーからの距離dot.Bass < 0 ) )\r
1687                                                 {\r
1688                                                         pChip.bHit = true;\r
1689                                                         this.tサウンド再生( pChip, CDTXMania.Timer.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, E楽器パート.BASS, dTX.nモニタを考慮した音量( E楽器パート.BASS ) );\r
1690                                                 }\r
1691                                                 break;\r
1692 \r
1693                                         case 0xa8:\r
1694                                                 if( configIni.bGuitar有効 )\r
1695                                                 {\r
1696                                                         if( configIni.bSudden.Bass )\r
1697                                                         {\r
1698                                                                 pChip.b可視 = pChip.nバーからの距離dot.Bass < 200;\r
1699                                                         }\r
1700                                                         if( configIni.bHidden.Bass && ( pChip.nバーからの距離dot.Bass < 100 ) )\r
1701                                                         {\r
1702                                                                 pChip.b可視 = false;\r
1703                                                         }\r
1704                                                         if( !pChip.bHit && pChip.b可視 )\r
1705                                                         {\r
1706                                                                 int num15 = 0x19;\r
1707                                                                 int num16 = configIni.bReverse.Bass ? ( 0x171 - pChip.nバーからの距離dot.Bass ) : ( 40 + pChip.nバーからの距離dot.Bass );\r
1708                                                                 int num17 = num16;\r
1709                                                                 int num18 = 0;\r
1710                                                                 if( ( num17 < ( 0x199 + num15 ) ) && ( num17 > -num15 ) )\r
1711                                                                 {\r
1712                                                                         int num19 = this.ctWailingチップ模様アニメ.n現在の値;\r
1713                                                                         Rectangle rectangle6 = new Rectangle( 0x60 + ( num19 * 20 ), 0, 20, 50 );\r
1714                                                                         if( num17 < num15 )\r
1715                                                                         {\r
1716                                                                                 rectangle6.Y += num15 - num17;\r
1717                                                                                 rectangle6.Height -= num15 - num17;\r
1718                                                                                 num18 = num15 - num17;\r
1719                                                                         }\r
1720                                                                         if( num17 > ( 0x199 - num15 ) )\r
1721                                                                         {\r
1722                                                                                 rectangle6.Height -= num17 - ( 0x199 - num15 );\r
1723                                                                         }\r
1724                                                                         if( ( rectangle6.Bottom > rectangle6.Top ) && ( this.txチップ != null ) )\r
1725                                                                         {\r
1726                                                                                 this.txチップ.t2D描画( CDTXMania.app.Device, 0x251, ( num16 - num15 ) + num18, rectangle6 );\r
1727                                                                         }\r
1728                                                                 }\r
1729                                                         }\r
1730                                                         if( !pChip.bHit && ( pChip.nバーからの距離dot.Bass < 0 ) )\r
1731                                                         {\r
1732                                                                 pChip.bHit = true;\r
1733                                                                 if( configIni.bAutoPlay.Bass )\r
1734                                                                 {\r
1735                                                                         this.actWailingBonus.Start( E楽器パート.BASS, this.r現在の歓声Chip.Bass );\r
1736                                                                 }\r
1737                                                         }\r
1738                                                         break;\r
1739                                                 }\r
1740                                                 pChip.bHit = true;\r
1741                                                 break;\r
1742 \r
1743                                         case 0xaf:\r
1744                                                 if( !pChip.bHit && ( pChip.nバーからの距離dot.Bass < 0 ) )\r
1745                                                 {\r
1746                                                         pChip.bHit = true;\r
1747                                                         this.r現在の歓声Chip.Bass = pChip;\r
1748                                                 }\r
1749                                                 break;\r
1750 \r
1751                                         case 0xb1:\r
1752                                         case 0xb2:\r
1753                                         case 0xb3:\r
1754                                         case 180:\r
1755                                         case 0xb5:\r
1756                                         case 0xb6:\r
1757                                         case 0xb7:\r
1758                                         case 0xb8:\r
1759                                         case 0xb9:\r
1760                                         case 0xbc:\r
1761                                                 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
1762                                                 {\r
1763                                                         pChip.bHit = true;\r
1764                                                 }\r
1765                                                 break;\r
1766 \r
1767                                         case 0xba:\r
1768                                                 if( !pChip.bHit && ( pChip.nバーからの距離dot.Guitar < 0 ) )\r
1769                                                 {\r
1770                                                         pChip.bHit = true;\r
1771                                                         this.r現在の空うちギターChip = pChip;\r
1772                                                         pChip.nチャンネル番号 = 0x20;\r
1773                                                 }\r
1774                                                 break;\r
1775 \r
1776                                         case 0xbb:\r
1777                                                 if( !pChip.bHit && ( pChip.nバーからの距離dot.Bass < 0 ) )\r
1778                                                 {\r
1779                                                         pChip.bHit = true;\r
1780                                                         this.r現在の空うちベースChip = pChip;\r
1781                                                         pChip.nチャンネル番号 = 160;\r
1782                                                 }\r
1783                                                 break;\r
1784 \r
1785                                         case 0xc4:\r
1786                                         case 0xc7:\r
1787                                         case 0xd5:\r
1788                                         case 0xd6:\r
1789                                         case 0xd7:\r
1790                                         case 0xd8:\r
1791                                         case 0xd9:\r
1792                                         case 0xe0:\r
1793                                                 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
1794                                                 {\r
1795                                                         pChip.bHit = true;\r
1796                                                         if( ( configIni.bBGA有効 && ( pChip.eBGA種別 == EBGA種別.BMP ) ) || ( pChip.eBGA種別 == EBGA種別.BMPTEX ) )\r
1797                                                         {\r
1798                                                                 for( int i = 0; i < 8; i++ )\r
1799                                                                 {\r
1800                                                                         if( this.nBGAスコープチャンネルマップ[ 0, i ] == pChip.nチャンネル番号 )\r
1801                                                                         {\r
1802                                                                                 this.actBGA.ChangeScope( this.nBGAスコープチャンネルマップ[ 1, i ], pChip.rBMP, pChip.rBMPTEX );\r
1803                                                                         }\r
1804                                                                 }\r
1805                                                         }\r
1806                                                 }\r
1807                                                 break;\r
1808 \r
1809                                         default:\r
1810                                                 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
1811                                                 {\r
1812                                                         pChip.bHit = true;\r
1813                                                 }\r
1814                                                 break;\r
1815                                 }\r
1816 \r
1817                                 num++;\r
1818                         }\r
1819                         return false;\r
1820                 }\r
1821                 private void t進行描画・チップアニメ()\r
1822                 {\r
1823                         for( int i = 1; i < 3; i++ )\r
1824                         {\r
1825                                 this.ctチップ模様アニメ[ i ].t進行Loop();\r
1826                         }\r
1827                         this.ctWailingチップ模様アニメ.t進行Loop();\r
1828                 }\r
1829                 private void t進行描画・チップファイアGB()\r
1830                 {\r
1831                         this.actChipFire.On進行描画();\r
1832                 }\r
1833                 private void t進行描画・パネル文字列()\r
1834                 {\r
1835                         if( ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) )\r
1836                         {\r
1837                                 this.actPanel.t進行描画( 0xb5, 430 );\r
1838                         }\r
1839                 }\r
1840                 private bool t進行描画・フェードイン・アウト()\r
1841                 {\r
1842                         switch( base.eフェーズID )\r
1843                         {\r
1844                                 case CStage.Eフェーズ.共通_フェードイン:\r
1845                                         if( this.actFI.On進行描画() != 0 )\r
1846                                         {\r
1847                                                 base.eフェーズID = CStage.Eフェーズ.共通_通常状態;\r
1848                                         }\r
1849                                         break;\r
1850 \r
1851                                 case CStage.Eフェーズ.共通_フェードアウト:\r
1852                                 case CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト:\r
1853                                         if( this.actFO.On進行描画() != 0 )\r
1854                                         {\r
1855                                                 return true;\r
1856                                         }\r
1857                                         break;\r
1858 \r
1859                                 case CStage.Eフェーズ.演奏_STAGE_CLEAR_フェードアウト:\r
1860                                         if( this.actFOClear.On進行描画() == 0 )\r
1861                                         {\r
1862                                                 break;\r
1863                                         }\r
1864                                         return true;\r
1865                         }\r
1866                         return false;\r
1867                 }\r
1868                 private void t進行描画・レーンフラッシュGB()\r
1869                 {\r
1870                         if( ( ( CDTXMania.ConfigIni.eDark != Eダークモード.HALF ) && ( CDTXMania.ConfigIni.eDark != Eダークモード.FULL ) ) && CDTXMania.ConfigIni.bGuitar有効 )\r
1871                         {\r
1872                                 this.actLaneFlushGB.On進行描画();\r
1873                         }\r
1874                 }\r
1875                 private void t進行描画・演奏情報()\r
1876                 {\r
1877                         if( !CDTXMania.ConfigIni.b演奏情報を表示しない )\r
1878                         {\r
1879                                 this.actPlayInfo.t進行描画( 0xb5, 50 );\r
1880                         }\r
1881                 }\r
1882                 private void t進行描画・背景()\r
1883                 {\r
1884                         if( CDTXMania.ConfigIni.eDark == Eダークモード.OFF )\r
1885                         {\r
1886                                 if( this.tx背景 != null )\r
1887                                 {\r
1888                                         this.tx背景.t2D描画( CDTXMania.app.Device, 0, 0 );\r
1889                                 }\r
1890                         }\r
1891                         else\r
1892                         {\r
1893                                 CDTXMania.app.Device.Clear( ClearFlags.ZBuffer | ClearFlags.Target, Color.Black, 0f, 0 );\r
1894                         }\r
1895                 }\r
1896                 private void t進行描画・判定文字列()\r
1897                 {\r
1898                         this.actJudgeString.On進行描画();\r
1899                 }\r
1900                 private void t進行描画・譜面スクロール速度()\r
1901                 {\r
1902                         this.act譜面スクロール速度.On進行描画();\r
1903                 }\r
1904                 private void t入力メソッド記憶( E楽器パート part )\r
1905                 {\r
1906                         if( CDTXMania.Pad.st検知したデバイス.Keyboard )\r
1907                         {\r
1908                                 this.b演奏にキーボードを使った[ (int) part ] = true;\r
1909                         }\r
1910                         if( CDTXMania.Pad.st検知したデバイス.Joypad )\r
1911                         {\r
1912                                 this.b演奏にジョイパッドを使った[ (int) part ] = true;\r
1913                         }\r
1914                         if( CDTXMania.Pad.st検知したデバイス.MIDIIN )\r
1915                         {\r
1916                                 this.b演奏にMIDI入力を使った[ (int) part ] = true;\r
1917                         }\r
1918                         if( CDTXMania.Pad.st検知したデバイス.Mouse )\r
1919                         {\r
1920                                 this.b演奏にマウスを使った[ (int) part ] = true;\r
1921                         }\r
1922                 }\r
1923                 private void t入力処理・ギター()\r
1924                 {\r
1925                         if( CDTXMania.ConfigIni.bGuitar有効 && CDTXMania.DTX.bチップがある.Guitar )\r
1926                         {\r
1927                                 if( CDTXMania.ConfigIni.bAutoPlay.Guitar )\r
1928                                 {\r
1929                                         CDTX.CChip chip = this.r次にくるギターChipを更新して返す();\r
1930                                         if( chip != null )\r
1931                                         {\r
1932                                                 if( ( chip.nチャンネル番号 & 4 ) != 0 )\r
1933                                                 {\r
1934                                                         this.actLaneFlushGB.Start( 0 );\r
1935                                                         this.actRGB.Push( 0 );\r
1936                                                 }\r
1937                                                 if( ( chip.nチャンネル番号 & 2 ) != 0 )\r
1938                                                 {\r
1939                                                         this.actLaneFlushGB.Start( 1 );\r
1940                                                         this.actRGB.Push( 1 );\r
1941                                                 }\r
1942                                                 if( ( chip.nチャンネル番号 & 1 ) != 0 )\r
1943                                                 {\r
1944                                                         this.actLaneFlushGB.Start( 2 );\r
1945                                                         this.actRGB.Push( 2 );\r
1946                                                 }\r
1947                                         }\r
1948                                 }\r
1949                                 else\r
1950                                 {\r
1951                                         if( CDTXMania.Pad.b押されている( E楽器パート.GUITAR, Eパッド.CY ) && CDTXMania.Pad.b押された( E楽器パート.GUITAR, Eパッド.BD ) )\r
1952                                         {\r
1953                                                 CDTXMania.ConfigIni.n譜面スクロール速度.Guitar = Math.Min( CDTXMania.ConfigIni.n譜面スクロール速度.Guitar + 1, 0x7cf );\r
1954                                         }\r
1955                                         if( CDTXMania.Pad.b押されている( E楽器パート.GUITAR, Eパッド.CY ) && CDTXMania.Pad.b押された( E楽器パート.GUITAR, Eパッド.HH ) )\r
1956                                         {\r
1957                                                 CDTXMania.ConfigIni.n譜面スクロール速度.Guitar = Math.Max( CDTXMania.ConfigIni.n譜面スクロール速度.Guitar - 1, 0 );\r
1958                                         }\r
1959                                         int num = CDTXMania.Pad.b押されている( E楽器パート.GUITAR, Eパッド.HH ) ? 4 : 0;\r
1960                                         this.t入力メソッド記憶( E楽器パート.GUITAR );\r
1961                                         int num2 = CDTXMania.Pad.b押されている( E楽器パート.GUITAR, Eパッド.SD ) ? 2 : 0;\r
1962                                         this.t入力メソッド記憶( E楽器パート.GUITAR );\r
1963                                         int num3 = CDTXMania.Pad.b押されている( E楽器パート.GUITAR, Eパッド.BD ) ? 1 : 0;\r
1964                                         this.t入力メソッド記憶( E楽器パート.GUITAR );\r
1965                                         int num4 = ( num | num2 ) | num3;\r
1966                                         if( num != 0 )\r
1967                                         {\r
1968                                                 this.actLaneFlushGB.Start( 0 );\r
1969                                                 this.actRGB.Push( 0 );\r
1970                                         }\r
1971                                         if( num2 != 0 )\r
1972                                         {\r
1973                                                 this.actLaneFlushGB.Start( 1 );\r
1974                                                 this.actRGB.Push( 1 );\r
1975                                         }\r
1976                                         if( num3 != 0 )\r
1977                                         {\r
1978                                                 this.actLaneFlushGB.Start( 2 );\r
1979                                                 this.actRGB.Push( 2 );\r
1980                                         }\r
1981                                         List<STInputEvent> events = CDTXMania.Pad.GetEvents( E楽器パート.GUITAR, Eパッド.HT );\r
1982                                         if( ( events != null ) && ( events.Count > 0 ) )\r
1983                                         {\r
1984                                                 foreach( STInputEvent event2 in events )\r
1985                                                 {\r
1986                                                         CDTX.CChip chip4;\r
1987                                                         if( !event2.b押された )\r
1988                                                         {\r
1989                                                                 continue;\r
1990                                                         }\r
1991                                                         this.t入力メソッド記憶( E楽器パート.GUITAR );\r
1992                                                         long nTime = event2.nTimeStamp - CDTXMania.Timer.n前回リセットした時のシステム時刻;\r
1993                                                         CDTX.CChip pChip = this.r指定時刻に一番近い未ヒットChip( nTime, 0x2f );\r
1994                                                         E判定 e判定 = this.e指定時刻からChipのJUDGEを返す( nTime, pChip );\r
1995                                                         if( ( ( pChip != null ) && ( ( pChip.nチャンネル番号 & 15 ) == num4 ) ) && ( e判定 != E判定.Miss ) )\r
1996                                                         {\r
1997                                                                 if( ( num != 0 ) || ( num4 == 0 ) )\r
1998                                                                 {\r
1999                                                                         this.actChipFire.Start( 0 );\r
2000                                                                 }\r
2001                                                                 if( ( num2 != 0 ) || ( num4 == 0 ) )\r
2002                                                                 {\r
2003                                                                         this.actChipFire.Start( 1 );\r
2004                                                                 }\r
2005                                                                 if( ( num3 != 0 ) || ( num4 == 0 ) )\r
2006                                                                 {\r
2007                                                                         this.actChipFire.Start( 2 );\r
2008                                                                 }\r
2009                                                                 this.tチップのヒット処理( nTime, pChip );\r
2010                                                                 this.tサウンド再生( pChip, CDTXMania.Timer.nシステム時刻, E楽器パート.GUITAR, CDTXMania.ConfigIni.n手動再生音量, CDTXMania.ConfigIni.b演奏音を強調する.Guitar, e判定 == E判定.Poor );\r
2011                                                                 CDTX.CChip item = this.r指定時刻に一番近い未ヒットChip( nTime, 40, 140 );\r
2012                                                                 if( item != null )\r
2013                                                                 {\r
2014                                                                         this.queWailing.Guitar.Enqueue( item );\r
2015                                                                 }\r
2016                                                                 continue;\r
2017                                                         }\r
2018                                                         if( ( ( chip4 = this.r現在の空うちギターChip ) != null ) || ( ( chip4 = this.r指定時刻に一番近いChip・ヒット未済問わず不可視考慮( nTime, 0x2f ) ) != null ) )\r
2019                                                         {\r
2020                                                                 this.tサウンド再生( chip4, CDTXMania.Timer.nシステム時刻, E楽器パート.GUITAR, CDTXMania.ConfigIni.n手動再生音量, CDTXMania.ConfigIni.b演奏音を強調する.Guitar, true );\r
2021                                                         }\r
2022                                                         if( !CDTXMania.ConfigIni.bLight.Guitar )\r
2023                                                         {\r
2024                                                                 this.tチップのヒット処理・BadならびにTight時のMiss( E楽器パート.GUITAR );\r
2025                                                         }\r
2026                                                 }\r
2027                                         }\r
2028                                         List<STInputEvent> list2 = CDTXMania.Pad.GetEvents( E楽器パート.GUITAR, Eパッド.LT );\r
2029                                         if( ( list2 != null ) && ( list2.Count > 0 ) )\r
2030                                         {\r
2031                                                 foreach( STInputEvent event3 in list2 )\r
2032                                                 {\r
2033                                                         CDTX.CChip chip5;\r
2034                                                         if( !event3.b押された )\r
2035                                                         {\r
2036                                                                 continue;\r
2037                                                         }\r
2038                                                         long num6 = event3.nTimeStamp - CDTXMania.Timer.n前回リセットした時のシステム時刻;\r
2039                                                         while( ( this.queWailing.Guitar.Count > 0 ) && ( ( chip5 = this.queWailing.Guitar.Dequeue() ) != null ) )\r
2040                                                         {\r
2041                                                                 if( ( num6 - chip5.n発声時刻ms ) <= 800 )\r
2042                                                                 {\r
2043                                                                         chip5.bHit = true;\r
2044                                                                         this.actWailingBonus.Start( E楽器パート.GUITAR, this.r現在の歓声Chip.Guitar );\r
2045                                                                         if( !CDTXMania.ConfigIni.bAutoPlay.Guitar )\r
2046                                                                         {\r
2047                                                                                 this.actScore.Set( E楽器パート.DRUMS, this.actScore.Get( E楽器パート.DRUMS ) + ( this.actCombo.n現在のコンボ数.Guitar * 0xbb8L ) );\r
2048                                                                         }\r
2049                                                                 }\r
2050                                                         }\r
2051                                                 }\r
2052                                         }\r
2053                                 }\r
2054                         }\r
2055                 }\r
2056                 private void t入力処理・ベース()\r
2057                 {\r
2058                         if( CDTXMania.ConfigIni.bGuitar有効 && CDTXMania.DTX.bチップがある.Bass )\r
2059                         {\r
2060                                 if( CDTXMania.ConfigIni.bAutoPlay.Bass )\r
2061                                 {\r
2062                                         CDTX.CChip chip = this.r次にくるベースChipを更新して返す();\r
2063                                         if( chip != null )\r
2064                                         {\r
2065                                                 if( ( chip.nチャンネル番号 & 4 ) != 0 )\r
2066                                                 {\r
2067                                                         this.actLaneFlushGB.Start( 3 );\r
2068                                                         this.actRGB.Push( 3 );\r
2069                                                 }\r
2070                                                 if( ( chip.nチャンネル番号 & 2 ) != 0 )\r
2071                                                 {\r
2072                                                         this.actLaneFlushGB.Start( 4 );\r
2073                                                         this.actRGB.Push( 4 );\r
2074                                                 }\r
2075                                                 if( ( chip.nチャンネル番号 & 1 ) != 0 )\r
2076                                                 {\r
2077                                                         this.actLaneFlushGB.Start( 5 );\r
2078                                                         this.actRGB.Push( 5 );\r
2079                                                 }\r
2080                                         }\r
2081                                 }\r
2082                                 else\r
2083                                 {\r
2084                                         if( CDTXMania.Pad.b押されている( E楽器パート.BASS, Eパッド.CY ) && CDTXMania.Pad.b押された( E楽器パート.BASS, Eパッド.BD ) )\r
2085                                         {\r
2086                                                 CDTXMania.ConfigIni.n譜面スクロール速度.Bass = Math.Min( CDTXMania.ConfigIni.n譜面スクロール速度.Bass + 1, 0x7cf );\r
2087                                         }\r
2088                                         if( CDTXMania.Pad.b押されている( E楽器パート.BASS, Eパッド.CY ) && CDTXMania.Pad.b押された( E楽器パート.BASS, Eパッド.HH ) )\r
2089                                         {\r
2090                                                 CDTXMania.ConfigIni.n譜面スクロール速度.Bass = Math.Max( CDTXMania.ConfigIni.n譜面スクロール速度.Bass - 1, 0 );\r
2091                                         }\r
2092                                         int num = CDTXMania.Pad.b押されている( E楽器パート.BASS, Eパッド.HH ) ? 4 : 0;\r
2093                                         this.t入力メソッド記憶( E楽器パート.BASS );\r
2094                                         int num2 = CDTXMania.Pad.b押されている( E楽器パート.BASS, Eパッド.SD ) ? 2 : 0;\r
2095                                         this.t入力メソッド記憶( E楽器パート.BASS );\r
2096                                         int num3 = CDTXMania.Pad.b押されている( E楽器パート.BASS, Eパッド.BD ) ? 1 : 0;\r
2097                                         this.t入力メソッド記憶( E楽器パート.BASS );\r
2098                                         int num4 = ( num | num2 ) | num3;\r
2099                                         if( num != 0 )\r
2100                                         {\r
2101                                                 this.actLaneFlushGB.Start( 3 );\r
2102                                                 this.actRGB.Push( 3 );\r
2103                                         }\r
2104                                         if( num2 != 0 )\r
2105                                         {\r
2106                                                 this.actLaneFlushGB.Start( 4 );\r
2107                                                 this.actRGB.Push( 4 );\r
2108                                         }\r
2109                                         if( num3 != 0 )\r
2110                                         {\r
2111                                                 this.actLaneFlushGB.Start( 5 );\r
2112                                                 this.actRGB.Push( 5 );\r
2113                                         }\r
2114                                         List<STInputEvent> events = CDTXMania.Pad.GetEvents( E楽器パート.BASS, Eパッド.HT );\r
2115                                         if( ( events != null ) && ( events.Count > 0 ) )\r
2116                                         {\r
2117                                                 foreach( STInputEvent event2 in events )\r
2118                                                 {\r
2119                                                         CDTX.CChip chip4;\r
2120                                                         if( !event2.b押された )\r
2121                                                         {\r
2122                                                                 continue;\r
2123                                                         }\r
2124                                                         this.t入力メソッド記憶( E楽器パート.BASS );\r
2125                                                         long nTime = event2.nTimeStamp - CDTXMania.Timer.n前回リセットした時のシステム時刻;\r
2126                                                         CDTX.CChip pChip = this.r指定時刻に一番近い未ヒットChip( nTime, 0xaf );\r
2127                                                         E判定 e判定 = this.e指定時刻からChipのJUDGEを返す( nTime, pChip );\r
2128                                                         if( ( ( pChip != null ) && ( ( pChip.nチャンネル番号 & 15 ) == num4 ) ) && ( e判定 != E判定.Miss ) )\r
2129                                                         {\r
2130                                                                 if( ( num != 0 ) || ( num4 == 0 ) )\r
2131                                                                 {\r
2132                                                                         this.actChipFire.Start( 3 );\r
2133                                                                 }\r
2134                                                                 if( ( num2 != 0 ) || ( num4 == 0 ) )\r
2135                                                                 {\r
2136                                                                         this.actChipFire.Start( 4 );\r
2137                                                                 }\r
2138                                                                 if( ( num3 != 0 ) || ( num4 == 0 ) )\r
2139                                                                 {\r
2140                                                                         this.actChipFire.Start( 5 );\r
2141                                                                 }\r
2142                                                                 this.tチップのヒット処理( nTime, pChip );\r
2143                                                                 this.tサウンド再生( pChip, CDTXMania.Timer.nシステム時刻, E楽器パート.BASS, CDTXMania.ConfigIni.n手動再生音量, CDTXMania.ConfigIni.b演奏音を強調する.Bass, e判定 == E判定.Poor );\r
2144                                                                 CDTX.CChip item = this.r指定時刻に一番近い未ヒットChip( nTime, 0xa8, 140 );\r
2145                                                                 if( item != null )\r
2146                                                                 {\r
2147                                                                         this.queWailing.Bass.Enqueue( item );\r
2148                                                                 }\r
2149                                                                 continue;\r
2150                                                         }\r
2151                                                         if( ( ( chip4 = this.r現在の空うちベースChip ) != null ) || ( ( chip4 = this.r指定時刻に一番近いChip・ヒット未済問わず不可視考慮( nTime, 0xaf ) ) != null ) )\r
2152                                                         {\r
2153                                                                 this.tサウンド再生( chip4, CDTXMania.Timer.nシステム時刻, E楽器パート.BASS, CDTXMania.ConfigIni.n手動再生音量, CDTXMania.ConfigIni.b演奏音を強調する.Bass, true );\r
2154                                                         }\r
2155                                                         if( !CDTXMania.ConfigIni.bLight.Bass )\r
2156                                                         {\r
2157                                                                 this.tチップのヒット処理・BadならびにTight時のMiss( E楽器パート.BASS );\r
2158                                                         }\r
2159                                                 }\r
2160                                         }\r
2161                                         List<STInputEvent> list2 = CDTXMania.Pad.GetEvents( E楽器パート.BASS, Eパッド.LT );\r
2162                                         if( ( list2 != null ) && ( list2.Count > 0 ) )\r
2163                                         {\r
2164                                                 foreach( STInputEvent event3 in list2 )\r
2165                                                 {\r
2166                                                         CDTX.CChip chip5;\r
2167                                                         if( !event3.b押された )\r
2168                                                         {\r
2169                                                                 continue;\r
2170                                                         }\r
2171                                                         long num6 = event3.nTimeStamp - CDTXMania.Timer.n前回リセットした時のシステム時刻;\r
2172                                                         while( ( this.queWailing.Bass.Count > 0 ) && ( ( chip5 = this.queWailing.Bass.Dequeue() ) != null ) )\r
2173                                                         {\r
2174                                                                 if( ( num6 - chip5.n発声時刻ms ) <= 800 )\r
2175                                                                 {\r
2176                                                                         chip5.bHit = true;\r
2177                                                                         this.actWailingBonus.Start( E楽器パート.BASS, this.r現在の歓声Chip.Bass );\r
2178                                                                         if( !CDTXMania.ConfigIni.bAutoPlay.Bass )\r
2179                                                                         {\r
2180                                                                                 this.actScore.Set( E楽器パート.DRUMS, this.actScore.Get( E楽器パート.DRUMS ) + ( this.actCombo.n現在のコンボ数.Bass * 0xbb8L ) );\r
2181                                                                         }\r
2182                                                                 }\r
2183                                                         }\r
2184                                                 }\r
2185                                         }\r
2186                                 }\r
2187                         }\r
2188                 }\r
2189                 private void t背景テクスチャの生成()\r
2190                 {\r
2191                         Bitmap image = null;\r
2192                         string path = "";\r
2193                         bool flag = true;\r
2194                         if( !CDTXMania.ConfigIni.bストイックモード )\r
2195                         {\r
2196                                 string bACKGROUND = null;\r
2197                                 if( ( CDTXMania.DTX.BACKGROUND_GR != null ) && ( CDTXMania.DTX.BACKGROUND_GR.Length > 0 ) )\r
2198                                 {\r
2199                                         bACKGROUND = CDTXMania.DTX.BACKGROUND_GR;\r
2200                                 }\r
2201                                 else if( ( CDTXMania.DTX.BACKGROUND != null ) && ( CDTXMania.DTX.BACKGROUND.Length > 0 ) )\r
2202                                 {\r
2203                                         bACKGROUND = CDTXMania.DTX.BACKGROUND;\r
2204                                 }\r
2205                                 if( ( bACKGROUND != null ) && ( bACKGROUND.Length > 0 ) )\r
2206                                 {\r
2207                                         path = CDTXMania.DTX.strフォルダ名 + bACKGROUND;\r
2208                                         if( File.Exists( path ) )\r
2209                                         {\r
2210                                                 try\r
2211                                                 {\r
2212                                                         Bitmap bitmap2 = null;\r
2213                                                         bitmap2 = new Bitmap( path );\r
2214                                                         if( ( bitmap2.Size.Width == 0 ) && ( bitmap2.Size.Height == 0 ) )\r
2215                                                         {\r
2216                                                                 this.tx背景 = null;\r
2217                                                                 return;\r
2218                                                         }\r
2219                                                         Bitmap bitmap3 = new Bitmap( 640, 480 );\r
2220                                                         Graphics graphics = Graphics.FromImage( bitmap3 );\r
2221                                                         for( int i = 0; i < 480; i += bitmap2.Size.Height )\r
2222                                                         {\r
2223                                                                 for( int j = 0; j < 640; j += bitmap2.Size.Width )\r
2224                                                                 {\r
2225                                                                         graphics.DrawImage( bitmap2, j, i, bitmap2.Width, bitmap2.Height );\r
2226                                                                 }\r
2227                                                         }\r
2228                                                         graphics.Dispose();\r
2229                                                         bitmap2.Dispose();\r
2230                                                         image = new Bitmap( CSkin.Path( @"Graphics\\ScreenPlayGuitar background.jpg" ) );\r
2231                                                         graphics = Graphics.FromImage( image );\r
2232                                                         ColorMatrix matrix2 = new ColorMatrix();\r
2233                                                         matrix2.Matrix00 = 1f;\r
2234                                                         matrix2.Matrix11 = 1f;\r
2235                                                         matrix2.Matrix22 = 1f;\r
2236                                                         matrix2.Matrix33 = ( (float) CDTXMania.ConfigIni.n背景の透過度 ) / 255f;\r
2237                                                         matrix2.Matrix44 = 1f;\r
2238                                                         ColorMatrix newColorMatrix = matrix2;\r
2239                                                         ImageAttributes imageAttr = new ImageAttributes();\r
2240                                                         imageAttr.SetColorMatrix( newColorMatrix );\r
2241                                                         graphics.DrawImage( bitmap3, new Rectangle( 0, 0, 640, 480 ), 0, 0, 640, 480, GraphicsUnit.Pixel, imageAttr );\r
2242                                                         imageAttr.Dispose();\r
2243                                                         graphics.DrawImage( bitmap3, new Rectangle( 0xb5, 50, 0x116, 0x163 ), 0xb5, 50, 0x116, 0x163, GraphicsUnit.Pixel );\r
2244                                                         graphics.Dispose();\r
2245                                                         bitmap3.Dispose();\r
2246                                                         flag = false;\r
2247                                                 }\r
2248                                                 catch\r
2249                                                 {\r
2250                                                         Trace.TraceError( "背景画像の読み込みに失敗しました。({0})", new object[] { path } );\r
2251                                                 }\r
2252                                         }\r
2253                                 }\r
2254                         }\r
2255                         if( flag )\r
2256                         {\r
2257                                 path = CSkin.Path( @"Graphics\ScreenPlayGuitar background.jpg" );\r
2258                                 try\r
2259                                 {\r
2260                                         image = new Bitmap( path );\r
2261                                 }\r
2262                                 catch\r
2263                                 {\r
2264                                         Trace.TraceError( "背景画像の読み込みに失敗しました。({0})", new object[] { path } );\r
2265                                         this.tx背景 = null;\r
2266                                         return;\r
2267                                 }\r
2268                         }\r
2269                         if( ( CDTXMania.DTX.listBMP.Count > 0 ) || ( CDTXMania.DTX.listBMPTEX.Count > 0 ) )\r
2270                         {\r
2271                                 Graphics graphics2 = Graphics.FromImage( image );\r
2272                                 graphics2.FillRectangle( Brushes.Black, 0xb5, 50, 0x116, 0x163 );\r
2273                                 graphics2.Dispose();\r
2274                         }\r
2275                         try\r
2276                         {\r
2277                                 this.tx背景 = new CTexture( CDTXMania.app.Device, image, CDTXMania.TextureFormat );\r
2278                         }\r
2279                         catch( CTextureCreateFailedException )\r
2280                         {\r
2281                                 Trace.TraceError( "背景テクスチャの生成に失敗しました。" );\r
2282                                 this.tx背景 = null;\r
2283                         }\r
2284                         image.Dispose();\r
2285                 }\r
2286                 private void t判定にあわせてゲージを増減する( E楽器パート part, E判定 e今回の判定 )\r
2287                 {\r
2288                         double num;\r
2289                         switch( e今回の判定 )\r
2290                         {\r
2291                                 case E判定.Perfect:\r
2292                                         num = ( part == E楽器パート.DRUMS ) ? 0.01 : 0.015;\r
2293                                         break;\r
2294 \r
2295                                 case E判定.Great:\r
2296                                         num = ( part == E楽器パート.DRUMS ) ? 0.006 : 0.009;\r
2297                                         break;\r
2298 \r
2299                                 case E判定.Good:\r
2300                                         num = ( part == E楽器パート.DRUMS ) ? 0.002 : 0.003;\r
2301                                         break;\r
2302 \r
2303                                 case E判定.Poor:\r
2304                                         num = ( part == E楽器パート.DRUMS ) ? 0.0 : 0.0;\r
2305                                         break;\r
2306 \r
2307                                 case E判定.Miss:\r
2308                                         num = ( part == E楽器パート.DRUMS ) ? -0.035 : -0.035;\r
2309                                         switch( CDTXMania.ConfigIni.eダメージレベル )\r
2310                                         {\r
2311                                                 case Eダメージレベル.少ない:\r
2312                                                         num *= 0.6;\r
2313                                                         break;\r
2314 \r
2315                                                 case Eダメージレベル.普通:\r
2316                                                         num *= 1.0;\r
2317                                                         break;\r
2318 \r
2319                                                 case Eダメージレベル.大きい:\r
2320                                                         num *= 1.6;\r
2321                                                         break;\r
2322                                         }\r
2323                                         break;\r
2324 \r
2325                                 default:\r
2326                                         num = 0.0;\r
2327                                         break;\r
2328                         }\r
2329                         this.actGauge.db現在のゲージ値[ (int) part ] += num;\r
2330 \r
2331                         if( this.actGauge.db現在のゲージ値[ (int) part ] > 1.0 )\r
2332                                 this.actGauge.db現在のゲージ値[ (int) part ] = 1.0;\r
2333                 }\r
2334                 //-----------------\r
2335                 #endregion\r
2336         }\r
2337 }\r