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 j = 0; j < 3; j++ )
\r
79 Guitar.bSudden[ j ] = CDTXMania.ConfigIni.bSudden[ j ];
\r
80 Guitar.bHidden[ j ] = CDTXMania.ConfigIni.bHidden[ j ];
\r
81 Guitar.bReverse[ j ] = CDTXMania.ConfigIni.bReverse[ j ];
\r
82 Guitar.eRandom[ j ] = CDTXMania.ConfigIni.eRandom[ j ];
\r
83 Guitar.bLight[ j ] = CDTXMania.ConfigIni.bLight[ j ];
\r
84 Guitar.bLeft[ j ] = CDTXMania.ConfigIni.bLeft[ j ];
\r
85 Guitar.f譜面スクロール速度[ j ] = ( (float) ( CDTXMania.ConfigIni.n譜面スクロール速度[ j ] + 1 ) ) * 0.5f;
\r
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 k = 0; k < 10; k++ )
\r
126 Bass.bAutoPlay[ k ] = CDTXMania.ConfigIni.bAutoPlay[ k ];
\r
128 Bass.bTight = CDTXMania.ConfigIni.bTight;
\r
129 for( int m = 0; m < 3; m++ )
\r
131 Bass.bSudden[ m ] = CDTXMania.ConfigIni.bSudden[ m ];
\r
132 Bass.bHidden[ m ] = CDTXMania.ConfigIni.bHidden[ m ];
\r
133 Bass.bReverse[ m ] = CDTXMania.ConfigIni.bReverse[ m ];
\r
134 Bass.eRandom[ m ] = CDTXMania.ConfigIni.eRandom[ m ];
\r
135 Bass.bLight[ m ] = CDTXMania.ConfigIni.bLight[ m ];
\r
136 Bass.bLeft[ m ] = CDTXMania.ConfigIni.bLeft[ m ];
\r
137 Bass.f譜面スクロール速度[ m ] = ( (float) ( CDTXMania.ConfigIni.n譜面スクロール速度[ m ] + 1 ) ) * 0.5f;
\r
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演奏にキーボードを使った.Guitar;
\r
153 Bass.b演奏にMIDI入力を使用した = this.b演奏にMIDI入力を使った.Guitar;
\r
154 Bass.b演奏にジョイパッドを使用した = this.b演奏にジョイパッドを使った.Guitar;
\r
155 Bass.b演奏にマウスを使用した = this.b演奏にマウスを使った.Guitar;
\r
156 Bass.nPerfectになる範囲ms = CDTXMania.nPerfect範囲ms;
\r
157 Bass.nGreatになる範囲ms = CDTXMania.nGreat範囲ms;
\r
158 Bass.nGoodになる範囲ms = CDTXMania.nGood範囲ms;
\r
159 Bass.nPoorになる範囲ms = CDTXMania.nPoor範囲ms;
\r
160 Bass.strDTXManiaのバージョン = CDTXMania.VERSION;
\r
161 Bass.最終更新日時 = DateTime.Now.ToString();
\r
162 Bass.Hash = CScoreIni.t演奏セクションのMD5を求めて返す( Bass );
\r
164 if ( CDTXMania.ConfigIni.bIsSwappedGuitarBass ) // #24063 2011.1.24 yyagi Gt/Bsを入れ替えていたなら、演奏結果も入れ替える
\r
176 public override void On活性化()
\r
178 this.eフェードアウト完了時の戻り値 = E演奏画面の戻り値.継続;
\r
179 this.n現在のトップChip = ( CDTXMania.DTX.listChip.Count > 0 ) ? 0 : -1;
\r
180 this.n最後に再生したHHの実WAV番号 = -1;
\r
181 this.n最後に再生したHHのチャンネル番号 = 0;
\r
182 this.n最後に再生したギターの実WAV番号 = -1;
\r
183 this.n最後に再生したベースの実WAV番号 = -1;
\r
184 for( int i = 0; i < 50; i++ )
\r
186 this.n最後に再生したBGMの実WAV番号[ i ] = -1;
\r
188 this.r次にくるギターChip = null;
\r
189 this.r次にくるベースChip = null;
\r
190 for( int j = 0; j < 10; j++ )
\r
192 this.r現在の空うちドラムChip[ j ] = null;
\r
194 this.r現在の空うちギターChip = null;
\r
195 this.r現在の空うちベースChip = null;
\r
196 for( int k = 0; k < 3; k++ )
\r
198 for( int n = 0; n < 5; n++ )
\r
200 this.nヒット数・Auto含まない[ k ] = new STHITCOUNTOFRANK();
\r
201 this.nヒット数・Auto含む[ k ] = new STHITCOUNTOFRANK();
\r
203 this.queWailing[ k ] = new Queue<CDTX.CChip>();
\r
205 for( int m = 0; m < 3; m++ )
\r
207 this.b演奏にキーボードを使った[ m ] = false;
\r
208 this.b演奏にジョイパッドを使った[ m ] = false;
\r
209 this.b演奏にMIDI入力を使った[ m ] = false;
\r
210 this.b演奏にマウスを使った[ m ] = false;
\r
212 this.bAUTOでないチップが1つでもバーを通過した = false;
\r
214 this.tステータスパネルの選択();
\r
217 this.nInputAdjustTimeMs.Drums = CDTXMania.ConfigIni.nInputAdjustTimeMs.Drums; // #23580 2011.1.3 yyagi
\r
218 this.nInputAdjustTimeMs.Guitar = CDTXMania.ConfigIni.nInputAdjustTimeMs.Guitar; // 2011.1.7 ikanick 修正
\r
219 this.nInputAdjustTimeMs.Bass = CDTXMania.ConfigIni.nInputAdjustTimeMs.Bass; //
\r
220 this.bIsAutoPlay.Drums = false;
\r
221 this.bIsAutoPlay.Guitar = CDTXMania.ConfigIni.bAutoPlay.Guitar;
\r
222 this.bIsAutoPlay.Bass = CDTXMania.ConfigIni.bAutoPlay.Bass;
\r
224 public override void OnManagedリソースの作成()
\r
226 if( !base.b活性化してない )
\r
228 this.t背景テクスチャの生成();
\r
229 this.txチップ = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlayGuitar chips.png" ) );
\r
230 this.txヒットバー = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlayGuitar hit-bar.png" ) );
\r
231 this.txWailing枠 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlay wailing cursor.png" ) );
\r
232 base.OnManagedリソースの作成();
\r
235 public override void OnManagedリソースの解放()
\r
237 if( !base.b活性化してない )
\r
239 CDTXMania.tテクスチャの解放( ref this.tx背景 );
\r
240 CDTXMania.tテクスチャの解放( ref this.txチップ );
\r
241 CDTXMania.tテクスチャの解放( ref this.txヒットバー );
\r
242 CDTXMania.tテクスチャの解放( ref this.txWailing枠 );
\r
243 base.OnManagedリソースの解放();
\r
246 public override int On進行描画()
\r
248 if( !base.b活性化してない )
\r
251 bool flag2 = false;
\r
253 if( base.b初めての進行描画 )
\r
255 CDTXMania.Timer.tリセット();
\r
256 this.ctチップ模様アニメ.Guitar = new CCounter( 0, 0x17, 20, CDTXMania.Timer );
\r
257 this.ctチップ模様アニメ.Bass = new CCounter( 0, 0x17, 20, CDTXMania.Timer );
\r
258 this.ctWailingチップ模様アニメ = new CCounter( 0, 4, 50, CDTXMania.Timer );
\r
259 base.eフェーズID = CStage.Eフェーズ.共通_フェードイン;
\r
260 this.actFI.tフェードイン開始();
\r
261 base.b初めての進行描画 = false;
\r
263 if( CDTXMania.ConfigIni.bSTAGEFAILED有効 && ( base.eフェーズID == CStage.Eフェーズ.共通_通常状態 ) )
\r
265 // bool flag3 = ( CDTXMania.ConfigIni.bAutoPlay.Guitar || !CDTXMania.DTX.bチップがある.Guitar ) || ( this.actGauge.db現在のゲージ値.Guitar <= -0.1 ); // #23630
\r
266 // bool flag4 = ( CDTXMania.ConfigIni.bAutoPlay.Bass || !CDTXMania.DTX.bチップがある.Bass ) || ( this.actGauge.db現在のゲージ値.Bass <= -0.1 ); // #23630
\r
267 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
268 bool bFailedBass = ((!CDTXMania.DTX.bチップがある.Bass) || (this.actGauge.db現在のゲージ値.Bass <= -0.1)); // #23630
\r
269 if (bFailedGuitar && bFailedBass)
\r
271 this.actStageFailed.Start();
\r
272 CDTXMania.DTX.t全チップの再生停止();
\r
273 base.eフェーズID = CStage.Eフェーズ.演奏_STAGE_FAILED;
\r
277 this.t進行描画・MIDIBGM();
\r
278 this.t進行描画・パネル文字列();
\r
282 this.t進行描画・ステータスパネル();
\r
283 this.t進行描画・レーンフラッシュGB();
\r
284 this.t進行描画・ギターベース判定ライン();
\r
286 this.t進行描画・DANGER();
\r
287 this.t進行描画・RGBボタン();
\r
288 this.t進行描画・判定文字列();
\r
290 this.t進行描画・WailingBonus();
\r
291 this.t進行描画・譜面スクロール速度();
\r
292 this.t進行描画・チップアニメ();
\r
293 flag = this.t進行描画・チップ();
\r
295 this.t進行描画・Wailing枠();
\r
296 this.t進行描画・チップファイアGB();
\r
297 this.t進行描画・STAGEFAILED();
\r
298 flag2 = this.t進行描画・フェードイン・アウト();
\r
299 if( flag && ( base.eフェーズID == CStage.Eフェーズ.共通_通常状態 ) )
\r
301 this.eフェードアウト完了時の戻り値 = E演奏画面の戻り値.ステージクリア;
\r
302 base.eフェーズID = CStage.Eフェーズ.演奏_STAGE_CLEAR_フェードアウト;
\r
303 this.actFOClear.tフェードアウト開始();
\r
307 return (int) this.eフェードアウト完了時の戻り値;
\r
312 if( CDTXMania.act現在入力を占有中のプラグイン == null )
\r
314 IInputDevice keyboard = CDTXMania.Input管理.Keyboard;
\r
315 if ( keyboard.bキーが押された( (int)SlimDX.DirectInput.Key.F1 ) && ( keyboard.bキーが押されている( (int)SlimDX.DirectInput.Key.RightShift ) || keyboard.bキーが押されている( (int)SlimDX.DirectInput.Key.LeftShift ) ) )
\r
317 this.bPAUSE = !this.bPAUSE;
\r
320 CDTXMania.Timer.t一時停止();
\r
321 CDTXMania.DTX.t全チップの再生一時停止();
\r
325 CDTXMania.Timer.t再開();
\r
326 CDTXMania.DTX.t全チップの再生再開();
\r
329 if( ( !this.bPAUSE && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED ) ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) )
\r
333 if ( keyboard.bキーが押された( (int)SlimDX.DirectInput.Key.UpArrow ) && ( keyboard.bキーが押されている( (int)SlimDX.DirectInput.Key.RightShift ) || keyboard.bキーが押されている( (int)SlimDX.DirectInput.Key.LeftShift) ) )
\r
334 { // shift (+ctrl) + Uparrow (BGMAdjust)
\r
335 CDTXMania.DTX.t各自動再生音チップの再生時刻を変更する( ( keyboard.bキーが押されている( (int)SlimDX.DirectInput.Key.LeftControl ) || keyboard.bキーが押されている( (int)SlimDX.DirectInput.Key.RightControl) ) ? 1 : 10 );
\r
336 CDTXMania.DTX.tWave再生位置自動補正();
\r
338 else if ( keyboard.bキーが押された( (int)SlimDX.DirectInput.Key.DownArrow ) && ( keyboard.bキーが押されている( (int)SlimDX.DirectInput.Key.RightShift ) || keyboard.bキーが押されている( (int)SlimDX.DirectInput.Key.LeftShift ) ) )
\r
340 CDTXMania.DTX.t各自動再生音チップの再生時刻を変更する( ( keyboard.bキーが押されている( (int)SlimDX.DirectInput.Key.LeftControl ) || keyboard.bキーが押されている( (int)SlimDX.DirectInput.Key.RightControl ) ) ? -1 : -10 );
\r
341 CDTXMania.DTX.tWave再生位置自動補正();
\r
343 else if ( keyboard.bキーが押された( (int)SlimDX.DirectInput.Key.Delete ) )
\r
345 CDTXMania.ConfigIni.b演奏情報を表示する = !CDTXMania.ConfigIni.b演奏情報を表示する;
\r
347 else if ( keyboard.bキーが押された( (int) SlimDX.DirectInput.Key.LeftArrow ) ) // #23580 2011.1.16 yyagi UI for InputAdjustTime in playing screen.
\r
349 ChangeInputAdjustTimeInPlaying( keyboard, -1 );
\r
351 else if ( keyboard.bキーが押された( (int) SlimDX.DirectInput.Key.RightArrow ) ) // #23580 2011.1.16 yyagi UI for InputAdjustTime in playing screen.
\r
353 ChangeInputAdjustTimeInPlaying( keyboard, +1 );
\r
355 else if ( ( base.eフェーズID == CStage.Eフェーズ.共通_通常状態 ) && ( keyboard.bキーが押された( (int) SlimDX.DirectInput.Key.Escape ) || CDTXMania.Pad.b押されたGB( Eパッド.FT ) ) )
\r
357 this.actFO.tフェードアウト開始();
\r
358 base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;
\r
359 this.eフェードアウト完了時の戻り値 = E演奏画面の戻り値.演奏中断;
\r
366 private void ChangeInputAdjustTimeInPlaying( IInputDevice keyboard, int plusminus ) // #23580 2011.1.16 yyagi UI for InputAdjustTime in playing screen.
\r
368 int part, offset = plusminus;
\r
369 if ( keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.LeftShift ) || keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.RightShift ) ) // Guitar InputAdjustTime
\r
371 part = (int) E楽器パート.GUITAR;
\r
373 else if ( keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.LeftAlt ) || keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.RightAlt ) ) // Bass InputAdjustTime
\r
375 part = (int) E楽器パート.BASS;
\r
377 else // Drums InputAdjustTime
\r
379 part = (int) E楽器パート.DRUMS;
\r
381 if ( !keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.LeftControl ) && !keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.RightControl ) )
\r
386 this.nInputAdjustTimeMs[ part ] += offset;
\r
387 if ( this.nInputAdjustTimeMs[ part ] > 99 )
\r
389 this.nInputAdjustTimeMs[ part ] = 99;
\r
391 else if ( this.nInputAdjustTimeMs[ part ] < -99 )
\r
393 this.nInputAdjustTimeMs[ part ] = -99;
\r
395 CDTXMania.ConfigIni.nInputAdjustTimeMs[ part ] = this.nInputAdjustTimeMs[ part ];
\r
401 #region [ private ]
\r
402 //-----------------
\r
403 private class STHITCOUNTOFRANK
\r
409 public int Perfect;
\r
413 public int this[ int index ]
\r
420 return this.Perfect;
\r
434 throw new IndexOutOfRangeException();
\r
441 this.Perfect = value;
\r
445 this.Great = value;
\r
460 throw new IndexOutOfRangeException();
\r
465 [StructLayout( LayoutKind.Sequential )]
\r
466 private struct STKARAUCHI
\r
468 public CDTX.CChip HH;
\r
469 public CDTX.CChip SD;
\r
470 public CDTX.CChip BD;
\r
471 public CDTX.CChip HT;
\r
472 public CDTX.CChip LT;
\r
473 public CDTX.CChip FT;
\r
474 public CDTX.CChip CY;
\r
475 public CDTX.CChip HHO;
\r
476 public CDTX.CChip RD;
\r
477 public CDTX.CChip LC;
\r
478 public CDTX.CChip this[ int index ]
\r
514 throw new IndexOutOfRangeException();
\r
560 throw new IndexOutOfRangeException();
\r
565 private CAct演奏AVI actAVI;
\r
566 private CAct演奏BGA actBGA;
\r
567 private CAct演奏Guitarチップファイア actChipFire;
\r
568 private CAct演奏Guitarコンボ actCombo;
\r
569 private CActFIFOBlack actFI;
\r
570 private CActFIFOBlack actFO;
\r
571 private CActFIFOWhite actFOClear;
\r
572 private CAct演奏Guitarゲージ actGauge;
\r
573 private CAct演奏Guitar判定文字列 actJudgeString;
\r
574 private CAct演奏GuitarレーンフラッシュGB actLaneFlushGB;
\r
575 private CAct演奏パネル文字列 actPanel;
\r
576 private CAct演奏演奏情報 actPlayInfo;
\r
577 private CAct演奏GuitarRGB actRGB;
\r
578 private CAct演奏Guitarスコア actScore;
\r
579 private CAct演奏ステージ失敗 actStageFailed;
\r
580 private CAct演奏Guitarステータスパネル actStatusPanels;
\r
581 private CAct演奏GuitarWailingBonus actWailingBonus;
\r
582 private CAct演奏スクロール速度 act譜面スクロール速度;
\r
583 private bool bPAUSE;
\r
584 private STDGBVALUE<bool> b演奏にMIDI入力を使った;
\r
585 private STDGBVALUE<bool> b演奏にキーボードを使った;
\r
586 private STDGBVALUE<bool> b演奏にジョイパッドを使った;
\r
587 private STDGBVALUE<bool> b演奏にマウスを使った;
\r
588 private CCounter ctWailingチップ模様アニメ;
\r
589 private STDGBVALUE<CCounter> ctチップ模様アニメ;
\r
590 private E演奏画面の戻り値 eフェードアウト完了時の戻り値;
\r
591 private readonly int[,] nBGAスコープチャンネルマップ = new int[ , ] { { 0xc4, 0xc7, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xe0 }, { 4, 7, 0x55, 0x56, 0x57, 0x58, 0x59, 0x60 } };
\r
592 private readonly int[] nチャンネル0Atoパッド08 = new int[] { 1, 2, 3, 4, 5, 7, 6, 1, 8, 0 };
\r
593 private readonly int[] nチャンネル0Atoレーン07 = new int[] { 1, 2, 3, 4, 5, 7, 6, 1, 7, 0 };
\r
594 private readonly int[] nパッド0Atoチャンネル0A = new int[] { 0x11, 0x12, 0x13, 20, 0x15, 0x17, 0x16, 0x18, 0x19, 0x1a };
\r
595 private readonly int[] nパッド0Atoパッド08 = new int[] { 1, 2, 3, 4, 5, 6, 7, 1, 8, 0 };
\r
596 private readonly int[] nパッド0Atoレーン07 = new int[] { 1, 2, 3, 4, 5, 6, 7, 1, 7, 0 };
\r
597 private STDGBVALUE<STHITCOUNTOFRANK> nヒット数・Auto含まない;
\r
598 private STDGBVALUE<STHITCOUNTOFRANK> nヒット数・Auto含む;
\r
599 private int n現在のトップChip = -1;
\r
600 private int[] n最後に再生したBGMの実WAV番号 = new int[ 50 ];
\r
601 private int n最後に再生したHHのチャンネル番号;
\r
602 private int n最後に再生したHHの実WAV番号;
\r
603 private int n最後に再生したギターの実WAV番号;
\r
604 private int n最後に再生したベースの実WAV番号;
\r
605 private STDGBVALUE<Queue<CDTX.CChip>> queWailing;
\r
606 private STDGBVALUE<CDTX.CChip> r現在の歓声Chip;
\r
607 private CDTX.CChip r現在の空うちギターChip;
\r
608 private STKARAUCHI r現在の空うちドラムChip;
\r
609 private CDTX.CChip r現在の空うちベースChip;
\r
610 private CDTX.CChip r次にくるギターChip;
\r
611 private CDTX.CChip r次にくるベースChip;
\r
612 private CTexture txWailing枠;
\r
613 private CTexture txチップ;
\r
614 private CTexture txヒットバー;
\r
615 private CTexture tx背景;
\r
616 private STDGBVALUE<int> nInputAdjustTimeMs; // #23580 2011.1.3 yyagi
\r
617 private STDGBVALUE<bool> bIsAutoPlay; // #24239 2011.1.23 yyagi
\r
619 private E判定 e指定時刻からChipのJUDGEを返す( long nTime, CDTX.CChip pChip, int nInputAdjustTime )
\r
621 if( pChip != null )
\r
623 int nDeltaTime = Math.Abs( (int) ( nTime + nInputAdjustTime - pChip.n発声時刻ms ) ); // #23580 2011.1.3 yyagi: add "nInputAdjustTime" to add input timing adjust feature
\r
624 //Debug.WriteLine("nAbsTime=" + (nTime - pChip.n発声時刻ms) + ", nDeltaTime=" + (nTime + nInputAdjustTime - pChip.n発声時刻ms));
\r
625 if( nDeltaTime <= CDTXMania.nPerfect範囲ms )
\r
627 return E判定.Perfect;
\r
629 if( nDeltaTime <= CDTXMania.nGreat範囲ms )
\r
633 if( nDeltaTime <= CDTXMania.nGood範囲ms )
\r
637 if( nDeltaTime <= CDTXMania.nPoor範囲ms )
\r
644 private CDTX.CChip r空うちChip( E楽器パート part, Eパッド pad )
\r
648 case E楽器パート.GUITAR:
\r
649 return this.r現在の空うちギターChip;
\r
652 return this.r現在の空うちベースChip;
\r
656 private CDTX.CChip r指定時刻に一番近いChip・ヒット未済問わず不可視考慮( long nTime, int nChannelFlag, int nInputAdjustTime )
\r
658 nTime += nInputAdjustTime;
\r
661 if( this.n現在のトップChip == -1 )
\r
665 int count = CDTXMania.DTX.listChip.Count;
\r
666 int num4 = num5 = this.n現在のトップChip;
\r
667 if( this.n現在のトップChip >= count )
\r
669 num4 = num5 = count - 1;
\r
672 while( num2 < count )
\r
674 CDTX.CChip chip = CDTXMania.DTX.listChip[ num2 ];
\r
675 if( ( ( nChannelFlag >= 0x11 ) && ( nChannelFlag <= 0x1a ) ) && ( ( chip.nチャンネル番号 == nChannelFlag ) || ( chip.nチャンネル番号 == ( nChannelFlag + 0x20 ) ) ) )
\r
677 if( chip.n発声時刻ms > nTime )
\r
683 else if( ( ( nChannelFlag == 0x2f ) && ( chip.e楽器パート == E楽器パート.GUITAR ) ) || ( ( ( nChannelFlag >= 0x20 ) && ( nChannelFlag <= 40 ) ) && ( chip.nチャンネル番号 == nChannelFlag ) ) )
\r
685 if( chip.n発声時刻ms > nTime )
\r
691 else if( ( ( nChannelFlag == 0xaf ) && ( chip.e楽器パート == E楽器パート.BASS ) ) || ( ( ( nChannelFlag >= 160 ) && ( nChannelFlag <= 0xa8 ) ) && ( chip.nチャンネル番号 == nChannelFlag ) ) )
\r
693 if( chip.n発声時刻ms > nTime )
\r
704 CDTX.CChip chip2 = CDTXMania.DTX.listChip[ num3 ];
\r
705 if( ( nChannelFlag >= 0x11 ) && ( nChannelFlag <= 0x1a ) )
\r
707 if( ( chip2.nチャンネル番号 == nChannelFlag ) || ( chip2.nチャンネル番号 == ( nChannelFlag + 0x20 ) ) )
\r
712 else if( ( ( nChannelFlag == 0x2f ) && ( chip2.e楽器パート == E楽器パート.GUITAR ) ) || ( ( ( nChannelFlag >= 0x20 ) && ( nChannelFlag <= 40 ) ) && ( chip2.nチャンネル番号 == nChannelFlag ) ) )
\r
714 if( ( chip2.nチャンネル番号 >= 0x20 ) && ( chip2.nチャンネル番号 <= 40 ) )
\r
719 else if( ( ( ( nChannelFlag == 0xaf ) && ( chip2.e楽器パート == E楽器パート.BASS ) ) || ( ( ( nChannelFlag >= 160 ) && ( nChannelFlag <= 0xa8 ) ) && ( chip2.nチャンネル番号 == nChannelFlag ) ) ) && ( ( chip2.nチャンネル番号 >= 160 ) && ( chip2.nチャンネル番号 <= 0xa8 ) ) )
\r
725 if( ( num2 == count ) && ( num3 < 0 ) )
\r
729 if( num2 == count )
\r
731 return CDTXMania.DTX.listChip[ num3 ];
\r
735 return CDTXMania.DTX.listChip[ num2 ];
\r
737 CDTX.CChip chip3 = CDTXMania.DTX.listChip[ num2 ];
\r
738 CDTX.CChip chip4 = CDTXMania.DTX.listChip[ num3 ];
\r
739 int num6 = Math.Abs( (int) ( nTime - chip3.n発声時刻ms ) );
\r
740 int num7 = Math.Abs( (int) ( nTime - chip4.n発声時刻ms ) );
\r
747 // private CDTX.CChip r指定時刻に一番近い未ヒットChip( long nTime, int nChannelFlag )
\r
749 // return this.r指定時刻に一番近い未ヒットChip( nTime, nChannelFlag, 0, 0 );
\r
751 // private CDTX.CChip r指定時刻に一番近い未ヒットChip( long nTime, int nChannelFlag, int nInputAdjustTime )
\r
753 // return this.r指定時刻に一番近い未ヒットChip( nTime, nChannelFlag, 0, nInputAdjustTime );
\r
755 private CDTX.CChip r指定時刻に一番近い未ヒットChip( long nTime, int nChannelFlag, int nInputAdjustTime, int n検索範囲時間ms )
\r
757 nTime += nInputAdjustTime;
\r
761 if( this.n現在のトップChip == -1 )
\r
765 int count = CDTXMania.DTX.listChip.Count;
\r
766 int num4 = num5 = this.n現在のトップChip;
\r
767 if( this.n現在のトップChip >= count )
\r
769 num4 = num5 = count - 1;
\r
772 while( num2 < count )
\r
774 CDTX.CChip chip = CDTXMania.DTX.listChip[ num2 ];
\r
775 if( ( !chip.bHit && ( nChannelFlag >= 0x11 ) ) && ( nChannelFlag <= 0x1a ) )
\r
777 if( ( chip.nチャンネル番号 == nChannelFlag ) || ( chip.nチャンネル番号 == ( nChannelFlag + 0x20 ) ) )
\r
779 if( chip.n発声時刻ms > nTime )
\r
786 else if( !chip.bHit && ( ( ( nChannelFlag == 0x2f ) && ( chip.e楽器パート == E楽器パート.GUITAR ) ) || ( ( ( nChannelFlag >= 0x20 ) && ( nChannelFlag <= 40 ) ) && ( chip.nチャンネル番号 == nChannelFlag ) ) ) )
\r
788 if( chip.n発声時刻ms > nTime )
\r
794 else if( !chip.bHit && ( ( ( nChannelFlag == 0xaf ) && ( chip.e楽器パート == E楽器パート.BASS ) ) || ( ( ( nChannelFlag >= 160 ) && ( nChannelFlag <= 0xa8 ) ) && ( chip.nチャンネル番号 == nChannelFlag ) ) ) )
\r
796 if( chip.n発声時刻ms > nTime )
\r
807 CDTX.CChip chip2 = CDTXMania.DTX.listChip[ num3 ];
\r
808 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
814 if( ( num2 == count ) && ( num3 < 0 ) )
\r
818 CDTX.CChip chip3 = null;
\r
819 if( num2 == count )
\r
821 chip3 = CDTXMania.DTX.listChip[ num3 ];
\r
822 num6 = Math.Abs( (int) ( nTime - chip3.n発声時刻ms ) );
\r
824 else if( num3 < 0 )
\r
826 chip3 = CDTXMania.DTX.listChip[ num2 ];
\r
827 num6 = Math.Abs( (int) ( nTime - chip3.n発声時刻ms ) );
\r
831 int num7 = Math.Abs( (int) ( nTime - CDTXMania.DTX.listChip[ num2 ].n発声時刻ms ) );
\r
832 int num8 = Math.Abs( (int) ( nTime - CDTXMania.DTX.listChip[ num3 ].n発声時刻ms ) );
\r
835 chip3 = CDTXMania.DTX.listChip[ num2 ];
\r
836 num6 = Math.Abs( (int) ( nTime - chip3.n発声時刻ms ) );
\r
840 chip3 = CDTXMania.DTX.listChip[ num3 ];
\r
841 num6 = Math.Abs( (int) ( nTime - chip3.n発声時刻ms ) );
\r
844 if( ( n検索範囲時間ms > 0 ) && ( num6 > n検索範囲時間ms ) )
\r
850 private CDTX.CChip r次にくるギターChipを更新して返す()
\r
852 int nInputAdjustTime = this.bIsAutoPlay.Guitar ? 0 : this.nInputAdjustTimeMs.Guitar;
\r
853 this.r次にくるギターChip = this.r指定時刻に一番近い未ヒットChip( CDTXMania.Timer.n現在時刻, 0x2f, nInputAdjustTime, 500 );
\r
854 return this.r次にくるギターChip;
\r
856 private CDTX.CChip r次にくるベースChipを更新して返す()
\r
858 int nInputAdjustTime = this.bIsAutoPlay.Bass ? 0 : this.nInputAdjustTimeMs.Bass;
\r
859 this.r次にくるベースChip = this.r指定時刻に一番近い未ヒットChip( CDTXMania.Timer.n現在時刻, 0xaf, nInputAdjustTime, 500 );
\r
860 return this.r次にくるベースChip;
\r
862 private void tサウンド再生( CDTX.CChip rChip, long n再生開始システム時刻ms, E楽器パート part )
\r
864 this.tサウンド再生( rChip, n再生開始システム時刻ms, part, CDTXMania.ConfigIni.n手動再生音量, false, false );
\r
866 private void tサウンド再生( CDTX.CChip rChip, long n再生開始システム時刻ms, E楽器パート part, int n音量 )
\r
868 this.tサウンド再生( rChip, n再生開始システム時刻ms, part, n音量, false, false );
\r
870 private void tサウンド再生( CDTX.CChip rChip, long n再生開始システム時刻ms, E楽器パート part, int n音量, bool bモニタ )
\r
872 this.tサウンド再生( rChip, n再生開始システム時刻ms, part, n音量, bモニタ, false );
\r
874 private void tサウンド再生( CDTX.CChip pChip, long n再生開始システム時刻ms, E楽器パート part, int n音量, bool bモニタ, bool b音程をずらして再生 )
\r
876 if( pChip != null )
\r
881 if( CDTXMania.ConfigIni.bドラム打音を発声する )
\r
883 int index = pChip.nチャンネル番号;
\r
884 if( ( index >= 0x11 ) && ( index <= 0x1a ) )
\r
890 if( ( index < 0x31 ) || ( index > 0x3a ) )
\r
896 int nLane = this.nチャンネル0Atoレーン07[ index ];
\r
897 if( ( nLane == 1 ) && ( ( index == 0 ) || ( ( ( index == 7 ) && ( this.n最後に再生したHHのチャンネル番号 != 0x18 ) ) && ( this.n最後に再生したHHのチャンネル番号 != 0x38 ) ) ) )
\r
899 #if TEST_NOTEOFFMODE // 2011.1.1 yyagi TEST
\r
900 if (CDTXMania.DTX.bHH演奏で直前のHHを消音する) {
\r
902 CDTXMania.DTX.tWavの再生停止(this.n最後に再生したHHの実WAV番号);
\r
903 #if TEST_NOTEOFFMODE // 2011.1.1 yyagi TEST
\r
906 this.n最後に再生したHHの実WAV番号 = pChip.n整数値・内部番号;
\r
907 this.n最後に再生したHHのチャンネル番号 = pChip.nチャンネル番号;
\r
909 CDTXMania.DTX.tチップの再生( pChip, n再生開始システム時刻ms, nLane, n音量, bモニタ );
\r
914 case E楽器パート.GUITAR:
\r
915 #if TEST_NOTEOFFMODE // 2011.1.1 yyagi TEST
\r
916 if (CDTXMania.DTX.bGUITAR演奏で直前のGUITARを消音する) {
\r
918 CDTXMania.DTX.tWavの再生停止(this.n最後に再生したギターの実WAV番号);
\r
919 #if TEST_NOTEOFFMODE // 2011.1.1 yyagi TEST
\r
922 CDTXMania.DTX.tチップの再生( pChip, n再生開始システム時刻ms, 8, n音量, bモニタ, b音程をずらして再生 );
\r
923 this.n最後に再生したギターの実WAV番号 = pChip.n整数値・内部番号;
\r
927 #if TEST_NOTEOFFMODE // 2011.1.1 yyagi TEST
\r
928 if (CDTXMania.DTX.bBASS演奏で直前のBASSを消音する) {
\r
930 CDTXMania.DTX.tWavの再生停止(this.n最後に再生したベースの実WAV番号);
\r
931 #if TEST_NOTEOFFMODE // 2011.1.1 yyagi TEST
\r
934 CDTXMania.DTX.tチップの再生(pChip, n再生開始システム時刻ms, 9, n音量, bモニタ, b音程をずらして再生);
\r
935 this.n最後に再生したベースの実WAV番号 = pChip.n整数値・内部番号;
\r
940 private void tステータスパネルの選択()
\r
942 if( CDTXMania.bコンパクトモード )
\r
944 this.actStatusPanels.tラベル名からステータスパネルを決定する( null );
\r
946 else if( CDTXMania.stage選曲.r確定された曲 != null )
\r
948 this.actStatusPanels.tラベル名からステータスパネルを決定する( CDTXMania.stage選曲.r確定された曲.ar難易度ラベル[ CDTXMania.stage選曲.n確定された曲の難易度 ] );
\r
951 private E判定 tチップのヒット処理( long nHitTime, CDTX.CChip pChip )
\r
954 bool bIsAutoPlay = false;
\r
955 if( ( ( pChip.e楽器パート == E楽器パート.GUITAR ) && CDTXMania.ConfigIni.bAutoPlay.Guitar ) ||
\r
956 ( ( pChip.e楽器パート == E楽器パート.BASS ) && CDTXMania.ConfigIni.bAutoPlay.Bass ) )
\r
958 bIsAutoPlay = true;
\r
962 this.bAUTOでないチップが1つでもバーを通過した = true;
\r
964 E判定 eJudgeResult = E判定.Auto;
\r
965 switch (pChip.e楽器パート)
\r
967 case E楽器パート.GUITAR:
\r
968 eJudgeResult = this.e指定時刻からChipのJUDGEを返す(nHitTime, pChip, bIsAutoPlay ? 0 : this.nInputAdjustTimeMs.Guitar);
\r
969 this.actJudgeString.Start(10, bIsAutoPlay ? E判定.Auto : eJudgeResult);
\r
973 eJudgeResult = this.e指定時刻からChipのJUDGEを返す(nHitTime, pChip, bIsAutoPlay ? 0 : this.nInputAdjustTimeMs.Bass);
\r
974 this.actJudgeString.Start(11, bIsAutoPlay ? E判定.Auto : eJudgeResult);
\r
979 this.t判定にあわせてゲージを増減する( pChip.e楽器パート, eJudgeResult );
\r
982 switch( pChip.e楽器パート )
\r
985 switch (eJudgeResult)
\r
989 this.nヒット数・Auto含む.Drums.Miss++;
\r
992 this.nヒット数・Auto含む.Drums[(int)eJudgeResult]++;
\r
997 case E楽器パート.GUITAR:
\r
998 switch (eJudgeResult)
\r
1002 this.nヒット数・Auto含む.Guitar.Miss++;
\r
1003 if ( !bIsAutoPlay )
\r
1005 this.nヒット数・Auto含まない.Guitar.Miss++;
\r
1008 default: // #24068 2011.1.10 ikanick changed
\r
1009 // #24167 2011.1.16 yyagi changed
\r
1010 this.nヒット数・Auto含む.Guitar[ (int) eJudgeResult ]++;
\r
1011 if ( !bIsAutoPlay )
\r
1013 this.nヒット数・Auto含まない.Guitar[ (int) eJudgeResult ]++;
\r
1017 switch (eJudgeResult)
\r
1022 this.actCombo.n現在のコンボ数.Guitar++;
\r
1026 this.actCombo.n現在のコンボ数.Guitar = 0;
\r
1032 switch( eJudgeResult )
\r
1036 this.nヒット数・Auto含む.Bass.Miss++;
\r
1037 if( !bIsAutoPlay )
\r
1039 this.nヒット数・Auto含まない.Bass.Miss++;
\r
1042 default: // #24068 2011.1.10 ikanick changed
\r
1043 this.nヒット数・Auto含む.Bass[(int)eJudgeResult]++;
\r
1044 if ( !bIsAutoPlay )
\r
1046 this.nヒット数・Auto含まない.Bass[ (int) eJudgeResult ]++;
\r
1050 switch (eJudgeResult)
\r
1055 this.actCombo.n現在のコンボ数.Bass++;
\r
1059 this.actCombo.n現在のコンボ数.Bass = 0;
\r
1067 if( ( !bIsAutoPlay && ( eJudgeResult != E判定.Miss ) ) && ( eJudgeResult != E判定.Bad ) )
\r
1070 switch ( pChip.e楽器パート )
\r
1072 case E楽器パート.GUITAR:
\r
1073 nCombos = this.actCombo.n現在のコンボ数.Guitar;
\r
1076 nCombos = this.actCombo.n現在のコンボ数.Bass;
\r
1079 long nScore = this.actScore.Get( pChip.e楽器パート );
\r
1080 long[] numArray = new long[] { 350L, 200L, 50L, 0L };
\r
1081 if( ( nCombos <= 500 ) || ( eJudgeResult == E判定.Good ) )
\r
1083 nScore += numArray[ (int) eJudgeResult ] * nCombos;
\r
1085 else if( ( eJudgeResult == E判定.Perfect ) || ( eJudgeResult == E判定.Great ) )
\r
1087 nScore += numArray[ (int) eJudgeResult ] * 500L;
\r
1089 this.actScore.Set( pChip.e楽器パート, nScore );
\r
1091 return eJudgeResult;
\r
1093 private void tチップのヒット処理・BadならびにTight時のMiss( E楽器パート part )
\r
1095 this.tチップのヒット処理・BadならびにTight時のMiss( part, 0 );
\r
1097 private void tチップのヒット処理・BadならびにTight時のMiss( E楽器パート part, int nLane )
\r
1099 this.t判定にあわせてゲージを増減する( part, E判定.Miss );
\r
1102 case E楽器パート.DRUMS:
\r
1105 case E楽器パート.GUITAR:
\r
1106 this.actJudgeString.Start( 10, E判定.Bad );
\r
1107 this.actCombo.n現在のコンボ数.Guitar = 0;
\r
1111 this.actJudgeString.Start( 11, E判定.Bad );
\r
1112 this.actCombo.n現在のコンボ数.Bass = 0;
\r
1119 private void tパネル文字列の設定()
\r
1121 this.actPanel.SetPanelString( string.IsNullOrEmpty( CDTXMania.DTX.PANEL ) ? CDTXMania.DTX.TITLE : CDTXMania.DTX.PANEL );
\r
1123 private void t進行描画・AVI()
\r
1125 if( ( ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) ) && ( !CDTXMania.ConfigIni.bストイックモード && CDTXMania.ConfigIni.bAVI有効 ) )
\r
1127 this.actAVI.t進行描画( 0xb5, 50 );
\r
1130 private void t進行描画・BGA()
\r
1132 if( ( ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) ) && ( !CDTXMania.ConfigIni.bストイックモード && CDTXMania.ConfigIni.bBGA有効 ) )
\r
1134 this.actBGA.t進行描画( 0xb5, 50 );
\r
1137 private void t進行描画・DANGER()
\r
1140 private void t進行描画・MIDIBGM()
\r
1142 if( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED )
\r
1144 CStage.Eフェーズ eフェーズid1 = base.eフェーズID;
\r
1147 private void t進行描画・RGBボタン()
\r
1149 if( CDTXMania.ConfigIni.eDark != Eダークモード.FULL )
\r
1151 this.actRGB.On進行描画();
\r
1154 private void t進行描画・STAGEFAILED()
\r
1156 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
1158 this.eフェードアウト完了時の戻り値 = E演奏画面の戻り値.ステージ失敗;
\r
1159 base.eフェーズID = CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト;
\r
1160 this.actFO.tフェードアウト開始();
\r
1163 private void t進行描画・WailingBonus()
\r
1165 if( ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) )
\r
1167 this.actWailingBonus.On進行描画();
\r
1170 private void t進行描画・Wailing枠()
\r
1172 if( ( CDTXMania.ConfigIni.eDark != Eダークモード.FULL ) && CDTXMania.ConfigIni.bGuitar有効 )
\r
1174 if( CDTXMania.DTX.bチップがある.Guitar && ( this.txWailing枠 != null ) )
\r
1176 this.txWailing枠.t2D描画( CDTXMania.app.Device, 0x8b, CDTXMania.ConfigIni.bReverse.Guitar ? 340 : 11 );
\r
1178 if( CDTXMania.DTX.bチップがある.Bass && ( this.txWailing枠 != null ) )
\r
1180 this.txWailing枠.t2D描画( CDTXMania.app.Device, 0x251, CDTXMania.ConfigIni.bReverse.Bass ? 340 : 11 );
\r
1184 private void t進行描画・ギターベース判定ライン()
\r
1186 if( ( CDTXMania.ConfigIni.eDark != Eダークモード.FULL ) && CDTXMania.ConfigIni.bGuitar有効 )
\r
1188 if( CDTXMania.DTX.bチップがある.Guitar )
\r
1190 int y = ( CDTXMania.ConfigIni.bReverse.Guitar ? 0x171 : 40 ) - 3;
\r
1191 for( int i = 0; i < 4; i++ )
\r
1193 if( this.txヒットバー != null )
\r
1195 this.txヒットバー.t2D描画( CDTXMania.app.Device, 0x17 + ( 0x1c * i ), y, new Rectangle( 0, i * 8, 0x1c, 8 ) );
\r
1199 if( CDTXMania.DTX.bチップがある.Bass )
\r
1201 int num3 = ( CDTXMania.ConfigIni.bReverse.Bass ? 0x171 : 40 ) - 3;
\r
1202 for( int j = 0; j < 4; j++ )
\r
1204 if( this.txヒットバー != null )
\r
1206 this.txヒットバー.t2D描画( CDTXMania.app.Device, 0x1dd + ( 0x1c * j ), num3, new Rectangle( 0, j * 8, 0x1c, 8 ) );
\r
1212 private void t進行描画・ゲージ()
\r
1214 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
1216 this.actGauge.On進行描画();
\r
1219 private void t進行描画・コンボ()
\r
1221 this.actCombo.On進行描画();
\r
1223 private void t進行描画・スコア()
\r
1225 this.actScore.On進行描画();
\r
1227 private void t進行描画・ステータスパネル()
\r
1229 this.actStatusPanels.On進行描画();
\r
1231 private bool t進行描画・チップ()
\r
1233 if( ( base.eフェーズID == CStage.Eフェーズ.演奏_STAGE_FAILED ) || ( base.eフェーズID == CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) )
\r
1237 if( ( this.n現在のトップChip == -1 ) || ( this.n現在のトップChip >= CDTXMania.DTX.listChip.Count ) )
\r
1241 int num = this.n現在のトップChip;
\r
1247 //double speed = 264.0; // BPM150の時の1小節の長さ[dot]
\r
1248 double speed = 234.0; // BPM150の時の1小節の長さ[dot]
\r
1250 double num2 = ( ( ( ( this.act譜面スクロール速度.db現在の譜面スクロール速度.Drums + 1.0 ) * 0.5 ) * 37.5 ) * speed ) / 60000.0;
\r
1251 double num3 = ( ( ( ( ( this.act譜面スクロール速度.db現在の譜面スクロール速度.Guitar + 1.0 ) * 0.5 ) * 0.5 ) * 37.5 ) * speed ) / 60000.0;
\r
1252 double num4 = ( ( ( ( ( this.act譜面スクロール速度.db現在の譜面スクロール速度.Bass + 1.0 ) * 0.5 ) * 0.5 ) * 37.5 ) * speed ) / 60000.0;
\r
1254 CDTX dTX = CDTXMania.DTX;
\r
1255 CConfigIni configIni = CDTXMania.ConfigIni;
\r
1256 while( num < dTX.listChip.Count )
\r
1258 CDTX.CChip pChip = dTX.listChip[ num ];
\r
1259 pChip.nバーからの距離dot.Drums = (int) ( ( pChip.n発声時刻ms - CDTXMania.Timer.n現在時刻 ) * num2 );
\r
1260 pChip.nバーからの距離dot.Guitar = (int) ( ( pChip.n発声時刻ms - CDTXMania.Timer.n現在時刻 ) * num3 );
\r
1261 pChip.nバーからの距離dot.Bass = (int) ( ( pChip.n発声時刻ms - CDTXMania.Timer.n現在時刻 ) * num4 );
\r
1262 if( Math.Min( Math.Min( pChip.nバーからの距離dot.Drums, pChip.nバーからの距離dot.Guitar ), pChip.nバーからの距離dot.Bass ) > 450 )
\r
1266 if( ( ( num == this.n現在のトップChip ) && ( pChip.nバーからの距離dot.Drums < -65 ) ) && pChip.bHit )
\r
1268 this.n現在のトップChip++;
\r
1269 num = this.n現在のトップChip;
\r
1273 bool bIsAutoPlay = false;
\r
1275 ((pChip.e楽器パート == E楽器パート.DRUMS) && CDTXMania.ConfigIni.bAutoPlay[this.nチャンネル0Atoレーン07[pChip.nチャンネル番号 - 0x11]]) ||
\r
1276 ((pChip.e楽器パート == E楽器パート.GUITAR) && CDTXMania.ConfigIni.bAutoPlay.Guitar)
\r
1278 ((pChip.e楽器パート == E楽器パート.BASS) && CDTXMania.ConfigIni.bAutoPlay.Bass)
\r
1280 // if ((pChip.e楽器パート == E楽器パート.DRUMS) && CDTXMania.ConfigIni.bAutoPlay[this.nチャンネル0Atoレーン07[pChip.nチャンネル番号 - 0x11]])
\r
1282 bIsAutoPlay = true;
\r
1285 int nInputAdjustTime = 0;
\r
1288 //nInputAdjustTime = 0;
\r
1290 else if (pChip.e楽器パート == E楽器パート.UNKNOWN)
\r
1292 //nInputAdjustTime = 0;
\r
1296 //int[] nInputAdjustTimes = new int[] { this.nInputAdjustTimeMs.Drums, this.nInputAdjustTimeMs.Guitar, this.nInputAdjustTimeMs.Bass };
\r
1297 //nInputAdjustTime = nInputAdjustTimes[(int)pChip.e楽器パート];
\r
1298 nInputAdjustTime = this.nInputAdjustTimeMs[(int)pChip.e楽器パート];
\r
1301 if( ( ( pChip.e楽器パート != E楽器パート.UNKNOWN ) && !pChip.bHit ) &&
\r
1302 ((pChip.nバーからの距離dot.Drums < 0) && (this.e指定時刻からChipのJUDGEを返す(CDTXMania.Timer.n現在時刻, pChip, nInputAdjustTime) == E判定.Miss)))
\r
1304 this.tチップのヒット処理( CDTXMania.Timer.n現在時刻, pChip );
\r
1306 switch( pChip.nチャンネル番号 )
\r
1309 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1311 pChip.bHit = true;
\r
1312 if( configIni.bBGM音を発声する )
\r
1314 dTX.tチップの再生( pChip, CDTXMania.Timer.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, 10, dTX.nモニタを考慮した音量( E楽器パート.UNKNOWN ) );
\r
1320 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1322 pChip.bHit = true;
\r
1323 this.actPlayInfo.dbBPM = ( pChip.n整数値 * ( ( (double) configIni.n演奏速度 ) / 20.0 ) ) + dTX.BASEBPM;
\r
1335 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1337 pChip.bHit = true;
\r
1338 if( configIni.bBGA有効 )
\r
1340 switch( pChip.eBGA種別 )
\r
1342 case EBGA種別.BMPTEX:
\r
1343 if( pChip.rBMPTEX != null )
\r
1345 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
1350 if( ( pChip.rBGA != null ) && ( ( pChip.rBMP != null ) || ( pChip.rBMPTEX != null ) ) )
\r
1352 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
1356 case EBGA種別.BGAPAN:
\r
1357 if( ( pChip.rBGAPan != null ) && ( ( pChip.rBMP != null ) || ( pChip.rBMPTEX != null ) ) )
\r
1359 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
1364 if( pChip.rBMP != null )
\r
1366 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
1375 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1377 pChip.bHit = true;
\r
1378 if( dTX.listBPM.ContainsKey( pChip.n整数値・内部番号 ) )
\r
1380 this.actPlayInfo.dbBPM = ( dTX.listBPM[ pChip.n整数値・内部番号 ].dbBPM値 * ( ( (double) configIni.n演奏速度 ) / 20.0 ) ) + dTX.BASEBPM;
\r
1396 int num1 = this.nチャンネル0Atoレーン07[ pChip.nチャンネル番号 - 0x11 ];
\r
1397 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1399 pChip.bHit = true;
\r
1400 this.tサウンド再生( pChip, CDTXMania.Timer.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, E楽器パート.DRUMS, dTX.nモニタを考慮した音量( E楽器パート.DRUMS ) );
\r
1405 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1407 pChip.bHit = true;
\r
1408 this.r現在の歓声Chip.Drums = pChip;
\r
1420 if( configIni.bGuitar有効 )
\r
1422 if( configIni.bSudden.Guitar )
\r
1424 pChip.b可視 = pChip.nバーからの距離dot.Guitar < 200;
\r
1426 if( configIni.bHidden.Guitar && ( pChip.nバーからの距離dot.Guitar < 100 ) )
\r
1428 pChip.b可視 = false;
\r
1430 if( !pChip.bHit && pChip.b可視 )
\r
1432 int num6 = configIni.bReverse.Guitar ? ( 0x171 - pChip.nバーからの距離dot.Guitar ) : ( 40 + pChip.nバーからの距離dot.Guitar );
\r
1433 if( ( num6 > 0 ) && ( num6 < 0x199 ) )
\r
1435 int num7 = this.ctチップ模様アニメ.Guitar.n現在の値;
\r
1436 if( pChip.nチャンネル番号 == 0x20 )
\r
1438 if( this.txチップ != null )
\r
1440 this.txチップ.t2D描画( CDTXMania.app.Device, 0x1a, num6 - 4, new Rectangle( 0, 0xc0 + ( ( num7 % 5 ) * 8 ), 0x67, 8 ) );
\r
1443 else if( !configIni.bLeft.Guitar )
\r
1445 Rectangle rectangle = new Rectangle( 0, num7 * 8, 0x20, 8 );
\r
1446 if( ( ( pChip.nチャンネル番号 & 4 ) != 0 ) && ( this.txチップ != null ) )
\r
1448 this.txチップ.t2D描画( CDTXMania.app.Device, 0x1a, num6 - 4, rectangle );
\r
1450 rectangle.X += 0x20;
\r
1451 if( ( ( pChip.nチャンネル番号 & 2 ) != 0 ) && ( this.txチップ != null ) )
\r
1453 this.txチップ.t2D描画( CDTXMania.app.Device, 0x3e, num6 - 4, rectangle );
\r
1455 rectangle.X += 0x20;
\r
1456 if( ( ( pChip.nチャンネル番号 & 1 ) != 0 ) && ( this.txチップ != null ) )
\r
1458 this.txチップ.t2D描画( CDTXMania.app.Device, 0x62, num6 - 4, rectangle );
\r
1463 Rectangle rectangle2 = new Rectangle( 0, num7 * 8, 0x20, 8 );
\r
1464 if( ( ( pChip.nチャンネル番号 & 4 ) != 0 ) && ( this.txチップ != null ) )
\r
1466 this.txチップ.t2D描画( CDTXMania.app.Device, 0x62, num6 - 4, rectangle2 );
\r
1468 rectangle2.X += 0x20;
\r
1469 if( ( ( pChip.nチャンネル番号 & 2 ) != 0 ) && ( this.txチップ != null ) )
\r
1471 this.txチップ.t2D描画( CDTXMania.app.Device, 0x3e, num6 - 4, rectangle2 );
\r
1473 rectangle2.X += 0x20;
\r
1474 if( ( ( pChip.nチャンネル番号 & 1 ) != 0 ) && ( this.txチップ != null ) )
\r
1476 this.txチップ.t2D描画( CDTXMania.app.Device, 0x1a, num6 - 4, rectangle2 );
\r
1481 if( ( configIni.bAutoPlay.Guitar && !pChip.bHit ) && ( pChip.nバーからの距離dot.Guitar < 0 ) )
\r
1483 pChip.bHit = true;
\r
1484 if( ( ( pChip.nチャンネル番号 & 4 ) != 0 ) || ( pChip.nチャンネル番号 == 0x20 ) )
\r
1486 this.actChipFire.Start( 0 );
\r
1488 if( ( ( pChip.nチャンネル番号 & 2 ) != 0 ) || ( pChip.nチャンネル番号 == 0x20 ) )
\r
1490 this.actChipFire.Start( 1 );
\r
1492 if( ( ( pChip.nチャンネル番号 & 1 ) != 0 ) || ( pChip.nチャンネル番号 == 0x20 ) )
\r
1494 this.actChipFire.Start( 2 );
\r
1496 this.tサウンド再生( pChip, CDTXMania.Timer.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, E楽器パート.GUITAR, dTX.nモニタを考慮した音量( E楽器パート.GUITAR ) );
\r
1497 this.r次にくるギターChip = null;
\r
1498 this.tチップのヒット処理( pChip.n発声時刻ms, pChip );
\r
1502 if( !pChip.bHit && ( pChip.nバーからの距離dot.Guitar < 0 ) )
\r
1504 pChip.bHit = true;
\r
1505 this.tサウンド再生( pChip, CDTXMania.Timer.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, E楽器パート.GUITAR, dTX.nモニタを考慮した音量( E楽器パート.GUITAR ) );
\r
1510 if( configIni.bGuitar有効 )
\r
1512 if( configIni.bSudden.Guitar )
\r
1514 pChip.b可視 = pChip.nバーからの距離dot.Guitar < 200;
\r
1516 if( configIni.bHidden.Guitar && ( pChip.nバーからの距離dot.Guitar < 100 ) )
\r
1518 pChip.b可視 = false;
\r
1520 if( !pChip.bHit && pChip.b可視 )
\r
1523 int num11 = configIni.bReverse.Guitar ? ( 0x171 - pChip.nバーからの距離dot.Guitar ) : ( 40 + pChip.nバーからの距離dot.Guitar );
\r
1524 int num12 = num11;
\r
1526 if( ( num12 < ( 0x199 + num10 ) ) && ( num12 > -num10 ) )
\r
1528 int num14 = this.ctWailingチップ模様アニメ.n現在の値;
\r
1529 Rectangle rectangle5 = new Rectangle( 0x60 + ( num14 * 20 ), 0, 20, 50 );
\r
1530 if( num12 < num10 )
\r
1532 rectangle5.Y += num10 - num12;
\r
1533 rectangle5.Height -= num10 - num12;
\r
1534 num13 = num10 - num12;
\r
1536 if( num12 > ( 0x199 - num10 ) )
\r
1538 rectangle5.Height -= num12 - ( 0x199 - num10 );
\r
1540 if( ( rectangle5.Bottom > rectangle5.Top ) && ( this.txチップ != null ) )
\r
1542 this.txチップ.t2D描画( CDTXMania.app.Device, 0x8b, ( num11 - num10 ) + num13, rectangle5 );
\r
1546 if( !pChip.bHit && ( pChip.nバーからの距離dot.Guitar < 0 ) )
\r
1548 pChip.bHit = true;
\r
1549 if( configIni.bAutoPlay.Guitar )
\r
1551 this.actWailingBonus.Start( E楽器パート.GUITAR, this.r現在の歓声Chip.Guitar );
\r
1556 pChip.bHit = true;
\r
1560 if( !pChip.bHit && ( pChip.nバーからの距離dot.Guitar < 0 ) )
\r
1562 pChip.bHit = true;
\r
1563 this.r現在の歓声Chip.Guitar = pChip;
\r
1577 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1579 pChip.bHit = true;
\r
1585 int num20 = pChip.n発声位置 / 0x180;
\r
1586 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1588 pChip.bHit = true;
\r
1589 this.actPlayInfo.n小節番号 = num20 - 1;
\r
1590 if( configIni.bWave再生位置自動調整機能有効 )
\r
1592 dTX.tWave再生位置自動補正();
\r
1595 if( ( pChip.b可視 && configIni.bGuitar有効 ) && ( configIni.eDark != Eダークモード.FULL ) )
\r
1597 int y = configIni.bReverse.Guitar ? ( ( 0x171 - pChip.nバーからの距離dot.Guitar ) - 1 ) : ( ( 40 + pChip.nバーからの距離dot.Guitar ) - 1 );
\r
1598 if( ( dTX.bチップがある.Guitar && ( y > 0 ) ) && ( ( y < 0x199 ) && ( this.txチップ != null ) ) )
\r
1600 this.txチップ.t2D描画( CDTXMania.app.Device, 0x1a, y, new Rectangle( 0, 0xeb, 0x68, 1 ) );
\r
1602 y = configIni.bReverse.Bass ? ( ( 0x171 - pChip.nバーからの距離dot.Bass ) - 1 ) : ( ( 40 + pChip.nバーからの距離dot.Bass ) - 1 );
\r
1603 if( ( dTX.bチップがある.Bass && ( y > 0 ) ) && ( ( y < 0x199 ) && ( this.txチップ != null ) ) )
\r
1605 this.txチップ.t2D描画( CDTXMania.app.Device, 480, y, new Rectangle( 0, 0xeb, 0x68, 1 ) );
\r
1611 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1612 pChip.bHit = true;
\r
1616 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1618 pChip.bHit = true;
\r
1623 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1625 pChip.bHit = true;
\r
1630 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1632 pChip.bHit = true;
\r
1633 if( configIni.bAVI有効 )
\r
1635 switch( pChip.eAVI種別 )
\r
1638 if( pChip.rAVI != null )
\r
1640 this.actAVI.Start( pChip.nチャンネル番号, pChip.rAVI, 0x116, 0x163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, pChip.n発声時刻ms );
\r
1644 case EAVI種別.AVIPAN:
\r
1645 if( pChip.rAVIPan != null )
\r
1647 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
1687 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1689 pChip.bHit = true;
\r
1690 if( configIni.bBGM音を発声する )
\r
1692 dTX.tWavの再生停止( this.n最後に再生したBGMの実WAV番号[ pChip.nチャンネル番号 - 0x61 ] );
\r
1693 dTX.tチップの再生( pChip, CDTXMania.Timer.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, 10, dTX.nモニタを考慮した音量( E楽器パート.UNKNOWN ) );
\r
1694 this.n最後に再生したBGMの実WAV番号[ pChip.nチャンネル番号 - 0x61 ] = pChip.n整数値・内部番号;
\r
1707 if( configIni.bGuitar有効 )
\r
1709 if( configIni.bSudden.Bass )
\r
1711 pChip.b可視 = pChip.nバーからの距離dot.Bass < 200;
\r
1713 if( configIni.bHidden.Bass && ( pChip.nバーからの距離dot.Bass < 100 ) )
\r
1715 pChip.b可視 = false;
\r
1717 if( !pChip.bHit && pChip.b可視 )
\r
1719 int num8 = configIni.bReverse.Bass ? ( 0x171 - pChip.nバーからの距離dot.Bass ) : ( 40 + pChip.nバーからの距離dot.Bass );
\r
1720 if( ( num8 > 0 ) && ( num8 < 0x199 ) )
\r
1722 int num9 = this.ctチップ模様アニメ.Bass.n現在の値;
\r
1723 if( pChip.nチャンネル番号 == 160 )
\r
1725 if( this.txチップ != null )
\r
1727 this.txチップ.t2D描画( CDTXMania.app.Device, 480, num8 - 4, new Rectangle( 0, 0xc0 + ( ( num9 % 5 ) * 8 ), 0x67, 8 ) );
\r
1730 else if( !configIni.bLeft.Bass )
\r
1732 Rectangle rectangle3 = new Rectangle( 0, num9 * 8, 0x20, 8 );
\r
1733 if( ( ( pChip.nチャンネル番号 & 4 ) != 0 ) && ( this.txチップ != null ) )
\r
1735 this.txチップ.t2D描画( CDTXMania.app.Device, 480, num8 - 4, rectangle3 );
\r
1737 rectangle3.X += 0x20;
\r
1738 if( ( ( pChip.nチャンネル番号 & 2 ) != 0 ) && ( this.txチップ != null ) )
\r
1740 this.txチップ.t2D描画( CDTXMania.app.Device, 0x204, num8 - 4, rectangle3 );
\r
1742 rectangle3.X += 0x20;
\r
1743 if( ( ( pChip.nチャンネル番号 & 1 ) != 0 ) && ( this.txチップ != null ) )
\r
1745 this.txチップ.t2D描画( CDTXMania.app.Device, 0x228, num8 - 4, rectangle3 );
\r
1750 Rectangle rectangle4 = new Rectangle( 0, num9 * 8, 0x20, 8 );
\r
1751 if( ( ( pChip.nチャンネル番号 & 4 ) != 0 ) && ( this.txチップ != null ) )
\r
1753 this.txチップ.t2D描画( CDTXMania.app.Device, 0x228, num8 - 4, rectangle4 );
\r
1755 rectangle4.X += 0x20;
\r
1756 if( ( ( pChip.nチャンネル番号 & 2 ) != 0 ) && ( this.txチップ != null ) )
\r
1758 this.txチップ.t2D描画( CDTXMania.app.Device, 0x204, num8 - 4, rectangle4 );
\r
1760 rectangle4.X += 0x20;
\r
1761 if( ( ( pChip.nチャンネル番号 & 1 ) != 0 ) && ( this.txチップ != null ) )
\r
1763 this.txチップ.t2D描画( CDTXMania.app.Device, 480, num8 - 4, rectangle4 );
\r
1768 if( ( configIni.bAutoPlay.Bass && !pChip.bHit ) && ( pChip.nバーからの距離dot.Bass < 0 ) )
\r
1770 pChip.bHit = true;
\r
1771 if( ( ( pChip.nチャンネル番号 & 4 ) != 0 ) || ( pChip.nチャンネル番号 == 160 ) )
\r
1773 this.actChipFire.Start( 3 );
\r
1775 if( ( ( pChip.nチャンネル番号 & 2 ) != 0 ) || ( pChip.nチャンネル番号 == 160 ) )
\r
1777 this.actChipFire.Start( 4 );
\r
1779 if( ( ( pChip.nチャンネル番号 & 1 ) != 0 ) || ( pChip.nチャンネル番号 == 160 ) )
\r
1781 this.actChipFire.Start( 5 );
\r
1783 this.tサウンド再生( pChip, CDTXMania.Timer.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, E楽器パート.BASS, dTX.nモニタを考慮した音量( E楽器パート.BASS ) );
\r
1784 this.r次にくるベースChip = null;
\r
1785 this.tチップのヒット処理( pChip.n発声時刻ms, pChip );
\r
1789 if( !pChip.bHit && ( pChip.nバーからの距離dot.Bass < 0 ) )
\r
1791 pChip.bHit = true;
\r
1792 this.tサウンド再生( pChip, CDTXMania.Timer.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, E楽器パート.BASS, dTX.nモニタを考慮した音量( E楽器パート.BASS ) );
\r
1797 if( configIni.bGuitar有効 )
\r
1799 if( configIni.bSudden.Bass )
\r
1801 pChip.b可視 = pChip.nバーからの距離dot.Bass < 200;
\r
1803 if( configIni.bHidden.Bass && ( pChip.nバーからの距離dot.Bass < 100 ) )
\r
1805 pChip.b可視 = false;
\r
1807 if( !pChip.bHit && pChip.b可視 )
\r
1810 int num16 = configIni.bReverse.Bass ? ( 0x171 - pChip.nバーからの距離dot.Bass ) : ( 40 + pChip.nバーからの距離dot.Bass );
\r
1811 int num17 = num16;
\r
1813 if( ( num17 < ( 0x199 + num15 ) ) && ( num17 > -num15 ) )
\r
1815 int num19 = this.ctWailingチップ模様アニメ.n現在の値;
\r
1816 Rectangle rectangle6 = new Rectangle( 0x60 + ( num19 * 20 ), 0, 20, 50 );
\r
1817 if( num17 < num15 )
\r
1819 rectangle6.Y += num15 - num17;
\r
1820 rectangle6.Height -= num15 - num17;
\r
1821 num18 = num15 - num17;
\r
1823 if( num17 > ( 0x199 - num15 ) )
\r
1825 rectangle6.Height -= num17 - ( 0x199 - num15 );
\r
1827 if( ( rectangle6.Bottom > rectangle6.Top ) && ( this.txチップ != null ) )
\r
1829 this.txチップ.t2D描画( CDTXMania.app.Device, 0x251, ( num16 - num15 ) + num18, rectangle6 );
\r
1833 if( !pChip.bHit && ( pChip.nバーからの距離dot.Bass < 0 ) )
\r
1835 pChip.bHit = true;
\r
1836 if( configIni.bAutoPlay.Bass )
\r
1838 this.actWailingBonus.Start( E楽器パート.BASS, this.r現在の歓声Chip.Bass );
\r
1843 pChip.bHit = true;
\r
1847 if( !pChip.bHit && ( pChip.nバーからの距離dot.Bass < 0 ) )
\r
1849 pChip.bHit = true;
\r
1850 this.r現在の歓声Chip.Bass = pChip;
\r
1864 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1866 pChip.bHit = true;
\r
1871 if( !pChip.bHit && ( pChip.nバーからの距離dot.Guitar < 0 ) )
\r
1873 pChip.bHit = true;
\r
1874 this.r現在の空うちギターChip = pChip;
\r
1875 pChip.nチャンネル番号 = 0x20;
\r
1880 if( !pChip.bHit && ( pChip.nバーからの距離dot.Bass < 0 ) )
\r
1882 pChip.bHit = true;
\r
1883 this.r現在の空うちベースChip = pChip;
\r
1884 pChip.nチャンネル番号 = 160;
\r
1896 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1898 pChip.bHit = true;
\r
1899 if( ( configIni.bBGA有効 && ( pChip.eBGA種別 == EBGA種別.BMP ) ) || ( pChip.eBGA種別 == EBGA種別.BMPTEX ) )
\r
1901 for( int i = 0; i < 8; i++ )
\r
1903 if( this.nBGAスコープチャンネルマップ[ 0, i ] == pChip.nチャンネル番号 )
\r
1905 this.actBGA.ChangeScope( this.nBGAスコープチャンネルマップ[ 1, i ], pChip.rBMP, pChip.rBMPTEX );
\r
1913 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
1915 pChip.bHit = true;
\r
1924 private void t進行描画・チップアニメ()
\r
1926 for( int i = 1; i < 3; i++ )
\r
1928 this.ctチップ模様アニメ[ i ].t進行Loop();
\r
1930 this.ctWailingチップ模様アニメ.t進行Loop();
\r
1932 private void t進行描画・チップファイアGB()
\r
1934 this.actChipFire.On進行描画();
\r
1936 private void t進行描画・パネル文字列()
\r
1938 if( ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) )
\r
1940 this.actPanel.t進行描画( 0xb5, 430 );
\r
1943 private bool t進行描画・フェードイン・アウト()
\r
1945 switch( base.eフェーズID )
\r
1947 case CStage.Eフェーズ.共通_フェードイン:
\r
1948 if( this.actFI.On進行描画() != 0 )
\r
1950 base.eフェーズID = CStage.Eフェーズ.共通_通常状態;
\r
1954 case CStage.Eフェーズ.共通_フェードアウト:
\r
1955 case CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト:
\r
1956 if( this.actFO.On進行描画() != 0 )
\r
1962 case CStage.Eフェーズ.演奏_STAGE_CLEAR_フェードアウト:
\r
1963 if( this.actFOClear.On進行描画() == 0 )
\r
1971 private void t進行描画・レーンフラッシュGB()
\r
1973 if( ( ( CDTXMania.ConfigIni.eDark != Eダークモード.HALF ) && ( CDTXMania.ConfigIni.eDark != Eダークモード.FULL ) ) && CDTXMania.ConfigIni.bGuitar有効 )
\r
1975 this.actLaneFlushGB.On進行描画();
\r
1978 private void t進行描画・演奏情報()
\r
1980 if( !CDTXMania.ConfigIni.b演奏情報を表示しない )
\r
1982 this.actPlayInfo.t進行描画( 0xb5, 50 );
\r
1985 private void t進行描画・背景()
\r
1987 if( CDTXMania.ConfigIni.eDark == Eダークモード.OFF )
\r
1989 if( this.tx背景 != null )
\r
1991 this.tx背景.t2D描画( CDTXMania.app.Device, 0, 0 );
\r
1996 CDTXMania.app.Device.Clear( ClearFlags.ZBuffer | ClearFlags.Target, Color.Black, 0f, 0 );
\r
1999 private void t進行描画・判定文字列()
\r
2001 this.actJudgeString.On進行描画();
\r
2003 private void t進行描画・譜面スクロール速度()
\r
2005 this.act譜面スクロール速度.On進行描画();
\r
2007 private void t入力メソッド記憶( E楽器パート part )
\r
2009 if( CDTXMania.Pad.st検知したデバイス.Keyboard )
\r
2011 this.b演奏にキーボードを使った[ (int) part ] = true;
\r
2013 if( CDTXMania.Pad.st検知したデバイス.Joypad )
\r
2015 this.b演奏にジョイパッドを使った[ (int) part ] = true;
\r
2017 if( CDTXMania.Pad.st検知したデバイス.MIDIIN )
\r
2019 this.b演奏にMIDI入力を使った[ (int) part ] = true;
\r
2021 if( CDTXMania.Pad.st検知したデバイス.Mouse )
\r
2023 this.b演奏にマウスを使った[ (int) part ] = true;
\r
2026 private void t入力処理・ギター()
\r
2028 if ( CDTXMania.Pad.b押されている( E楽器パート.GUITAR, Eパッド.Decide ) && CDTXMania.Pad.b押された( E楽器パート.GUITAR, Eパッド.B ) )
\r
2030 CDTXMania.ConfigIni.n譜面スクロール速度.Guitar = Math.Min( CDTXMania.ConfigIni.n譜面スクロール速度.Guitar + 1, 0x7cf );
\r
2032 if ( CDTXMania.Pad.b押されている( E楽器パート.GUITAR, Eパッド.Decide ) && CDTXMania.Pad.b押された( E楽器パート.GUITAR, Eパッド.R ) )
\r
2034 CDTXMania.ConfigIni.n譜面スクロール速度.Guitar = Math.Max( CDTXMania.ConfigIni.n譜面スクロール速度.Guitar - 1, 0 );
\r
2037 if ( CDTXMania.ConfigIni.bGuitar有効 && CDTXMania.DTX.bチップがある.Guitar )
\r
2039 if( bIsAutoPlay.Guitar )
\r
2041 CDTX.CChip chip = this.r次にくるギターChipを更新して返す();
\r
2042 if( chip != null )
\r
2044 if( ( chip.nチャンネル番号 & 4 ) != 0 )
\r
2046 this.actLaneFlushGB.Start( 0 );
\r
2047 this.actRGB.Push( 0 );
\r
2049 if( ( chip.nチャンネル番号 & 2 ) != 0 )
\r
2051 this.actLaneFlushGB.Start( 1 );
\r
2052 this.actRGB.Push( 1 );
\r
2054 if( ( chip.nチャンネル番号 & 1 ) != 0 )
\r
2056 this.actLaneFlushGB.Start( 2 );
\r
2057 this.actRGB.Push( 2 );
\r
2063 int flagR = CDTXMania.Pad.b押されている( E楽器パート.GUITAR, Eパッド.R ) ? 4 : 0;
\r
2064 this.t入力メソッド記憶( E楽器パート.GUITAR );
\r
2065 int flagG = CDTXMania.Pad.b押されている( E楽器パート.GUITAR, Eパッド.G ) ? 2 : 0;
\r
2066 this.t入力メソッド記憶( E楽器パート.GUITAR );
\r
2067 int flagB = CDTXMania.Pad.b押されている( E楽器パート.GUITAR, Eパッド.B ) ? 1 : 0;
\r
2068 this.t入力メソッド記憶( E楽器パート.GUITAR );
\r
2069 int flagRGB = flagR | flagG | flagB;
\r
2072 this.actLaneFlushGB.Start( 0 );
\r
2073 this.actRGB.Push( 0 );
\r
2077 this.actLaneFlushGB.Start( 1 );
\r
2078 this.actRGB.Push( 1 );
\r
2082 this.actLaneFlushGB.Start( 2 );
\r
2083 this.actRGB.Push( 2 );
\r
2085 List<STInputEvent> events = CDTXMania.Pad.GetEvents( E楽器パート.GUITAR, Eパッド.Pick );
\r
2086 if( ( events != null ) && ( events.Count > 0 ) )
\r
2088 foreach( STInputEvent event2 in events )
\r
2091 if( !event2.b押された )
\r
2095 this.t入力メソッド記憶( E楽器パート.GUITAR );
\r
2096 long nTime = event2.nTimeStamp - CDTXMania.Timer.n前回リセットした時のシステム時刻;
\r
2097 CDTX.CChip pChip = this.r指定時刻に一番近い未ヒットChip( nTime, 0x2f, this.nInputAdjustTimeMs.Guitar, 0 );
\r
2098 E判定 e判定 = this.e指定時刻からChipのJUDGEを返す(nTime, pChip, this.nInputAdjustTimeMs.Guitar);
\r
2099 if (((pChip != null) && ((pChip.nチャンネル番号 & 15) == flagRGB)) && (e判定 != E判定.Miss))
\r
2101 if( ( flagR != 0 ) || ( flagRGB == 0 ) )
\r
2103 this.actChipFire.Start( 0 );
\r
2105 if( ( flagG != 0 ) || ( flagRGB == 0 ) )
\r
2107 this.actChipFire.Start( 1 );
\r
2109 if( ( flagB != 0 ) || ( flagRGB == 0 ) )
\r
2111 this.actChipFire.Start( 2 );
\r
2113 this.tチップのヒット処理( nTime, pChip );
\r
2114 this.tサウンド再生( pChip, CDTXMania.Timer.nシステム時刻, E楽器パート.GUITAR, CDTXMania.ConfigIni.n手動再生音量, CDTXMania.ConfigIni.b演奏音を強調する.Guitar, e判定 == E判定.Poor );
\r
2115 CDTX.CChip item = this.r指定時刻に一番近い未ヒットChip( nTime, 40, this.nInputAdjustTimeMs.Guitar, 140 );
\r
2116 if( item != null )
\r
2118 this.queWailing.Guitar.Enqueue( item );
\r
2122 if( ( ( chip4 = this.r現在の空うちギターChip ) != null ) || ( ( chip4 = this.r指定時刻に一番近いChip・ヒット未済問わず不可視考慮( nTime, 0x2f, this.nInputAdjustTimeMs.Guitar ) ) != null ) )
\r
2124 this.tサウンド再生( chip4, CDTXMania.Timer.nシステム時刻, E楽器パート.GUITAR, CDTXMania.ConfigIni.n手動再生音量, CDTXMania.ConfigIni.b演奏音を強調する.Guitar, true );
\r
2126 if( !CDTXMania.ConfigIni.bLight.Guitar )
\r
2128 this.tチップのヒット処理・BadならびにTight時のMiss( E楽器パート.GUITAR );
\r
2132 List<STInputEvent> list2 = CDTXMania.Pad.GetEvents( E楽器パート.GUITAR, Eパッド.Wail );
\r
2133 if( ( list2 != null ) && ( list2.Count > 0 ) )
\r
2135 foreach( STInputEvent event3 in list2 )
\r
2138 if( !event3.b押された )
\r
2142 long num6 = event3.nTimeStamp - CDTXMania.Timer.n前回リセットした時のシステム時刻;
\r
2143 while( ( this.queWailing.Guitar.Count > 0 ) && ( ( chip5 = this.queWailing.Guitar.Dequeue() ) != null ) )
\r
2145 if( ( num6 - chip5.n発声時刻ms ) <= 800 )
\r
2147 chip5.bHit = true;
\r
2148 this.actWailingBonus.Start( E楽器パート.GUITAR, this.r現在の歓声Chip.Guitar );
\r
2149 if( !bIsAutoPlay.Guitar )
\r
2151 this.actScore.Set( E楽器パート.GUITAR, this.actScore.Get( E楽器パート.GUITAR) + ( this.actCombo.n現在のコンボ数.Guitar * 3000L ) ); // #24245 2011.1.24 yyagi changed: DRUMS->GUITAR
\r
2160 private void t入力処理・ベース()
\r
2162 if ( CDTXMania.Pad.b押されている( E楽器パート.BASS, Eパッド.Decide ) && CDTXMania.Pad.b押された( E楽器パート.BASS, Eパッド.B ) )
\r
2164 CDTXMania.ConfigIni.n譜面スクロール速度.Bass = Math.Min( CDTXMania.ConfigIni.n譜面スクロール速度.Bass + 1, 0x7cf );
\r
2166 if ( CDTXMania.Pad.b押されている( E楽器パート.BASS, Eパッド.Decide ) && CDTXMania.Pad.b押された( E楽器パート.BASS, Eパッド.R ) )
\r
2168 CDTXMania.ConfigIni.n譜面スクロール速度.Bass = Math.Max( CDTXMania.ConfigIni.n譜面スクロール速度.Bass - 1, 0 );
\r
2171 if ( CDTXMania.ConfigIni.bGuitar有効 && CDTXMania.DTX.bチップがある.Bass )
\r
2173 if( bIsAutoPlay.Bass )
\r
2175 CDTX.CChip chip = this.r次にくるベースChipを更新して返す();
\r
2176 if( chip != null )
\r
2178 if( ( chip.nチャンネル番号 & 4 ) != 0 )
\r
2180 this.actLaneFlushGB.Start( 3 );
\r
2181 this.actRGB.Push( 3 );
\r
2183 if( ( chip.nチャンネル番号 & 2 ) != 0 )
\r
2185 this.actLaneFlushGB.Start( 4 );
\r
2186 this.actRGB.Push( 4 );
\r
2188 if( ( chip.nチャンネル番号 & 1 ) != 0 )
\r
2190 this.actLaneFlushGB.Start( 5 );
\r
2191 this.actRGB.Push( 5 );
\r
2197 int flagR = CDTXMania.Pad.b押されている( E楽器パート.BASS, Eパッド.R ) ? 4 : 0;
\r
2198 this.t入力メソッド記憶( E楽器パート.BASS );
\r
2199 int flagG = CDTXMania.Pad.b押されている( E楽器パート.BASS, Eパッド.G ) ? 2 : 0;
\r
2200 this.t入力メソッド記憶( E楽器パート.BASS );
\r
2201 int flagB = CDTXMania.Pad.b押されている( E楽器パート.BASS, Eパッド.B ) ? 1 : 0;
\r
2202 this.t入力メソッド記憶( E楽器パート.BASS );
\r
2203 int flagRGB = flagR | flagG | flagB;
\r
2206 this.actLaneFlushGB.Start( 3 );
\r
2207 this.actRGB.Push( 3 );
\r
2211 this.actLaneFlushGB.Start( 4 );
\r
2212 this.actRGB.Push( 4 );
\r
2216 this.actLaneFlushGB.Start( 5 );
\r
2217 this.actRGB.Push( 5 );
\r
2219 List<STInputEvent> events = CDTXMania.Pad.GetEvents( E楽器パート.BASS, Eパッド.Pick );
\r
2220 if( ( events != null ) && ( events.Count > 0 ) )
\r
2222 foreach( STInputEvent event2 in events )
\r
2225 if( !event2.b押された )
\r
2229 this.t入力メソッド記憶( E楽器パート.BASS );
\r
2230 long nTime = event2.nTimeStamp - CDTXMania.Timer.n前回リセットした時のシステム時刻;
\r
2231 CDTX.CChip pChip = this.r指定時刻に一番近い未ヒットChip( nTime, 0xaf, this.nInputAdjustTimeMs.Bass, 0 );
\r
2232 E判定 e判定 = this.e指定時刻からChipのJUDGEを返す(nTime, pChip, this.nInputAdjustTimeMs.Bass);
\r
2233 if (((pChip != null) && ((pChip.nチャンネル番号 & 15) == flagRGB)) && (e判定 != E判定.Miss))
\r
2235 if( ( flagR != 0 ) || ( flagRGB == 0 ) )
\r
2237 this.actChipFire.Start( 3 );
\r
2239 if( ( flagG != 0 ) || ( flagRGB == 0 ) )
\r
2241 this.actChipFire.Start( 4 );
\r
2243 if( ( flagB != 0 ) || ( flagRGB == 0 ) )
\r
2245 this.actChipFire.Start( 5 );
\r
2247 this.tチップのヒット処理( nTime, pChip );
\r
2248 this.tサウンド再生( pChip, CDTXMania.Timer.nシステム時刻, E楽器パート.BASS, CDTXMania.ConfigIni.n手動再生音量, CDTXMania.ConfigIni.b演奏音を強調する.Bass, e判定 == E判定.Poor );
\r
2249 CDTX.CChip item = this.r指定時刻に一番近い未ヒットChip( nTime, 0xa8, this.nInputAdjustTimeMs.Bass, 140 );
\r
2250 if( item != null )
\r
2252 this.queWailing.Bass.Enqueue( item );
\r
2256 if( ( ( chip4 = this.r現在の空うちベースChip ) != null ) || ( ( chip4 = this.r指定時刻に一番近いChip・ヒット未済問わず不可視考慮( nTime, 0xaf, this.nInputAdjustTimeMs.Bass ) ) != null ) )
\r
2258 this.tサウンド再生( chip4, CDTXMania.Timer.nシステム時刻, E楽器パート.BASS, CDTXMania.ConfigIni.n手動再生音量, CDTXMania.ConfigIni.b演奏音を強調する.Bass, true );
\r
2260 if( !CDTXMania.ConfigIni.bLight.Bass )
\r
2262 this.tチップのヒット処理・BadならびにTight時のMiss( E楽器パート.BASS );
\r
2266 List<STInputEvent> list2 = CDTXMania.Pad.GetEvents( E楽器パート.BASS, Eパッド.Wail );
\r
2267 if( ( list2 != null ) && ( list2.Count > 0 ) )
\r
2269 foreach( STInputEvent event3 in list2 )
\r
2272 if( !event3.b押された )
\r
2276 long num6 = event3.nTimeStamp - CDTXMania.Timer.n前回リセットした時のシステム時刻;
\r
2277 while( ( this.queWailing.Bass.Count > 0 ) && ( ( chip5 = this.queWailing.Bass.Dequeue() ) != null ) )
\r
2279 if( ( num6 - chip5.n発声時刻ms ) <= 800 )
\r
2281 chip5.bHit = true;
\r
2282 this.actWailingBonus.Start( E楽器パート.BASS, this.r現在の歓声Chip.Bass );
\r
2283 if( !bIsAutoPlay.Bass )
\r
2285 this.actScore.Set( E楽器パート.BASS, this.actScore.Get( E楽器パート.BASS ) + ( this.actCombo.n現在のコンボ数.Bass * 3000L ) ); // #24245 2011.1.24 yyagi changed: DRUMS->GUITAR
\r
2294 private void t背景テクスチャの生成()
\r
2296 Bitmap image = null;
\r
2299 if( !CDTXMania.ConfigIni.bストイックモード )
\r
2301 string bACKGROUND = null;
\r
2302 if( ( CDTXMania.DTX.BACKGROUND_GR != null ) && ( CDTXMania.DTX.BACKGROUND_GR.Length > 0 ) )
\r
2304 bACKGROUND = CDTXMania.DTX.BACKGROUND_GR;
\r
2306 else if( ( CDTXMania.DTX.BACKGROUND != null ) && ( CDTXMania.DTX.BACKGROUND.Length > 0 ) )
\r
2308 bACKGROUND = CDTXMania.DTX.BACKGROUND;
\r
2310 if( ( bACKGROUND != null ) && ( bACKGROUND.Length > 0 ) )
\r
2312 path = CDTXMania.DTX.strフォルダ名 + bACKGROUND;
\r
2313 if( File.Exists( path ) )
\r
2317 Bitmap bitmap2 = null;
\r
2318 bitmap2 = new Bitmap( path );
\r
2319 if( ( bitmap2.Size.Width == 0 ) && ( bitmap2.Size.Height == 0 ) )
\r
2324 Bitmap bitmap3 = new Bitmap( 640, 480 );
\r
2325 Graphics graphics = Graphics.FromImage( bitmap3 );
\r
2326 for( int i = 0; i < 480; i += bitmap2.Size.Height )
\r
2328 for( int j = 0; j < 640; j += bitmap2.Size.Width )
\r
2330 graphics.DrawImage( bitmap2, j, i, bitmap2.Width, bitmap2.Height );
\r
2333 graphics.Dispose();
\r
2334 bitmap2.Dispose();
\r
2335 image = new Bitmap( CSkin.Path( @"Graphics\\ScreenPlayGuitar background.jpg" ) );
\r
2336 graphics = Graphics.FromImage( image );
\r
2337 ColorMatrix matrix2 = new ColorMatrix();
\r
2338 matrix2.Matrix00 = 1f;
\r
2339 matrix2.Matrix11 = 1f;
\r
2340 matrix2.Matrix22 = 1f;
\r
2341 matrix2.Matrix33 = ( (float) CDTXMania.ConfigIni.n背景の透過度 ) / 255f;
\r
2342 matrix2.Matrix44 = 1f;
\r
2343 ColorMatrix newColorMatrix = matrix2;
\r
2344 ImageAttributes imageAttr = new ImageAttributes();
\r
2345 imageAttr.SetColorMatrix( newColorMatrix );
\r
2346 graphics.DrawImage( bitmap3, new Rectangle( 0, 0, 640, 480 ), 0, 0, 640, 480, GraphicsUnit.Pixel, imageAttr );
\r
2347 imageAttr.Dispose();
\r
2348 graphics.DrawImage( bitmap3, new Rectangle( 0xb5, 50, 0x116, 0x163 ), 0xb5, 50, 0x116, 0x163, GraphicsUnit.Pixel );
\r
2349 graphics.Dispose();
\r
2350 bitmap3.Dispose();
\r
2355 Trace.TraceError( "背景画像の読み込みに失敗しました。({0})", new object[] { path } );
\r
2362 path = CSkin.Path( @"Graphics\ScreenPlayGuitar background.jpg" );
\r
2365 image = new Bitmap( path );
\r
2369 Trace.TraceError( "背景画像の読み込みに失敗しました。({0})", new object[] { path } );
\r
2374 if( ( CDTXMania.DTX.listBMP.Count > 0 ) || ( CDTXMania.DTX.listBMPTEX.Count > 0 ) )
\r
2376 Graphics graphics2 = Graphics.FromImage( image );
\r
2377 graphics2.FillRectangle( Brushes.Black, 0xb5, 50, 0x116, 0x163 );
\r
2378 graphics2.Dispose();
\r
2382 this.tx背景 = new CTexture( CDTXMania.app.Device, image, CDTXMania.TextureFormat );
\r
2384 catch( CTextureCreateFailedException )
\r
2386 Trace.TraceError( "背景テクスチャの生成に失敗しました。" );
\r
2391 #if true // DAMAGELEVELTUNING
\r
2392 // ----------------------------------
\r
2393 public float[,] fDamageGaugeDelta = { // #23625 2011.1.10 ickw_284: tuned damage/recover factors
\r
2394 // drums, guitar, bass
\r
2395 { 0.004f, 0.006f, 0.006f },
\r
2396 { 0.002f, 0.003f, 0.003f },
\r
2397 { 0.000f, 0.000f, 0.000f },
\r
2398 { -0.020f, -0.030f, -0.030f },
\r
2399 { -0.050f, -0.050f, -0.050f }
\r
2401 public float[] fDamageLevelFactor = {
\r
2404 // ----------------------------------
\r
2407 private void t判定にあわせてゲージを増減する(E楽器パート part, E判定 e今回の判定)
\r
2411 #if true // DAMAGELEVELTUNING
\r
2412 switch (e今回の判定) // #23625 2011.1.10 ickw_284
\r
2418 fDamage = fDamageGaugeDelta[(int)e今回の判定, (int)part];
\r
2421 fDamage = fDamageGaugeDelta[(int)e今回の判定, (int)part];
\r
2422 switch (CDTXMania.ConfigIni.eダメージレベル)
\r
2424 case Eダメージレベル.少ない:
\r
2426 case Eダメージレベル.大きい:
\r
2427 fDamage *= fDamageLevelFactor[(int)CDTXMania.ConfigIni.eダメージレベル];
\r
2436 #else // before applying #23625 modifications
\r
2440 fDamage = ( part == E楽器パート.DRUMS ) ? 0.01 : 0.015;
\r
2444 fDamage = ( part == E楽器パート.DRUMS ) ? 0.006 : 0.009;
\r
2448 fDamage = ( part == E楽器パート.DRUMS ) ? 0.002 : 0.003;
\r
2452 fDamage = ( part == E楽器パート.DRUMS ) ? 0.0 : 0.0;
\r
2456 fDamage = ( part == E楽器パート.DRUMS ) ? -0.035 : -0.035;
\r
2457 switch( CDTXMania.ConfigIni.eダメージレベル )
\r
2459 case Eダメージレベル.少ない:
\r
2467 case Eダメージレベル.大きい:
\r
2478 this.actGauge.db現在のゲージ値[(int)part] += fDamage;
\r
2480 if( this.actGauge.db現在のゲージ値[ (int) part ] > 1.0 )
\r
2481 this.actGauge.db現在のゲージ値[ (int) part ] = 1.0;
\r
2483 //-----------------
\r