diff --git a/TJAPlayer3/Common/CSkin.cs b/TJAPlayer3/Common/CSkin.cs index 047a9d4e..40f500cb 100644 --- a/TJAPlayer3/Common/CSkin.cs +++ b/TJAPlayer3/Common/CSkin.cs @@ -8774,6 +8774,9 @@ namespace TJAPlayer3 public int[] Game_Balloon_Balloon_Number_4P = new int[] { 423, 95 }; public int[] Game_Balloon_Balloon_Number_5P = new int[] { 423, 87 }; + + public int Game_Kusudama_Number_X = 960; + public int Game_Kusudama_Number_Y = 450; #endregion #region Effects public int[] Game_Effect_Roll_StartPoint_X = new int[] { 56, -10, 200, 345, 100, 451, 600, 260, -30, 534, 156, 363 }; diff --git a/TJAPlayer3/Songs/CDTX.cs b/TJAPlayer3/Songs/CDTX.cs index 65dad7b8..7e2ec827 100644 --- a/TJAPlayer3/Songs/CDTX.cs +++ b/TJAPlayer3/Songs/CDTX.cs @@ -4283,7 +4283,7 @@ namespace TJAPlayer3 if (b分岐前の連打開始) { //if (listChips[i].nチャンネル番号 == 0x15 || listChips[i].nチャンネル番号 == 0x16) - if (NotesManager.IsRoll(listChips[i])) + if (NotesManager.IsRoll(listChips[i]) || NotesManager.IsFuzeRoll(listChips[i])) { if (nReturnChip == null) nReturnChip = i; @@ -4453,7 +4453,7 @@ namespace TJAPlayer3 if (nObjectNum != 0) { - if ((nObjectNum >= 5 && nObjectNum <= 7) || nObjectNum == 9 || nObjectNum == 16 || nObjectNum == 17) + if ((nObjectNum >= 5 && nObjectNum <= 7) || nObjectNum == 9 || nObjectNum == 13 || nObjectNum == 16 || nObjectNum == 17) { if (nNowRoll != 0) { @@ -4495,8 +4495,8 @@ namespace TJAPlayer3 chip.dbBPM = this.dbNowBPM; chip.dbSCROLL = this.dbNowScroll; chip.dbSCROLL_Y = this.dbNowScrollY; - chip.nスクロール方向 = this.nスクロール方向; - + chip.nスクロール方向 = this.nスクロール方向; + if (IsEndedBranching) chip.nコース = (ECourse)i; else @@ -4637,6 +4637,9 @@ namespace TJAPlayer3 case 0xB: chip.nSenote = 6; break; + case 0xD: + chip.nSenote = 0xB; + break; case 0xF1: chip.nSenote = 5; break; diff --git a/TJAPlayer3/Stages/01.StartUp/TextureLoader.cs b/TJAPlayer3/Stages/01.StartUp/TextureLoader.cs index d823a71a..4415c835 100644 --- a/TJAPlayer3/Stages/01.StartUp/TextureLoader.cs +++ b/TJAPlayer3/Stages/01.StartUp/TextureLoader.cs @@ -57,6 +57,10 @@ namespace TJAPlayer3 const string MODICONS = @"21_ModIcons\"; const string AIBATTLE = @"22_AIBattle\"; + // Special balloons + const string KUSUDAMA = @"Kusudama\"; + const string FUSE = @"Fuseroll\"; + // Tower infos const string TOWERDON = @"Tower_Don\"; const string TOWERFLOOR = @"Tower_Floors\"; @@ -594,8 +598,17 @@ namespace TJAPlayer3 Balloon_Breaking[i] = TxC(GAME + BALLOON + @"Breaking_" + i.ToString() + ".png"); } + Kusudama = TxC(GAME + BALLOON + KUSUDAMA + @"Kusudama.png"); + Kusudama_Clear = TxC(GAME + BALLOON + KUSUDAMA + @"Kusudama_Clear.png"); + Kusudama_Fail = TxC(GAME + BALLOON + KUSUDAMA + @"Kusudama_Fail.png"); + Kusudama_Number = TxC(GAME + BALLOON + KUSUDAMA + @"Kusudama_Number.png"); + Kusudama_Back = TxC(GAME + BALLOON + KUSUDAMA + @"Kusudama_Back.png"); + + Fuse_Number = TxC(GAME + BALLOON + FUSE + @"Number_Fuse.png"); + Fuse_Balloon = TxC(GAME + BALLOON + FUSE + @"Fuse.png"); + #endregion - + #region Effects Effects_Hit_Explosion = TxCAf(GAME + EFFECTS + @"Hit\Explosion.png"); @@ -2246,6 +2259,15 @@ namespace TJAPlayer3 Balloon_Number_Roll, Balloon_Number_Combo/*,*/ /*Balloon_Broken*/; + public CTexture Kusudama, + Kusudama_Clear, + Kusudama_Fail, + Kusudama_Number, + Kusudama_Back; + + public CTexture Fuse_Number, + Fuse_Balloon; + public CTexture[] Balloon_Breaking; #endregion #region エフェクト diff --git a/TJAPlayer3/Stages/07.Game/CStage演奏画面共通.cs b/TJAPlayer3/Stages/07.Game/CStage演奏画面共通.cs index 62caf2af..5df4f8d2 100644 --- a/TJAPlayer3/Stages/07.Game/CStage演奏画面共通.cs +++ b/TJAPlayer3/Stages/07.Game/CStage演奏画面共通.cs @@ -133,7 +133,7 @@ namespace TJAPlayer3 { chip.nList上の位置 = n整数値管理; //if ((chip.nチャンネル番号 == 0x15 || chip.nチャンネル番号 == 0x16) && (n整数値管理 < this.listChip[i].Count - 1)) - if (NotesManager.IsRoll(chip) && (n整数値管理 < this.listChip[i].Count - 1)) + if ((NotesManager.IsRoll(chip) || NotesManager.IsFuzeRoll(chip)) && (n整数値管理 < this.listChip[i].Count - 1)) { if (chip.db発声時刻ms < r指定時刻に一番近い未ヒットChipを過去方向優先で検索する(0, i).db発声時刻ms) { @@ -1131,7 +1131,7 @@ namespace TJAPlayer3 return E判定.Perfect; } } - else if(NotesManager.IsBalloon(pChip)) + else if(NotesManager.IsGenericBalloon(pChip)) { if ((CSound管理.rc演奏用タイマ.n現在時刻ms * (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0)) >= pChip.n発声時刻ms - 17 && (CSound管理.rc演奏用タイマ.n現在時刻ms * (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0)) < pChip.nノーツ終了時刻ms) { @@ -1701,7 +1701,7 @@ namespace TJAPlayer3 //--------------------------- #endregion } - else if (NotesManager.IsBalloon(pChip)) + else if (NotesManager.IsGenericBalloon(pChip)) { #region [ Balloon ] @@ -3415,6 +3415,7 @@ namespace TJAPlayer3 case 0x16: case 0x17: case 0x19: + case 0x1D: { //2015.03.28 kairera0467 //描画順序を変えるため、メイン処理だけをこちらに残して描画処理は分離。 @@ -3460,6 +3461,29 @@ namespace TJAPlayer3 TJAPlayer3.Timer); } } + if (chip現在処理中の連打チップ[nPlayer].nBalloon > chip現在処理中の連打チップ[nPlayer].nRollCount) + { + if (pChip.n連打音符State == 13) + { + this.actJudgeString.Start(nPlayer, E判定.Mine); + TJAPlayer3.stage演奏ドラム画面.actLaneTaiko.Start(0x11, E判定.Bad, true, nPlayer); + TJAPlayer3.stage演奏ドラム画面.actChipFireD.Start(0x11, E判定.Mine, nPlayer); + actGauge.MineDamage(nPlayer); + TJAPlayer3.Skin.soundBomb?.t再生する(); + this.CChartScore[nPlayer].nMine++; + this.CSectionScore[nPlayer].nMine++; + this.CBranchScore[nPlayer].nMine++; + if (TJAPlayer3.stage選曲.n確定された曲の難易度[0] == (int)Difficulty.Tower) + CFloorManagement.damage(); + if (TJAPlayer3.stage選曲.n確定された曲の難易度[0] == (int)Difficulty.Dan) + this.nMine[actDan.NowShowingNumber]++; + this.actCombo.n現在のコンボ数[nPlayer] = 0; + if (TJAPlayer3.stage選曲.n確定された曲の難易度[0] == (int)Difficulty.Dan) + this.nCombo[actDan.NowShowingNumber] = 0; + this.actComboVoice.tReset(nPlayer); + this.bIsMiss[nPlayer] = true; + } + } chip現在処理中の連打チップ[nPlayer] = null; } @@ -3471,7 +3495,6 @@ namespace TJAPlayer3 break; - case 0x1d: case 0x1e: break; @@ -4074,6 +4097,7 @@ namespace TJAPlayer3 case 0x17: //風船 case 0x18: //連打終了 case 0x19: + case 0x1D: case 0x20: case 0x21: { @@ -4270,7 +4294,7 @@ namespace TJAPlayer3 var bDontDeleteFlag = NotesManager.IsHittableNote(_chip);// Chip >= 0x11 && Chip <= 0x19; var bRollAllFlag = NotesManager.IsGenericRoll(_chip);//Chip >= 0x15 && Chip <= 0x19; - var bBalloonOnlyFlag = NotesManager.IsBalloon(_chip) || NotesManager.IsKusudama(_chip);//Chip == 0x17; + var bBalloonOnlyFlag = NotesManager.IsGenericBalloon(_chip);//Chip == 0x17; var bRollOnlyFlag = NotesManager.IsRoll(_chip);//Chip >= 0x15 && Chip <= 0x16; if (bDontDeleteFlag) diff --git a/TJAPlayer3/Stages/07.Game/Taiko/CAct演奏Drums風船.cs b/TJAPlayer3/Stages/07.Game/Taiko/CAct演奏Drums風船.cs index fc44faf4..b0bfcc5d 100644 --- a/TJAPlayer3/Stages/07.Game/Taiko/CAct演奏Drums風船.cs +++ b/TJAPlayer3/Stages/07.Game/Taiko/CAct演奏Drums風船.cs @@ -120,7 +120,14 @@ namespace TJAPlayer3 return base.On進行描画(); } - public int On進行描画(int n連打ノルマ, int n連打数, int player) + public enum EBalloonType + { + BALLOON, + KUSUDAMA, + FUSEROLL + } + + public int On進行描画(int n連打ノルマ, int n連打数, int player, EBalloonType btype) { this.ct風船ふきだしアニメ.t進行Loop(); this.ct風船アニメ[player].t進行(); @@ -185,7 +192,7 @@ namespace TJAPlayer3 for (int j = 0; j < 5; j++) { - if (n残り打数[j] < n連打数) + if (n残り打数[j] < n連打数 && btype == EBalloonType.BALLOON) { if (TJAPlayer3.Tx.Balloon_Breaking[j] != null) TJAPlayer3.Tx.Balloon_Breaking[j].t2D描画(TJAPlayer3.app.Device, x + (this.ct風船ふきだしアニメ.n現在の値 == 1 ? 3 : 0), y); @@ -193,9 +200,28 @@ namespace TJAPlayer3 } } //1P:31 2P:329 - if (TJAPlayer3.Tx.Balloon_Balloon != null) - TJAPlayer3.Tx.Balloon_Balloon.t2D描画(TJAPlayer3.app.Device, frame_x, frame_y); - this.t文字表示(num_x, num_y, n連打数, player); + + if (btype == EBalloonType.BALLOON) + { + if (TJAPlayer3.Tx.Balloon_Balloon != null) + TJAPlayer3.Tx.Balloon_Balloon.t2D描画(TJAPlayer3.app.Device, frame_x, frame_y); + this.t文字表示(num_x, num_y, n連打数, player); + } + else if (btype == EBalloonType.FUSEROLL) + { + if (TJAPlayer3.Tx.Fuse_Balloon != null) + TJAPlayer3.Tx.Fuse_Balloon.t2D描画(TJAPlayer3.app.Device, frame_x, frame_y); + this.tFuseNumber(num_x, num_y, n連打数, player); + } + else if (btype == EBalloonType.KUSUDAMA && player == 0) + { + if (TJAPlayer3.Tx.Kusudama_Back != null) + TJAPlayer3.Tx.Kusudama_Back.t2D描画(TJAPlayer3.app.Device, 0, 0); + if (TJAPlayer3.Tx.Kusudama != null) + TJAPlayer3.Tx.Kusudama.t2D描画(TJAPlayer3.app.Device, 0, 0); + this.tKusudamaNumber(n連打数); + } + //CDTXMania.act文字コンソール.tPrint( 0, 0, C文字コンソール.Eフォント種別.白, n連打数.ToString() ); } if (n連打数 == 0 && TJAPlayer3.stage演奏ドラム画面.actChara.b風船連打中[player]) @@ -247,11 +273,8 @@ namespace TJAPlayer3 public Point pt; } - private void t文字表示(int x, int y, int num, int nPlayer) + private void _nbDisplay(CTexture tx, int num, int x, int y) { - TJAPlayer3.Tx.Balloon_Number_Roll.vc拡大縮小倍率.X = TJAPlayer3.Skin.Game_Balloon_Balloon_Number_Scale; - TJAPlayer3.Tx.Balloon_Number_Roll.vc拡大縮小倍率.Y = TJAPlayer3.Skin.Game_Balloon_Balloon_Number_Scale + RollScale[this.ct風船アニメ[nPlayer].n現在の値]; - int[] nums = C変換.SeparateDigits(num); for (int j = 0; j < nums.Length; j++) { @@ -259,13 +282,42 @@ namespace TJAPlayer3 float _x = x - (TJAPlayer3.Skin.Game_Balloon_Number_Interval[0] * offset); float _y = y - (TJAPlayer3.Skin.Game_Balloon_Number_Interval[1] * offset); - float width = TJAPlayer3.Tx.Balloon_Number_Roll.sz画像サイズ.Width / 10.0f; - float height = TJAPlayer3.Tx.Balloon_Number_Roll.sz画像サイズ.Height; + float width = tx.sz画像サイズ.Width / 10.0f; + float height = tx.sz画像サイズ.Height; - TJAPlayer3.Tx.Balloon_Number_Roll.t2D拡大率考慮下基準描画(TJAPlayer3.app.Device, _x, _y, new RectangleF(width * nums[j], 0, width, height)); + tx.t2D拡大率考慮下基準描画(TJAPlayer3.app.Device, _x, _y, new RectangleF(width * nums[j], 0, width, height)); } } + private void tKusudamaNumber(int num) + { + if (TJAPlayer3.Tx.Kusudama_Number == null) return; + TJAPlayer3.Tx.Kusudama_Number.vc拡大縮小倍率.X = TJAPlayer3.Skin.Game_Balloon_Balloon_Number_Scale; + TJAPlayer3.Tx.Kusudama_Number.vc拡大縮小倍率.Y = TJAPlayer3.Skin.Game_Balloon_Balloon_Number_Scale; + int x = TJAPlayer3.Skin.Game_Kusudama_Number_X; + int y = TJAPlayer3.Skin.Game_Kusudama_Number_Y; + + _nbDisplay(TJAPlayer3.Tx.Kusudama_Number, num, x, y); + } + + private void tFuseNumber(int x, int y, int num, int nPlayer) + { + if (TJAPlayer3.Tx.Fuse_Number == null) return; + TJAPlayer3.Tx.Fuse_Number.vc拡大縮小倍率.X = TJAPlayer3.Skin.Game_Balloon_Balloon_Number_Scale; + TJAPlayer3.Tx.Fuse_Number.vc拡大縮小倍率.Y = TJAPlayer3.Skin.Game_Balloon_Balloon_Number_Scale + RollScale[this.ct風船アニメ[nPlayer].n現在の値]; + + _nbDisplay(TJAPlayer3.Tx.Fuse_Number, num, x, y); + } + + private void t文字表示(int x, int y, int num, int nPlayer) + { + if (TJAPlayer3.Tx.Balloon_Number_Roll == null) return; + TJAPlayer3.Tx.Balloon_Number_Roll.vc拡大縮小倍率.X = TJAPlayer3.Skin.Game_Balloon_Balloon_Number_Scale; + TJAPlayer3.Tx.Balloon_Number_Roll.vc拡大縮小倍率.Y = TJAPlayer3.Skin.Game_Balloon_Balloon_Number_Scale + RollScale[this.ct風船アニメ[nPlayer].n現在の値]; + + _nbDisplay(TJAPlayer3.Tx.Balloon_Number_Roll, num, x, y); + } + public void tEnd() { this.ct風船終了 = new CCounter(0, 80, 10, CSound管理.rc演奏用タイマ); diff --git a/TJAPlayer3/Stages/07.Game/Taiko/CStage演奏ドラム画面.cs b/TJAPlayer3/Stages/07.Game/Taiko/CStage演奏ドラム画面.cs index 3534af5d..0c44149b 100644 --- a/TJAPlayer3/Stages/07.Game/Taiko/CStage演奏ドラム画面.cs +++ b/TJAPlayer3/Stages/07.Game/Taiko/CStage演奏ドラム画面.cs @@ -1424,7 +1424,7 @@ namespace TJAPlayer3 && NotesManager.IsGenericRoll(chipNoHit) && !NotesManager.IsRollEnd(chipNoHit)) { - bool _isBalloon = NotesManager.IsBalloon(chipNoHit); + bool _isBalloon = NotesManager.IsGenericBalloon(chipNoHit); bool _isKusudama = NotesManager.IsKusudama(chipNoHit); bool _isKongaRedRoll = (NotesManager.IsSmallRoll(chipNoHit) || NotesManager.IsBigRoll(chipNoHit)) || _gt == EGameType.TAIKO; @@ -2131,6 +2131,7 @@ namespace TJAPlayer3 { int nSenotesX = 0; int nSenotesY = 0; + long nowTime = (long)(CSound管理.rc演奏用タイマ.n現在時刻ms * (double)(TJAPlayer3.ConfigIni.n演奏速度 / 20.0)); switch (TJAPlayer3.ConfigIni.nPlayerCount) { @@ -2167,14 +2168,14 @@ namespace TJAPlayer3 { if (NotesManager.IsGenericRoll(pChip)) { - if (pChip.nノーツ出現時刻ms != 0 && ((long)(CSound管理.rc演奏用タイマ.n現在時刻ms * (double)(TJAPlayer3.ConfigIni.n演奏速度 / 20.0)) < pChip.n発声時刻ms - pChip.nノーツ出現時刻ms)) + if (pChip.nノーツ出現時刻ms != 0 && (nowTime < pChip.n発声時刻ms - pChip.nノーツ出現時刻ms)) pChip.bShow = false; else if (pChip.nノーツ出現時刻ms != 0 && pChip.nノーツ移動開始時刻ms != 0) pChip.bShow = true; } if (NotesManager.IsRollEnd(pChip)) { - if (pChip.nノーツ出現時刻ms != 0 && ((long)(CSound管理.rc演奏用タイマ.n現在時刻ms * (double)(TJAPlayer3.ConfigIni.n演奏速度 / 20.0)) < n先頭発声位置 - pChip.nノーツ出現時刻ms)) + if (pChip.nノーツ出現時刻ms != 0 && (nowTime < n先頭発声位置 - pChip.nノーツ出現時刻ms)) pChip.bShow = false; else pChip.bShow = true; @@ -2198,7 +2199,7 @@ namespace TJAPlayer3 if (pChip.dbSCROLL_Y != 0.0) { double _scrollSpeed = pChip.dbSCROLL_Y * (this.act譜面スクロール速度.db現在の譜面スクロール速度[nPlayer] + 1.0) / 10.0; - long __dbt = (long)(CSound管理.rc演奏用タイマ.n現在時刻ms * (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0)); + long __dbt = nowTime; long time = pChip.n発声時刻ms - __dbt; float play_bpm_time = this.GetNowPBMTime(dTX, 0); y += NotesManager.GetNoteY(pChip, time * pChip.dbBPM, _scrollSpeed, TJAPlayer3.Skin.Game_Notes_Interval, play_bpm_time, configIni.eScrollMode, false); @@ -2321,20 +2322,35 @@ namespace TJAPlayer3 int _58_cut = 58 * _size[0] / 136; int _78_cut = 78 * _size[0] / 136; - if (NotesManager.IsRoll(pChip)) + if (NotesManager.IsRoll(pChip) || NotesManager.IsFuzeRoll(pChip)) { + if (NotesManager.IsFuzeRoll(pChip) + && nowTime >= pChip.n発声時刻ms && nowTime < pChip.nノーツ終了時刻ms) + { + x = NoteOriginX[nPlayer]; + y = NoteOriginY[nPlayer]; + } + + NotesManager.DisplayRoll(nPlayer, x, y, pChip, num9, normalColor, effectedColor, x末端, y末端); if (TJAPlayer3.Tx.SENotes[(int)_gt] != null) { int _shift = NotesManager.IsBigRoll(pChip) ? 26 : 0; - - TJAPlayer3.Tx.SENotes[(int)_gt].vc拡大縮小倍率.X = x末端 - x - 44 - _shift; - TJAPlayer3.Tx.SENotes[(int)_gt].t2D描画(TJAPlayer3.app.Device, x + 90 + _shift, y + nSenotesY, new Rectangle(_60_cut, 8 * _size[1], 1, _size[1])); - TJAPlayer3.Tx.SENotes[(int)_gt].vc拡大縮小倍率.X = 1.0f; - TJAPlayer3.Tx.SENotes[(int)_gt].t2D描画(TJAPlayer3.app.Device, x + 30 + _shift, y + nSenotesY, new Rectangle(0, 8 * _size[1], _60_cut, _size[1])); - TJAPlayer3.Tx.SENotes[(int)_gt].t2D描画(TJAPlayer3.app.Device, x - (_shift / 13), y + nSenotesY, new Rectangle(0, _size[1] * pChip.nSenote, _size[0], _size[1])); + if (!NotesManager.IsFuzeRoll(pChip)) + { + TJAPlayer3.Tx.SENotes[(int)_gt].vc拡大縮小倍率.X = x末端 - x - 44 - _shift; + TJAPlayer3.Tx.SENotes[(int)_gt].t2D描画(TJAPlayer3.app.Device, x + 90 + _shift, y + nSenotesY, new Rectangle(_60_cut, 8 * _size[1], 1, _size[1])); + TJAPlayer3.Tx.SENotes[(int)_gt].vc拡大縮小倍率.X = 1.0f; + TJAPlayer3.Tx.SENotes[(int)_gt].t2D描画(TJAPlayer3.app.Device, x + 30 + _shift, y + nSenotesY, new Rectangle(0, 8 * _size[1], _60_cut, _size[1])); + TJAPlayer3.Tx.SENotes[(int)_gt].t2D描画(TJAPlayer3.app.Device, x - (_shift / 13), y + nSenotesY, new Rectangle(0, _size[1] * pChip.nSenote, _size[0], _size[1])); + } + else + { + NotesManager.DisplaySENotes(nPlayer, x + nSenotesX, y + nSenotesY, pChip); + } + } } @@ -2343,9 +2359,9 @@ namespace TJAPlayer3 { if (pChip.bShow) { - if ((long)(CSound管理.rc演奏用タイマ.n現在時刻ms * (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0)) >= pChip.n発声時刻ms && (long)(CSound管理.rc演奏用タイマ.n現在時刻ms * (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0)) < pChip.nノーツ終了時刻ms) + if (nowTime >= pChip.n発声時刻ms && nowTime < pChip.nノーツ終了時刻ms) x = NoteOriginX[nPlayer]; - else if ((long)(CSound管理.rc演奏用タイマ.n現在時刻ms * (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0)) >= pChip.nノーツ終了時刻ms) + else if (nowTime >= pChip.nノーツ終了時刻ms) x = (NoteOriginX[nPlayer] + pChip.nバーからのノーツ末端距離dot); NotesManager.DisplayNote(nPlayer, x, y, pChip, num9, TJAPlayer3.Skin.Game_Notes_Size[0] * 2); @@ -2377,7 +2393,7 @@ namespace TJAPlayer3 n = 910; break; } - if (pChip.n連打音符State != 7) + if (pChip.n連打音符State != 7 && pChip.n連打音符State != 13) { //if( CDTXMania.ConfigIni.eSTEALTH != Eステルスモード.DORON ) // CDTXMania.Tx.Notes.t2D描画( CDTXMania.app.Device, x, y, new Rectangle( n, num9, 130, 130 ) );//大音符:1170 @@ -2387,7 +2403,7 @@ namespace TJAPlayer3 } } } - if (pChip.n発声時刻ms < (CSound管理.rc演奏用タイマ.n現在時刻 * (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0)) && pChip.nノーツ終了時刻ms > (CSound管理.rc演奏用タイマ.n現在時刻 * (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0))) + if (pChip.n発声時刻ms < nowTime && pChip.nノーツ終了時刻ms > nowTime) { //時間内でかつ0x9Aじゃないならならヒット処理 if (!NotesManager.IsRollEnd(pChip) && (nPlayer != 1 ? TJAPlayer3.ConfigIni.b太鼓パートAutoPlay[nPlayer] : (TJAPlayer3.ConfigIni.b太鼓パートAutoPlay[nPlayer] || TJAPlayer3.ConfigIni.bAIBattleMode))) @@ -2482,18 +2498,26 @@ namespace TJAPlayer3 if (this.chip現在処理中の連打チップ[i] != null) { //int n = this.chip現在処理中の連打チップ[i].nチャンネル番号; - if (NotesManager.IsBalloon(this.chip現在処理中の連打チップ[i]) && this.b連打中[i] == true) + if (NotesManager.IsGenericBalloon(this.chip現在処理中の連打チップ[i]) && this.b連打中[i] == true) { //if (this.chip現在処理中の連打チップ.n発声時刻ms <= (int)CSound管理.rc演奏用タイマ.n現在時刻ms && this.chip現在処理中の連打チップ.nノーツ終了時刻ms >= (int)CSound管理.rc演奏用タイマ.n現在時刻ms) if (this.chip現在処理中の連打チップ[i].n発声時刻ms <= (int)(CSound管理.rc演奏用タイマ.n現在時刻 * (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0)) && this.chip現在処理中の連打チップ[i].nノーツ終了時刻ms + 500 >= (int)(CSound管理.rc演奏用タイマ.n現在時刻 * (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0))) { this.chip現在処理中の連打チップ[i].bShow = false; - this.actBalloon.On進行描画(this.chip現在処理中の連打チップ[i].nBalloon, this.n風船残り[i], i); + this.actBalloon.On進行描画( + this.chip現在処理中の連打チップ[i].nBalloon, + this.n風船残り[i], + i, + NotesManager.IsFuzeRoll(this.chip現在処理中の連打チップ[i]) + ? CAct演奏Drums風船.EBalloonType.FUSEROLL + : NotesManager.IsKusudama(this.chip現在処理中の連打チップ[i]) + ? CAct演奏Drums風船.EBalloonType.KUSUDAMA + : CAct演奏Drums風船.EBalloonType.BALLOON + ); } else { this.n現在の連打数[i] = 0; - } } diff --git a/TJAPlayer3/Stages/07.Game/Taiko/NotesManager.cs b/TJAPlayer3/Stages/07.Game/Taiko/NotesManager.cs index cb21c767..69f2060c 100644 --- a/TJAPlayer3/Stages/07.Game/Taiko/NotesManager.cs +++ b/TJAPlayer3/Stages/07.Game/Taiko/NotesManager.cs @@ -30,7 +30,7 @@ namespace TJAPlayer3 ["A"] = 10, // Joint Big Don (2P) ["B"] = 11, // Joint Big Ka (2P) ["C"] = 12, // Mine - ["D"] = 7, // ProjectOutfox's Fuse roll (Coming soon) + ["D"] = 13, // ProjectOutfox's Fuse roll ["E"] = 0, // Unused ["F"] = 15, // ADLib ["G"] = 0xF1, // Green (Purple) double hit note @@ -365,10 +365,14 @@ namespace TJAPlayer3 { EGameType _gt = TJAPlayer3.ConfigIni.nGameType[TJAPlayer3.GetActualPlayer(player)]; - if (TJAPlayer3.ConfigIni.eSTEALTH[TJAPlayer3.GetActualPlayer(player)] != Eステルスモード.OFF || !chip.bShow || TJAPlayer3.Tx.Notes[(int)_gt] == null) + if (TJAPlayer3.ConfigIni.eSTEALTH[TJAPlayer3.GetActualPlayer(player)] != Eステルスモード.OFF || !chip.bShow) return; int _offset = 0; + var _texarr = TJAPlayer3.Tx.Notes[(int)_gt]; + int rollOrigin = (TJAPlayer3.Skin.Game_Notes_Size[0] * 5); + float _adjust = TJAPlayer3.Skin.Game_Notes_Size[0] / 2.0f; + float image_size = TJAPlayer3.Skin.Game_Notes_Size[0]; if (IsSmallRoll(chip) || (_gt == EGameType.TAIKO && IsYellowRoll(chip))) { @@ -386,15 +390,18 @@ namespace TJAPlayer3 { _offset = TJAPlayer3.Skin.Game_Notes_Size[0] * 8; } + else if (IsFuzeRoll(chip)) + { + _texarr = TJAPlayer3.Tx.Note_FuseRoll; + _offset = -rollOrigin; + } + + if (_texarr == null) return; - float _adjust = TJAPlayer3.Skin.Game_Notes_Size[0] / 2.0f; - float image_size = TJAPlayer3.Skin.Game_Notes_Size[0]; int index = x末端 - x; - int rollOrigin = (TJAPlayer3.Skin.Game_Notes_Size[0] * 5); - var theta = -Math.Atan2(chip.dbSCROLL_Y, chip.dbSCROLL); - // Temporary patch for odd math bug, to fix later + // Temporary patch for odd math bug, to fix later, still bugs on katharsis (negative roll) if (chip.dbSCROLL_Y == 0)//theta == 0 || theta == -Math.PI) theta += 0.00000000001; @@ -404,24 +411,24 @@ namespace TJAPlayer3 var odiv = (index - _adjust + _adjust + 1) / TJAPlayer3.Skin.Game_Notes_Size[0]; if (TJAPlayer3.Skin.Game_RollColorMode != CSkin.RollColorMode.None) - TJAPlayer3.Tx.Notes[(int)_gt].color4 = effectedColor; + _texarr.color4 = effectedColor; else - TJAPlayer3.Tx.Notes[(int)_gt].color4 = normalColor; + _texarr.color4 = normalColor; // Body - TJAPlayer3.Tx.Notes[(int)_gt].vc拡大縮小倍率.X = (float)div; - TJAPlayer3.Tx.Notes[(int)_gt].fZ軸中心回転 = (float)theta; + _texarr.vc拡大縮小倍率.X = (float)div; + _texarr.fZ軸中心回転 = (float)theta; //var _x0 = x + _adjust; //var _y0 = y + 0f; var _center_x = (x + x末端 + image_size) / 2; var _center_y = _adjust + (y + y末端) / 2; //TJAPlayer3.Tx.Notes[(int)_gt].t2D描画(TJAPlayer3.app.Device, _x0, _y0, new Rectangle(rollOrigin + TJAPlayer3.Skin.Game_Notes_Size[0] + _offset, 0, TJAPlayer3.Skin.Game_Notes_Size[0], TJAPlayer3.Skin.Game_Notes_Size[1])); - TJAPlayer3.Tx.Notes[(int)_gt].t2D中心基準描画(TJAPlayer3.app.Device, (int)_center_x, (int)_center_y, new Rectangle(rollOrigin + TJAPlayer3.Skin.Game_Notes_Size[0] + _offset, 0, TJAPlayer3.Skin.Game_Notes_Size[0], TJAPlayer3.Skin.Game_Notes_Size[1])); + _texarr.t2D中心基準描画(TJAPlayer3.app.Device, (int)_center_x, (int)_center_y, new Rectangle(rollOrigin + TJAPlayer3.Skin.Game_Notes_Size[0] + _offset, 0, TJAPlayer3.Skin.Game_Notes_Size[0], TJAPlayer3.Skin.Game_Notes_Size[1])); //t2D拡大率考慮中央基準描画 t2D中心基準描画 // Tail - TJAPlayer3.Tx.Notes[(int)_gt].vc拡大縮小倍率.X = 1.0f; + _texarr.vc拡大縮小倍率.X = 1.0f; //var _x0 = x末端 + _adjust; //var _y0 = y末端 + 0f; var _d = _adjust; @@ -433,19 +440,19 @@ namespace TJAPlayer3 var _xc = x2 + (x2 - x1) * _d / dist; var _yc = y2 + (y2 - y1) * _d / dist; //TJAPlayer3.Tx.Notes[(int)_gt].t2D描画(TJAPlayer3.app.Device, (int)_x0, (int)_y0, 0, new Rectangle(rollOrigin + (TJAPlayer3.Skin.Game_Notes_Size[0] * 2) + _offset, frame, TJAPlayer3.Skin.Game_Notes_Size[0], TJAPlayer3.Skin.Game_Notes_Size[1])); - TJAPlayer3.Tx.Notes[(int)_gt].t2D中心基準描画(TJAPlayer3.app.Device, (int)_xc, (int)_yc, 0, new Rectangle(rollOrigin + (TJAPlayer3.Skin.Game_Notes_Size[0] * 2) + _offset, frame, TJAPlayer3.Skin.Game_Notes_Size[0], TJAPlayer3.Skin.Game_Notes_Size[1])); + _texarr.t2D中心基準描画(TJAPlayer3.app.Device, (int)_xc, (int)_yc, 0, new Rectangle(rollOrigin + (TJAPlayer3.Skin.Game_Notes_Size[0] * 2) + _offset, frame, TJAPlayer3.Skin.Game_Notes_Size[0], TJAPlayer3.Skin.Game_Notes_Size[1])); - TJAPlayer3.Tx.Notes[(int)_gt].fZ軸中心回転 = 0; + _texarr.fZ軸中心回転 = 0; if (TJAPlayer3.Skin.Game_RollColorMode == CSkin.RollColorMode.All) - TJAPlayer3.Tx.Notes[(int)_gt].color4 = effectedColor; + _texarr.color4 = effectedColor; else - TJAPlayer3.Tx.Notes[(int)_gt].color4 = normalColor; + _texarr.color4 = normalColor; // Head - TJAPlayer3.Tx.Notes[(int)_gt].t2D描画(TJAPlayer3.app.Device, x, y, 0, new Rectangle(rollOrigin + _offset, frame, TJAPlayer3.Skin.Game_Notes_Size[0], TJAPlayer3.Skin.Game_Notes_Size[1])); - TJAPlayer3.Tx.Notes[(int)_gt].color4 = normalColor; + _texarr.t2D描画(TJAPlayer3.app.Device, x, y, 0, new Rectangle(rollOrigin + _offset, frame, TJAPlayer3.Skin.Game_Notes_Size[0], TJAPlayer3.Skin.Game_Notes_Size[1])); + _texarr.color4 = normalColor; } // SENotes @@ -464,6 +471,10 @@ namespace TJAPlayer3 { TJAPlayer3.Tx.SENotesExtension?.t2D描画(TJAPlayer3.app.Device, x, y, new Rectangle(0, 0, TJAPlayer3.Skin.Game_SENote_Size[0], TJAPlayer3.Skin.Game_SENote_Size[1])); } + else if (IsFuzeRoll(chip)) + { + TJAPlayer3.Tx.SENotesExtension?.t2D描画(TJAPlayer3.app.Device, x, y, new Rectangle(0, TJAPlayer3.Skin.Game_SENote_Size[1] * 2, TJAPlayer3.Skin.Game_SENote_Size[0], TJAPlayer3.Skin.Game_SENote_Size[1])); + } else { TJAPlayer3.Tx.SENotes[(int)_gt]?.t2D描画(TJAPlayer3.app.Device, x, y, new Rectangle(0, TJAPlayer3.Skin.Game_SENote_Size[1] * chip.nSenote, TJAPlayer3.Skin.Game_SENote_Size[0], TJAPlayer3.Skin.Game_SENote_Size[1]));