1
0
mirror of synced 2025-02-17 19:09:25 +01:00

ADLIBs and Mines no longer eat inputs, hitting mines now breaks combo and substract gauge points, ADLIBs no longer break DFC runs (always judged as Goods), bombs and ADLIBs are never judged 'Bad' when hit

This commit is contained in:
0aubsq 2022-05-21 01:13:32 +02:00
parent d99e9924da
commit 9710bf75f7
6 changed files with 131 additions and 59 deletions

View File

@ -226,6 +226,7 @@ namespace TJAPlayer3
Bad = 5,
Auto = 6,
ADLIB = 7,
Mine = 8,
}
internal enum E判定文字表示位置
{

View File

@ -375,6 +375,13 @@ namespace TJAPlayer3
#endregion
#endif
public void MineDamage(int nPlayer)
{
this.db現在のゲージ値[nPlayer] = Math.Max(0, this.db現在のゲージ値[nPlayer] - 4);
}
public void Damage(E楽器パート screenmode, E楽器パート part, E判定 e今回の判定, int nPlayer)
{
float fDamage;

View File

@ -770,6 +770,36 @@ namespace TJAPlayer3
}
}
private bool tEasyTimeZones(int nPlayer)
{
bool _timingzonesAreEasy = false;
int diff = TJAPlayer3.stage選曲.n確定された曲の難易度[nPlayer];
// Diff = Normal or Easy
if (diff <= (int)Difficulty.Normal)
{
_timingzonesAreEasy = true;
}
// Diff = Dan and current song is Normal or Easy
if (diff == (int)Difficulty.Dan)
{
int _nb = TJAPlayer3.stage演奏ドラム画面.actDan.NowShowingNumber;
var _danSongs = TJAPlayer3.stage選曲.r確定された曲.DanSongs;
if (_nb < _danSongs.Count)
{
var _currentDiff = _danSongs[_nb].Difficulty;
if (_currentDiff <= (int)Difficulty.Normal)
_timingzonesAreEasy = true;
}
}
return _timingzonesAreEasy;
}
private E判定 e指定時刻からChipのJUDGEを返すImpl( long nTime, CDTX.CChip pChip, int player = 0 )
{
@ -793,7 +823,7 @@ namespace TJAPlayer3
}
}
int diff = TJAPlayer3.stage選曲.n確定された曲の難易度[player];
// To change later to adapt to Tower Ama-kuchi
//diff = Math.Min(diff, (int)Difficulty.Oni);
@ -802,28 +832,7 @@ namespace TJAPlayer3
int timingShift = TJAPlayer3.ConfigIni.nTimingZones[actual];
bool _timingzonesAreEasy = false;
// Diff = Normal or Easy
if (diff <= (int)Difficulty.Normal)
{
_timingzonesAreEasy = true;
}
// Diff = Dan and current song is Normal or Easy
if (diff == (int)Difficulty.Dan)
{
int _nb = TJAPlayer3.stage演奏ドラム画面.actDan.NowShowingNumber;
var _danSongs = TJAPlayer3.stage選曲.r確定された曲.DanSongs;
if (_nb < _danSongs.Count)
{
var _currentDiff = _danSongs[_nb].Difficulty;
if (_currentDiff <= (int)Difficulty.Normal)
_timingzonesAreEasy = true;
}
}
bool _timingzonesAreEasy = tEasyTimeZones(player);
CConfigIni.CTimingZones tz = (_timingzonesAreEasy == true) ? TJAPlayer3.ConfigIni.tzLevels[timingShift] : TJAPlayer3.ConfigIni.tzLevels[2 + timingShift];
@ -833,16 +842,19 @@ namespace TJAPlayer3
}
if (nDeltaTime <= tz.nOkZone * (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0))
{
if ( TJAPlayer3.ConfigIni.bJust[actual] == 1 ) // Just
if ( TJAPlayer3.ConfigIni.bJust[actual] == 1 && NotesManager.IsMissableNote(pChip)) // Just
return E判定.Poor;
return E判定.Good;
}
if (nDeltaTime <= tz.nBadZone * (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0))
{
if (TJAPlayer3.ConfigIni.bJust[actual] == 2) // Safe
if (nDeltaTime <= tz.nBadZone * (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0))
{
if (TJAPlayer3.ConfigIni.bJust[actual] == 2 || !NotesManager.IsMissableNote(pChip)) // Safe
return E判定.Good;
return E判定.Poor;
}
return E判定.Poor;
}
}
return E判定.Miss;
}
@ -1284,6 +1296,8 @@ namespace TJAPlayer3
//unsafeコードにつき、デバッグ中の変更厳禁!
bool bAutoPlay = false;
bool bBombHit = false;
switch (nPlayer)
{
case 0:
@ -1423,6 +1437,20 @@ namespace TJAPlayer3
this.actJudgeString.Start(nPlayer, eJudgeResult != E判定.Bad ? E判定.ADLIB : E判定.Bad);
TJAPlayer3.stage演奏ドラム画面.actLaneTaiko.Start(0x11, eJudgeResult, true, nPlayer);
TJAPlayer3.stage演奏ドラム画面.actChipFireD.Start(0x11, eJudgeResult, nPlayer);
eJudgeResult = E判定.Perfect; // Prevent ADLIB notes breaking DFC runs
}
break;
}
else if (NotesManager.IsMine(pChip))
{
if (eJudgeResult != E判定.Auto && eJudgeResult != E判定.Miss)
{
this.actJudgeString.Start(nPlayer, eJudgeResult != E判定.Bad ? E判定.Mine : E判定.Bad);
TJAPlayer3.stage演奏ドラム画面.actLaneTaiko.Start(0x11, eJudgeResult, true, nPlayer);
TJAPlayer3.stage演奏ドラム画面.actChipFireD.Start(0x11, eJudgeResult, nPlayer);
bBombHit = true;
eJudgeResult = E判定.Bad;
actGauge.MineDamage(nPlayer);
}
break;
}
@ -1445,9 +1473,10 @@ namespace TJAPlayer3
}
break;
}
if ((pChip.e楽器パート != E楽器パート.UNKNOWN))
{
if (!NotesManager.IsGenericRoll(pChip) && !NotesManager.IsADLIB(pChip))
if (NotesManager.IsMissableNote(pChip))
{
actGauge.Damage(screenmode, pChip.e楽器パート, eJudgeResult, nPlayer);
}
@ -1561,7 +1590,7 @@ namespace TJAPlayer3
case E判定.Miss:
case E判定.Bad:
{
if(NotesManager.IsADLIB(pChip))
if(!NotesManager.IsMissableNote(pChip) && !bBombHit)
break;
if (TJAPlayer3.stage選曲.n確定された曲の難易度[0] == (int)Difficulty.Dan)
@ -1955,6 +1984,7 @@ namespace TJAPlayer3
protected CDTX.CChip r指定時刻に一番近い未ヒットChipを過去方向優先で検索する( long nTime, int nPlayer )
{
//sw2.Start();
int nIndex_InitialPositionSearchingToPast;
int nTimeDiff;
int count = listChip[ nPlayer ].Count;
@ -2011,20 +2041,19 @@ namespace TJAPlayer3
{
CDTX.CChip chip = listChip[ nPlayer ][ nIndex_NearestChip_Past ];
//if ( (!chip.bHit && chip.b可視 ) && ( ( 0x93 <= chip.nチャンネル番号 ) && ( chip.nチャンネル番号 <= 0x99 ) ) )
if ( (!chip.bHit && chip.b可視 ) && NotesManager.IsHittableNote(chip) && !NotesManager.IsRollEnd(chip) )
{
if ( (!chip.bHit && chip.b可視 ) && NotesManager.IsHittableNote(chip) && !NotesManager.IsRollEnd(chip) )
{
break;
}
//2015.11.5 kairera0467 連打対策
else if ( ( chip.b可視 ) && NotesManager.IsGenericRoll(chip) && !NotesManager.IsRollEnd(chip))
{
break;
}
// nIndex_NearestChip_Past--;
}
}
// nIndex_NearestChip_Past--;
}
if ( ( nIndex_NearestChip_Future >= count ) && ( nIndex_NearestChip_Past < 0 ) ) // 検索対象が過去未来どちらにも見つからなかった場合
{
//sw2.Stop();
@ -2045,9 +2074,13 @@ namespace TJAPlayer3
{
int nTimeDiff_Future = Math.Abs( (int) ( nTime - listChip[ nPlayer ][ nIndex_NearestChip_Future ].n発声時刻ms ) );
int nTimeDiff_Past = Math.Abs( (int) ( nTime - listChip[ nPlayer ][ nIndex_NearestChip_Past ].n発声時刻ms ) );
if ( nTimeDiff_Future < nTimeDiff_Past )
if ( nTimeDiff_Future < nTimeDiff_Past )
{
if( !listChip[ nPlayer ][ nIndex_NearestChip_Past ].bHit && ( listChip[ nPlayer ][ nIndex_NearestChip_Past ].n発声時刻ms + ( 108 ) >= nTime ) )
if( !listChip[ nPlayer ][ nIndex_NearestChip_Past ].bHit
&& listChip[ nPlayer ][ nIndex_NearestChip_Past ].n発声時刻ms + 108 >= nTime
&& NotesManager.IsMissableNote(listChip[nPlayer][nIndex_NearestChip_Past])
)
{
nearestChip = listChip[ nPlayer ][ nIndex_NearestChip_Past ];
}

View File

@ -67,17 +67,37 @@ namespace TJAPlayer3
public void Start(int player, E判定 judge)
{
JudgeAnimes[player, JudgeAnime.Index].counter.t開始(0, 410, 1, TJAPlayer3.Timer);
JudgeAnimes[player, JudgeAnime.Index].Judge = judge;
int njudge = judge == E判定.Perfect ? 0 : judge == E判定.Good ? 1 : judge == E判定.ADLIB ? 3 : judge == E判定.Auto ? 0 : 2;
JudgeAnimes[player, JudgeAnime.Index].Judge = judge;
//int njudge = judge == E判定.Perfect ? 0 : judge == E判定.Good ? 1 : judge == E判定.ADLIB ? 3 : judge == E判定.Auto ? 0 : 2;
int njudge = 2;
if (JudgesDict.ContainsKey(judge))
{
njudge = JudgesDict[judge];
}
JudgeAnimes[player, JudgeAnime.Index].rc = new Rectangle(0, (int)njudge * 60, 90, 60);
JudgeAnime.Index++;
if (JudgeAnime.Index >= 511) JudgeAnime.Index = 0;
}
// その他
}
// その他
#region [ private ]
//-----------------
//-----------------
private static Dictionary<E判定, int> JudgesDict = new Dictionary<E判定, int>
{
[E判定.Perfect] = 0,
[E判定.Auto] = 0,
[E判定.Good] = 1,
[E判定.Bad] = 2,
[E判定.Miss] = 2,
[E判定.ADLIB] = 3,
[E判定.Mine] = 4,
};
private JudgeAnime[,] JudgeAnimes;
private class JudgeAnime

View File

@ -789,14 +789,16 @@ namespace TJAPlayer3
e判定 = AlterJudgement(nPlayer, e判定, false);
//if( pChip.nコース == this.n現在のコース )
this.actGame.t叩ききりまショー_判定から各数値を増加させる( e判定, (int)( nHitTime - pChip.n発声時刻ms ) );
if( e判定 == E判定.Miss )
{
return false;
}
this.tチップのヒット処理( nHitTime, pChip, E楽器パート.TAIKO, true, nInput, nPlayer );
if( ( e判定 != E判定.Poor ) && ( e判定 != E判定.Miss ) )
if( ( e判定 != E判定.Poor ) && ( e判定 != E判定.Miss ) )
{
TJAPlayer3.stage演奏ドラム画面.actLaneTaiko.Start( pChip.nチャンネル番号, e判定, b両手入力, nPlayer );
@ -1255,6 +1257,19 @@ namespace TJAPlayer3
}
if (e判定 != E判定.Miss && NotesManager.IsADLIB(chipNoHit))
{
this.tドラムヒット処理(nTime, (Eパッド)nPad, chipNoHit, false, nUsePlayer);
bHitted = true;
}
if (e判定 != E判定.Miss && NotesManager.IsMine(chipNoHit))
{
this.tドラムヒット処理(nTime, (Eパッド)nPad, chipNoHit, false, nUsePlayer);
bHitted = true;
}
#region [ (A) inputEvent ]
//-----------------------------
@ -1512,18 +1527,14 @@ namespace TJAPlayer3
#endregion
//2016.07.14 kairera0467 Adlibの場合、一括して処理を行う。
if (e判定 != E判定.Miss && NotesManager.IsADLIB(chipNoHit))
{
this.tドラムヒット処理(nTime, (Eパッド)nPad, chipNoHit, false, nUsePlayer);
bHitted = true;
}
//-----------------------------
//-----------------------------
#endregion
#region [ (B) ]
//-----------------------------
//-----------------------------
int pad = nPad; // 以下、nPad の代わりに pad を用いる。(成りすまし用)
// BAD or TIGHT 時の処理。
if (TJAPlayer3.ConfigIni.bTight && !b連打中[nUsePlayer]) // 18/8/13 - 連打時にこれが発動すると困る!!! (AioiLight)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 15 KiB