diff --git a/TJAPlayer3/Songs/CDTX.cs b/TJAPlayer3/Songs/CDTX.cs index f62e34bf..1089f3e5 100644 --- a/TJAPlayer3/Songs/CDTX.cs +++ b/TJAPlayer3/Songs/CDTX.cs @@ -2448,6 +2448,8 @@ namespace TJAPlayer3 case 0x15: case 0x16: case 0x17: + case 0x20: + case 0x21: { if (this.bOFFSETの値がマイナスである) { @@ -4372,7 +4374,7 @@ namespace TJAPlayer3 if (nObjectNum != 0) { - if ((nObjectNum >= 5 && nObjectNum <= 7) || nObjectNum == 9) + if ((nObjectNum >= 5 && nObjectNum <= 7) || nObjectNum == 9 || nObjectNum == 16 || nObjectNum == 17) { if (nNowRoll != 0) { diff --git a/TJAPlayer3/Stages/07.Game/CStage演奏画面共通.cs b/TJAPlayer3/Stages/07.Game/CStage演奏画面共通.cs index facf660c..665e7167 100644 --- a/TJAPlayer3/Stages/07.Game/CStage演奏画面共通.cs +++ b/TJAPlayer3/Stages/07.Game/CStage演奏画面共通.cs @@ -919,7 +919,7 @@ namespace TJAPlayer3 //while ( nIndex_NearestChip_Past >= 0 ) // 過去方向への検索 for ( ; nIndex_NearestChip_Past >= 0; nIndex_NearestChip_Past-- ) { - if ( ( 0x15 <= nChannel ) && ( nChannel <= 0x17 ) ) + if ( (( 0x15 <= nChannel ) && ( nChannel <= 0x17 ) || (nChannel == 0x20 || nChannel == 0x21)) ) { CDTX.CChip chip = playerListChip[ nIndex_NearestChip_Past ]; @@ -1139,47 +1139,58 @@ namespace TJAPlayer3 else this.actScore.Add( E楽器パート.TAIKO, this.bIsAutoPlay, 100L, nPlayer ); } - } - + } + + EGameType _gt = TJAPlayer3.ConfigIni.nGameType[TJAPlayer3.GetActualPlayer(nPlayer)]; //赤か青かの分岐 - if( sort == 0 ) + if ( sort == 0|| sort == 2 ) { if (pChip.nPlayerSide == 0) this.soundRed?.t再生を開始する(); else - this.soundRed2?.t再生を開始する(); - if (pChip.nチャンネル番号 == 0x15) - { - //CDTXMania.Skin.soundRed.t再生する(); - //CDTXMania.stage演奏ドラム画面.actChipFireTaiko.Start( 1, nPlayer ); - TJAPlayer3.stage演奏ドラム画面.FlyingNotes.Start(1, nPlayer, true); - } - else - { - //CDTXMania.Skin.soundRed.t再生する(); - //CDTXMania.stage演奏ドラム画面.actChipFireTaiko.Start( 3, nPlayer ); - TJAPlayer3.stage演奏ドラム画面.FlyingNotes.Start(3, nPlayer, true); + this.soundRed2?.t再生を開始する(); + + if (pChip.nチャンネル番号 == 0x15 || _gt == EGameType.KONGA || (_gt == EGameType.TAIKO && pChip.nチャンネル番号 == 0x21)) + { + //CDTXMania.Skin.soundRed.t再生する(); + //CDTXMania.stage演奏ドラム画面.actChipFireTaiko.Start( 1, nPlayer ); + TJAPlayer3.stage演奏ドラム画面.FlyingNotes.Start(1, nPlayer, true); + } + else + { + //CDTXMania.Skin.soundRed.t再生する(); + //CDTXMania.stage演奏ドラム画面.actChipFireTaiko.Start( 3, nPlayer ); + TJAPlayer3.stage演奏ドラム画面.FlyingNotes.Start(3, nPlayer, true); } } - else + else if (sort == 1 || sort == 3) { if (pChip.nPlayerSide == 0) this.soundBlue?.t再生を開始する(); else - this.soundBlue2?.t再生を開始する(); - if (pChip.nチャンネル番号 == 0x15) - { - //CDTXMania.Skin.soundBlue.t再生する(); - //CDTXMania.stage演奏ドラム画面.actChipFireTaiko.Start( 2, nPlayer ); - TJAPlayer3.stage演奏ドラム画面.FlyingNotes.Start(2, nPlayer, true); + this.soundBlue2?.t再生を開始する(); + + if (pChip.nチャンネル番号 == 0x15 || _gt == EGameType.KONGA || (_gt == EGameType.TAIKO && pChip.nチャンネル番号 == 0x21)) + { + //CDTXMania.Skin.soundBlue.t再生する(); + //CDTXMania.stage演奏ドラム画面.actChipFireTaiko.Start( 2, nPlayer ); + TJAPlayer3.stage演奏ドラム画面.FlyingNotes.Start(2, nPlayer, true); + } + else + { + //CDTXMania.Skin.soundBlue.t再生する(); + //CDTXMania.stage演奏ドラム画面.actChipFireTaiko.Start( 4, nPlayer ); + TJAPlayer3.stage演奏ドラム画面.FlyingNotes.Start(4, nPlayer, true); } + } + else if (sort == 4) + { + if (pChip.nPlayerSide == 0) + this.soundClap?.t再生を開始する(); else - { - //CDTXMania.Skin.soundBlue.t再生する(); - //CDTXMania.stage演奏ドラム画面.actChipFireTaiko.Start( 4, nPlayer ); - TJAPlayer3.stage演奏ドラム画面.FlyingNotes.Start(4, nPlayer, true); - } + this.soundClap2?.t再生を開始する(); + TJAPlayer3.stage演奏ドラム画面.FlyingNotes.Start(4, nPlayer, true); } //TJAPlayer3.stage演奏ドラム画面.actTaikoLaneFlash.PlayerLane[nPlayer].Start(PlayerLane.FlashType.Hit); @@ -1364,10 +1375,11 @@ namespace TJAPlayer3 if (this.bPAUSE == false && rollSpeed > 0) // && TJAPlayer3.ConfigIni.bAuto先生の連打) { - - if (((CSound管理.rc演奏用タイマ.n現在時刻 * (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0)) * (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0)) > (pChip.n発声時刻ms + (1000.0 / (double)rollSpeed) * pChip.nRollCount)) - { + { + EGameType _gt = TJAPlayer3.ConfigIni.nGameType[TJAPlayer3.GetActualPlayer(nPlayer)]; + int nLane = 0; + if (this.nHand[nPlayer] == 0) this.nHand[nPlayer]++; else @@ -1379,10 +1391,13 @@ namespace TJAPlayer3 TJAPlayer3.stage演奏ドラム画面.actTaikoLaneFlash.PlayerLane[nPlayer].Start(PlayerLane.FlashType.Red); //CDTXMania.stage演奏ドラム画面.actChipFireTaiko.Start( pChip.nチャンネル番号 == 0x15 ? 1 : 3, nPlayer ); TJAPlayer3.stage演奏ドラム画面.FlyingNotes.Start(pChip.nチャンネル番号 == 0x15 ? 1 : 3, nPlayer, true); - TJAPlayer3.stage演奏ドラム画面.actMtaiko.tMtaikoEvent(pChip.nチャンネル番号, this.nHand[nPlayer], nPlayer); + TJAPlayer3.stage演奏ドラム画面.actMtaiko.tMtaikoEvent(pChip.nチャンネル番号, this.nHand[nPlayer], nPlayer); + + + if (pChip.nチャンネル番号 == 0x20 && _gt == EGameType.KONGA) nLane = 4; + else if (pChip.nチャンネル番号 == 0x21 && _gt == EGameType.KONGA) nLane = 1; - - this.tRollProcess(pChip, (CSound管理.rc演奏用タイマ.n現在時刻 * (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0)), 1, 0, 0, nPlayer); + this.tRollProcess(pChip, (CSound管理.rc演奏用タイマ.n現在時刻 * (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0)), 1, nLane, 0, nPlayer); } } } @@ -3127,7 +3142,18 @@ namespace TJAPlayer3 #region [ 20-2F: EmptySlot ] case 0x20: case 0x21: - case 0x22: + { + if ((pChip.n発声時刻ms <= (int)n現在時刻ms && pChip.nノーツ終了時刻ms >= (int)n現在時刻ms)) + { + //if( this.n現在のコース == pChip.nコース ) + if (pChip.b可視 == true) + this.chip現在処理中の連打チップ[nPlayer] = pChip; + } + if (pChip.n描画優先度 <= 0) + this.t進行描画_チップ_Taiko連打(configIni, ref dTX, ref pChip, nPlayer); + } + break; + case 0x22: case 0x23: case 0x24: case 0x25: @@ -3832,6 +3858,8 @@ namespace TJAPlayer3 case 0x17: //風船 case 0x18: //連打終了 case 0x19: + case 0x20: + case 0x21: { if( pChip.n描画優先度 >= 1 ) this.t進行描画_チップ_Taiko連打( configIni, ref dTX, ref pChip, nPlayer ); diff --git a/TJAPlayer3/Stages/07.Game/Taiko/CStage演奏ドラム画面.cs b/TJAPlayer3/Stages/07.Game/Taiko/CStage演奏ドラム画面.cs index 187a2444..67a3aa6a 100644 --- a/TJAPlayer3/Stages/07.Game/Taiko/CStage演奏ドラム画面.cs +++ b/TJAPlayer3/Stages/07.Game/Taiko/CStage演奏ドラム画面.cs @@ -812,7 +812,7 @@ namespace TJAPlayer3 break; case Eパッド.CLAP: case Eパッド.CLAP2P: - nInput = 3; + nInput = 4; break; } @@ -1248,16 +1248,16 @@ namespace TJAPlayer3 { bool _isBalloon = NotesManager.IsBalloon(chipNoHit); bool _isKusudama = NotesManager.IsKusudama(chipNoHit); - bool _isKongaRedRoll = NotesManager.IsRoll(chipNoHit) && _gt == EGameType.KONGA; + bool _isKongaRedRoll = (NotesManager.IsSmallRoll(chipNoHit) || NotesManager.IsBigRoll(chipNoHit)) || _gt == EGameType.TAIKO; bool _isRedOnly = _isBalloon || _isKongaRedRoll || _isKusudama; // To be added later bool _isKongaPinkRoll = NotesManager.IsBigRoll(chipNoHit) && _gt == EGameType.KONGA; - bool _isBlueOnly = false; + bool _isBlueOnly = (NotesManager.IsYellowRoll(chipNoHit) || NotesManager.IsBigRoll(chipNoHit)) || _gt == EGameType.TAIKO; - if ((!_isRedOnly || !_isBlue) && (!_isBlueOnly || _isBlue)) + if ((_isRedOnly && !_isBlue) || (_isBlueOnly && _isBlue)) this.tドラムヒット処理(nTime, _pad, chipNoHit, false, nUsePlayer); } @@ -1270,14 +1270,26 @@ namespace TJAPlayer3 case Eパッド.CLAP: case Eパッド.CLAP2P: { + var _pad = (Eパッド)nPad; // Process konga clap if (e判定 != E判定.Miss && _isClapKonga) { - this.tドラムヒット処理(nTime, Eパッド.CLAP, chipNoHit, false, nUsePlayer); + this.tドラムヒット処理(nTime, _pad, chipNoHit, false, nUsePlayer); bHitted = true; } + // Judge rolls + if (e判定 != E判定.Miss + && NotesManager.IsGenericRoll(chipNoHit) + && !NotesManager.IsRollEnd(chipNoHit)) + { + bool _isKongaClapRoll = NotesManager.IsClapRoll(chipNoHit) && _gt == EGameType.KONGA; + + if (_isKongaClapRoll) + this.tドラムヒット処理(nTime, _pad, chipNoHit, false, nUsePlayer); + } + if (!bHitted) break; diff --git a/TJAPlayer3/Stages/07.Game/Taiko/NotesManager.cs b/TJAPlayer3/Stages/07.Game/Taiko/NotesManager.cs index c1a79b1b..1b8df52b 100644 --- a/TJAPlayer3/Stages/07.Game/Taiko/NotesManager.cs +++ b/TJAPlayer3/Stages/07.Game/Taiko/NotesManager.cs @@ -34,8 +34,8 @@ namespace TJAPlayer3 ["E"] = 5, // Unused ["F"] = 15, // ADLib ["G"] = 0xF1, // Green (Purple) double hit note (Coming soon) - ["H"] = 5, // Konga clap roll (Coming soon) - ["I"] = 5, // Konga yellow roll (Coming soon) + ["H"] = 16, // Konga clap roll (Coming soon) + ["I"] = 17, // Konga yellow roll (Coming soon) }; public static bool FastFlankedParsing(string s) @@ -169,6 +169,18 @@ namespace TJAPlayer3 return (chip.nチャンネル番号 == 0x101); } + public static bool IsYellowRoll(CDTX.CChip chip) + { + if (chip == null) return false; + return chip.nチャンネル番号 == 0x21; + } + + public static bool IsClapRoll(CDTX.CChip chip) + { + if (chip == null) return false; + return chip.nチャンネル番号 == 0x20; + } + public static bool IsKusudama(CDTX.CChip chip) { if (chip == null) return false; @@ -208,13 +220,14 @@ namespace TJAPlayer3 public static bool IsRoll(CDTX.CChip chip) { if (chip == null) return false; - return IsBigRoll(chip) || IsSmallRoll(chip); + return IsBigRoll(chip) || IsSmallRoll(chip) || IsClapRoll(chip) || IsYellowRoll(chip); } public static bool IsGenericRoll(CDTX.CChip chip) { if (chip == null) return false; - return 0x15 <= chip.nチャンネル番号 && chip.nチャンネル番号 <= 0x19; + return (0x15 <= chip.nチャンネル番号 && chip.nチャンネル番号 <= 0x19) || + (chip.nチャンネル番号 == 0x20 || chip.nチャンネル番号 == 0x21); } public static bool IsMissableNote(CDTX.CChip chip) @@ -295,7 +308,25 @@ namespace TJAPlayer3 if (TJAPlayer3.ConfigIni.eSTEALTH[TJAPlayer3.GetActualPlayer(player)] != Eステルスモード.OFF || !chip.bShow || TJAPlayer3.Tx.Notes[(int)_gt] == null) return; - int _offset = IsBigRoll(chip) ? 390 : 0; + int _offset = 0; + + if (IsSmallRoll(chip) || (_gt == EGameType.TAIKO && IsYellowRoll(chip))) + { + _offset = 0; + } + if (IsBigRoll(chip) || (_gt == EGameType.TAIKO && IsClapRoll(chip))) + { + _offset = 390; + } + else if (IsClapRoll(chip) && _gt == EGameType.KONGA) + { + _offset = 1430; + } + else if (IsYellowRoll(chip) && _gt == EGameType.KONGA) + { + _offset = 1040; + } + float _adjust = 65f; int index = x末端 - x; diff --git a/Test/System/SimpleStyle/Graphics/5_Game/Notes_Konga.png b/Test/System/SimpleStyle/Graphics/5_Game/Notes_Konga.png index 0691cc77..1a6741de 100644 Binary files a/Test/System/SimpleStyle/Graphics/5_Game/Notes_Konga.png and b/Test/System/SimpleStyle/Graphics/5_Game/Notes_Konga.png differ