1
0
mirror of synced 2024-11-23 23:21:06 +01:00

0.6.0.5 - Fix big note judgement preventing early BAD of big notes in Easy window

- Fix big note judgement preventing early BAD of big notes in Easy window
This commit is contained in:
Wei-Cheng Yeh (IID) 2024-10-28 11:05:12 +08:00 committed by GitHub
parent d9a063f6c6
commit a3227fd8f3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 20 additions and 286 deletions

View File

@ -970,6 +970,17 @@ internal abstract class CStage演奏画面共通 : CStage {
return _timingzonesAreEasy;
}
protected CConfigIni.CTimingZones GetTimingZones(int idxPlayerActual) {
// To change later to adapt to Tower Ama-kuchi
//diff = Math.Min(diff, (int)Difficulty.Oni);
int timingShift = OpenTaiko.ConfigIni.nTimingZones[idxPlayerActual];
bool _timingzonesAreEasy = tEasyTimeZones(idxPlayerActual);
return (_timingzonesAreEasy == true) ? OpenTaiko.ConfigIni.tzLevels[timingShift] : OpenTaiko.ConfigIni.tzLevels[2 + timingShift];
}
private void tIncreaseComboDan(int danSong) {
this.nCombo[danSong]++;
if (this.nCombo[danSong] > this.nHighestCombo[danSong])
@ -992,18 +1003,8 @@ internal abstract class CStage演奏画面共通 : CStage {
}
}
// To change later to adapt to Tower Ama-kuchi
//diff = Math.Min(diff, (int)Difficulty.Oni);
int actual = OpenTaiko.GetActualPlayer(player);
int timingShift = OpenTaiko.ConfigIni.nTimingZones[actual];
bool _timingzonesAreEasy = tEasyTimeZones(player);
CConfigIni.CTimingZones tz = (_timingzonesAreEasy == true) ? OpenTaiko.ConfigIni.tzLevels[timingShift] : OpenTaiko.ConfigIni.tzLevels[2 + timingShift];
CConfigIni.CTimingZones tz = GetTimingZones(actual);
if (nDeltaTime <= tz.nGoodZone * OpenTaiko.ConfigIni.SongPlaybackSpeed) {
return ENoteJudge.Perfect;

View File

@ -1215,14 +1215,15 @@ internal class CStage演奏ドラム画面 : CStage演奏画面共通 {
// Process big notes (judge big notes on)
if (e判定 != ENoteJudge.Miss && ((_isBigNoteTaiko && OpenTaiko.ConfigIni.bJudgeBigNotes) || _isPinkKonga)) {
CConfigIni.CTimingZones tz = this.GetTimingZones(nUsePlayer);
double divided_songspeed = OpenTaiko.ConfigIni.SongPlaybackSpeed;
float time = chipNoHit.n発声時刻ms - (float)(SoundManager.PlayTimer.NowTimeMs * divided_songspeed);
int nWaitTime = OpenTaiko.ConfigIni.nBigNoteWaitTimems;
bool _timeB110 = time <= 110;
bool _timeBadOrLater = time <= tz.nBadZone;
if (chipNoHit.eNoteState == ENoteState.None) {
if (_timeB110) {
if (_timeBadOrLater) {
chipNoHit.nProcessTime = (int)(SoundManager.PlayTimer.NowTimeMs * divided_songspeed);
chipNoHit.eNoteState = ENoteState.Wait;
//this.nWaitButton = waitInstr;
@ -1233,10 +1234,7 @@ internal class CStage演奏ドラム画面 : CStage演奏画面共通 {
bool _isExpected = NotesManager.IsExpectedPad(this.nStoredHit[nUsePlayer], (int)_pad, chipNoHit, _gt);
// Double tap success
// (this.nWaitButton == waitRec && _timeB110 && chipNoHit.nProcessTime
// + nWaitTime > (int)(CSound管理.rc演奏用タイマ.n現在時刻ms * divided_songspeed))
if (_isExpected && _timeB110 && chipNoHit.nProcessTime
if (_isExpected && _timeBadOrLater && chipNoHit.nProcessTime
+ nWaitTime > (int)(SoundManager.PlayTimer.NowTimeMs * divided_songspeed)) {
this.tドラムヒット処理(nTime, _pad, chipNoHit, true, nUsePlayer);
bHitted = true;
@ -1245,9 +1243,7 @@ internal class CStage演奏ドラム画面 : CStage演奏画面共通 {
}
// Double tap failure
// else if (this.nWaitButton == waitInstr && _timeB110 && chipNoHit.nProcessTime
// + nWaitTime < (int)(CSound管理.rc演奏用タイマ.n現在時刻ms * divided_songspeed))
else if (!_isExpected || (_timeB110 && chipNoHit.nProcessTime
else if (!_isExpected || (_timeBadOrLater && chipNoHit.nProcessTime
+ nWaitTime < (int)(SoundManager.PlayTimer.NowTimeMs * divided_songspeed))) {
if (!_isPinkKonga) {
this.tドラムヒット処理(nTime, _pad, chipNoHit, false, nUsePlayer);
@ -1329,271 +1325,7 @@ internal class CStage演奏ドラム画面 : CStage演奏画面共通 {
bHitted = true;
}
#region [ (A) inputEvent ]
//-----------------------------
#region [Legacy]
/*
switch (((Eパッド)nPad))
{
case Eパッド.LRed:
case Eパッド.LRed2P:
#region[ ]
//-----------------------------
{
if (e判定 != E判定.Miss && chipNoHit.nチャンネル番号 == 0x11)
{
this.tドラムヒット処理(nTime, Eパッド.LRed, chipNoHit, false, nUsePlayer);
bHitted = true;
}
if (e判定 != E判定.Miss && (_isBigDonTaiko || chipNoHit.nチャンネル番号 == 0x1A) && !TJAPlayer3.ConfigIni.b大音符判定)
{
this.tドラムヒット処理(nTime, Eパッド.LRed, chipNoHit, true, nUsePlayer);
bHitted = true;
this.nWaitButton = 0;
break;
}
if (e判定 != E判定.Miss && (_isBigDonTaiko || chipNoHit.nチャンネル番号 == 0x1A) && TJAPlayer3.ConfigIni.b大音符判定)
{
if (chipNoHit.eNoteState == ENoteState.none)
{
float time = chipNoHit.n発声時刻ms - (float)(CSound管理.rc演奏用タイマ.n現在時刻ms * (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0));
if (time <= 110)
{
chipNoHit.nProcessTime = (int)(CSound管理.rc演奏用タイマ.n現在時刻 * (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0));
chipNoHit.eNoteState = ENoteState.wait;
this.nWaitButton = 2;
}
}
else if (chipNoHit.eNoteState == ENoteState.wait)
{
float time = chipNoHit.n発声時刻ms - (float)(CSound管理.rc演奏用タイマ.n現在時刻ms * (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0));
int nWaitTime = TJAPlayer3.ConfigIni.n両手判定の待ち時間;
if (this.nWaitButton == 1 && time <= 110 && chipNoHit.nProcessTime + nWaitTime > (int)(CSound管理.rc演奏用タイマ.n現在時刻 * (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0)))
{
this.tドラムヒット処理(nTime, Eパッド.LRed, chipNoHit, true, nUsePlayer);
bHitted = true;
this.nWaitButton = 0;
}
else if (this.nWaitButton == 2 && time <= 110 && chipNoHit.nProcessTime + nWaitTime < (int)(CSound管理.rc演奏用タイマ.n現在時刻 * (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0)))
{
this.tドラムヒット処理(nTime, Eパッド.LRed, chipNoHit, false, nUsePlayer);
bHitted = true;
this.nWaitButton = 0;
}
}
}
if (e判定 != E判定.Miss && (chipNoHit.nチャンネル番号 == 0x15 || chipNoHit.nチャンネル番号 == 0x16 || chipNoHit.nチャンネル番号 == 0x17))
{
this.tドラムヒット処理(nTime, Eパッド.LRed, chipNoHit, false, nUsePlayer);
}
if (!bHitted)
break;
continue;
}
//-----------------------------
#endregion
case Eパッド.RRed:
case Eパッド.RRed2P:
#region[ ]
//-----------------------------
{
if (e判定 != E判定.Miss && chipNoHit.nチャンネル番号 == 0x11)
{
this.tドラムヒット処理(nTime, Eパッド.RRed, chipNoHit, false, nUsePlayer);
bHitted = true;
}
if (e判定 != E判定.Miss && (_isBigDonTaiko || chipNoHit.nチャンネル番号 == 0x1A) && !TJAPlayer3.ConfigIni.b大音符判定)
{
this.tドラムヒット処理(nTime, Eパッド.RRed, chipNoHit, true, nUsePlayer);
bHitted = true;
this.nWaitButton = 0;
break;
}
if (e判定 != E判定.Miss && (_isBigDonTaiko || chipNoHit.nチャンネル番号 == 0x1A) && TJAPlayer3.ConfigIni.b大音符判定)
{
if (chipNoHit.eNoteState == ENoteState.none)
{
float time = chipNoHit.n発声時刻ms - (float)(CSound管理.rc演奏用タイマ.n現在時刻ms * (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0));
if (time <= 110)
{
chipNoHit.nProcessTime = (int)CSound管理.rc演奏用タイマ.n現在時刻ms;
this.n待機中の大音符の座標 = chipNoHit.nバーからの距離dot.Taiko;
chipNoHit.eNoteState = ENoteState.wait;
this.nWaitButton = 1;
}
}
else if (chipNoHit.eNoteState == ENoteState.wait)
{
float time = chipNoHit.n発声時刻ms - (float)(CSound管理.rc演奏用タイマ.n現在時刻ms * (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0));
int nWaitTime = TJAPlayer3.ConfigIni.n両手判定の待ち時間;
if (this.nWaitButton == 2 && time <= 110 && chipNoHit.nProcessTime + nWaitTime > (int)(CSound管理.rc演奏用タイマ.n現在時刻 * (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0)))
{
this.tドラムヒット処理(nTime, Eパッド.RRed, chipNoHit, true, nUsePlayer);
bHitted = true;
this.nWaitButton = 0;
break;
}
else if (this.nWaitButton == 2 && time <= 110 && chipNoHit.nProcessTime + nWaitTime < (int)(CSound管理.rc演奏用タイマ.n現在時刻 * (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0)))
{
this.tドラムヒット処理(nTime, Eパッド.RRed, chipNoHit, false, nUsePlayer);
bHitted = true;
this.nWaitButton = 0;
}
}
}
if (e判定 != E判定.Miss && (chipNoHit.nチャンネル番号 == 0x15 || chipNoHit.nチャンネル番号 == 0x16 || chipNoHit.nチャンネル番号 == 0x17))
{
this.tドラムヒット処理(nTime, Eパッド.RRed, chipNoHit, false, nUsePlayer);
}
if (!bHitted)
break;
continue;
}
//-----------------------------
#endregion
case Eパッド.LBlue:
case Eパッド.LBlue2P:
#region[ ]
//-----------------------------
{
if (e判定 != E判定.Miss && chipNoHit.nチャンネル番号 == 0x12)
{
this.tドラムヒット処理(nTime, Eパッド.LBlue, chipNoHit, false, nUsePlayer);
bHitted = true;
}
if (e判定 != E判定.Miss && (chipNoHit.nチャンネル番号 == 0x14 || chipNoHit.nチャンネル番号 == 0x1B) && !TJAPlayer3.ConfigIni.b大音符判定)
{
this.tドラムヒット処理(nTime, Eパッド.LBlue, chipNoHit, true, nUsePlayer);
bHitted = true;
this.nWaitButton = 0;
break;
}
if (e判定 != E判定.Miss && (chipNoHit.nチャンネル番号 == 0x14 || chipNoHit.nチャンネル番号 == 0x1B) && TJAPlayer3.ConfigIni.b大音符判定)
{
if (chipNoHit.eNoteState == ENoteState.none)
{
float time = chipNoHit.n発声時刻ms - (float)(CSound管理.rc演奏用タイマ.n現在時刻ms * (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0));
if (time <= 110)
{
chipNoHit.nProcessTime = (int)CSound管理.rc演奏用タイマ.n現在時刻ms;
chipNoHit.eNoteState = ENoteState.wait;
this.nWaitButton = 2;
}
}
else if (chipNoHit.eNoteState == ENoteState.wait)
{
float time = chipNoHit.n発声時刻ms - (float)(CSound管理.rc演奏用タイマ.n現在時刻ms * (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0));
int nWaitTime = TJAPlayer3.ConfigIni.n両手判定の待ち時間;
if (this.nWaitButton == 1 && time <= 110 && chipNoHit.nProcessTime + nWaitTime > (int)(CSound管理.rc演奏用タイマ.n現在時刻 * (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0)))
{
this.tドラムヒット処理(nTime, Eパッド.LBlue, chipNoHit, true, nUsePlayer);
bHitted = true;
this.nWaitButton = 0;
}
else if (this.nWaitButton == 2 && time <= 110 && chipNoHit.nProcessTime + nWaitTime < (int)(CSound管理.rc演奏用タイマ.n現在時刻 * (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0)))
{
this.tドラムヒット処理(nTime, Eパッド.LBlue, chipNoHit, false, nUsePlayer);
bHitted = true;
this.nWaitButton = 0;
}
}
}
if (e判定 != E判定.Miss && (chipNoHit.nチャンネル番号 == 0x15 || chipNoHit.nチャンネル番号 == 0x16))
{
this.tドラムヒット処理(nTime, Eパッド.LBlue, chipNoHit, false, nUsePlayer);
}
if (!bHitted)
break;
continue;
}
//-----------------------------
#endregion
case Eパッド.RBlue:
case Eパッド.RBlue2P:
#region[ ]
//-----------------------------
{
if (e判定 != E判定.Miss && chipNoHit.nチャンネル番号 == 0x12)
{
this.tドラムヒット処理(nTime, Eパッド.RBlue, chipNoHit, false, nUsePlayer);
bHitted = true;
}
if (e判定 != E判定.Miss && (chipNoHit.nチャンネル番号 == 0x14 || chipNoHit.nチャンネル番号 == 0x1B) && !TJAPlayer3.ConfigIni.b大音符判定)
{
this.tドラムヒット処理(nTime, Eパッド.RBlue, chipNoHit, true, nUsePlayer);
bHitted = true;
this.nWaitButton = 0;
break;
}
if (e判定 != E判定.Miss && (chipNoHit.nチャンネル番号 == 0x14 || chipNoHit.nチャンネル番号 == 0x1B) && TJAPlayer3.ConfigIni.b大音符判定)
{
if (chipNoHit.eNoteState == ENoteState.none)
{
float time = chipNoHit.n発声時刻ms - (float)(CSound管理.rc演奏用タイマ.n現在時刻ms * (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0));
if (time <= 110)
{
chipNoHit.nProcessTime = (int)CSound管理.rc演奏用タイマ.n現在時刻ms;
this.n待機中の大音符の座標 = chipNoHit.nバーからの距離dot.Taiko;
chipNoHit.eNoteState = ENoteState.wait;
this.nWaitButton = 1;
}
}
else if (chipNoHit.eNoteState == ENoteState.wait)
{
float time = chipNoHit.n発声時刻ms - (float)(CSound管理.rc演奏用タイマ.n現在時刻ms * (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0));
int nWaitTime = TJAPlayer3.ConfigIni.n両手判定の待ち時間;
if (this.nWaitButton == 2 && time <= 110 && chipNoHit.nProcessTime + nWaitTime > (int)(CSound管理.rc演奏用タイマ.n現在時刻 * (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0)))
{
this.tドラムヒット処理(nTime, Eパッド.RBlue, chipNoHit, true, nUsePlayer);
bHitted = true;
this.nWaitButton = 0;
break;
}
else if (this.nWaitButton == 2 && time <= 110 && chipNoHit.nProcessTime + nWaitTime < (int)(CSound管理.rc演奏用タイマ.n現在時刻 * (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0)))
{
this.tドラムヒット処理(nTime, Eパッド.RBlue, chipNoHit, false, nUsePlayer);
bHitted = true;
this.nWaitButton = 0;
}
}
}
if (e判定 != E判定.Miss && (chipNoHit.nチャンネル番号 == 0x15 || chipNoHit.nチャンネル番号 == 0x16))
{
this.tドラムヒット処理(nTime, Eパッド.RBlue, chipNoHit, false, nUsePlayer);
}
if (!bHitted)
break;
continue;
}
//-----------------------------
#endregion
}
*/
#endregion
//2016.07.14 kairera0467 Adlibの場合、一括して処理を行う。
//-----------------------------
#endregion
#region [ (B) ]
#region [ ]
//-----------------------------
int pad = nPad; // 以下、nPad の代わりに pad を用いる。(成りすまし用)
// BAD or TIGHT 時の処理。
@ -2235,9 +1967,10 @@ internal class CStage演奏ドラム画面 : CStage演奏画面共通 {
bool _isSwapNote = NotesManager.IsSwapNote(chipNoHit, _gt);
if (chipNoHit != null && (_isBigDonTaiko || _isBigKaTaiko)) {
CConfigIni.CTimingZones tz = this.GetTimingZones(i);
float timeC = chipNoHit.n発声時刻ms - (float)(SoundManager.PlayTimer.NowTime * OpenTaiko.ConfigIni.SongPlaybackSpeed);
int nWaitTime = OpenTaiko.ConfigIni.nBigNoteWaitTimems;
if (chipNoHit.eNoteState == ENoteState.Wait && timeC <= 110
if (chipNoHit.eNoteState == ENoteState.Wait && timeC <= tz.nBadZone
&& chipNoHit.nProcessTime + nWaitTime <= (int)(SoundManager.PlayTimer.NowTime * OpenTaiko.ConfigIni.SongPlaybackSpeed)) {
if (!_isSwapNote) {
this.tドラムヒット処理(chipNoHit.nProcessTime, EPad.RRed, chipNoHit, false, i);