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
9 using SlimDX.Direct3D9;
\r
14 internal class CStage演奏ギター画面 : CStage
\r
18 public bool bAUTOでないチップが1つでもバーを通過した
\r
27 public CStage演奏ギター画面()
\r
29 base.eステージID = CStage.Eステージ.演奏;
\r
30 base.eフェーズID = CStage.Eフェーズ.共通_通常状態;
\r
31 base.b活性化してない = true;
\r
32 base.list子Activities.Add( this.actStageFailed = new CAct演奏ステージ失敗() );
\r
33 base.list子Activities.Add( this.actAVI = new CAct演奏AVI() );
\r
34 base.list子Activities.Add( this.actBGA = new CAct演奏BGA() );
\r
35 base.list子Activities.Add( this.actPanel = new CAct演奏パネル文字列() );
\r
36 base.list子Activities.Add( this.act譜面スクロール速度 = new CAct演奏スクロール速度() );
\r
37 base.list子Activities.Add( this.actStatusPanels = new CAct演奏Guitarステータスパネル() );
\r
38 base.list子Activities.Add( this.actWailingBonus = new CAct演奏GuitarWailingBonus() );
\r
39 base.list子Activities.Add( this.actScore = new CAct演奏Guitarスコア() );
\r
40 base.list子Activities.Add( this.actRGB = new CAct演奏GuitarRGB() );
\r
41 base.list子Activities.Add( this.actLaneFlushGB = new CAct演奏GuitarレーンフラッシュGB() );
\r
42 base.list子Activities.Add( this.actJudgeString = new CAct演奏Guitar判定文字列() );
\r
43 base.list子Activities.Add( this.actGauge = new CAct演奏Guitarゲージ() );
\r
44 base.list子Activities.Add( this.actCombo = new CAct演奏Guitarコンボ() );
\r
45 base.list子Activities.Add( this.actChipFire = new CAct演奏Guitarチップファイア() );
\r
46 base.list子Activities.Add( this.actPlayInfo = new CAct演奏演奏情報() );
\r
47 base.list子Activities.Add( this.actFI = new CActFIFOBlack() );
\r
48 base.list子Activities.Add( this.actFO = new CActFIFOBlack() );
\r
49 base.list子Activities.Add( this.actFOClear = new CActFIFOWhite() );
\r
55 public void t演奏結果を格納する( out CScoreIni.C演奏記録 Drums, out CScoreIni.C演奏記録 Guitar, out CScoreIni.C演奏記録 Bass )
\r
57 Drums = new CScoreIni.C演奏記録();
\r
58 Guitar = new CScoreIni.C演奏記録();
\r
59 Bass = new CScoreIni.C演奏記録();
\r
60 if( CDTXMania.DTX.bチップがある.Guitar )
\r
62 Guitar.nスコア = this.actScore.Get( E楽器パート.GUITAR );
\r
63 Guitar.dbゲーム型スキル値 = CScoreIni.tゲーム型スキルを計算して返す( CDTXMania.DTX.LEVEL.Guitar, CDTXMania.DTX.n可視チップ数.Guitar, this.nヒット数・Auto含まない.Guitar.Perfect, this.actCombo.n現在のコンボ数.Guitar最高値 );
\r
64 Guitar.db演奏型スキル値 = CScoreIni.t演奏型スキルを計算して返す( CDTXMania.DTX.n可視チップ数.Guitar, this.nヒット数・Auto含まない.Guitar.Perfect, this.nヒット数・Auto含まない.Guitar.Great, this.nヒット数・Auto含まない.Guitar.Good, this.nヒット数・Auto含まない.Guitar.Poor, this.nヒット数・Auto含まない.Guitar.Miss );
\r
65 Guitar.nPerfect数 = CDTXMania.ConfigIni.bAutoPlay.Guitar ? this.nヒット数・Auto含む.Guitar.Perfect : this.nヒット数・Auto含まない.Guitar.Perfect;
\r
66 Guitar.nGreat数 = CDTXMania.ConfigIni.bAutoPlay.Guitar ? this.nヒット数・Auto含む.Guitar.Great : this.nヒット数・Auto含まない.Guitar.Great;
\r
67 Guitar.nGood数 = CDTXMania.ConfigIni.bAutoPlay.Guitar ? this.nヒット数・Auto含む.Guitar.Good : this.nヒット数・Auto含まない.Guitar.Good;
\r
68 Guitar.nPoor数 = CDTXMania.ConfigIni.bAutoPlay.Guitar ? this.nヒット数・Auto含む.Guitar.Poor : this.nヒット数・Auto含まない.Guitar.Poor;
\r
69 Guitar.nMiss数 = CDTXMania.ConfigIni.bAutoPlay.Guitar ? this.nヒット数・Auto含む.Guitar.Miss : this.nヒット数・Auto含まない.Guitar.Miss;
\r
70 Guitar.n最大コンボ数 = this.actCombo.n現在のコンボ数.Guitar最高値;
\r
71 Guitar.n全チップ数 = CDTXMania.DTX.n可視チップ数.Guitar;
\r
72 for ( int i = 0; i < 10; i++ )
\r
74 Guitar.bAutoPlay[ i ] = CDTXMania.ConfigIni.bAutoPlay[ i ];
\r
76 Guitar.bTight = CDTXMania.ConfigIni.bTight;
\r
77 for( int i = 0; i < 3; i++ )
\r
79 Guitar.bSudden[ i ] = CDTXMania.ConfigIni.bSudden[ i ];
\r
80 Guitar.bHidden[ i ] = CDTXMania.ConfigIni.bHidden[ i ];
\r
81 Guitar.bReverse[ i ] = CDTXMania.ConfigIni.bReverse[ i ];
\r
82 Guitar.eRandom[ i ] = CDTXMania.ConfigIni.eRandom[ i ];
\r
83 Guitar.bLight[ i ] = CDTXMania.ConfigIni.bLight[ i ];
\r
84 Guitar.bLeft[ i ] = CDTXMania.ConfigIni.bLeft[ i ];
\r
85 Guitar.f譜面スクロール速度[ i ] = ( (float) ( CDTXMania.ConfigIni.n譜面スクロール速度[ i ] + 1 ) ) * 0.5f;
\r
87 Guitar.eDark = CDTXMania.ConfigIni.eDark;
\r
88 Guitar.n演奏速度分子 = CDTXMania.ConfigIni.n演奏速度;
\r
89 Guitar.n演奏速度分母 = 20;
\r
90 Guitar.eHHGroup = CDTXMania.ConfigIni.eHHGroup;
\r
91 Guitar.eFTGroup = CDTXMania.ConfigIni.eFTGroup;
\r
92 Guitar.eCYGroup = CDTXMania.ConfigIni.eCYGroup;
\r
93 Guitar.eHitSoundPriorityHH = CDTXMania.ConfigIni.eHitSoundPriorityHH;
\r
94 Guitar.eHitSoundPriorityFT = CDTXMania.ConfigIni.eHitSoundPriorityFT;
\r
95 Guitar.eHitSoundPriorityCY = CDTXMania.ConfigIni.eHitSoundPriorityCY;
\r
96 Guitar.bGuitar有効 = CDTXMania.ConfigIni.bGuitar有効;
\r
97 Guitar.bDrums有効 = CDTXMania.ConfigIni.bDrums有効;
\r
98 Guitar.bSTAGEFAILED有効 = CDTXMania.ConfigIni.bSTAGEFAILED有効;
\r
99 Guitar.eダメージレベル = CDTXMania.ConfigIni.eダメージレベル;
\r
100 Guitar.b演奏にキーボードを使用した = this.b演奏にキーボードを使った.Guitar;
\r
101 Guitar.b演奏にMIDI入力を使用した = this.b演奏にMIDI入力を使った.Guitar;
\r
102 Guitar.b演奏にジョイパッドを使用した = this.b演奏にジョイパッドを使った.Guitar;
\r
103 Guitar.b演奏にマウスを使用した = this.b演奏にマウスを使った.Guitar;
\r
104 Guitar.nPerfectになる範囲ms = CDTXMania.nPerfect範囲ms;
\r
105 Guitar.nGreatになる範囲ms = CDTXMania.nGreat範囲ms;
\r
106 Guitar.nGoodになる範囲ms = CDTXMania.nGood範囲ms;
\r
107 Guitar.nPoorになる範囲ms = CDTXMania.nPoor範囲ms;
\r
108 Guitar.strDTXManiaのバージョン = CDTXMania.VERSION;
\r
109 Guitar.最終更新日時 = DateTime.Now.ToString();
\r
110 Guitar.Hash = CScoreIni.t演奏セクションのMD5を求めて返す( Guitar );
\r
112 if( CDTXMania.DTX.bチップがある.Bass )
\r
114 Bass.nスコア = this.actScore.Get( E楽器パート.BASS );
\r
115 Bass.dbゲーム型スキル値 = CScoreIni.tゲーム型スキルを計算して返す( CDTXMania.DTX.LEVEL.Bass, CDTXMania.DTX.n可視チップ数.Bass, this.nヒット数・Auto含まない.Bass.Perfect, this.actCombo.n現在のコンボ数.Bass最高値 );
\r
116 Bass.db演奏型スキル値 = CScoreIni.t演奏型スキルを計算して返す( CDTXMania.DTX.n可視チップ数.Bass, this.nヒット数・Auto含まない.Bass.Perfect, this.nヒット数・Auto含まない.Bass.Great, this.nヒット数・Auto含まない.Bass.Good, this.nヒット数・Auto含まない.Bass.Poor, this.nヒット数・Auto含まない.Bass.Miss );
\r
117 Bass.nPerfect数 = CDTXMania.ConfigIni.bAutoPlay.Bass ? this.nヒット数・Auto含む.Bass.Perfect : this.nヒット数・Auto含まない.Bass.Perfect;
\r
118 Bass.nGreat数 = CDTXMania.ConfigIni.bAutoPlay.Bass ? this.nヒット数・Auto含む.Bass.Great : this.nヒット数・Auto含まない.Bass.Great;
\r
119 Bass.nGood数 = CDTXMania.ConfigIni.bAutoPlay.Bass ? this.nヒット数・Auto含む.Bass.Good : this.nヒット数・Auto含まない.Bass.Good;
\r
120 Bass.nPoor数 = CDTXMania.ConfigIni.bAutoPlay.Bass ? this.nヒット数・Auto含む.Bass.Poor : this.nヒット数・Auto含まない.Bass.Poor;
\r
121 Bass.nMiss数 = CDTXMania.ConfigIni.bAutoPlay.Bass ? this.nヒット数・Auto含む.Bass.Miss : this.nヒット数・Auto含まない.Bass.Miss;
\r
122 Bass.n最大コンボ数 = this.actCombo.n現在のコンボ数.Bass最高値;
\r
123 Bass.n全チップ数 = CDTXMania.DTX.n可視チップ数.Bass;
\r
124 for( int i = 0; i < 10; i++ )
\r
126 Bass.bAutoPlay[ i ] = CDTXMania.ConfigIni.bAutoPlay[ i ];
\r
128 Bass.bTight = CDTXMania.ConfigIni.bTight;
\r
129 for( int i = 0; i < 3; i++ )
\r
131 Bass.bSudden[ i ] = CDTXMania.ConfigIni.bSudden[ i ];
\r
132 Bass.bHidden[ i ] = CDTXMania.ConfigIni.bHidden[ i ];
\r
133 Bass.bReverse[ i ] = CDTXMania.ConfigIni.bReverse[ i ];
\r
134 Bass.eRandom[ i ] = CDTXMania.ConfigIni.eRandom[ i ];
\r
135 Bass.bLight[ i ] = CDTXMania.ConfigIni.bLight[ i ];
\r
136 Bass.bLeft[ i ] = CDTXMania.ConfigIni.bLeft[ i ];
\r
137 Bass.f譜面スクロール速度[ i ] = ( (float) ( CDTXMania.ConfigIni.n譜面スクロール速度[ i ] + 1 ) ) * 0.5f;
\r
139 Bass.eDark = CDTXMania.ConfigIni.eDark;
\r
140 Bass.n演奏速度分子 = CDTXMania.ConfigIni.n演奏速度;
\r
142 Bass.eHHGroup = CDTXMania.ConfigIni.eHHGroup;
\r
143 Bass.eFTGroup = CDTXMania.ConfigIni.eFTGroup;
\r
144 Bass.eCYGroup = CDTXMania.ConfigIni.eCYGroup;
\r
145 Bass.eHitSoundPriorityHH = CDTXMania.ConfigIni.eHitSoundPriorityHH;
\r
146 Bass.eHitSoundPriorityFT = CDTXMania.ConfigIni.eHitSoundPriorityFT;
\r
147 Bass.eHitSoundPriorityCY = CDTXMania.ConfigIni.eHitSoundPriorityCY;
\r
148 Bass.bGuitar有効 = CDTXMania.ConfigIni.bGuitar有効;
\r
149 Bass.bDrums有効 = CDTXMania.ConfigIni.bDrums有効;
\r
150 Bass.bSTAGEFAILED有効 = CDTXMania.ConfigIni.bSTAGEFAILED有効;
\r
151 Bass.eダメージレベル = CDTXMania.ConfigIni.eダメージレベル;
\r
152 Bass.b演奏にキーボードを使用した = this.b演奏にキーボードを使った.Bass; // #24280 2011.1.29 yyagi
\r
153 Bass.b演奏にMIDI入力を使用した = this.b演奏にMIDI入力を使った.Bass; //
\r
154 Bass.b演奏にジョイパッドを使用した = this.b演奏にジョイパッドを使った.Bass; //
\r
155 Bass.b演奏にマウスを使用した = this.b演奏にマウスを使った.Bass; //
\r
156 Bass.nPerfectになる範囲ms = CDTXMania.nPerfect範囲ms;
\r
157 Bass.nGreatになる範囲ms = CDTXMania.nGreat範囲ms;
\r
158 Bass.nGoodになる範囲ms = CDTXMania.nGood範囲ms;
\r
159 Bass.nPoorになる範囲ms = CDTXMania.nPoor範囲ms;
\r
160 Bass.strDTXManiaのバージョン = CDTXMania.VERSION;
\r
161 Bass.最終更新日時 = DateTime.Now.ToString();
\r
162 Bass.Hash = CScoreIni.t演奏セクションのMD5を求めて返す( Bass );
\r
164 if ( CDTXMania.ConfigIni.bIsSwappedGuitarBass ) // #24063 2011.1.24 yyagi Gt/Bsを入れ替えていたなら、演奏結果も入れ替える
\r
171 CDTXMania.DTX.SwapGuitarBassInfos(); // 譜面情報も元に戻す
\r
178 public override void On活性化()
\r
180 this.eフェードアウト完了時の戻り値 = E演奏画面の戻り値.継続;
\r
181 this.n現在のトップChip = ( CDTXMania.DTX.listChip.Count > 0 ) ? 0 : -1;
\r
182 this.n最後に再生したHHの実WAV番号 = -1;
\r
183 this.n最後に再生したHHのチャンネル番号 = 0;
\r
184 this.n最後に再生したギターの実WAV番号 = -1;
\r
185 this.n最後に再生したベースの実WAV番号 = -1;
\r
186 for( int i = 0; i < 50; i++ )
\r
188 this.n最後に再生したBGMの実WAV番号[ i ] = -1;
\r
190 this.r次にくるギターChip = null;
\r
191 this.r次にくるベースChip = null;
\r
192 for( int j = 0; j < 10; j++ )
\r
194 this.r現在の空うちドラムChip[ j ] = null;
\r
196 this.r現在の空うちギターChip = null;
\r
197 this.r現在の空うちベースChip = null;
\r
198 for( int k = 0; k < 3; k++ )
\r
200 for( int n = 0; n < 5; n++ )
\r
202 this.nヒット数・Auto含まない[ k ] = new STHITCOUNTOFRANK();
\r
203 this.nヒット数・Auto含む[ k ] = new STHITCOUNTOFRANK();
\r
205 this.queWailing[ k ] = new Queue<CDTX.CChip>();
\r
207 for( int m = 0; m < 3; m++ )
\r
209 this.b演奏にキーボードを使った[ m ] = false;
\r
210 this.b演奏にジョイパッドを使った[ m ] = false;
\r
211 this.b演奏にMIDI入力を使った[ m ] = false;
\r
212 this.b演奏にマウスを使った[ m ] = false;
\r
214 this.bAUTOでないチップが1つでもバーを通過した = false;
\r
216 this.tステータスパネルの選択();
\r
219 this.nInputAdjustTimeMs.Drums = CDTXMania.ConfigIni.nInputAdjustTimeMs.Drums; // #23580 2011.1.3 yyagi
\r
220 this.nInputAdjustTimeMs.Guitar = CDTXMania.ConfigIni.nInputAdjustTimeMs.Guitar; // 2011.1.7 ikanick 修正
\r
221 this.nInputAdjustTimeMs.Bass = CDTXMania.ConfigIni.nInputAdjustTimeMs.Bass; //
\r
222 this.bIsAutoPlay.Drums = false;
\r
223 this.bIsAutoPlay.Guitar = CDTXMania.ConfigIni.bAutoPlay.Guitar;
\r
224 this.bIsAutoPlay.Bass = CDTXMania.ConfigIni.bAutoPlay.Bass;
\r
226 if ( CDTXMania.ConfigIni.bIsSwappedGuitarBass ) // #24063 2011.1.24 yyagi Gt/Bsの譜面情報入れ替え
\r
228 CDTXMania.DTX.SwapGuitarBassInfos();
\r
233 public override void OnManagedリソースの作成()
\r
235 if( !base.b活性化してない )
\r
237 this.t背景テクスチャの生成();
\r
238 this.txチップ = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlayGuitar chips.png" ) );
\r
239 this.txヒットバー = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlayGuitar hit-bar.png" ) );
\r
240 this.txWailing枠 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlay wailing cursor.png" ) );
\r
241 base.OnManagedリソースの作成();
\r
244 public override void OnManagedリソースの解放()
\r
246 if( !base.b活性化してない )
\r
248 CDTXMania.tテクスチャの解放( ref this.tx背景 );
\r
249 CDTXMania.tテクスチャの解放( ref this.txチップ );
\r
250 CDTXMania.tテクスチャの解放( ref this.txヒットバー );
\r
251 CDTXMania.tテクスチャの解放( ref this.txWailing枠 );
\r
252 base.OnManagedリソースの解放();
\r
255 public override int On進行描画()
\r
257 if( !base.b活性化してない )
\r
260 bool flag2 = false;
\r
262 if( base.b初めての進行描画 )
\r
264 CDTXMania.Timer.tリセット();
\r
265 this.ctチップ模様アニメ.Guitar = new CCounter( 0, 0x17, 20, CDTXMania.Timer );
\r
266 this.ctチップ模様アニメ.Bass = new CCounter( 0, 0x17, 20, CDTXMania.Timer );
\r
267 this.ctWailingチップ模様アニメ = new CCounter( 0, 4, 50, CDTXMania.Timer );
\r
268 base.eフェーズID = CStage.Eフェーズ.共通_フェードイン;
\r
269 this.actFI.tフェードイン開始();
\r
270 base.b初めての進行描画 = false;
\r
272 if( CDTXMania.ConfigIni.bSTAGEFAILED有効 && ( base.eフェーズID == CStage.Eフェーズ.共通_通常状態 ) )
\r
274 // bool flag3 = ( CDTXMania.ConfigIni.bAutoPlay.Guitar || !CDTXMania.DTX.bチップがある.Guitar ) || ( this.actGauge.db現在のゲージ値.Guitar <= -0.1 ); // #23630
\r
275 // bool flag4 = ( CDTXMania.ConfigIni.bAutoPlay.Bass || !CDTXMania.DTX.bチップがある.Bass ) || ( this.actGauge.db現在のゲージ値.Bass <= -0.1 ); // #23630
\r
276 bool bFailedGuitar = ((!CDTXMania.DTX.bチップがある.Guitar) || (this.actGauge.db現在のゲージ値.Guitar <= -0.1)); // #23630 2011.11.12 yyagi: deleted AutoPlay condition: not to be failed at once
\r
277 bool bFailedBass = ((!CDTXMania.DTX.bチップがある.Bass) || (this.actGauge.db現在のゲージ値.Bass <= -0.1)); // #23630
\r
278 if (bFailedGuitar && bFailedBass)
\r
280 this.actStageFailed.Start();
\r
281 CDTXMania.DTX.t全チップの再生停止();
\r
282 base.eフェーズID = CStage.Eフェーズ.演奏_STAGE_FAILED;
\r
286 this.t進行描画・MIDIBGM();
\r
287 this.t進行描画・パネル文字列();
\r
291 this.t進行描画・ステータスパネル();
\r
292 this.t進行描画・レーンフラッシュGB();
\r
293 this.t進行描画・ギターベース判定ライン();
\r
295 this.t進行描画・DANGER();
\r
296 this.t進行描画・RGBボタン();
\r
297 this.t進行描画・判定文字列();
\r
299 this.t進行描画・WailingBonus();
\r
300 this.t進行描画・譜面スクロール速度();
\r
301 this.t進行描画・チップアニメ();
\r
302 flag = this.t進行描画・チップ();
\r
304 this.t進行描画・Wailing枠();
\r
305 this.t進行描画・チップファイアGB();
\r
306 this.t進行描画・STAGEFAILED();
\r
307 flag2 = this.t進行描画・フェードイン・アウト();
\r
308 if( flag && ( base.eフェーズID == CStage.Eフェーズ.共通_通常状態 ) )
\r
310 this.eフェードアウト完了時の戻り値 = E演奏画面の戻り値.ステージクリア;
\r
311 base.eフェーズID = CStage.Eフェーズ.演奏_STAGE_CLEAR_フェードアウト;
\r
312 this.actFOClear.tフェードアウト開始();
\r
316 return (int) this.eフェードアウト完了時の戻り値;
\r
321 if( CDTXMania.act現在入力を占有中のプラグイン == null )
\r
323 IInputDevice keyboard = CDTXMania.Input管理.Keyboard;
\r
324 if ( keyboard.bキーが押された( (int)SlimDX.DirectInput.Key.F1 ) && ( keyboard.bキーが押されている( (int)SlimDX.DirectInput.Key.RightShift ) || keyboard.bキーが押されている( (int)SlimDX.DirectInput.Key.LeftShift ) ) )
\r
326 this.bPAUSE = !this.bPAUSE;
\r
329 CDTXMania.Timer.t一時停止();
\r
330 CDTXMania.DTX.t全チップの再生一時停止();
\r
334 CDTXMania.Timer.t再開();
\r
335 CDTXMania.DTX.t全チップの再生再開();
\r
338 if( ( !this.bPAUSE && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED ) ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) )
\r
342 if ( keyboard.bキーが押された( (int)SlimDX.DirectInput.Key.UpArrow ) && ( keyboard.bキーが押されている( (int)SlimDX.DirectInput.Key.RightShift ) || keyboard.bキーが押されている( (int)SlimDX.DirectInput.Key.LeftShift) ) )
\r
343 { // shift (+ctrl) + Uparrow (BGMAdjust)
\r
344 CDTXMania.DTX.t各自動再生音チップの再生時刻を変更する( ( keyboard.bキーが押されている( (int)SlimDX.DirectInput.Key.LeftControl ) || keyboard.bキーが押されている( (int)SlimDX.DirectInput.Key.RightControl) ) ? 1 : 10 );
\r
345 CDTXMania.DTX.tWave再生位置自動補正();
\r
347 else if ( keyboard.bキーが押された( (int)SlimDX.DirectInput.Key.DownArrow ) && ( keyboard.bキーが押されている( (int)SlimDX.DirectInput.Key.RightShift ) || keyboard.bキーが押されている( (int)SlimDX.DirectInput.Key.LeftShift ) ) )
\r
349 CDTXMania.DTX.t各自動再生音チップの再生時刻を変更する( ( keyboard.bキーが押されている( (int)SlimDX.DirectInput.Key.LeftControl ) || keyboard.bキーが押されている( (int)SlimDX.DirectInput.Key.RightControl ) ) ? -1 : -10 );
\r
350 CDTXMania.DTX.tWave再生位置自動補正();
\r
352 else if ( keyboard.bキーが押された( (int)SlimDX.DirectInput.Key.Delete ) )
\r
354 CDTXMania.ConfigIni.b演奏情報を表示する = !CDTXMania.ConfigIni.b演奏情報を表示する;
\r
356 else if ( keyboard.bキーが押された( (int) SlimDX.DirectInput.Key.LeftArrow ) ) // #23580 2011.1.16 yyagi UI for InputAdjustTime in playing screen.
\r
358 ChangeInputAdjustTimeInPlaying( keyboard, -1 );
\r
360 else if ( keyboard.bキーが押された( (int) SlimDX.DirectInput.Key.RightArrow ) ) // #23580 2011.1.16 yyagi UI for InputAdjustTime in playing screen.
\r
362 ChangeInputAdjustTimeInPlaying( keyboard, +1 );
\r
364 else if ( ( base.eフェーズID == CStage.Eフェーズ.共通_通常状態 ) && ( keyboard.bキーが押された( (int) SlimDX.DirectInput.Key.Escape ) || CDTXMania.Pad.b押されたGB( Eパッド.FT ) ) )
\r
366 this.actFO.tフェードアウト開始();
\r
367 base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;
\r
368 this.eフェードアウト完了時の戻り値 = E演奏画面の戻り値.演奏中断;
\r
375 private void ChangeInputAdjustTimeInPlaying( IInputDevice keyboard, int plusminus ) // #23580 2011.1.16 yyagi UI for InputAdjustTime in playing screen.
\r
377 int part, offset = plusminus;
\r
378 if ( keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.LeftShift ) || keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.RightShift ) ) // Guitar InputAdjustTime
\r
380 part = (int) E楽器パート.GUITAR;
\r
382 else if ( keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.LeftAlt ) || keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.RightAlt ) ) // Bass InputAdjustTime
\r
384 part = (int) E楽器パート.BASS;
\r
386 else // Drums InputAdjustTime
\r
388 part = (int) E楽器パート.DRUMS;
\r
390 if ( !keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.LeftControl ) && !keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.RightControl ) )
\r
395 this.nInputAdjustTimeMs[ part ] += offset;
\r
396 if ( this.nInputAdjustTimeMs[ part ] > 99 )
\r
398 this.nInputAdjustTimeMs[ part ] = 99;
\r
400 else if ( this.nInputAdjustTimeMs[ part ] < -99 )
\r
402 this.nInputAdjustTimeMs[ part ] = -99;
\r
404 CDTXMania.ConfigIni.nInputAdjustTimeMs[ part ] = this.nInputAdjustTimeMs[ part ];
\r
410 #region [ private ]
\r
411 //-----------------
\r
412 private class STHITCOUNTOFRANK
\r
418 public int Perfect;
\r
422 public int this[ int index ]
\r
429 return this.Perfect;
\r
443 throw new IndexOutOfRangeException();
\r
450 this.Perfect = value;
\r
454 this.Great = value;
\r
469 throw new IndexOutOfRangeException();
\r
474 [StructLayout( LayoutKind.Sequential )]
\r
475 private struct STKARAUCHI
\r
477 public CDTX.CChip HH;
\r
478 public CDTX.CChip SD;
\r
479 public CDTX.CChip BD;
\r
480 public CDTX.CChip HT;
\r
481 public CDTX.CChip LT;
\r
482 public CDTX.CChip FT;
\r
483 public CDTX.CChip CY;
\r
484 public CDTX.CChip HHO;
\r
485 public CDTX.CChip RD;
\r
486 public CDTX.CChip LC;
\r
487 public CDTX.CChip this[ int index ]
\r
523 throw new IndexOutOfRangeException();
\r
569 throw new IndexOutOfRangeException();
\r
574 private CAct演奏AVI actAVI;
\r
575 private CAct演奏BGA actBGA;
\r
576 private CAct演奏Guitarチップファイア actChipFire;
\r
577 private CAct演奏Guitarコンボ actCombo;
\r
578 private CActFIFOBlack actFI;
\r
579 private CActFIFOBlack actFO;
\r
580 private CActFIFOWhite actFOClear;
\r
581 private CAct演奏Guitarゲージ actGauge;
\r
582 private CAct演奏Guitar判定文字列 actJudgeString;
\r
583 private CAct演奏GuitarレーンフラッシュGB actLaneFlushGB;
\r
584 private CAct演奏パネル文字列 actPanel;
\r
585 private CAct演奏演奏情報 actPlayInfo;
\r
586 private CAct演奏GuitarRGB actRGB;
\r
587 private CAct演奏Guitarスコア actScore;
\r
588 private CAct演奏ステージ失敗 actStageFailed;
\r
589 private CAct演奏Guitarステータスパネル actStatusPanels;
\r
590 private CAct演奏GuitarWailingBonus actWailingBonus;
\r
591 private CAct演奏スクロール速度 act譜面スクロール速度;
\r
592 private bool bPAUSE;
\r
593 private STDGBVALUE<bool> b演奏にMIDI入力を使った;
\r
594 private STDGBVALUE<bool> b演奏にキーボードを使った;
\r
595 private STDGBVALUE<bool> b演奏にジョイパッドを使った;
\r
596 private STDGBVALUE<bool> b演奏にマウスを使った;
\r
597 private CCounter ctWailingチップ模様アニメ;
\r
598 private STDGBVALUE<CCounter> ctチップ模様アニメ;
\r
599 private E演奏画面の戻り値 eフェードアウト完了時の戻り値;
\r
600 private readonly int[,] nBGAスコープチャンネルマップ = new int[ , ] { { 0xc4, 0xc7, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xe0 }, { 4, 7, 0x55, 0x56, 0x57, 0x58, 0x59, 0x60 } };
\r
601 private readonly int[] nチャンネル0Atoパッド08 = new int[] { 1, 2, 3, 4, 5, 7, 6, 1, 8, 0 };
\r
602 private readonly int[] nチャンネル0Atoレーン07 = new int[] { 1, 2, 3, 4, 5, 7, 6, 1, 7, 0 };
\r
603 private readonly int[] nパッド0Atoチャンネル0A = new int[] { 0x11, 0x12, 0x13, 20, 0x15, 0x17, 0x16, 0x18, 0x19, 0x1a };
\r
604 private readonly int[] nパッド0Atoパッド08 = new int[] { 1, 2, 3, 4, 5, 6, 7, 1, 8, 0 };
\r
605 private readonly int[] nパッド0Atoレーン07 = new int[] { 1, 2, 3, 4, 5, 6, 7, 1, 7, 0 };
\r
606 private STDGBVALUE<STHITCOUNTOFRANK> nヒット数・Auto含まない;
\r
607 private STDGBVALUE<STHITCOUNTOFRANK> nヒット数・Auto含む;
\r
608 private int n現在のトップChip = -1;
\r
609 private int[] n最後に再生したBGMの実WAV番号 = new int[ 50 ];
\r
610 private int n最後に再生したHHのチャンネル番号;
\r
611 private int n最後に再生したHHの実WAV番号;
\r
612 private int n最後に再生したギターの実WAV番号;
\r
613 private int n最後に再生したベースの実WAV番号;
\r
614 private STDGBVALUE<Queue<CDTX.CChip>> queWailing;
\r
615 private STDGBVALUE<CDTX.CChip> r現在の歓声Chip;
\r
616 private CDTX.CChip r現在の空うちギターChip;
\r
617 private STKARAUCHI r現在の空うちドラムChip;
\r
618 private CDTX.CChip r現在の空うちベースChip;
\r
619 private CDTX.CChip r次にくるギターChip;
\r
620 private CDTX.CChip r次にくるベースChip;
\r
621 private CTexture txWailing枠;
\r
622 private CTexture txチップ;
\r
623 private CTexture txヒットバー;
\r
624 private CTexture tx背景;
\r
625 private STDGBVALUE<int> nInputAdjustTimeMs; // #23580 2011.1.3 yyagi
\r
626 private STDGBVALUE<bool> bIsAutoPlay; // #24239 2011.1.23 yyagi
\r
628 private E判定 e指定時刻からChipのJUDGEを返す( long nTime, CDTX.CChip pChip, int nInputAdjustTime )
\r
630 if ( pChip != null )
\r
632 pChip.nLag = (int) ( nTime + nInputAdjustTime - pChip.n発声時刻ms ); // #23580 2011.1.3 yyagi: add "nInputAdjustTime" to add input timing adjust feature
\r
633 int nDeltaTime = Math.Abs( pChip.nLag );
\r
634 //Debug.WriteLine("nAbsTime=" + (nTime - pChip.n発声時刻ms) + ", nDeltaTime=" + (nTime + nInputAdjustTime - pChip.n発声時刻ms));
\r
635 if ( nDeltaTime <= CDTXMania.nPerfect範囲ms )
\r
637 return E判定.Perfect;
\r
639 if ( nDeltaTime <= CDTXMania.nGreat範囲ms )
\r
643 if ( nDeltaTime <= CDTXMania.nGood範囲ms )
\r
647 if ( nDeltaTime <= CDTXMania.nPoor範囲ms )
\r
654 private CDTX.CChip r空うちChip( E楽器パート part, Eパッド pad )
\r
658 case E楽器パート.GUITAR:
\r
659 return this.r現在の空うちギターChip;
\r
662 return this.r現在の空うちベースChip;
\r
666 private CDTX.CChip r指定時刻に一番近いChip・ヒット未済問わず不可視考慮( long nTime, int nChannelFlag, int nInputAdjustTime )
\r
668 nTime += nInputAdjustTime;
\r
671 if( this.n現在のトップChip == -1 )
\r
675 int count = CDTXMania.DTX.listChip.Count;
\r
676 int num4 = num5 = this.n現在のトップChip;
\r
677 if( this.n現在のトップChip >= count )
\r
679 num4 = num5 = count - 1;
\r
682 while( num2 < count )
\r
684 CDTX.CChip chip = CDTXMania.DTX.listChip[ num2 ];
\r
685 if( ( ( nChannelFlag >= 0x11 ) && ( nChannelFlag <= 0x1a ) ) && ( ( chip.nチャンネル番号 == nChannelFlag ) || ( chip.nチャンネル番号 == ( nChannelFlag + 0x20 ) ) ) )
\r
687 if( chip.n発声時刻ms > nTime )
\r
693 else if( ( ( nChannelFlag == 0x2f ) && ( chip.e楽器パート == E楽器パート.GUITAR ) ) || ( ( ( nChannelFlag >= 0x20 ) && ( nChannelFlag <= 40 ) ) && ( chip.nチャンネル番号 == nChannelFlag ) ) )
\r
695 if( chip.n発声時刻ms > nTime )
\r
701 else if( ( ( nChannelFlag == 0xaf ) && ( chip.e楽器パート == E楽器パート.BASS ) ) || ( ( ( nChannelFlag >= 160 ) && ( nChannelFlag <= 0xa8 ) ) && ( chip.nチャンネル番号 == nChannelFlag ) ) )
\r
703 if( chip.n発声時刻ms > nTime )
\r
714 CDTX.CChip chip2 = CDTXMania.DTX.listChip[ num3 ];
\r
715 if( ( nChannelFlag >= 0x11 ) && ( nChannelFlag <= 0x1a ) )
\r
717 if( ( chip2.nチャンネル番号 == nChannelFlag ) || ( chip2.nチャンネル番号 == ( nChannelFlag + 0x20 ) ) )
\r
722 else if( ( ( nChannelFlag == 0x2f ) && ( chip2.e楽器パート == E楽器パート.GUITAR ) ) || ( ( ( nChannelFlag >= 0x20 ) && ( nChannelFlag <= 40 ) ) && ( chip2.nチャンネル番号 == nChannelFlag ) ) )
\r
724 if( ( chip2.nチャンネル番号 >= 0x20 ) && ( chip2.nチャンネル番号 <= 40 ) )
\r
729 else if( ( ( ( nChannelFlag == 0xaf ) && ( chip2.e楽器パート == E楽器パート.BASS ) ) || ( ( ( nChannelFlag >= 160 ) && ( nChannelFlag <= 0xa8 ) ) && ( chip2.nチャンネル番号 == nChannelFlag ) ) ) && ( ( chip2.nチャンネル番号 >= 160 ) && ( chip2.nチャンネル番号 <= 0xa8 ) ) )
\r
735 if( ( num2 == count ) && ( num3 < 0 ) )
\r
739 if( num2 == count )
\r
741 return CDTXMania.DTX.listChip[ num3 ];
\r
745 return CDTXMania.DTX.listChip[ num2 ];
\r
747 CDTX.CChip chip3 = CDTXMania.DTX.listChip[ num2 ];
\r
748 CDTX.CChip chip4 = CDTXMania.DTX.listChip[ num3 ];
\r
749 int num6 = Math.Abs( (int) ( nTime - chip3.n発声時刻ms ) );
\r
750 int num7 = Math.Abs( (int) ( nTime - chip4.n発声時刻ms ) );
\r
757 // private CDTX.CChip r指定時刻に一番近い未ヒットChip( long nTime, int nChannelFlag )
\r
759 // return this.r指定時刻に一番近い未ヒットChip( nTime, nChannelFlag, 0, 0 );
\r
761 // private CDTX.CChip r指定時刻に一番近い未ヒットChip( long nTime, int nChannelFlag, int nInputAdjustTime )
\r
763 // return this.r指定時刻に一番近い未ヒットChip( nTime, nChannelFlag, nInputAdjustTime, 0 );
\r
765 private CDTX.CChip r指定時刻に一番近い未ヒットChip( long nTime, int nChannelFlag, int nInputAdjustTime, int n検索範囲時間ms )
\r
767 nTime += nInputAdjustTime;
\r
771 if( this.n現在のトップChip == -1 )
\r
775 int count = CDTXMania.DTX.listChip.Count;
\r
776 int num4 = num5 = this.n現在のトップChip;
\r
777 if( this.n現在のトップChip >= count )
\r
779 num4 = num5 = count - 1;
\r
782 while( num2 < count )
\r
784 CDTX.CChip chip = CDTXMania.DTX.listChip[ num2 ];
\r
785 if( ( !chip.bHit && ( nChannelFlag >= 0x11 ) ) && ( nChannelFlag <= 0x1a ) )
\r
787 if( ( chip.nチャンネル番号 == nChannelFlag ) || ( chip.nチャンネル番号 == ( nChannelFlag + 0x20 ) ) )
\r
789 if( chip.n発声時刻ms > nTime )
\r
796 else if( !chip.bHit && ( ( ( nChannelFlag == 0x2f ) && ( chip.e楽器パート == E楽器パート.GUITAR ) ) || ( ( ( nChannelFlag >= 0x20 ) && ( nChannelFlag <= 40 ) ) && ( chip.nチャンネル番号 == nChannelFlag ) ) ) )
\r
798 if( chip.n発声時刻ms > nTime )
\r
804 else if( !chip.bHit && ( ( ( nChannelFlag == 0xaf ) && ( chip.e楽器パート == E楽器パート.BASS ) ) || ( ( ( nChannelFlag >= 160 ) && ( nChannelFlag <= 0xa8 ) ) && ( chip.nチャンネル番号 == nChannelFlag ) ) ) )
\r
806 if( chip.n発声時刻ms > nTime )
\r
817 CDTX.CChip chip2 = CDTXMania.DTX.listChip[ num3 ];
\r
818 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
824 if( ( num2 == count ) && ( num3 < 0 ) )
\r
828 CDTX.CChip chip3 = null;
\r
829 if( num2 == count )
\r
831 chip3 = CDTXMania.DTX.listChip[ num3 ];
\r
832 num6 = Math.Abs( (int) ( nTime - chip3.n発声時刻ms ) );
\r
834 else if( num3 < 0 )
\r
836 chip3 = CDTXMania.DTX.listChip[ num2 ];
\r
837 num6 = Math.Abs( (int) ( nTime - chip3.n発声時刻ms ) );
\r
841 int num7 = Math.Abs( (int) ( nTime - CDTXMania.DTX.listChip[ num2 ].n発声時刻ms ) );
\r
842 int num8 = Math.Abs( (int) ( nTime - CDTXMania.DTX.listChip[ num3 ].n発声時刻ms ) );
\r
845 chip3 = CDTXMania.DTX.listChip[ num2 ];
\r
846 num6 = Math.Abs( (int) ( nTime - chip3.n発声時刻ms ) );
\r
850 chip3 = CDTXMania.DTX.listChip[ num3 ];
\r
851 num6 = Math.Abs( (int) ( nTime - chip3.n発声時刻ms ) );
\r
854 if( ( n検索範囲時間ms > 0 ) && ( num6 > n検索範囲時間ms ) )
\r
860 private CDTX.CChip r次にくるギターChipを更新して返す()
\r
862 int nInputAdjustTime = this.bIsAutoPlay.Guitar ? 0 : this.nInputAdjustTimeMs.Guitar;
\r
863 this.r次にくるギターChip = this.r指定時刻に一番近い未ヒットChip( CDTXMania.Timer.n現在時刻, 0x2f, nInputAdjustTime, 500 );
\r
864 return this.r次にくるギターChip;
\r
866 private CDTX.CChip r次にくるベースChipを更新して返す()
\r
868 int nInputAdjustTime = this.bIsAutoPlay.Bass ? 0 : this.nInputAdjustTimeMs.Bass;
\r
869 this.r次にくるベースChip = this.r指定時刻に一番近い未ヒットChip( CDTXMania.Timer.n現在時刻, 0xaf, nInputAdjustTime, 500 );
\r
870 return this.r次にくるベースChip;
\r
872 private void tサウンド再生( CDTX.CChip rChip, long n再生開始システム時刻ms, E楽器パート part )
\r
874 this.tサウンド再生( rChip, n再生開始システム時刻ms, part, CDTXMania.ConfigIni.n手動再生音量, false, false );
\r
876 private void tサウンド再生( CDTX.CChip rChip, long n再生開始システム時刻ms, E楽器パート part, int n音量 )
\r
878 this.tサウンド再生( rChip, n再生開始システム時刻ms, part, n音量, false, false );
\r
880 private void tサウンド再生( CDTX.CChip rChip, long n再生開始システム時刻ms, E楽器パート part, int n音量, bool bモニタ )
\r
882 this.tサウンド再生( rChip, n再生開始システム時刻ms, part, n音量, bモニタ, false );
\r
884 private void tサウンド再生( CDTX.CChip pChip, long n再生開始システム時刻ms, E楽器パート part, int n音量, bool bモニタ, bool b音程をずらして再生 )
\r
886 if( pChip != null )
\r
891 if( CDTXMania.ConfigIni.bドラム打音を発声する )
\r
893 int index = pChip.nチャンネル番号;
\r
894 if( ( index >= 0x11 ) && ( index <= 0x1a ) )
\r
900 if( ( index < 0x31 ) || ( index > 0x3a ) )
\r
906 int nLane = this.nチャンネル0Atoレーン07[ index ];
\r
907 if( ( nLane == 1 ) && ( ( index == 0 ) || ( ( ( index == 7 ) && ( this.n最後に再生したHHのチャンネル番号 != 0x18 ) ) && ( this.n最後に再生したHHのチャンネル番号 != 0x38 ) ) ) )
\r
909 #if TEST_NOTEOFFMODE // 2011.1.1 yyagi TEST
\r
910 if (CDTXMania.DTX.bHH演奏で直前のHHを消音する) {
\r
912 CDTXMania.DTX.tWavの再生停止(this.n最後に再生したHHの実WAV番号);
\r
913 #if TEST_NOTEOFFMODE // 2011.1.1 yyagi TEST
\r
916 this.n最後に再生したHHの実WAV番号 = pChip.n整数値・内部番号;
\r
917 this.n最後に再生したHHのチャンネル番号 = pChip.nチャンネル番号;
\r
919 CDTXMania.DTX.tチップの再生( pChip, n再生開始システム時刻ms, nLane, n音量, bモニタ );
\r
924 case E楽器パート.GUITAR:
\r
925 #if TEST_NOTEOFFMODE // 2011.1.1 yyagi TEST
\r
926 if (CDTXMania.DTX.bGUITAR演奏で直前のGUITARを消音する) {
\r
928 CDTXMania.DTX.tWavの再生停止(this.n最後に再生したギターの実WAV番号);
\r
929 #if TEST_NOTEOFFMODE // 2011.1.1 yyagi TEST
\r
932 CDTXMania.DTX.tチップの再生( pChip, n再生開始システム時刻ms, 8, n音量, bモニタ, b音程をずらして再生 );
\r
933 this.n最後に再生したギターの実WAV番号 = pChip.n整数値・内部番号;
\r
937 #if TEST_NOTEOFFMODE // 2011.1.1 yyagi TEST
\r
938 if (CDTXMania.DTX.bBASS演奏で直前のBASSを消音する) {
\r
940 CDTXMania.DTX.tWavの再生停止(this.n最後に再生したベースの実WAV番号);
\r
941 #if TEST_NOTEOFFMODE // 2011.1.1 yyagi TEST
\r
944 CDTXMania.DTX.tチップの再生(pChip, n再生開始システム時刻ms, 9, n音量, bモニタ, b音程をずらして再生);
\r
945 this.n最後に再生したベースの実WAV番号 = pChip.n整数値・内部番号;
\r
950 private void tステータスパネルの選択()
\r
952 if( CDTXMania.bコンパクトモード )
\r
954 this.actStatusPanels.tラベル名からステータスパネルを決定する( null );
\r
956 else if( CDTXMania.stage選曲.r確定された曲 != null )
\r
958 this.actStatusPanels.tラベル名からステータスパネルを決定する( CDTXMania.stage選曲.r確定された曲.ar難易度ラベル[ CDTXMania.stage選曲.n確定された曲の難易度 ] );
\r
961 private E判定 tチップのヒット処理( long nHitTime, CDTX.CChip pChip )
\r
964 bool bIsAutoPlay = false;
\r
965 if( ( ( pChip.e楽器パート == E楽器パート.GUITAR ) && CDTXMania.ConfigIni.bAutoPlay.Guitar ) ||
\r
966 ( ( pChip.e楽器パート == E楽器パート.BASS ) && CDTXMania.ConfigIni.bAutoPlay.Bass ) )
\r
968 bIsAutoPlay = true;
\r
972 this.bAUTOでないチップが1つでもバーを通過した = true;
\r
974 E判定 eJudgeResult = E判定.Auto;
\r
975 switch (pChip.e楽器パート)
\r
977 case E楽器パート.GUITAR:
\r
978 eJudgeResult = this.e指定時刻からChipのJUDGEを返す( nHitTime, pChip, bIsAutoPlay ? 0 : this.nInputAdjustTimeMs.Guitar );
\r
979 this.actJudgeString.Start( 10, bIsAutoPlay ? E判定.Auto : eJudgeResult, pChip.nLag );
\r
983 eJudgeResult = this.e指定時刻からChipのJUDGEを返す( nHitTime, pChip, bIsAutoPlay ? 0 : this.nInputAdjustTimeMs.Bass );
\r
984 this.actJudgeString.Start( 11, bIsAutoPlay ? E判定.Auto : eJudgeResult, pChip.nLag );
\r
989 this.t判定にあわせてゲージを増減する( pChip.e楽器パート, eJudgeResult );
\r
992 switch( pChip.e楽器パート )
\r
995 switch (eJudgeResult)
\r
999 this.nヒット数・Auto含む.Drums.Miss++;
\r
1002 this.nヒット数・Auto含む.Drums[(int)eJudgeResult]++;
\r
1007 case E楽器パート.GUITAR:
\r
1008 switch (eJudgeResult)
\r
1012 this.nヒット数・Auto含む.Guitar.Miss++;
\r
1013 if ( !bIsAutoPlay )
\r
1015 this.nヒット数・Auto含まない.Guitar.Miss++;
\r
1018 default: // #24068 2011.1.10 ikanick changed
\r
1019 // #24167 2011.1.16 yyagi changed
\r
1020 this.nヒット数・Auto含む.Guitar[ (int) eJudgeResult ]++;
\r
1021 if ( !bIsAutoPlay )
\r
1023 this.nヒット数・Auto含まない.Guitar[ (int) eJudgeResult ]++;
\r
1027 switch (eJudgeResult)
\r
1032 this.actCombo.n現在のコンボ数.Guitar++;
\r
1036 this.actCombo.n現在のコンボ数.Guitar = 0;
\r
1042 switch( eJudgeResult )
\r
1046 this.nヒット数・Auto含む.Bass.Miss++;
\r
1047 if( !bIsAutoPlay )
\r
1049 this.nヒット数・Auto含まない.Bass.Miss++;
\r
1052 default: // #24068 2011.1.10 ikanick changed
\r
1053 this.nヒット数・Auto含む.Bass[(int)eJudgeResult]++;
\r
1054 if ( !bIsAutoPlay )
\r
1056 this.nヒット数・Auto含まない.Bass[ (int) eJudgeResult ]++;
\r
1060 switch (eJudgeResult)
\r
1065 this.actCombo.n現在のコンボ数.Bass++;
\r
1069 this.actCombo.n現在のコンボ数.Bass = 0;
\r
1077 if( ( !bIsAutoPlay && ( eJudgeResult != E判定.Miss ) ) && ( eJudgeResult != E判定.Bad ) )
\r
1080 switch ( pChip.e楽器パート )
\r
1082 case E楽器パート.GUITAR:
\r
1083 nCombos = this.actCombo.n現在のコンボ数.Guitar;
\r
1086 nCombos = this.actCombo.n現在のコンボ数.Bass;
\r
1089 long nScore = this.actScore.Get( pChip.e楽器パート );
\r
1090 long[] numArray = new long[] { 350L, 200L, 50L, 0L };
\r
1091 if( ( nCombos <= 500 ) || ( eJudgeResult == E判定.Good ) )
\r
1093 nScore += numArray[ (int) eJudgeResult ] * nCombos;
\r
1095 else if( ( eJudgeResult == E判定.Perfect ) || ( eJudgeResult == E判定.Great ) )
\r
1097 nScore += numArray[ (int) eJudgeResult ] * 500L;
\r
1099 this.actScore.Set( pChip.e楽器パート, nScore );
\r
1101 return eJudgeResult;
\r
1103 private void tチップのヒット処理・BadならびにTight時のMiss( E楽器パート part )
\r
1105 this.tチップのヒット処理・BadならびにTight時のMiss( part, 0 );
\r
1107 private void tチップのヒット処理・BadならびにTight時のMiss( E楽器パート part, int nLane )
\r
1109 this.t判定にあわせてゲージを増減する( part, E判定.Miss );
\r
1112 case E楽器パート.DRUMS:
\r
1115 case E楽器パート.GUITAR:
\r
1116 this.actJudgeString.Start( 10, E判定.Bad, 999 );
\r
1117 this.actCombo.n現在のコンボ数.Guitar = 0;
\r
1121 this.actJudgeString.Start( 11, E判定.Bad, 999 );
\r
1122 this.actCombo.n現在のコンボ数.Bass = 0;
\r
1129 private void tパネル文字列の設定()
\r
1131 this.actPanel.SetPanelString( string.IsNullOrEmpty( CDTXMania.DTX.PANEL ) ? CDTXMania.DTX.TITLE : CDTXMania.DTX.PANEL );
\r
1133 private void t進行描画・AVI()
\r
1135 if( ( ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) ) && ( !CDTXMania.ConfigIni.bストイックモード && CDTXMania.ConfigIni.bAVI有効 ) )
\r
1137 this.actAVI.t進行描画( 0xb5, 50 );
\r
1140 private void t進行描画・BGA()
\r
1142 if( ( ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) ) && ( !CDTXMania.ConfigIni.bストイックモード && CDTXMania.ConfigIni.bBGA有効 ) )
\r
1144 this.actBGA.t進行描画( 0xb5, 50 );
\r
1147 private void t進行描画・DANGER()
\r
1150 private void t進行描画・MIDIBGM()
\r
1152 if( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED )
\r
1154 CStage.Eフェーズ eフェーズid1 = base.eフェーズID;
\r
1157 private void t進行描画・RGBボタン()
\r
1159 if( CDTXMania.ConfigIni.eDark != Eダークモード.FULL )
\r
1161 this.actRGB.On進行描画();
\r
1164 private void t進行描画・STAGEFAILED()
\r
1166 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
1168 this.eフェードアウト完了時の戻り値 = E演奏画面の戻り値.ステージ失敗;
\r
1169 base.eフェーズID = CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト;
\r
1170 this.actFO.tフェードアウト開始();
\r
1173 private void t進行描画・WailingBonus()
\r
1175 if( ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) )
\r
1177 this.actWailingBonus.On進行描画();
\r
1180 private void t進行描画・Wailing枠()
\r
1182 if( ( CDTXMania.ConfigIni.eDark != Eダークモード.FULL ) && CDTXMania.ConfigIni.bGuitar有効 )
\r
1184 if( CDTXMania.DTX.bチップがある.Guitar && ( this.txWailing枠 != null ) )
\r
1186 this.txWailing枠.t2D描画( CDTXMania.app.Device, 0x8b, CDTXMania.ConfigIni.bReverse.Guitar ? 340 : 11 );
\r
1188 if( CDTXMania.DTX.bチップがある.Bass && ( this.txWailing枠 != null ) )
\r
1190 this.txWailing枠.t2D描画( CDTXMania.app.Device, 0x251, CDTXMania.ConfigIni.bReverse.Bass ? 340 : 11 );
\r
1194 private void t進行描画・ギターベース判定ライン()
\r
1196 if( ( CDTXMania.ConfigIni.eDark != Eダークモード.FULL ) && CDTXMania.ConfigIni.bGuitar有効 )
\r
1198 if( CDTXMania.DTX.bチップがある.Guitar )
\r
1200 int y = ( CDTXMania.ConfigIni.bReverse.Guitar ? 0x171 : 40 ) - 3;
\r
1201 for( int i = 0; i < 4; i++ )
\r
1203 if( this.txヒットバー != null )
\r
1205 this.txヒットバー.t2D描画( CDTXMania.app.Device, 0x17 + ( 0x1c * i ), y, new Rectangle( 0, i * 8, 0x1c, 8 ) );
\r
1209 if( CDTXMania.DTX.bチップがある.Bass )
\r
1211 int num3 = ( CDTXMania.ConfigIni.bReverse.Bass ? 0x171 : 40 ) - 3;
\r
1212 for( int j = 0; j < 4; j++ )
\r
1214 if( this.txヒットバー != null )
\r
1216 this.txヒットバー.t2D描画( CDTXMania.app.Device, 0x1dd + ( 0x1c * j ), num3, new Rectangle( 0, j * 8, 0x1c, 8 ) );
\r
1222 private void t進行描画・ゲージ()
\r
1224 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
1226 this.actGauge.On進行描画();
\r
1229 private void t進行描画・コンボ()
\r
1231 this.actCombo.On進行描画();
\r
1233 private void t進行描画・スコア()
\r
1235 this.actScore.On進行描画();
\r
1237 private void t進行描画・ステータスパネル()
\r
1239 this.actStatusPanels.On進行描画();
\r
1241 private bool t進行描画・チップ()
\r
1243 if( ( base.eフェーズID == CStage.Eフェーズ.演奏_STAGE_FAILED ) || ( base.eフェーズID == CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) )
\r
1247 if( ( this.n現在のトップChip == -1 ) || ( this.n現在のトップChip >= CDTXMania.DTX.listChip.Count ) )
\r
1251 int num = this.n現在のトップChip;
\r
1257 //double speed = 264.0; // BPM150の時の1小節の長さ[dot]
\r
1258 double speed = 234.0; // BPM150の時の1小節の長さ[dot]
\r
1260 double num2 = ( ( ( ( this.act譜面スクロール速度.db現在の譜面スクロール速度.Drums + 1.0 ) * 0.5 ) * 37.5 ) * speed ) / 60000.0;
\r
1261 double num3 = ( ( ( ( ( this.act譜面スクロール速度.db現在の譜面スクロール速度.Guitar + 1.0 ) * 0.5 ) * 0.5 ) * 37.5 ) * speed ) / 60000.0;
\r
1262 double num4 = ( ( ( ( ( this.act譜面スクロール速度.db現在の譜面スクロール速度.Bass + 1.0 ) * 0.5 ) * 0.5 ) * 37.5 ) * speed ) / 60000.0;
\r
1264 CDTX dTX = CDTXMania.DTX;
\r
1265 CConfigIni configIni = CDTXMania.ConfigIni;
\r
1266 while( num < dTX.listChip.Count )
\r
1268 CDTX.CChip pChip = dTX.listChip[ num ];
\r
1269 pChip.nバーからの距離dot.Drums = (int) ( ( pChip.n発声時刻ms - CDTXMania.Timer.n現在時刻 ) * num2 );
\r
1270 pChip.nバーからの距離dot.Guitar = (int) ( ( pChip.n発声時刻ms - CDTXMania.Timer.n現在時刻 ) * num3 );
\r
1271 pChip.nバーからの距離dot.Bass = (int) ( ( pChip.n発声時刻ms - CDTXMania.Timer.n現在時刻 ) * num4 );
\r
1272 if( Math.Min( Math.Min( pChip.nバーからの距離dot.Drums, pChip.nバーからの距離dot.Guitar ), pChip.nバーからの距離dot.Bass ) > 450 )
\r
1276 if( ( ( num == this.n現在のトップChip ) && ( pChip.nバーからの距離dot.Drums < -65 ) ) && pChip.bHit )
\r
1278 this.n現在のトップChip++;
\r
1279 num = this.n現在のトップChip;
\r
1283 bool bIsAutoPlay = false;
\r
1285 ((pChip.e楽器パート == E楽器パート.DRUMS) && CDTXMania.ConfigIni.bAutoPlay[this.nチャンネル0Atoレーン07[pChip.nチャンネル番号 - 0x11]]) ||
\r
1286 ((pChip.e楽器パート == E楽器パート.GUITAR) && CDTXMania.ConfigIni.bAutoPlay.Guitar)
\r
1288 ((pChip.e楽器パート == E楽器パート.BASS) && CDTXMania.ConfigIni.bAutoPlay.Bass)
\r
1290 // if ((pChip.e楽器パート == E楽器パート.DRUMS) && CDTXMania.ConfigIni.bAutoPlay[this.nチャンネル0Atoレーン07[pChip.nチャンネル番号 - 0x11]])
\r
1292 bIsAutoPlay = true;
\r
1295 int nInputAdjustTime = 0;
\r
1298 //nInputAdjustTime = 0;
\r
1300 else if (pChip.e楽器パート == E楽器パート.UNKNOWN)
\r
1302 //nInputAdjustTime = 0;
\r
1306 //int[] nInputAdjustTimes = new int[] { this.nInputAdjustTimeMs.Drums, this.nInputAdjustTimeMs.Guitar, this.nInputAdjustTimeMs.Bass };
\r
1307 //nInputAdjustTime = nInputAdjustTimes[(int)pChip.e楽器パート];
\r
1308 nInputAdjustTime = this.nInputAdjustTimeMs[(int)pChip.e楽器パート];
\r
1311 if( ( ( pChip.e楽器パート != E楽器パート.UNKNOWN ) && !pChip.bHit ) &&
\r
1312 ((pChip.nバーからの距離dot.Drums < 0) && (this.e指定時刻からChipのJUDGEを返す(CDTXMania.Timer.n現在時刻, pChip, nInputAdjustTime ) == E判定.Miss)))
\r
1314 this.tチップのヒット処理( CDTXMania.Timer.n現在時刻, pChip );
\r
1316 switch( pChip.nチャンネル番号 )
\r
1319 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1321 pChip.bHit = true;
\r
1322 if( configIni.bBGM音を発声する )
\r
1324 dTX.tチップの再生( pChip, CDTXMania.Timer.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, 10, dTX.nモニタを考慮した音量( E楽器パート.UNKNOWN ) );
\r
1330 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1332 pChip.bHit = true;
\r
1333 this.actPlayInfo.dbBPM = ( pChip.n整数値 * ( ( (double) configIni.n演奏速度 ) / 20.0 ) ) + dTX.BASEBPM;
\r
1345 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1347 pChip.bHit = true;
\r
1348 if( configIni.bBGA有効 )
\r
1350 switch( pChip.eBGA種別 )
\r
1352 case EBGA種別.BMPTEX:
\r
1353 if( pChip.rBMPTEX != null )
\r
1355 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
1360 if( ( pChip.rBGA != null ) && ( ( pChip.rBMP != null ) || ( pChip.rBMPTEX != null ) ) )
\r
1362 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
1366 case EBGA種別.BGAPAN:
\r
1367 if( ( pChip.rBGAPan != null ) && ( ( pChip.rBMP != null ) || ( pChip.rBMPTEX != null ) ) )
\r
1369 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
1374 if( pChip.rBMP != null )
\r
1376 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
1385 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1387 pChip.bHit = true;
\r
1388 if( dTX.listBPM.ContainsKey( pChip.n整数値・内部番号 ) )
\r
1390 this.actPlayInfo.dbBPM = ( dTX.listBPM[ pChip.n整数値・内部番号 ].dbBPM値 * ( ( (double) configIni.n演奏速度 ) / 20.0 ) ) + dTX.BASEBPM;
\r
1406 int num1 = this.nチャンネル0Atoレーン07[ pChip.nチャンネル番号 - 0x11 ];
\r
1407 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1409 pChip.bHit = true;
\r
1410 this.tサウンド再生( pChip, CDTXMania.Timer.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, E楽器パート.DRUMS, dTX.nモニタを考慮した音量( E楽器パート.DRUMS ) );
\r
1415 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1417 pChip.bHit = true;
\r
1418 this.r現在の歓声Chip.Drums = pChip;
\r
1430 if( configIni.bGuitar有効 )
\r
1432 if( configIni.bSudden.Guitar )
\r
1434 pChip.b可視 = pChip.nバーからの距離dot.Guitar < 200;
\r
1436 if( configIni.bHidden.Guitar && ( pChip.nバーからの距離dot.Guitar < 100 ) )
\r
1438 pChip.b可視 = false;
\r
1440 if( !pChip.bHit && pChip.b可視 )
\r
1442 int num6 = configIni.bReverse.Guitar ? ( 0x171 - pChip.nバーからの距離dot.Guitar ) : ( 40 + pChip.nバーからの距離dot.Guitar );
\r
1443 if( ( num6 > 0 ) && ( num6 < 0x199 ) )
\r
1445 int num7 = this.ctチップ模様アニメ.Guitar.n現在の値;
\r
1446 if( pChip.nチャンネル番号 == 0x20 )
\r
1448 if( this.txチップ != null )
\r
1450 this.txチップ.t2D描画( CDTXMania.app.Device, 0x1a, num6 - 4, new Rectangle( 0, 0xc0 + ( ( num7 % 5 ) * 8 ), 0x67, 8 ) );
\r
1453 else if( !configIni.bLeft.Guitar )
\r
1455 Rectangle rectangle = new Rectangle( 0, num7 * 8, 0x20, 8 );
\r
1456 if( ( ( pChip.nチャンネル番号 & 4 ) != 0 ) && ( this.txチップ != null ) )
\r
1458 this.txチップ.t2D描画( CDTXMania.app.Device, 0x1a, num6 - 4, rectangle );
\r
1460 rectangle.X += 0x20;
\r
1461 if( ( ( pChip.nチャンネル番号 & 2 ) != 0 ) && ( this.txチップ != null ) )
\r
1463 this.txチップ.t2D描画( CDTXMania.app.Device, 0x3e, num6 - 4, rectangle );
\r
1465 rectangle.X += 0x20;
\r
1466 if( ( ( pChip.nチャンネル番号 & 1 ) != 0 ) && ( this.txチップ != null ) )
\r
1468 this.txチップ.t2D描画( CDTXMania.app.Device, 0x62, num6 - 4, rectangle );
\r
1473 Rectangle rectangle2 = new Rectangle( 0, num7 * 8, 0x20, 8 );
\r
1474 if( ( ( pChip.nチャンネル番号 & 4 ) != 0 ) && ( this.txチップ != null ) )
\r
1476 this.txチップ.t2D描画( CDTXMania.app.Device, 0x62, num6 - 4, rectangle2 );
\r
1478 rectangle2.X += 0x20;
\r
1479 if( ( ( pChip.nチャンネル番号 & 2 ) != 0 ) && ( this.txチップ != null ) )
\r
1481 this.txチップ.t2D描画( CDTXMania.app.Device, 0x3e, num6 - 4, rectangle2 );
\r
1483 rectangle2.X += 0x20;
\r
1484 if( ( ( pChip.nチャンネル番号 & 1 ) != 0 ) && ( this.txチップ != null ) )
\r
1486 this.txチップ.t2D描画( CDTXMania.app.Device, 0x1a, num6 - 4, rectangle2 );
\r
1491 if( ( configIni.bAutoPlay.Guitar && !pChip.bHit ) && ( pChip.nバーからの距離dot.Guitar < 0 ) )
\r
1493 pChip.bHit = true;
\r
1494 if( ( ( pChip.nチャンネル番号 & 4 ) != 0 ) || ( pChip.nチャンネル番号 == 0x20 ) )
\r
1496 this.actChipFire.Start( 0 );
\r
1498 if( ( ( pChip.nチャンネル番号 & 2 ) != 0 ) || ( pChip.nチャンネル番号 == 0x20 ) )
\r
1500 this.actChipFire.Start( 1 );
\r
1502 if( ( ( pChip.nチャンネル番号 & 1 ) != 0 ) || ( pChip.nチャンネル番号 == 0x20 ) )
\r
1504 this.actChipFire.Start( 2 );
\r
1506 this.tサウンド再生( pChip, CDTXMania.Timer.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, E楽器パート.GUITAR, dTX.nモニタを考慮した音量( E楽器パート.GUITAR ) );
\r
1507 this.r次にくるギターChip = null;
\r
1508 this.tチップのヒット処理( pChip.n発声時刻ms, pChip );
\r
1512 if( !pChip.bHit && ( pChip.nバーからの距離dot.Guitar < 0 ) )
\r
1514 pChip.bHit = true;
\r
1515 this.tサウンド再生( pChip, CDTXMania.Timer.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, E楽器パート.GUITAR, dTX.nモニタを考慮した音量( E楽器パート.GUITAR ) );
\r
1520 if( configIni.bGuitar有効 )
\r
1522 if( configIni.bSudden.Guitar )
\r
1524 pChip.b可視 = pChip.nバーからの距離dot.Guitar < 200;
\r
1526 if( configIni.bHidden.Guitar && ( pChip.nバーからの距離dot.Guitar < 100 ) )
\r
1528 pChip.b可視 = false;
\r
1530 if( !pChip.bHit && pChip.b可視 )
\r
1533 int num11 = configIni.bReverse.Guitar ? ( 0x171 - pChip.nバーからの距離dot.Guitar ) : ( 40 + pChip.nバーからの距離dot.Guitar );
\r
1534 int num12 = num11;
\r
1536 if( ( num12 < ( 0x199 + num10 ) ) && ( num12 > -num10 ) )
\r
1538 int num14 = this.ctWailingチップ模様アニメ.n現在の値;
\r
1539 Rectangle rectangle5 = new Rectangle( 0x60 + ( num14 * 20 ), 0, 20, 50 );
\r
1540 if( num12 < num10 )
\r
1542 rectangle5.Y += num10 - num12;
\r
1543 rectangle5.Height -= num10 - num12;
\r
1544 num13 = num10 - num12;
\r
1546 if( num12 > ( 0x199 - num10 ) )
\r
1548 rectangle5.Height -= num12 - ( 0x199 - num10 );
\r
1550 if( ( rectangle5.Bottom > rectangle5.Top ) && ( this.txチップ != null ) )
\r
1552 this.txチップ.t2D描画( CDTXMania.app.Device, 0x8b, ( num11 - num10 ) + num13, rectangle5 );
\r
1556 if( !pChip.bHit && ( pChip.nバーからの距離dot.Guitar < 0 ) )
\r
1558 pChip.bHit = true;
\r
1559 if( configIni.bAutoPlay.Guitar )
\r
1561 this.actWailingBonus.Start( E楽器パート.GUITAR, this.r現在の歓声Chip.Guitar );
\r
1566 pChip.bHit = true;
\r
1570 if( !pChip.bHit && ( pChip.nバーからの距離dot.Guitar < 0 ) )
\r
1572 pChip.bHit = true;
\r
1573 this.r現在の歓声Chip.Guitar = pChip;
\r
1587 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1589 pChip.bHit = true;
\r
1595 int num20 = pChip.n発声位置 / 0x180;
\r
1596 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1598 pChip.bHit = true;
\r
1599 this.actPlayInfo.n小節番号 = num20 - 1;
\r
1600 if( configIni.bWave再生位置自動調整機能有効 )
\r
1602 dTX.tWave再生位置自動補正();
\r
1605 if( ( pChip.b可視 && configIni.bGuitar有効 ) && ( configIni.eDark != Eダークモード.FULL ) )
\r
1607 int y = configIni.bReverse.Guitar ? ( ( 0x171 - pChip.nバーからの距離dot.Guitar ) - 1 ) : ( ( 40 + pChip.nバーからの距離dot.Guitar ) - 1 );
\r
1608 if( ( dTX.bチップがある.Guitar && ( y > 0 ) ) && ( ( y < 0x199 ) && ( this.txチップ != null ) ) )
\r
1610 this.txチップ.t2D描画( CDTXMania.app.Device, 0x1a, y, new Rectangle( 0, 0xeb, 0x68, 1 ) );
\r
1612 y = configIni.bReverse.Bass ? ( ( 0x171 - pChip.nバーからの距離dot.Bass ) - 1 ) : ( ( 40 + pChip.nバーからの距離dot.Bass ) - 1 );
\r
1613 if( ( dTX.bチップがある.Bass && ( y > 0 ) ) && ( ( y < 0x199 ) && ( this.txチップ != null ) ) )
\r
1615 this.txチップ.t2D描画( CDTXMania.app.Device, 480, y, new Rectangle( 0, 0xeb, 0x68, 1 ) );
\r
1621 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1622 pChip.bHit = true;
\r
1626 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1628 pChip.bHit = true;
\r
1633 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1635 pChip.bHit = true;
\r
1640 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1642 pChip.bHit = true;
\r
1643 if( configIni.bAVI有効 )
\r
1645 switch( pChip.eAVI種別 )
\r
1648 if( pChip.rAVI != null )
\r
1650 this.actAVI.Start( pChip.nチャンネル番号, pChip.rAVI, 0x116, 0x163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, pChip.n発声時刻ms );
\r
1654 case EAVI種別.AVIPAN:
\r
1655 if( pChip.rAVIPan != null )
\r
1657 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
1697 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1699 pChip.bHit = true;
\r
1700 if( configIni.bBGM音を発声する )
\r
1702 dTX.tWavの再生停止( this.n最後に再生したBGMの実WAV番号[ pChip.nチャンネル番号 - 0x61 ] );
\r
1703 dTX.tチップの再生( pChip, CDTXMania.Timer.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, 10, dTX.nモニタを考慮した音量( E楽器パート.UNKNOWN ) );
\r
1704 this.n最後に再生したBGMの実WAV番号[ pChip.nチャンネル番号 - 0x61 ] = pChip.n整数値・内部番号;
\r
1717 if( configIni.bGuitar有効 )
\r
1719 if( configIni.bSudden.Bass )
\r
1721 pChip.b可視 = pChip.nバーからの距離dot.Bass < 200;
\r
1723 if( configIni.bHidden.Bass && ( pChip.nバーからの距離dot.Bass < 100 ) )
\r
1725 pChip.b可視 = false;
\r
1727 if( !pChip.bHit && pChip.b可視 )
\r
1729 int num8 = configIni.bReverse.Bass ? ( 0x171 - pChip.nバーからの距離dot.Bass ) : ( 40 + pChip.nバーからの距離dot.Bass );
\r
1730 if( ( num8 > 0 ) && ( num8 < 0x199 ) )
\r
1732 int num9 = this.ctチップ模様アニメ.Bass.n現在の値;
\r
1733 if( pChip.nチャンネル番号 == 160 )
\r
1735 if( this.txチップ != null )
\r
1737 this.txチップ.t2D描画( CDTXMania.app.Device, 480, num8 - 4, new Rectangle( 0, 0xc0 + ( ( num9 % 5 ) * 8 ), 0x67, 8 ) );
\r
1740 else if( !configIni.bLeft.Bass )
\r
1742 Rectangle rectangle3 = new Rectangle( 0, num9 * 8, 0x20, 8 );
\r
1743 if( ( ( pChip.nチャンネル番号 & 4 ) != 0 ) && ( this.txチップ != null ) )
\r
1745 this.txチップ.t2D描画( CDTXMania.app.Device, 480, num8 - 4, rectangle3 );
\r
1747 rectangle3.X += 0x20;
\r
1748 if( ( ( pChip.nチャンネル番号 & 2 ) != 0 ) && ( this.txチップ != null ) )
\r
1750 this.txチップ.t2D描画( CDTXMania.app.Device, 0x204, num8 - 4, rectangle3 );
\r
1752 rectangle3.X += 0x20;
\r
1753 if( ( ( pChip.nチャンネル番号 & 1 ) != 0 ) && ( this.txチップ != null ) )
\r
1755 this.txチップ.t2D描画( CDTXMania.app.Device, 0x228, num8 - 4, rectangle3 );
\r
1760 Rectangle rectangle4 = new Rectangle( 0, num9 * 8, 0x20, 8 );
\r
1761 if( ( ( pChip.nチャンネル番号 & 4 ) != 0 ) && ( this.txチップ != null ) )
\r
1763 this.txチップ.t2D描画( CDTXMania.app.Device, 0x228, num8 - 4, rectangle4 );
\r
1765 rectangle4.X += 0x20;
\r
1766 if( ( ( pChip.nチャンネル番号 & 2 ) != 0 ) && ( this.txチップ != null ) )
\r
1768 this.txチップ.t2D描画( CDTXMania.app.Device, 0x204, num8 - 4, rectangle4 );
\r
1770 rectangle4.X += 0x20;
\r
1771 if( ( ( pChip.nチャンネル番号 & 1 ) != 0 ) && ( this.txチップ != null ) )
\r
1773 this.txチップ.t2D描画( CDTXMania.app.Device, 480, num8 - 4, rectangle4 );
\r
1778 if( ( configIni.bAutoPlay.Bass && !pChip.bHit ) && ( pChip.nバーからの距離dot.Bass < 0 ) )
\r
1780 pChip.bHit = true;
\r
1781 if( ( ( pChip.nチャンネル番号 & 4 ) != 0 ) || ( pChip.nチャンネル番号 == 160 ) )
\r
1783 this.actChipFire.Start( 3 );
\r
1785 if( ( ( pChip.nチャンネル番号 & 2 ) != 0 ) || ( pChip.nチャンネル番号 == 160 ) )
\r
1787 this.actChipFire.Start( 4 );
\r
1789 if( ( ( pChip.nチャンネル番号 & 1 ) != 0 ) || ( pChip.nチャンネル番号 == 160 ) )
\r
1791 this.actChipFire.Start( 5 );
\r
1793 this.tサウンド再生( pChip, CDTXMania.Timer.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, E楽器パート.BASS, dTX.nモニタを考慮した音量( E楽器パート.BASS ) );
\r
1794 this.r次にくるベースChip = null;
\r
1795 this.tチップのヒット処理( pChip.n発声時刻ms, pChip );
\r
1799 if( !pChip.bHit && ( pChip.nバーからの距離dot.Bass < 0 ) )
\r
1801 pChip.bHit = true;
\r
1802 this.tサウンド再生( pChip, CDTXMania.Timer.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, E楽器パート.BASS, dTX.nモニタを考慮した音量( E楽器パート.BASS ) );
\r
1807 if( configIni.bGuitar有効 )
\r
1809 if( configIni.bSudden.Bass )
\r
1811 pChip.b可視 = pChip.nバーからの距離dot.Bass < 200;
\r
1813 if( configIni.bHidden.Bass && ( pChip.nバーからの距離dot.Bass < 100 ) )
\r
1815 pChip.b可視 = false;
\r
1817 if( !pChip.bHit && pChip.b可視 )
\r
1820 int num16 = configIni.bReverse.Bass ? ( 0x171 - pChip.nバーからの距離dot.Bass ) : ( 40 + pChip.nバーからの距離dot.Bass );
\r
1821 int num17 = num16;
\r
1823 if( ( num17 < ( 0x199 + num15 ) ) && ( num17 > -num15 ) )
\r
1825 int num19 = this.ctWailingチップ模様アニメ.n現在の値;
\r
1826 Rectangle rectangle6 = new Rectangle( 0x60 + ( num19 * 20 ), 0, 20, 50 );
\r
1827 if( num17 < num15 )
\r
1829 rectangle6.Y += num15 - num17;
\r
1830 rectangle6.Height -= num15 - num17;
\r
1831 num18 = num15 - num17;
\r
1833 if( num17 > ( 0x199 - num15 ) )
\r
1835 rectangle6.Height -= num17 - ( 0x199 - num15 );
\r
1837 if( ( rectangle6.Bottom > rectangle6.Top ) && ( this.txチップ != null ) )
\r
1839 this.txチップ.t2D描画( CDTXMania.app.Device, 0x251, ( num16 - num15 ) + num18, rectangle6 );
\r
1843 if( !pChip.bHit && ( pChip.nバーからの距離dot.Bass < 0 ) )
\r
1845 pChip.bHit = true;
\r
1846 if( configIni.bAutoPlay.Bass )
\r
1848 this.actWailingBonus.Start( E楽器パート.BASS, this.r現在の歓声Chip.Bass );
\r
1853 pChip.bHit = true;
\r
1857 if( !pChip.bHit && ( pChip.nバーからの距離dot.Bass < 0 ) )
\r
1859 pChip.bHit = true;
\r
1860 this.r現在の歓声Chip.Bass = pChip;
\r
1874 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1876 pChip.bHit = true;
\r
1881 if( !pChip.bHit && ( pChip.nバーからの距離dot.Guitar < 0 ) )
\r
1883 pChip.bHit = true;
\r
1884 this.r現在の空うちギターChip = pChip;
\r
1885 pChip.nチャンネル番号 = 0x20;
\r
1890 if( !pChip.bHit && ( pChip.nバーからの距離dot.Bass < 0 ) )
\r
1892 pChip.bHit = true;
\r
1893 this.r現在の空うちベースChip = pChip;
\r
1894 pChip.nチャンネル番号 = 160;
\r
1906 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1908 pChip.bHit = true;
\r
1909 if( ( configIni.bBGA有効 && ( pChip.eBGA種別 == EBGA種別.BMP ) ) || ( pChip.eBGA種別 == EBGA種別.BMPTEX ) )
\r
1911 for( int i = 0; i < 8; i++ )
\r
1913 if( this.nBGAスコープチャンネルマップ[ 0, i ] == pChip.nチャンネル番号 )
\r
1915 this.actBGA.ChangeScope( this.nBGAスコープチャンネルマップ[ 1, i ], pChip.rBMP, pChip.rBMPTEX );
\r
1923 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1925 pChip.bHit = true;
\r
1934 private void t進行描画・チップアニメ()
\r
1936 for( int i = 1; i < 3; i++ )
\r
1938 this.ctチップ模様アニメ[ i ].t進行Loop();
\r
1940 this.ctWailingチップ模様アニメ.t進行Loop();
\r
1942 private void t進行描画・チップファイアGB()
\r
1944 this.actChipFire.On進行描画();
\r
1946 private void t進行描画・パネル文字列()
\r
1948 if( ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) )
\r
1950 this.actPanel.t進行描画( 0xb5, 430 );
\r
1953 private bool t進行描画・フェードイン・アウト()
\r
1955 switch( base.eフェーズID )
\r
1957 case CStage.Eフェーズ.共通_フェードイン:
\r
1958 if( this.actFI.On進行描画() != 0 )
\r
1960 base.eフェーズID = CStage.Eフェーズ.共通_通常状態;
\r
1964 case CStage.Eフェーズ.共通_フェードアウト:
\r
1965 case CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト:
\r
1966 if( this.actFO.On進行描画() != 0 )
\r
1972 case CStage.Eフェーズ.演奏_STAGE_CLEAR_フェードアウト:
\r
1973 if( this.actFOClear.On進行描画() == 0 )
\r
1981 private void t進行描画・レーンフラッシュGB()
\r
1983 if( ( ( CDTXMania.ConfigIni.eDark != Eダークモード.HALF ) && ( CDTXMania.ConfigIni.eDark != Eダークモード.FULL ) ) && CDTXMania.ConfigIni.bGuitar有効 )
\r
1985 this.actLaneFlushGB.On進行描画();
\r
1988 private void t進行描画・演奏情報()
\r
1990 if( !CDTXMania.ConfigIni.b演奏情報を表示しない )
\r
1992 this.actPlayInfo.t進行描画( 0xb5, 50 );
\r
1995 private void t進行描画・背景()
\r
1997 if( CDTXMania.ConfigIni.eDark == Eダークモード.OFF )
\r
1999 if( this.tx背景 != null )
\r
2001 this.tx背景.t2D描画( CDTXMania.app.Device, 0, 0 );
\r
2006 CDTXMania.app.Device.Clear( ClearFlags.ZBuffer | ClearFlags.Target, Color.Black, 0f, 0 );
\r
2009 private void t進行描画・判定文字列()
\r
2011 this.actJudgeString.On進行描画();
\r
2013 private void t進行描画・譜面スクロール速度()
\r
2015 this.act譜面スクロール速度.On進行描画();
\r
2017 private void t入力メソッド記憶( E楽器パート part )
\r
2019 if( CDTXMania.Pad.st検知したデバイス.Keyboard )
\r
2021 this.b演奏にキーボードを使った[ (int) part ] = true;
\r
2023 if( CDTXMania.Pad.st検知したデバイス.Joypad )
\r
2025 this.b演奏にジョイパッドを使った[ (int) part ] = true;
\r
2027 if( CDTXMania.Pad.st検知したデバイス.MIDIIN )
\r
2029 this.b演奏にMIDI入力を使った[ (int) part ] = true;
\r
2031 if( CDTXMania.Pad.st検知したデバイス.Mouse )
\r
2033 this.b演奏にマウスを使った[ (int) part ] = true;
\r
2036 private void t入力処理・ギター()
\r
2038 if ( CDTXMania.Pad.b押されている( E楽器パート.GUITAR, Eパッド.Decide ) && CDTXMania.Pad.b押された( E楽器パート.GUITAR, Eパッド.B ) )
\r
2040 CDTXMania.ConfigIni.n譜面スクロール速度.Guitar = Math.Min( CDTXMania.ConfigIni.n譜面スクロール速度.Guitar + 1, 0x7cf );
\r
2042 if ( CDTXMania.Pad.b押されている( E楽器パート.GUITAR, Eパッド.Decide ) && CDTXMania.Pad.b押された( E楽器パート.GUITAR, Eパッド.R ) )
\r
2044 CDTXMania.ConfigIni.n譜面スクロール速度.Guitar = Math.Max( CDTXMania.ConfigIni.n譜面スクロール速度.Guitar - 1, 0 );
\r
2047 if ( CDTXMania.ConfigIni.bGuitar有効 && CDTXMania.DTX.bチップがある.Guitar )
\r
2049 if( bIsAutoPlay.Guitar )
\r
2051 CDTX.CChip chip = this.r次にくるギターChipを更新して返す();
\r
2052 if( chip != null )
\r
2054 if( ( chip.nチャンネル番号 & 4 ) != 0 )
\r
2056 this.actLaneFlushGB.Start( 0 );
\r
2057 this.actRGB.Push( 0 );
\r
2059 if( ( chip.nチャンネル番号 & 2 ) != 0 )
\r
2061 this.actLaneFlushGB.Start( 1 );
\r
2062 this.actRGB.Push( 1 );
\r
2064 if( ( chip.nチャンネル番号 & 1 ) != 0 )
\r
2066 this.actLaneFlushGB.Start( 2 );
\r
2067 this.actRGB.Push( 2 );
\r
2073 int flagR = CDTXMania.Pad.b押されている( E楽器パート.GUITAR, Eパッド.R ) ? 4 : 0;
\r
2074 this.t入力メソッド記憶( E楽器パート.GUITAR );
\r
2075 int flagG = CDTXMania.Pad.b押されている( E楽器パート.GUITAR, Eパッド.G ) ? 2 : 0;
\r
2076 this.t入力メソッド記憶( E楽器パート.GUITAR );
\r
2077 int flagB = CDTXMania.Pad.b押されている( E楽器パート.GUITAR, Eパッド.B ) ? 1 : 0;
\r
2078 this.t入力メソッド記憶( E楽器パート.GUITAR );
\r
2079 int flagRGB = flagR | flagG | flagB;
\r
2082 this.actLaneFlushGB.Start( 0 );
\r
2083 this.actRGB.Push( 0 );
\r
2087 this.actLaneFlushGB.Start( 1 );
\r
2088 this.actRGB.Push( 1 );
\r
2092 this.actLaneFlushGB.Start( 2 );
\r
2093 this.actRGB.Push( 2 );
\r
2095 List<STInputEvent> events = CDTXMania.Pad.GetEvents( E楽器パート.GUITAR, Eパッド.Pick );
\r
2096 if( ( events != null ) && ( events.Count > 0 ) )
\r
2098 foreach( STInputEvent event2 in events )
\r
2101 if( !event2.b押された )
\r
2105 this.t入力メソッド記憶( E楽器パート.GUITAR );
\r
2106 long nTime = event2.nTimeStamp - CDTXMania.Timer.n前回リセットした時のシステム時刻;
\r
2107 CDTX.CChip pChip = this.r指定時刻に一番近い未ヒットChip( nTime, 0x2f, this.nInputAdjustTimeMs.Guitar, 0 );
\r
2108 E判定 e判定 = this.e指定時刻からChipのJUDGEを返す(nTime, pChip, this.nInputAdjustTimeMs.Guitar );
\r
2109 if (((pChip != null) && ((pChip.nチャンネル番号 & 15) == flagRGB)) && (e判定 != E判定.Miss))
\r
2111 if( ( flagR != 0 ) || ( flagRGB == 0 ) )
\r
2113 this.actChipFire.Start( 0 );
\r
2115 if( ( flagG != 0 ) || ( flagRGB == 0 ) )
\r
2117 this.actChipFire.Start( 1 );
\r
2119 if( ( flagB != 0 ) || ( flagRGB == 0 ) )
\r
2121 this.actChipFire.Start( 2 );
\r
2123 this.tチップのヒット処理( nTime, pChip );
\r
2124 this.tサウンド再生( pChip, CDTXMania.Timer.nシステム時刻, E楽器パート.GUITAR, CDTXMania.ConfigIni.n手動再生音量, CDTXMania.ConfigIni.b演奏音を強調する.Guitar, e判定 == E判定.Poor );
\r
2125 CDTX.CChip item = this.r指定時刻に一番近い未ヒットChip( nTime, 40, this.nInputAdjustTimeMs.Guitar, 140 );
\r
2126 if( item != null )
\r
2128 this.queWailing.Guitar.Enqueue( item );
\r
2132 if( ( ( chip4 = this.r現在の空うちギターChip ) != null ) || ( ( chip4 = this.r指定時刻に一番近いChip・ヒット未済問わず不可視考慮( nTime, 0x2f, this.nInputAdjustTimeMs.Guitar ) ) != null ) )
\r
2134 this.tサウンド再生( chip4, CDTXMania.Timer.nシステム時刻, E楽器パート.GUITAR, CDTXMania.ConfigIni.n手動再生音量, CDTXMania.ConfigIni.b演奏音を強調する.Guitar, true );
\r
2136 if( !CDTXMania.ConfigIni.bLight.Guitar )
\r
2138 this.tチップのヒット処理・BadならびにTight時のMiss( E楽器パート.GUITAR );
\r
2142 List<STInputEvent> list2 = CDTXMania.Pad.GetEvents( E楽器パート.GUITAR, Eパッド.Wail );
\r
2143 if( ( list2 != null ) && ( list2.Count > 0 ) )
\r
2145 foreach( STInputEvent event3 in list2 )
\r
2148 if( !event3.b押された )
\r
2152 long num6 = event3.nTimeStamp - CDTXMania.Timer.n前回リセットした時のシステム時刻;
\r
2153 while( ( this.queWailing.Guitar.Count > 0 ) && ( ( chip5 = this.queWailing.Guitar.Dequeue() ) != null ) )
\r
2155 if( ( num6 - chip5.n発声時刻ms ) <= 1000 ) // #24245 2011.1.26 yyagi: 800 -> 1000
\r
2157 chip5.bHit = true;
\r
2158 this.actWailingBonus.Start( E楽器パート.GUITAR, this.r現在の歓声Chip.Guitar );
\r
2159 if( !bIsAutoPlay.Guitar )
\r
2161 int nCombo = ( this.actCombo.n現在のコンボ数.Guitar < 500 ) ? this.actCombo.n現在のコンボ数.Guitar : 500;
\r
2162 this.actScore.Set( E楽器パート.GUITAR, this.actScore.Get( E楽器パート.GUITAR ) + ( nCombo * 3000L ) ); // #24245 2011.1.26 yyagi changed DRUMS->GUITAR, add nCombo conditions
\r
2171 private void t入力処理・ベース()
\r
2173 if ( CDTXMania.Pad.b押されている( E楽器パート.BASS, Eパッド.Decide ) && CDTXMania.Pad.b押された( E楽器パート.BASS, Eパッド.B ) )
\r
2175 CDTXMania.ConfigIni.n譜面スクロール速度.Bass = Math.Min( CDTXMania.ConfigIni.n譜面スクロール速度.Bass + 1, 0x7cf );
\r
2177 if ( CDTXMania.Pad.b押されている( E楽器パート.BASS, Eパッド.Decide ) && CDTXMania.Pad.b押された( E楽器パート.BASS, Eパッド.R ) )
\r
2179 CDTXMania.ConfigIni.n譜面スクロール速度.Bass = Math.Max( CDTXMania.ConfigIni.n譜面スクロール速度.Bass - 1, 0 );
\r
2182 if ( CDTXMania.ConfigIni.bGuitar有効 && CDTXMania.DTX.bチップがある.Bass )
\r
2184 if( bIsAutoPlay.Bass )
\r
2186 CDTX.CChip chip = this.r次にくるベースChipを更新して返す();
\r
2187 if( chip != null )
\r
2189 if( ( chip.nチャンネル番号 & 4 ) != 0 )
\r
2191 this.actLaneFlushGB.Start( 3 );
\r
2192 this.actRGB.Push( 3 );
\r
2194 if( ( chip.nチャンネル番号 & 2 ) != 0 )
\r
2196 this.actLaneFlushGB.Start( 4 );
\r
2197 this.actRGB.Push( 4 );
\r
2199 if( ( chip.nチャンネル番号 & 1 ) != 0 )
\r
2201 this.actLaneFlushGB.Start( 5 );
\r
2202 this.actRGB.Push( 5 );
\r
2208 int flagR = CDTXMania.Pad.b押されている( E楽器パート.BASS, Eパッド.R ) ? 4 : 0;
\r
2209 this.t入力メソッド記憶( E楽器パート.BASS );
\r
2210 int flagG = CDTXMania.Pad.b押されている( E楽器パート.BASS, Eパッド.G ) ? 2 : 0;
\r
2211 this.t入力メソッド記憶( E楽器パート.BASS );
\r
2212 int flagB = CDTXMania.Pad.b押されている( E楽器パート.BASS, Eパッド.B ) ? 1 : 0;
\r
2213 this.t入力メソッド記憶( E楽器パート.BASS );
\r
2214 int flagRGB = flagR | flagG | flagB;
\r
2217 this.actLaneFlushGB.Start( 3 );
\r
2218 this.actRGB.Push( 3 );
\r
2222 this.actLaneFlushGB.Start( 4 );
\r
2223 this.actRGB.Push( 4 );
\r
2227 this.actLaneFlushGB.Start( 5 );
\r
2228 this.actRGB.Push( 5 );
\r
2230 List<STInputEvent> events = CDTXMania.Pad.GetEvents( E楽器パート.BASS, Eパッド.Pick );
\r
2231 if( ( events != null ) && ( events.Count > 0 ) )
\r
2233 foreach( STInputEvent event2 in events )
\r
2236 if( !event2.b押された )
\r
2240 this.t入力メソッド記憶( E楽器パート.BASS );
\r
2241 long nTime = event2.nTimeStamp - CDTXMania.Timer.n前回リセットした時のシステム時刻;
\r
2242 CDTX.CChip pChip = this.r指定時刻に一番近い未ヒットChip( nTime, 0xaf, this.nInputAdjustTimeMs.Bass, 0 );
\r
2243 E判定 e判定 = this.e指定時刻からChipのJUDGEを返す(nTime, pChip, this.nInputAdjustTimeMs.Bass );
\r
2244 if (((pChip != null) && ((pChip.nチャンネル番号 & 15) == flagRGB)) && (e判定 != E判定.Miss))
\r
2246 if( ( flagR != 0 ) || ( flagRGB == 0 ) )
\r
2248 this.actChipFire.Start( 3 );
\r
2250 if( ( flagG != 0 ) || ( flagRGB == 0 ) )
\r
2252 this.actChipFire.Start( 4 );
\r
2254 if( ( flagB != 0 ) || ( flagRGB == 0 ) )
\r
2256 this.actChipFire.Start( 5 );
\r
2258 this.tチップのヒット処理( nTime, pChip );
\r
2259 this.tサウンド再生( pChip, CDTXMania.Timer.nシステム時刻, E楽器パート.BASS, CDTXMania.ConfigIni.n手動再生音量, CDTXMania.ConfigIni.b演奏音を強調する.Bass, e判定 == E判定.Poor );
\r
2260 CDTX.CChip item = this.r指定時刻に一番近い未ヒットChip( nTime, 0xa8, this.nInputAdjustTimeMs.Bass, 140 );
\r
2261 if( item != null )
\r
2263 this.queWailing.Bass.Enqueue( item );
\r
2267 if( ( ( chip4 = this.r現在の空うちベースChip ) != null ) || ( ( chip4 = this.r指定時刻に一番近いChip・ヒット未済問わず不可視考慮( nTime, 0xaf, this.nInputAdjustTimeMs.Bass ) ) != null ) )
\r
2269 this.tサウンド再生( chip4, CDTXMania.Timer.nシステム時刻, E楽器パート.BASS, CDTXMania.ConfigIni.n手動再生音量, CDTXMania.ConfigIni.b演奏音を強調する.Bass, true );
\r
2271 if( !CDTXMania.ConfigIni.bLight.Bass )
\r
2273 this.tチップのヒット処理・BadならびにTight時のMiss( E楽器パート.BASS );
\r
2277 List<STInputEvent> list2 = CDTXMania.Pad.GetEvents( E楽器パート.BASS, Eパッド.Wail );
\r
2278 if( ( list2 != null ) && ( list2.Count > 0 ) )
\r
2280 foreach( STInputEvent event3 in list2 )
\r
2283 if( !event3.b押された )
\r
2287 long num6 = event3.nTimeStamp - CDTXMania.Timer.n前回リセットした時のシステム時刻;
\r
2288 while( ( this.queWailing.Bass.Count > 0 ) && ( ( chip5 = this.queWailing.Bass.Dequeue() ) != null ) )
\r
2290 if( ( num6 - chip5.n発声時刻ms ) <= 1000 ) // #24245 2011.1.16 yyagi: 800 -> 1000
\r
2292 chip5.bHit = true;
\r
2293 this.actWailingBonus.Start( E楽器パート.BASS, this.r現在の歓声Chip.Bass );
\r
2294 if( !bIsAutoPlay.Bass )
\r
2296 int nCombo = ( this.actCombo.n現在のコンボ数.Bass < 500 ) ? this.actCombo.n現在のコンボ数.Bass : 500;
\r
2297 this.actScore.Set( E楽器パート.BASS, this.actScore.Get( E楽器パート.BASS ) + ( nCombo * 3000L ) ); // #24245 2011.1.26 yyagi changed DRUMS->BASS, add nCombo conditions
\r
2306 private void t背景テクスチャの生成()
\r
2308 Bitmap image = null;
\r
2311 if( !CDTXMania.ConfigIni.bストイックモード )
\r
2313 string bACKGROUND = null;
\r
2314 if( ( CDTXMania.DTX.BACKGROUND_GR != null ) && ( CDTXMania.DTX.BACKGROUND_GR.Length > 0 ) )
\r
2316 bACKGROUND = CDTXMania.DTX.BACKGROUND_GR;
\r
2318 else if( ( CDTXMania.DTX.BACKGROUND != null ) && ( CDTXMania.DTX.BACKGROUND.Length > 0 ) )
\r
2320 bACKGROUND = CDTXMania.DTX.BACKGROUND;
\r
2322 if( ( bACKGROUND != null ) && ( bACKGROUND.Length > 0 ) )
\r
2324 path = CDTXMania.DTX.strフォルダ名 + bACKGROUND;
\r
2325 if( File.Exists( path ) )
\r
2329 Bitmap bitmap2 = null;
\r
2330 bitmap2 = new Bitmap( path );
\r
2331 if( ( bitmap2.Size.Width == 0 ) && ( bitmap2.Size.Height == 0 ) )
\r
2336 Bitmap bitmap3 = new Bitmap( 640, 480 );
\r
2337 Graphics graphics = Graphics.FromImage( bitmap3 );
\r
2338 for( int i = 0; i < 480; i += bitmap2.Size.Height )
\r
2340 for( int j = 0; j < 640; j += bitmap2.Size.Width )
\r
2342 graphics.DrawImage( bitmap2, j, i, bitmap2.Width, bitmap2.Height );
\r
2345 graphics.Dispose();
\r
2346 bitmap2.Dispose();
\r
2347 image = new Bitmap( CSkin.Path( @"Graphics\\ScreenPlayGuitar background.jpg" ) );
\r
2348 graphics = Graphics.FromImage( image );
\r
2349 ColorMatrix matrix2 = new ColorMatrix();
\r
2350 matrix2.Matrix00 = 1f;
\r
2351 matrix2.Matrix11 = 1f;
\r
2352 matrix2.Matrix22 = 1f;
\r
2353 matrix2.Matrix33 = ( (float) CDTXMania.ConfigIni.n背景の透過度 ) / 255f;
\r
2354 matrix2.Matrix44 = 1f;
\r
2355 ColorMatrix newColorMatrix = matrix2;
\r
2356 ImageAttributes imageAttr = new ImageAttributes();
\r
2357 imageAttr.SetColorMatrix( newColorMatrix );
\r
2358 graphics.DrawImage( bitmap3, new Rectangle( 0, 0, 640, 480 ), 0, 0, 640, 480, GraphicsUnit.Pixel, imageAttr );
\r
2359 imageAttr.Dispose();
\r
2360 graphics.DrawImage( bitmap3, new Rectangle( 0xb5, 50, 0x116, 0x163 ), 0xb5, 50, 0x116, 0x163, GraphicsUnit.Pixel );
\r
2361 graphics.Dispose();
\r
2362 bitmap3.Dispose();
\r
2367 Trace.TraceError( "背景画像の読み込みに失敗しました。({0})", new object[] { path } );
\r
2374 path = CSkin.Path( @"Graphics\ScreenPlayGuitar background.jpg" );
\r
2377 image = new Bitmap( path );
\r
2381 Trace.TraceError( "背景画像の読み込みに失敗しました。({0})", new object[] { path } );
\r
2386 if( ( CDTXMania.DTX.listBMP.Count > 0 ) || ( CDTXMania.DTX.listBMPTEX.Count > 0 ) )
\r
2388 Graphics graphics2 = Graphics.FromImage( image );
\r
2389 graphics2.FillRectangle( Brushes.Black, 0xb5, 50, 0x116, 0x163 );
\r
2390 graphics2.Dispose();
\r
2394 this.tx背景 = new CTexture( CDTXMania.app.Device, image, CDTXMania.TextureFormat );
\r
2396 catch( CTextureCreateFailedException )
\r
2398 Trace.TraceError( "背景テクスチャの生成に失敗しました。" );
\r
2403 #if true // DAMAGELEVELTUNING
\r
2404 // ----------------------------------
\r
2405 public float[,] fDamageGaugeDelta = { // #23625 2011.1.10 ickw_284: tuned damage/recover factors
\r
2406 // drums, guitar, bass
\r
2407 { 0.004f, 0.006f, 0.006f },
\r
2408 { 0.002f, 0.003f, 0.003f },
\r
2409 { 0.000f, 0.000f, 0.000f },
\r
2410 { -0.020f, -0.030f, -0.030f },
\r
2411 { -0.050f, -0.050f, -0.050f }
\r
2413 public float[] fDamageLevelFactor = {
\r
2416 // ----------------------------------
\r
2419 private void t判定にあわせてゲージを増減する(E楽器パート part, E判定 e今回の判定)
\r
2423 #if true // DAMAGELEVELTUNING
\r
2424 switch (e今回の判定) // #23625 2011.1.10 ickw_284
\r
2430 fDamage = fDamageGaugeDelta[(int)e今回の判定, (int)part];
\r
2433 fDamage = fDamageGaugeDelta[(int)e今回の判定, (int)part];
\r
2434 switch (CDTXMania.ConfigIni.eダメージレベル)
\r
2436 case Eダメージレベル.少ない:
\r
2438 case Eダメージレベル.大きい:
\r
2439 fDamage *= fDamageLevelFactor[(int)CDTXMania.ConfigIni.eダメージレベル];
\r
2448 #else // before applying #23625 modifications
\r
2452 fDamage = ( part == E楽器パート.DRUMS ) ? 0.01 : 0.015;
\r
2456 fDamage = ( part == E楽器パート.DRUMS ) ? 0.006 : 0.009;
\r
2460 fDamage = ( part == E楽器パート.DRUMS ) ? 0.002 : 0.003;
\r
2464 fDamage = ( part == E楽器パート.DRUMS ) ? 0.0 : 0.0;
\r
2468 fDamage = ( part == E楽器パート.DRUMS ) ? -0.035 : -0.035;
\r
2469 switch( CDTXMania.ConfigIni.eダメージレベル )
\r
2471 case Eダメージレベル.少ない:
\r
2479 case Eダメージレベル.大きい:
\r
2490 this.actGauge.db現在のゲージ値[(int)part] += fDamage;
\r
2492 if( this.actGauge.db現在のゲージ値[ (int) part ] > 1.0 )
\r
2493 this.actGauge.db現在のゲージ値[ (int) part ] = 1.0;
\r
2495 //-----------------
\r