OSDN Git Service

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