2 using System.Collections.Generic;
\r
4 using System.Runtime.InteropServices;
\r
5 using System.Drawing;
\r
6 using System.Drawing.Imaging;
\r
8 using System.Diagnostics;
\r
10 using SlimDX.Direct3D9;
\r
16 /// 演奏画面の共通クラス (ドラム演奏画面, ギター演奏画面の継承元)
\r
18 internal abstract class CStage演奏画面共通 : CStage
\r
22 public bool bAUTOでないチップが1つでもバーを通過した
\r
31 public override void On活性化()
\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
41 this.n最後に再生したBGMの実WAV番号[ i ] = -1;
\r
43 this.r次にくるギターChip = null;
\r
44 this.r次にくるベースChip = null;
\r
45 for ( int j = 0; j < 10; j++ )
\r
47 this.r現在の空うちドラムChip[ j ] = null;
\r
49 this.r現在の空うちギターChip = null;
\r
50 this.r現在の空うちベースChip = null;
\r
51 for ( int k = 0; k < 3; k++ )
\r
53 for ( int n = 0; n < 5; n++ )
\r
55 this.nヒット数・Auto含まない[ k ] = new STHITCOUNTOFRANK();
\r
56 this.nヒット数・Auto含む[ k ] = new STHITCOUNTOFRANK();
\r
58 this.queWailing[ k ] = new Queue<CDTX.CChip>();
\r
59 this.r現在の歓声Chip[ k ] = null;
\r
61 for ( int i = 0; i < 3; i++ )
\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
68 this.bAUTOでないチップが1つでもバーを通過した = false;
\r
70 this.tステータスパネルの選択();
\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
81 if ( CDTXMania.ConfigIni.bIsSwappedGuitarBass ) // #24063 2011.1.24 yyagi Gt/Bsの譜面情報入れ替え
\r
83 CDTXMania.DTX.SwapGuitarBassInfos();
\r
86 public override void On非活性化()
\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
92 this.queWailing[ i ] = null;
\r
94 this.ctWailingチップ模様アニメ = null;
\r
95 this.ctチップ模様アニメ.Drums = null;
\r
96 this.ctチップ模様アニメ.Guitar = null;
\r
97 this.ctチップ模様アニメ.Bass = null;
\r
100 public override void OnManagedリソースの作成()
\r
102 if ( !base.b活性化してない )
\r
104 this.t背景テクスチャの生成();
\r
106 this.txWailing枠 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlay wailing cursor.png" ) );
\r
108 base.OnManagedリソースの作成();
\r
111 public override void OnManagedリソースの解放()
\r
113 if ( !base.b活性化してない )
\r
115 CDTXMania.tテクスチャの解放( ref this.tx背景 );
\r
117 CDTXMania.tテクスチャの解放( ref this.txWailing枠 );
\r
118 base.OnManagedリソースの解放();
\r
124 #region [ protected ]
\r
125 //-----------------
\r
126 protected class STHITCOUNTOFRANK
\r
132 public int Perfect;
\r
136 public int this[ int index ]
\r
143 return this.Perfect;
\r
157 throw new IndexOutOfRangeException();
\r
164 this.Perfect = value;
\r
168 this.Great = value;
\r
183 throw new IndexOutOfRangeException();
\r
188 [StructLayout( LayoutKind.Sequential )]
\r
189 protected struct STKARAUCHI
\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
237 throw new IndexOutOfRangeException();
\r
283 throw new IndexOutOfRangeException();
\r
288 protected CAct演奏AVI actAVI;
\r
289 protected CAct演奏BGA actBGA;
\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
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
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
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
345 protected CTexture tx背景;
\r
347 protected STDGBVALUE<int> nInputAdjustTimeMs; // #23580 2011.1.3 yyagi
\r
348 protected CConfigIni.STAUTOPLAY bIsAutoPlay; // #24239 2011.1.23 yyagi
\r
353 protected E判定 e指定時刻からChipのJUDGEを返す( long nTime, CDTX.CChip pChip, int nInputAdjustTime )
\r
355 if ( pChip != null )
\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
362 return E判定.Perfect;
\r
364 if ( nDeltaTime <= CDTXMania.nGreat範囲ms )
\r
368 if ( nDeltaTime <= CDTXMania.nGood範囲ms )
\r
372 if ( nDeltaTime <= CDTXMania.nPoor範囲ms )
\r
379 protected CDTX.CChip r空うちChip( E楽器パート part, Eパッド pad )
\r
387 if ( this.r現在の空うちドラムChip.HH != null )
\r
389 return this.r現在の空うちドラムChip.HH;
\r
391 if ( CDTXMania.ConfigIni.eHHGroup != EHHGroup.ハイハットのみ打ち分ける )
\r
393 if ( CDTXMania.ConfigIni.eHHGroup == EHHGroup.左シンバルのみ打ち分ける )
\r
395 return this.r現在の空うちドラムChip.HHO;
\r
397 if ( this.r現在の空うちドラムChip.HHO != null )
\r
399 return this.r現在の空うちドラムChip.HHO;
\r
402 return this.r現在の空うちドラムChip.LC;
\r
405 return this.r現在の空うちドラムChip.SD;
\r
408 return this.r現在の空うちドラムChip.BD;
\r
411 return this.r現在の空うちドラムChip.HT;
\r
414 if ( this.r現在の空うちドラムChip.LT != null )
\r
416 return this.r現在の空うちドラムChip.LT;
\r
418 if ( CDTXMania.ConfigIni.eFTGroup == EFTGroup.共通 )
\r
420 return this.r現在の空うちドラムChip.FT;
\r
425 if ( this.r現在の空うちドラムChip.FT != null )
\r
427 return this.r現在の空うちドラムChip.FT;
\r
429 if ( CDTXMania.ConfigIni.eFTGroup == EFTGroup.共通 )
\r
431 return this.r現在の空うちドラムChip.LT;
\r
436 if ( this.r現在の空うちドラムChip.CY != null )
\r
438 return this.r現在の空うちドラムChip.CY;
\r
440 if ( CDTXMania.ConfigIni.eCYGroup == ECYGroup.共通 )
\r
442 return this.r現在の空うちドラムChip.RD;
\r
447 if ( this.r現在の空うちドラムChip.HHO != null )
\r
449 return this.r現在の空うちドラムChip.HHO;
\r
451 if ( CDTXMania.ConfigIni.eHHGroup != EHHGroup.ハイハットのみ打ち分ける )
\r
453 if ( CDTXMania.ConfigIni.eHHGroup == EHHGroup.左シンバルのみ打ち分ける )
\r
455 return this.r現在の空うちドラムChip.HH;
\r
457 if ( this.r現在の空うちドラムChip.HH != null )
\r
459 return this.r現在の空うちドラムChip.HH;
\r
462 return this.r現在の空うちドラムChip.LC;
\r
465 if ( this.r現在の空うちドラムChip.RD != null )
\r
467 return this.r現在の空うちドラムChip.RD;
\r
469 if ( CDTXMania.ConfigIni.eCYGroup == ECYGroup.共通 )
\r
471 return this.r現在の空うちドラムChip.CY;
\r
476 if ( this.r現在の空うちドラムChip.LC != null )
\r
478 return this.r現在の空うちドラムChip.LC;
\r
480 if ( ( CDTXMania.ConfigIni.eHHGroup != EHHGroup.ハイハットのみ打ち分ける ) && ( CDTXMania.ConfigIni.eHHGroup != EHHGroup.全部共通 ) )
\r
484 if ( this.r現在の空うちドラムChip.HH != null )
\r
486 return this.r現在の空うちドラムChip.HH;
\r
488 return this.r現在の空うちドラムChip.HHO;
\r
492 case E楽器パート.GUITAR:
\r
493 return this.r現在の空うちギターChip;
\r
496 return this.r現在の空うちベースChip;
\r
500 protected CDTX.CChip r指定時刻に一番近いChip・ヒット未済問わず不可視考慮( long nTime, int nChannelFlag, int nInputAdjustTime )
\r
502 nTime += nInputAdjustTime; // #24239 2011.1.23 yyagi InputAdjust
\r
505 if ( this.n現在のトップChip == -1 )
\r
509 int count = CDTXMania.DTX.listChip.Count;
\r
510 int num4 = num5 = this.n現在のトップChip;
\r
511 if ( this.n現在のトップChip >= count )
\r
513 num4 = num5 = count - 1;
\r
516 while ( num2 < count )
\r
518 CDTX.CChip chip = CDTXMania.DTX.listChip[ num2 ];
\r
519 if ( ( ( nChannelFlag >= 0x11 ) && ( nChannelFlag <= 0x1a ) ) && ( ( chip.nチャンネル番号 == nChannelFlag ) || ( chip.nチャンネル番号 == ( nChannelFlag + 0x20 ) ) ) )
\r
521 if ( chip.n発声時刻ms > nTime )
\r
527 else if ( ( ( nChannelFlag == 0x2f ) && ( chip.e楽器パート == E楽器パート.GUITAR ) ) || ( ( ( nChannelFlag >= 0x20 ) && ( nChannelFlag <= 0x28 ) ) && ( chip.nチャンネル番号 == nChannelFlag ) ) )
\r
529 if ( chip.n発声時刻ms > nTime )
\r
535 else if ( ( ( nChannelFlag == 0xaf ) && ( chip.e楽器パート == E楽器パート.BASS ) ) || ( ( ( nChannelFlag >= 0xa0 ) && ( nChannelFlag <= 0xa8 ) ) && ( chip.nチャンネル番号 == nChannelFlag ) ) )
\r
537 if ( chip.n発声時刻ms > nTime )
\r
546 while ( num3 >= 0 )
\r
548 CDTX.CChip chip2 = CDTXMania.DTX.listChip[ num3 ];
\r
549 if ( ( nChannelFlag >= 0x11 ) && ( nChannelFlag <= 0x1a ) )
\r
551 if ( ( chip2.nチャンネル番号 == nChannelFlag ) || ( chip2.nチャンネル番号 == ( nChannelFlag + 0x20 ) ) )
\r
556 else if ( ( ( nChannelFlag == 0x2f ) && ( chip2.e楽器パート == E楽器パート.GUITAR ) ) || ( ( ( nChannelFlag >= 0x20 ) && ( nChannelFlag <= 0x28 ) ) && ( chip2.nチャンネル番号 == nChannelFlag ) ) )
\r
558 if ( ( chip2.nチャンネル番号 >= 0x20 ) && ( chip2.nチャンネル番号 <= 0x28 ) )
\r
563 else if ( ( ( ( nChannelFlag == 0xaf ) && ( chip2.e楽器パート == E楽器パート.BASS ) ) || ( ( ( nChannelFlag >= 0xa0 ) && ( nChannelFlag <= 0xa8 ) ) && ( chip2.nチャンネル番号 == nChannelFlag ) ) ) && ( ( chip2.nチャンネル番号 >= 0xa0 ) && ( chip2.nチャンネル番号 <= 0xa8 ) ) )
\r
569 if ( ( num2 == count ) && ( num3 < 0 ) )
\r
573 if ( num2 == count )
\r
575 return CDTXMania.DTX.listChip[ num3 ];
\r
579 return CDTXMania.DTX.listChip[ num2 ];
\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
591 protected void tサウンド再生( CDTX.CChip rChip, long n再生開始システム時刻ms, E楽器パート part )
\r
593 this.tサウンド再生( rChip, n再生開始システム時刻ms, part, CDTXMania.ConfigIni.n手動再生音量, false, false );
\r
595 protected void tサウンド再生( CDTX.CChip rChip, long n再生開始システム時刻ms, E楽器パート part, int n音量 )
\r
597 this.tサウンド再生( rChip, n再生開始システム時刻ms, part, n音量, false, false );
\r
599 protected void tサウンド再生( CDTX.CChip rChip, long n再生開始システム時刻ms, E楽器パート part, int n音量, bool bモニタ )
\r
601 this.tサウンド再生( rChip, n再生開始システム時刻ms, part, n音量, bモニタ, false );
\r
603 protected void tサウンド再生( CDTX.CChip pChip, long n再生開始システム時刻ms, E楽器パート part, int n音量, bool bモニタ, bool b音程をずらして再生 )
\r
605 if ( pChip != null )
\r
611 int index = pChip.nチャンネル番号;
\r
612 if ( ( index >= 0x11 ) && ( index <= 0x1a ) )
\r
618 if ( ( index < 0x31 ) || ( index > 0x3a ) )
\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
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
635 for ( int i = 0; i < this.L最後に再生したHHの実WAV番号.Count; i++ ) // #23921 2011.1.4 yyagi
\r
637 // CDTXMania.DTX.tWavの再生停止(this.L最後に再生したHHの実WAV番号);
\r
638 CDTXMania.DTX.tWavの再生停止( this.L最後に再生したHHの実WAV番号[ i ] ); // #23921 yyagi ストック分全て消音する
\r
640 this.L最後に再生したHHの実WAV番号.Clear();
\r
641 #if TEST_NOTEOFFMODE // 2011.1.1 yyagi test
\r
644 //this.n最後に再生したHHの実WAV番号 = pChip.n整数値・内部番号;
\r
645 this.n最後に再生したHHのチャンネル番号 = pChip.nチャンネル番号;
\r
647 #if TEST_NOTEOFFMODE // 2011.1.4 yyagi test
\r
648 if (CDTXMania.DTX.bHH演奏で直前のHHを消音する)
\r
651 if ( index == 7 || index == 0x27 ) // #23921 HOまたは不可視HO演奏時はそのチップ番号をストックしておく
\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
657 if ( this.L最後に再生したHHの実WAV番号.IndexOf( pChip.n整数値・内部番号 ) < 0 ) // チップ音がまだストックされてなければ
\r
659 this.L最後に再生したHHの実WAV番号.Add( pChip.n整数値・内部番号 ); // ストックする
\r
662 #if TEST_NOTEOFFMODE // 2011.1.4 yyagi test
\r
665 CDTXMania.DTX.tチップの再生( pChip, n再生開始システム時刻ms, nLane, n音量, bモニタ );
\r
668 case E楽器パート.GUITAR:
\r
669 #if TEST_NOTEOFFMODE // 2011.1.1 yyagi test
\r
670 if (CDTXMania.DTX.bGUITAR演奏で直前のGUITARを消音する) {
\r
672 CDTXMania.DTX.tWavの再生停止( this.n最後に再生したギターの実WAV番号 );
\r
673 #if TEST_NOTEOFFMODE
\r
676 CDTXMania.DTX.tチップの再生( pChip, n再生開始システム時刻ms, 8, n音量, bモニタ, b音程をずらして再生 );
\r
677 this.n最後に再生したギターの実WAV番号 = pChip.n整数値・内部番号;
\r
681 #if TEST_NOTEOFFMODE
\r
682 if (CDTXMania.DTX.bBASS演奏で直前のBASSを消音する) {
\r
684 CDTXMania.DTX.tWavの再生停止( this.n最後に再生したベースの実WAV番号 );
\r
685 #if TEST_NOTEOFFMODE
\r
688 CDTXMania.DTX.tチップの再生( pChip, n再生開始システム時刻ms, 9, n音量, bモニタ, b音程をずらして再生 );
\r
689 this.n最後に再生したベースの実WAV番号 = pChip.n整数値・内部番号;
\r
694 protected void tステータスパネルの選択()
\r
696 if ( CDTXMania.bコンパクトモード )
\r
698 this.actStatusPanels.tラベル名からステータスパネルを決定する( null );
\r
700 else if ( CDTXMania.stage選曲.r確定された曲 != null )
\r
702 this.actStatusPanels.tラベル名からステータスパネルを決定する( CDTXMania.stage選曲.r確定された曲.ar難易度ラベル[ CDTXMania.stage選曲.n確定された曲の難易度 ] );
\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
709 bool bPChipIsAutoPlay = false;
\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
714 ( ( pChip.e楽器パート == E楽器パート.BASS ) && CDTXMania.ConfigIni.bAutoPlay.Bass )
\r
717 bPChipIsAutoPlay = true;
\r
721 this.bAUTOでないチップが1つでもバーを通過した = true;
\r
723 E判定 eJudgeResult = E判定.Auto;
\r
724 switch ( pChip.e楽器パート )
\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
734 case E楽器パート.GUITAR:
\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
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
750 if ( !bPChipIsAutoPlay && ( pChip.e楽器パート != E楽器パート.UNKNOWN ) )
\r
752 this.t判定にあわせてゲージを増減する( screenmode, pChip.e楽器パート, eJudgeResult );
\r
755 switch ( pChip.e楽器パート )
\r
758 switch ( eJudgeResult )
\r
762 this.nヒット数・Auto含む.Drums.Miss++;
\r
763 if ( !bPChipIsAutoPlay )
\r
765 this.nヒット数・Auto含まない.Drums.Miss++;
\r
769 this.nヒット数・Auto含む.Drums[ (int) eJudgeResult ]++;
\r
770 if ( !bPChipIsAutoPlay )
\r
772 this.nヒット数・Auto含まない.Drums[ (int) eJudgeResult ]++;
\r
777 if ( CDTXMania.ConfigIni.bドラムが全部オートプレイである || !bPChipIsAutoPlay )
\r
779 switch ( eJudgeResult )
\r
784 this.actCombo.n現在のコンボ数.Drums++;
\r
788 this.actCombo.n現在のコンボ数.Drums = 0;
\r
794 case E楽器パート.GUITAR:
\r
795 switch ( eJudgeResult )
\r
799 this.nヒット数・Auto含む.Guitar.Miss++;
\r
800 if ( !bPChipIsAutoPlay )
\r
802 this.nヒット数・Auto含まない.Guitar.Miss++;
\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
810 this.nヒット数・Auto含まない.Guitar[ (int) eJudgeResult ]++;
\r
814 switch ( eJudgeResult )
\r
819 this.actCombo.n現在のコンボ数.Guitar++;
\r
823 this.actCombo.n現在のコンボ数.Guitar = 0;
\r
829 switch ( eJudgeResult )
\r
833 this.nヒット数・Auto含む.Bass.Miss++;
\r
834 if ( !bPChipIsAutoPlay )
\r
836 this.nヒット数・Auto含まない.Bass.Miss++;
\r
839 default: // #24068 2011.1.10 ikanick changed
\r
840 this.nヒット数・Auto含む.Bass[ (int) eJudgeResult ]++;
\r
841 if ( !bPChipIsAutoPlay )
\r
843 this.nヒット数・Auto含まない.Bass[ (int) eJudgeResult ]++;
\r
848 switch ( eJudgeResult )
\r
853 this.actCombo.n現在のコンボ数.Bass++;
\r
857 this.actCombo.n現在のコンボ数.Bass = 0;
\r
865 if ( ( !bPChipIsAutoPlay && ( pChip.e楽器パート != E楽器パート.UNKNOWN ) ) && ( eJudgeResult != E判定.Miss ) && ( eJudgeResult != E判定.Bad ) )
\r
868 switch ( pChip.e楽器パート )
\r
871 nCombos = this.actCombo.n現在のコンボ数.Drums;
\r
873 case E楽器パート.GUITAR:
\r
874 nCombos = this.actCombo.n現在のコンボ数.Guitar;
\r
877 nCombos = this.actCombo.n現在のコンボ数.Bass;
\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
884 nScore += numArray[ (int) eJudgeResult ] * nCombos;
\r
886 else if ( ( eJudgeResult == E判定.Perfect ) || ( eJudgeResult == E判定.Great ) )
\r
888 nScore += numArray[ (int) eJudgeResult ] * 500L;
\r
890 this.actScore.Set( pChip.e楽器パート, nScore );
\r
892 return eJudgeResult;
\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
898 this.tチップのヒット処理・BadならびにTight時のMiss( part, 0, screenmode );
\r
900 protected void tチップのヒット処理・BadならびにTight時のMiss( E楽器パート part, int nLane, E楽器パート screenmode )
\r
902 this.bAUTOでないチップが1つでもバーを通過した = true;
\r
903 this.t判定にあわせてゲージを増減する( screenmode, part, E判定.Miss );
\r
907 if ( ( nLane >= 0 ) && ( nLane <= 7 ) )
\r
909 this.actJudgeString.Start( nLane, CDTXMania.ConfigIni.bAutoPlay[ nLane ] ? E判定.Auto : E判定.Miss, 999 );
\r
911 this.actCombo.n現在のコンボ数.Drums = 0;
\r
914 case E楽器パート.GUITAR:
\r
915 this.actJudgeString.Start( 10, E判定.Bad, 999 );
\r
916 this.actCombo.n現在のコンボ数.Guitar = 0;
\r
920 this.actJudgeString.Start( 11, E判定.Bad, 999 );
\r
921 this.actCombo.n現在のコンボ数.Bass = 0;
\r
929 protected CDTX.CChip r指定時刻に一番近い未ヒットChip( long nTime, int nChannelFlag, int nInputAdjustTime )
\r
931 return this.r指定時刻に一番近い未ヒットChip( nTime, nChannelFlag, nInputAdjustTime, 0 );
\r
933 protected CDTX.CChip r指定時刻に一番近い未ヒットChip( long nTime, int nChannelFlag, int nInputAdjustTime, int n検索範囲時間ms )
\r
935 nTime += nInputAdjustTime;
\r
939 if ( this.n現在のトップChip == -1 )
\r
943 int count = CDTXMania.DTX.listChip.Count;
\r
944 int num4 = num5 = this.n現在のトップChip;
\r
945 if ( this.n現在のトップChip >= count )
\r
947 num4 = num5 = count - 1;
\r
950 while ( num2 < count )
\r
952 CDTX.CChip chip = CDTXMania.DTX.listChip[ num2 ];
\r
953 if ( ( !chip.bHit && ( nChannelFlag >= 0x11 ) ) && ( nChannelFlag <= 0x1a ) )
\r
955 if ( ( chip.nチャンネル番号 == nChannelFlag ) || ( chip.nチャンネル番号 == ( nChannelFlag + 0x20 ) ) )
\r
957 if ( chip.n発声時刻ms > nTime )
\r
964 else if ( !chip.bHit && ( ( ( nChannelFlag == 0x2f ) && ( chip.e楽器パート == E楽器パート.GUITAR ) ) || ( ( ( nChannelFlag >= 0x20 ) && ( nChannelFlag <= 40 ) ) && ( chip.nチャンネル番号 == nChannelFlag ) ) ) )
\r
966 if ( chip.n発声時刻ms > nTime )
\r
972 else if ( !chip.bHit && ( ( ( nChannelFlag == 0xaf ) && ( chip.e楽器パート == E楽器パート.BASS ) ) || ( ( ( nChannelFlag >= 160 ) && ( nChannelFlag <= 0xa8 ) ) && ( chip.nチャンネル番号 == nChannelFlag ) ) ) )
\r
974 if ( chip.n発声時刻ms > nTime )
\r
983 while ( num3 >= 0 )
\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
992 if ( ( num2 == count ) && ( num3 < 0 ) )
\r
996 CDTX.CChip chip3 = null;
\r
997 if ( num2 == count )
\r
999 chip3 = CDTXMania.DTX.listChip[ num3 ];
\r
1000 num6 = Math.Abs( (int) ( nTime - chip3.n発声時刻ms ) );
\r
1002 else if ( num3 < 0 )
\r
1004 chip3 = CDTXMania.DTX.listChip[ num2 ];
\r
1005 num6 = Math.Abs( (int) ( nTime - chip3.n発声時刻ms ) );
\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
1013 chip3 = CDTXMania.DTX.listChip[ num2 ];
\r
1014 num6 = Math.Abs( (int) ( nTime - chip3.n発声時刻ms ) );
\r
1018 chip3 = CDTXMania.DTX.listChip[ num3 ];
\r
1019 num6 = Math.Abs( (int) ( nTime - chip3.n発声時刻ms ) );
\r
1022 if ( ( n検索範囲時間ms > 0 ) && ( num6 > n検索範囲時間ms ) )
\r
1028 protected CDTX.CChip r次にくるギターChipを更新して返す()
\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
1034 protected CDTX.CChip r次にくるベースChipを更新して返す()
\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
1041 protected void ChangeInputAdjustTimeInPlaying( IInputDevice keyboard, int plusminus ) // #23580 2011.1.16 yyagi UI for InputAdjustTime in playing screen.
\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
1046 part = (int) E楽器パート.GUITAR;
\r
1048 else if ( keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.LeftAlt ) || keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.RightAlt ) ) // Bass InputAdjustTime
\r
1050 part = (int) E楽器パート.BASS;
\r
1052 else // Drums InputAdjustTime
\r
1054 part = (int) E楽器パート.DRUMS;
\r
1056 if ( !keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.LeftControl ) && !keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.RightControl ) )
\r
1061 this.nInputAdjustTimeMs[ part ] += offset;
\r
1062 if ( this.nInputAdjustTimeMs[ part ] > 0 )
\r
1064 this.nInputAdjustTimeMs[ part ] = 0;
\r
1066 else if ( this.nInputAdjustTimeMs[ part ] < -99 )
\r
1068 this.nInputAdjustTimeMs[ part ] = -99;
\r
1070 CDTXMania.ConfigIni.nInputAdjustTimeMs[ part ] = this.nInputAdjustTimeMs[ part ];
\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
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
1087 CDTXMania.Timer.t一時停止();
\r
1088 CDTXMania.DTX.t全チップの再生一時停止();
\r
1092 CDTXMania.Timer.t再開();
\r
1093 CDTXMania.DTX.t全チップの再生再開();
\r
1096 if ( ( !this.bPAUSE && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED ) ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) )
\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
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
1111 else if ( keyboard.bキーが押された( (int) SlimDX.DirectInput.Key.UpArrow ) )
\r
1112 { // UpArrow(scrollspeed up)
\r
1115 else if ( keyboard.bキーが押された( (int) SlimDX.DirectInput.Key.DownArrow ) )
\r
1116 { // DownArrow (scrollspeed down)
\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
1123 else if ( keyboard.bキーが押された( (int) SlimDX.DirectInput.Key.LeftArrow ) ) // #24243 2011.1.16 yyagi UI for InputAdjustTime in playing screen.
\r
1125 ChangeInputAdjustTimeInPlaying( keyboard, -1 );
\r
1127 else if ( keyboard.bキーが押された( (int) SlimDX.DirectInput.Key.RightArrow ) ) // #24243 2011.1.16 yyagi UI for InputAdjustTime in playing screen.
\r
1129 ChangeInputAdjustTimeInPlaying( keyboard, +1 );
\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
1140 protected void t入力メソッド記憶( E楽器パート part )
\r
1142 if ( CDTXMania.Pad.st検知したデバイス.Keyboard )
\r
1144 this.b演奏にキーボードを使った[ (int) part ] = true;
\r
1146 if ( CDTXMania.Pad.st検知したデバイス.Joypad )
\r
1148 this.b演奏にジョイパッドを使った[ (int) part ] = true;
\r
1150 if ( CDTXMania.Pad.st検知したデバイス.MIDIIN )
\r
1152 this.b演奏にMIDI入力を使った[ (int) part ] = true;
\r
1154 if ( CDTXMania.Pad.st検知したデバイス.Mouse )
\r
1156 this.b演奏にマウスを使った[ (int) part ] = true;
\r
1161 protected abstract void t進行描画・AVI();
\r
1162 protected void t進行描画・AVI(int x, int y)
\r
1164 if ( ( ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) ) && ( !CDTXMania.ConfigIni.bストイックモード && CDTXMania.ConfigIni.bAVI有効 ) )
\r
1166 this.actAVI.t進行描画( x, y );
\r
1169 protected abstract void t進行描画・BGA();
\r
1170 protected void t進行描画・BGA(int x, int y)
\r
1172 if ( ( ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) ) && ( !CDTXMania.ConfigIni.bストイックモード && CDTXMania.ConfigIni.bBGA有効 ) )
\r
1174 this.actBGA.t進行描画( x, y );
\r
1177 protected abstract void t進行描画・DANGER();
\r
1178 protected void t進行描画・MIDIBGM()
\r
1180 if ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED )
\r
1182 CStage.Eフェーズ eフェーズid1 = base.eフェーズID;
\r
1185 protected void t進行描画・RGBボタン()
\r
1187 if ( CDTXMania.ConfigIni.eDark != Eダークモード.FULL )
\r
1189 this.actRGB.On進行描画();
\r
1192 protected void t進行描画・STAGEFAILED()
\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
1196 this.eフェードアウト完了時の戻り値 = E演奏画面の戻り値.ステージ失敗;
\r
1197 base.eフェーズID = CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト;
\r
1198 this.actFO.tフェードアウト開始();
\r
1201 protected void t進行描画・WailingBonus()
\r
1203 if ( ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) )
\r
1205 this.actWailingBonus.On進行描画();
\r
1208 protected abstract void t進行描画・Wailing枠();
\r
1209 protected void t進行描画・Wailing枠(int GtWailingFrameX, int BsWailingFrameX, int GtWailingFrameY, int BsWailingFrameY)
\r
1211 if ( ( CDTXMania.ConfigIni.eDark != Eダークモード.FULL ) && CDTXMania.ConfigIni.bGuitar有効 )
\r
1213 if ( CDTXMania.DTX.bチップがある.Guitar && ( this.txWailing枠 != null ) )
\r
1215 this.txWailing枠.t2D描画( CDTXMania.app.Device, GtWailingFrameX, GtWailingFrameY );
\r
1217 if ( CDTXMania.DTX.bチップがある.Bass && ( this.txWailing枠 != null ) )
\r
1219 this.txWailing枠.t2D描画( CDTXMania.app.Device, BsWailingFrameX, BsWailingFrameY );
\r
1225 protected void t進行描画・チップファイアGB()
\r
1227 this.actChipFireGB.On進行描画();
\r
1229 protected abstract void t進行描画・パネル文字列();
\r
1230 protected void t進行描画・パネル文字列(int x, int y)
\r
1232 if ( ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) )
\r
1234 this.actPanel.t進行描画( x, y );
\r
1237 protected void tパネル文字列の設定()
\r
1239 this.actPanel.SetPanelString( string.IsNullOrEmpty( CDTXMania.DTX.PANEL ) ? CDTXMania.DTX.TITLE : CDTXMania.DTX.PANEL );
\r
1243 protected void t進行描画・ゲージ()
\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
1247 this.actGauge.On進行描画();
\r
1250 protected void t進行描画・コンボ()
\r
1252 this.actCombo.On進行描画();
\r
1254 protected void t進行描画・スコア()
\r
1256 this.actScore.On進行描画();
\r
1258 protected void t進行描画・ステータスパネル()
\r
1260 this.actStatusPanels.On進行描画();
\r
1262 protected bool t進行描画・チップ( E楽器パート ePlayMode )
\r
1264 if ( ( base.eフェーズID == CStage.Eフェーズ.演奏_STAGE_FAILED ) || ( base.eフェーズID == CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) )
\r
1268 if ( ( this.n現在のトップChip == -1 ) || ( this.n現在のトップChip >= CDTXMania.DTX.listChip.Count ) )
\r
1272 int nCurrentTopChip = this.n現在のトップChip;
\r
1273 if ( nCurrentTopChip == -1 )
\r
1278 //double speed = 264.0; // BPM150の時の1小節の長さ[dot]
\r
1279 double speed = 234.0; // BPM150の時の1小節の長さ[dot]
\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
1285 CDTX dTX = CDTXMania.DTX;
\r
1286 CConfigIni configIni = CDTXMania.ConfigIni;
\r
1287 while ( nCurrentTopChip < dTX.listChip.Count )
\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
1297 if ( ( ( nCurrentTopChip == this.n現在のトップChip ) && ( pChip.nバーからの距離dot.Drums < -65 ) ) && pChip.bHit )
\r
1299 this.n現在のトップChip++;
\r
1300 nCurrentTopChip = this.n現在のトップChip;
\r
1304 bool bPChipIsAutoPlay = false;
\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
1309 ( ( pChip.e楽器パート == E楽器パート.BASS ) && CDTXMania.ConfigIni.bAutoPlay.Bass )
\r
1311 // if ((pChip.e楽器パート == E楽器パート.DRUMS) && CDTXMania.ConfigIni.bAutoPlay[this.nチャンネル0Atoレーン07[pChip.nチャンネル番号 - 0x11]])
\r
1313 bPChipIsAutoPlay = true;
\r
1316 int nInputAdjustTime = 0;
\r
1317 if ( bPChipIsAutoPlay )
\r
1319 //nInputAdjustTime = 0;
\r
1321 else if ( pChip.e楽器パート == E楽器パート.UNKNOWN )
\r
1323 //nInputAdjustTime = 0;
\r
1327 nInputAdjustTime = this.nInputAdjustTimeMs[ (int) pChip.e楽器パート ];
\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
1333 this.tチップのヒット処理( CDTXMania.Timer.n現在時刻, pChip );
\r
1335 switch ( pChip.nチャンネル番号 )
\r
1338 if ( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1340 pChip.bHit = true;
\r
1341 if ( configIni.bBGM音を発声する )
\r
1343 dTX.tチップの再生( pChip, CDTXMania.Timer.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, 10, dTX.nモニタを考慮した音量( E楽器パート.UNKNOWN ) );
\r
1348 case 0x03: // BPM変更
\r
1349 if ( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1351 pChip.bHit = true;
\r
1352 this.actPlayInfo.dbBPM = ( pChip.n整数値 * ( ( (double) configIni.n演奏速度 ) / 20.0 ) ) + dTX.BASEBPM;
\r
1356 case 0x04: // レイヤーBGA
\r
1364 if ( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1366 pChip.bHit = true;
\r
1367 if ( configIni.bBGA有効 )
\r
1369 switch ( pChip.eBGA種別 )
\r
1371 case EBGA種別.BMPTEX:
\r
1372 if ( pChip.rBMPTEX != null )
\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
1379 if ( ( pChip.rBGA != null ) && ( ( pChip.rBMP != null ) || ( pChip.rBMPTEX != null ) ) )
\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
1385 case EBGA種別.BGAPAN:
\r
1386 if ( ( pChip.rBGAPan != null ) && ( ( pChip.rBMP != null ) || ( pChip.rBMPTEX != null ) ) )
\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
1393 if ( pChip.rBMP != null )
\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
1403 case 0x08: // BPM変更(拡張)
\r
1404 if ( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1406 pChip.bHit = true;
\r
1407 if ( dTX.listBPM.ContainsKey( pChip.n整数値・内部番号 ) )
\r
1409 this.actPlayInfo.dbBPM = ( dTX.listBPM[ pChip.n整数値・内部番号 ].dbBPM値 * ( ( (double) configIni.n演奏速度 ) / 20.0 ) ) + dTX.BASEBPM;
\r
1414 case 0x11: // ドラム演奏
\r
1424 this.t進行描画・チップ・ドラムス( configIni, ref dTX, ref pChip );
\r
1427 case 0x1f: // フィルインサウンド(ドラム)
\r
1428 if ( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1430 pChip.bHit = true;
\r
1431 this.r現在の歓声Chip.Drums = pChip;
\r
1435 case 0x20: // ギター演奏
\r
1443 this.t進行描画・チップ・ギター( configIni, ref dTX, ref pChip );
\r
1446 case 0x28: // ウェイリング(ギター)
\r
1447 this.t進行描画・チップ・ギター・ウェイリング( configIni, ref dTX, ref pChip );
\r
1450 case 0x2f: // ウェイリングサウンド(ギター)
\r
1451 if ( !pChip.bHit && ( pChip.nバーからの距離dot.Guitar < 0 ) )
\r
1453 pChip.bHit = true;
\r
1454 this.r現在の歓声Chip.Guitar = pChip;
\r
1458 case 0x31: // 不可視チップ配置(ドラム)
\r
1468 if ( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1470 pChip.bHit = true;
\r
1476 this.t進行描画・チップ・小節線( configIni, ref dTX, ref pChip );
\r
1480 if ( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1482 pChip.bHit = true;
\r
1484 if ( ( ePlayMode == E楽器パート.DRUMS ) && ( configIni.eDark != Eダークモード.FULL ) && pChip.b可視 && ( this.txチップ != null ) )
\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
1490 case 0x52: // MIDIコーラス
\r
1491 if ( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1493 pChip.bHit = true;
\r
1497 case 0x53: // フィルイン
\r
1498 this.t進行描画・チップ・フィルイン( configIni, ref dTX, ref pChip );
\r
1501 case 0x54: // 動画再生
\r
1502 if ( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1504 pChip.bHit = true;
\r
1505 if ( configIni.bAVI有効 )
\r
1507 switch ( pChip.eAVI種別 )
\r
1510 if ( pChip.rAVI != null )
\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
1516 case EAVI種別.AVIPAN:
\r
1517 if ( pChip.rAVIPan != null )
\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
1530 case 0x64: // 自動再生(BGM, SE)
\r
1559 if ( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1561 pChip.bHit = true;
\r
1562 if ( configIni.bBGM音を発声する )
\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
1571 case 0xa0: // ベース演奏
\r
1579 this.t進行描画・チップ・ベース( configIni, ref dTX, ref pChip );
\r
1582 case 0xa8: // ウェイリング(ベース)
\r
1583 this.t進行描画・チップ・ベース・ウェイリング( configIni, ref dTX, ref pChip );
\r
1586 case 0xaf: // ウェイリングサウンド(ベース)
\r
1587 if ( !pChip.bHit && ( pChip.nバーからの距離dot.Bass < 0 ) )
\r
1589 pChip.bHit = true;
\r
1590 this.r現在の歓声Chip.Bass = pChip;
\r
1594 case 0xb1: // 空打ち音設定(ドラム)
\r
1604 this.t進行描画・チップ・空打ち音設定・ドラム( configIni, ref dTX, ref pChip );
\r
1607 case 0xba: // 空打ち音設定(ギター)
\r
1608 if ( !pChip.bHit && ( pChip.nバーからの距離dot.Guitar < 0 ) )
\r
1610 pChip.bHit = true;
\r
1611 this.r現在の空うちギターChip = pChip;
\r
1612 pChip.nチャンネル番号 = 0x20;
\r
1616 case 0xbb: // 空打ち音設定(ベース)
\r
1617 if ( !pChip.bHit && ( pChip.nバーからの距離dot.Bass < 0 ) )
\r
1619 pChip.bHit = true;
\r
1620 this.r現在の空うちベースChip = pChip;
\r
1621 pChip.nチャンネル番号 = 0xA0;
\r
1628 case 0xd6: // BGA画像入れ替え
\r
1633 if ( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1635 pChip.bHit = true;
\r
1636 if ( ( configIni.bBGA有効 && ( pChip.eBGA種別 == EBGA種別.BMP ) ) || ( pChip.eBGA種別 == EBGA種別.BMPTEX ) )
\r
1638 for ( int i = 0; i < 8; i++ )
\r
1640 if ( this.nBGAスコープチャンネルマップ[ 0, i ] == pChip.nチャンネル番号 )
\r
1642 this.actBGA.ChangeScope( this.nBGAスコープチャンネルマップ[ 1, i ], pChip.rBMP, pChip.rBMPTEX );
\r
1650 if ( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1652 pChip.bHit = true;
\r
1657 nCurrentTopChip++;
\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
1671 for ( int i = 0; i < 3; i++ ) // drums: 0-3 gt/bs: 1-3
\r
1673 if ( this.ctチップ模様アニメ[ i ] != null )
\r
1675 this.ctチップ模様アニメ[ i ].t進行Loop();
\r
1678 this.ctWailingチップ模様アニメ.t進行Loop();
\r
1681 protected bool t進行描画・フェードイン・アウト()
\r
1683 switch ( base.eフェーズID )
\r
1685 case CStage.Eフェーズ.共通_フェードイン:
\r
1686 if ( this.actFI.On進行描画() != 0 )
\r
1688 base.eフェーズID = CStage.Eフェーズ.共通_通常状態;
\r
1692 case CStage.Eフェーズ.共通_フェードアウト:
\r
1693 case CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト:
\r
1694 if ( this.actFO.On進行描画() != 0 )
\r
1700 case CStage.Eフェーズ.演奏_STAGE_CLEAR_フェードアウト:
\r
1701 if ( this.actFOClear.On進行描画() == 0 )
\r
1710 protected void t進行描画・レーンフラッシュD()
\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
1714 this.actLaneFlushD.On進行描画();
\r
1717 protected void t進行描画・レーンフラッシュGB()
\r
1719 if ( ( ( CDTXMania.ConfigIni.eDark != Eダークモード.HALF ) && ( CDTXMania.ConfigIni.eDark != Eダークモード.FULL ) ) && CDTXMania.ConfigIni.bGuitar有効 )
\r
1721 this.actLaneFlushGB.On進行描画();
\r
1724 protected abstract void t進行描画・演奏情報();
\r
1725 protected void t進行描画・演奏情報(int x, int y)
\r
1727 if ( !CDTXMania.ConfigIni.b演奏情報を表示しない )
\r
1729 this.actPlayInfo.t進行描画( x, y );
\r
1732 protected void t進行描画・背景()
\r
1734 if ( CDTXMania.ConfigIni.eDark == Eダークモード.OFF )
\r
1736 if ( this.tx背景 != null )
\r
1738 this.tx背景.t2D描画( CDTXMania.app.Device, 0, 0 );
\r
1743 CDTXMania.app.Device.Clear( ClearFlags.ZBuffer | ClearFlags.Target, Color.Black, 0f, 0 );
\r
1747 protected void t進行描画・判定ライン()
\r
1749 if ( CDTXMania.ConfigIni.eDark != Eダークモード.FULL )
\r
1751 int y = CDTXMania.ConfigIni.bReverse.Drums ? 0x35 : 0x1a3;
\r
1752 for ( int i = 0x20; i < 0x14f; i += 8 )
\r
1754 if ( this.txヒットバー != null )
\r
1756 this.txヒットバー.t2D描画( CDTXMania.app.Device, i, y, new Rectangle( 0, 0, ( ( i + 8 ) >= 0x14f ) ? ( 7 - ( ( i + 8 ) - 0x14f ) ) : 8, 8 ) );
\r
1761 protected void t進行描画・判定文字列()
\r
1763 this.actJudgeString.On進行描画();
\r
1765 protected void t進行描画・判定文字列1・通常位置指定の場合()
\r
1767 if ( ( (E判定文字表示位置) CDTXMania.ConfigIni.判定文字表示位置.Drums ) != E判定文字表示位置.判定ライン上または横 )
\r
1769 this.actJudgeString.On進行描画();
\r
1772 protected void t進行描画・判定文字列2・判定ライン上指定の場合()
\r
1774 if ( ( (E判定文字表示位置) CDTXMania.ConfigIni.判定文字表示位置.Drums ) == E判定文字表示位置.判定ライン上または横 )
\r
1776 this.actJudgeString.On進行描画();
\r
1780 protected void t進行描画・譜面スクロール速度()
\r
1782 this.act譜面スクロール速度.On進行描画();
\r
1785 protected abstract void t背景テクスチャの生成();
\r
1786 protected void t背景テクスチャの生成( string DefaultBgFilename, Rectangle bgrect, string bgfilename )
\r
1788 Bitmap image = null;
\r
1791 if ( bgfilename != null && File.Exists( bgfilename ) )
\r
1795 Bitmap bitmap2 = null;
\r
1796 bitmap2 = new Bitmap( bgfilename );
\r
1797 if ( ( bitmap2.Size.Width == 0 ) && ( bitmap2.Size.Height == 0 ) )
\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
1806 for ( int j = 0; j < 640; j += bitmap2.Size.Width )
\r
1808 graphics.DrawImage( bitmap2, j, i, bitmap2.Width, bitmap2.Height );
\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
1833 Trace.TraceError( "背景画像の読み込みに失敗しました。({0})", new object[] { bgfilename } );
\r
1838 bgfilename = CSkin.Path( DefaultBgFilename );
\r
1841 image = new Bitmap( bgfilename );
\r
1845 Trace.TraceError( "背景画像の読み込みに失敗しました。({0})", new object[] { bgfilename } );
\r
1850 if ( ( CDTXMania.DTX.listBMP.Count > 0 ) || ( CDTXMania.DTX.listBMPTEX.Count > 0 ) )
\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
1858 this.tx背景 = new CTexture( CDTXMania.app.Device, image, CDTXMania.TextureFormat );
\r
1860 catch ( CTextureCreateFailedException )
\r
1862 Trace.TraceError( "背景テクスチャの生成に失敗しました。" );
\r
1868 protected virtual void t入力処理・ギター()
\r
1870 if ( CDTXMania.Pad.b押されている( E楽器パート.GUITAR, Eパッド.Decide ) && CDTXMania.Pad.b押された( E楽器パート.GUITAR, Eパッド.B ) )
\r
1872 CDTXMania.ConfigIni.n譜面スクロール速度.Guitar = Math.Min( CDTXMania.ConfigIni.n譜面スクロール速度.Guitar + 1, 0x7cf );
\r
1874 if ( CDTXMania.Pad.b押されている( E楽器パート.GUITAR, Eパッド.Decide ) && CDTXMania.Pad.b押された( E楽器パート.GUITAR, Eパッド.R ) )
\r
1876 CDTXMania.ConfigIni.n譜面スクロール速度.Guitar = Math.Max( CDTXMania.ConfigIni.n譜面スクロール速度.Guitar - 1, 0 );
\r
1879 if ( CDTXMania.ConfigIni.bGuitar有効 && CDTXMania.DTX.bチップがある.Guitar )
\r
1881 if ( bIsAutoPlay.Guitar )
\r
1883 CDTX.CChip chip = this.r次にくるギターChipを更新して返す();
\r
1884 if ( chip != null )
\r
1886 if ( ( chip.nチャンネル番号 & 4 ) != 0 )
\r
1888 this.actLaneFlushGB.Start( 0 );
\r
1889 this.actRGB.Push( 0 );
\r
1891 if ( ( chip.nチャンネル番号 & 2 ) != 0 )
\r
1893 this.actLaneFlushGB.Start( 1 );
\r
1894 this.actRGB.Push( 1 );
\r
1896 if ( ( chip.nチャンネル番号 & 1 ) != 0 )
\r
1898 this.actLaneFlushGB.Start( 2 );
\r
1899 this.actRGB.Push( 2 );
\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
1914 this.actLaneFlushGB.Start( 0 );
\r
1915 this.actRGB.Push( 0 );
\r
1919 this.actLaneFlushGB.Start( 1 );
\r
1920 this.actRGB.Push( 1 );
\r
1924 this.actLaneFlushGB.Start( 2 );
\r
1925 this.actRGB.Push( 2 );
\r
1927 List<STInputEvent> events = CDTXMania.Pad.GetEvents( E楽器パート.GUITAR, Eパッド.Pick );
\r
1928 if ( ( events != null ) && ( events.Count > 0 ) )
\r
1930 foreach ( STInputEvent event2 in events )
\r
1933 if ( !event2.b押された )
\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
1943 if ( ( flagR != 0 ) || ( flagRGB == 0 ) )
\r
1945 this.actChipFireGB.Start( 0 );
\r
1947 if ( ( flagG != 0 ) || ( flagRGB == 0 ) )
\r
1949 this.actChipFireGB.Start( 1 );
\r
1951 if ( ( flagB != 0 ) || ( flagRGB == 0 ) )
\r
1953 this.actChipFireGB.Start( 2 );
\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
1960 this.queWailing.Guitar.Enqueue( item );
\r
1964 if ( ( ( chip4 = this.r現在の空うちギターChip ) != null ) || ( ( chip4 = this.r指定時刻に一番近いChip・ヒット未済問わず不可視考慮( nTime, 0x2f, this.nInputAdjustTimeMs.Guitar ) ) != null ) )
\r
1966 this.tサウンド再生( chip4, CDTXMania.Timer.nシステム時刻, E楽器パート.GUITAR, CDTXMania.ConfigIni.n手動再生音量, CDTXMania.ConfigIni.b演奏音を強調する.Guitar, true );
\r
1968 if ( !CDTXMania.ConfigIni.bLight.Guitar )
\r
1970 this.tチップのヒット処理・BadならびにTight時のMiss( E楽器パート.GUITAR );
\r
1974 List<STInputEvent> list2 = CDTXMania.Pad.GetEvents( E楽器パート.GUITAR, Eパッド.Wail );
\r
1975 if ( ( list2 != null ) && ( list2.Count > 0 ) )
\r
1977 foreach ( STInputEvent event3 in list2 )
\r
1980 if ( !event3.b押された )
\r
1984 long num6 = event3.nTimeStamp - CDTXMania.Timer.n前回リセットした時のシステム時刻;
\r
1985 while ( ( this.queWailing.Guitar.Count > 0 ) && ( ( chip5 = this.queWailing.Guitar.Dequeue() ) != null ) )
\r
1987 if ( ( num6 - chip5.n発声時刻ms ) <= 1000 ) // #24245 2011.1.26 yyagi: 800 -> 1000
\r
1989 chip5.bHit = true;
\r
1990 this.actWailingBonus.Start( E楽器パート.GUITAR, this.r現在の歓声Chip.Guitar );
\r
1991 if ( !bIsAutoPlay.Guitar )
\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
2003 protected virtual void t入力処理・ベース()
\r
2005 if ( CDTXMania.Pad.b押されている( E楽器パート.BASS, Eパッド.Decide ) && CDTXMania.Pad.b押された( E楽器パート.BASS, Eパッド.B ) )
\r
2007 CDTXMania.ConfigIni.n譜面スクロール速度.Bass = Math.Min( CDTXMania.ConfigIni.n譜面スクロール速度.Bass + 1, 0x7cf );
\r
2009 if ( CDTXMania.Pad.b押されている( E楽器パート.BASS, Eパッド.Decide ) && CDTXMania.Pad.b押された( E楽器パート.BASS, Eパッド.R ) )
\r
2011 CDTXMania.ConfigIni.n譜面スクロール速度.Bass = Math.Max( CDTXMania.ConfigIni.n譜面スクロール速度.Bass - 1, 0 );
\r
2014 if ( CDTXMania.ConfigIni.bGuitar有効 && CDTXMania.DTX.bチップがある.Bass )
\r
2016 if ( bIsAutoPlay.Bass )
\r
2018 CDTX.CChip chip = this.r次にくるベースChipを更新して返す();
\r
2019 if ( chip != null )
\r
2021 if ( ( chip.nチャンネル番号 & 4 ) != 0 )
\r
2023 this.actLaneFlushGB.Start( 3 );
\r
2024 this.actRGB.Push( 3 );
\r
2026 if ( ( chip.nチャンネル番号 & 2 ) != 0 )
\r
2028 this.actLaneFlushGB.Start( 4 );
\r
2029 this.actRGB.Push( 4 );
\r
2031 if ( ( chip.nチャンネル番号 & 1 ) != 0 )
\r
2033 this.actLaneFlushGB.Start( 5 );
\r
2034 this.actRGB.Push( 5 );
\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
2049 this.actLaneFlushGB.Start( 3 );
\r
2050 this.actRGB.Push( 3 );
\r
2054 this.actLaneFlushGB.Start( 4 );
\r
2055 this.actRGB.Push( 4 );
\r
2059 this.actLaneFlushGB.Start( 5 );
\r
2060 this.actRGB.Push( 5 );
\r
2062 List<STInputEvent> events = CDTXMania.Pad.GetEvents( E楽器パート.BASS, Eパッド.Pick );
\r
2063 if ( ( events != null ) && ( events.Count > 0 ) )
\r
2065 foreach ( STInputEvent event2 in events )
\r
2068 if ( !event2.b押された )
\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
2078 if ( ( flagR != 0 ) || ( flagRGB == 0 ) )
\r
2080 this.actChipFireGB.Start( 3 );
\r
2082 if ( ( flagG != 0 ) || ( flagRGB == 0 ) )
\r
2084 this.actChipFireGB.Start( 4 );
\r
2086 if ( ( flagB != 0 ) || ( flagRGB == 0 ) )
\r
2088 this.actChipFireGB.Start( 5 );
\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
2095 this.queWailing.Bass.Enqueue( item );
\r
2099 if ( ( ( chip4 = this.r現在の空うちベースChip ) != null ) || ( ( chip4 = this.r指定時刻に一番近いChip・ヒット未済問わず不可視考慮( nTime, 0xaf, this.nInputAdjustTimeMs.Bass ) ) != null ) )
\r
2101 this.tサウンド再生( chip4, CDTXMania.Timer.nシステム時刻, E楽器パート.BASS, CDTXMania.ConfigIni.n手動再生音量, CDTXMania.ConfigIni.b演奏音を強調する.Bass, true );
\r
2103 if ( !CDTXMania.ConfigIni.bLight.Bass )
\r
2105 this.tチップのヒット処理・BadならびにTight時のMiss( E楽器パート.BASS );
\r
2109 List<STInputEvent> list2 = CDTXMania.Pad.GetEvents( E楽器パート.BASS, Eパッド.Wail );
\r
2110 if ( ( list2 != null ) && ( list2.Count > 0 ) )
\r
2112 foreach ( STInputEvent event3 in list2 )
\r
2115 if ( !event3.b押された )
\r
2119 long num6 = event3.nTimeStamp - CDTXMania.Timer.n前回リセットした時のシステム時刻;
\r
2120 while ( ( this.queWailing.Bass.Count > 0 ) && ( ( chip5 = this.queWailing.Bass.Dequeue() ) != null ) )
\r
2122 if ( ( num6 - chip5.n発声時刻ms ) <= 1000 ) // #24245 2011.1.26 yyagi: 800 -> 1000
\r
2124 chip5.bHit = true;
\r
2125 this.actWailingBonus.Start( E楽器パート.BASS, this.r現在の歓声Chip.Bass );
\r
2126 if ( !bIsAutoPlay.Bass )
\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
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
2150 public float[] fDamageLevelFactor = {
\r
2153 // ----------------------------------
\r
2157 protected void t判定にあわせてゲージを増減する( E楽器パート screenmode, E楽器パート part, E判定 e今回の判定 )
\r
2161 #if true // DAMAGELEVELTUNING
\r
2168 fDamage = fDamageGaugeDelta[ (int) e今回の判定, (int) part ];
\r
2171 fDamage = fDamageGaugeDelta[ (int) e今回の判定, (int) part ];
\r
2172 switch ( CDTXMania.ConfigIni.eダメージレベル )
\r
2174 case Eダメージレベル.少ない:
\r
2176 case Eダメージレベル.大きい:
\r
2177 fDamage *= fDamageLevelFactor[ (int) CDTXMania.ConfigIni.eダメージレベル ];
\r
2186 #else // before applying #23625 modifications
\r
2190 fDamage = ( part == E楽器パート.DRUMS ) ? 0.01 : 0.015;
\r
2194 fDamage = ( part == E楽器パート.DRUMS ) ? 0.006 : 0.009;
\r
2198 fDamage = ( part == E楽器パート.DRUMS ) ? 0.002 : 0.003;
\r
2202 fDamage = ( part == E楽器パート.DRUMS ) ? 0.0 : 0.0;
\r
2206 fDamage = ( part == E楽器パート.DRUMS ) ? -0.035 : -0.035;
\r
2207 switch( CDTXMania.ConfigIni.eダメージレベル )
\r
2209 case Eダメージレベル.少ない:
\r
2217 case Eダメージレベル.大きい:
\r
2228 if ( screenmode == E楽器パート.DRUMS ) // ドラム演奏画面なら、ギター/ベースのダメージも全部ドラムのゲージに集約する
\r
2230 part = E楽器パート.DRUMS;
\r
2232 this.actGauge.db現在のゲージ値[ (int) part ] += fDamage;
\r
2234 if ( this.actGauge.db現在のゲージ値[ (int) part ] > 1.0 )
\r
2235 this.actGauge.db現在のゲージ値[ (int) part ] = 1.0;
\r
2237 //-----------------
\r