diff --git a/OpenTaiko/src/Common/CSkin.cs b/OpenTaiko/src/Common/CSkin.cs index d838858f..f07b4eb1 100644 --- a/OpenTaiko/src/Common/CSkin.cs +++ b/OpenTaiko/src/Common/CSkin.cs @@ -8507,17 +8507,6 @@ namespace TJAPlayer3 Characters_Motion_SoulIn, Characters_Motion_SoulOut, Characters_Motion_Return; - /* - Characters_Motion_Tower_Standing, - Characters_Motion_Tower_Climbing, - Characters_Motion_Tower_Running, - Characters_Motion_Tower_Clear, - Characters_Motion_Tower_Fail, - Characters_Motion_Tower_Standing_Tired, - Characters_Motion_Tower_Climbing_Tired, - Characters_Motion_Tower_Running_Tired, - Characters_Motion_Tower_Clear_Tired; - */ public float[] Characters_Beat_Normal, Characters_Beat_10Combo, Characters_Beat_10Combo_Clear, @@ -8538,14 +8527,13 @@ namespace TJAPlayer3 Characters_Beat_SoulOut, Characters_Beat_Return, Characters_Beat_Tower_Standing, - Characters_Beat_Tower_Climbing, - Characters_Beat_Tower_Running, - Characters_Beat_Tower_Clear, - Characters_Beat_Tower_Fail, Characters_Beat_Tower_Standing_Tired, - Characters_Beat_Tower_Climbing_Tired, - Characters_Beat_Tower_Running_Tired, + Characters_Beat_Tower_Fail, + Characters_Beat_Tower_Clear, Characters_Beat_Tower_Clear_Tired; + public bool[] Characters_Tower_Clear_IsLooping, + Characters_Tower_Clear_Tired_IsLooping, + Characters_Tower_Fail_IsLooping; public int[] Characters_Balloon_Timer; public int[] Characters_Balloon_Delay; public int[] Characters_Balloon_FadeOut; @@ -9148,6 +9136,7 @@ namespace TJAPlayer3 public int[] Game_Tower_Ptn_Deco, Game_Tower_Ptn_Base; + public string[] Game_Tower_Names; public int Game_Tower_Ptn_Result; public int Game_Tower_Ptn_Don; diff --git a/OpenTaiko/src/Songs/CDTX.cs b/OpenTaiko/src/Songs/CDTX.cs index 49d76441..f8c4f700 100644 --- a/OpenTaiko/src/Songs/CDTX.cs +++ b/OpenTaiko/src/Songs/CDTX.cs @@ -1109,7 +1109,7 @@ namespace TJAPlayer3 // Tower lifes public int LIFE; - public int TOWERTYPE; + public string TOWERTYPE; public int DANTICK = 0; public Color DANTICKCOLOR = Color.White; @@ -7365,8 +7365,7 @@ namespace TJAPlayer3 } else if (strCommandName.Equals("TOWERTYPE")) { - var tt = (int)Convert.ToDouble(strCommandParam); - this.TOWERTYPE = tt; + this.TOWERTYPE = strCommandParam; } else if (strCommandName.Equals("DANTICK")) { diff --git a/OpenTaiko/src/Songs/Cスコア.cs b/OpenTaiko/src/Songs/Cスコア.cs index 1a0d8917..54035d3f 100644 --- a/OpenTaiko/src/Songs/Cスコア.cs +++ b/OpenTaiko/src/Songs/Cスコア.cs @@ -102,7 +102,7 @@ namespace TJAPlayer3 // Tower lifes public int nLife; public int nTotalFloor; - public int nTowerType; + public string nTowerType; public int nDanTick; public Color cDanTickColor; diff --git a/OpenTaiko/src/Songs/C曲リストノード.cs b/OpenTaiko/src/Songs/C曲リストノード.cs index a7c244dc..fb857a79 100644 --- a/OpenTaiko/src/Songs/C曲リストノード.cs +++ b/OpenTaiko/src/Songs/C曲リストノード.cs @@ -83,7 +83,7 @@ namespace TJAPlayer3 // Tower Lives public int nLife = 5; public int nTotalFloor = 140; - public int nTowerType = 0; + public string nTowerType; // Unique id public CSongUniqueID uniqueId; diff --git a/OpenTaiko/src/Stages/01.StartUp/TextureLoader.cs b/OpenTaiko/src/Stages/01.StartUp/TextureLoader.cs index a1b0b544..5e013c8c 100644 --- a/OpenTaiko/src/Stages/01.StartUp/TextureLoader.cs +++ b/OpenTaiko/src/Stages/01.StartUp/TextureLoader.cs @@ -911,7 +911,11 @@ namespace TJAPlayer3 Tower_Miss = TxC(GAME + TOWER + @$"Miss.png"); // Tower elements - TJAPlayer3.Skin.Game_Tower_Ptn = System.IO.Directory.GetDirectories(CSkin.Path(BASE + GAME + TOWER + TOWERFLOOR)).Length; + string[] towerDirectories = System.IO.Directory.GetDirectories(CSkin.Path(BASE + GAME + TOWER + TOWERFLOOR)); + TJAPlayer3.Skin.Game_Tower_Ptn = towerDirectories.Length; + TJAPlayer3.Skin.Game_Tower_Names = new string[TJAPlayer3.Skin.Game_Tower_Ptn]; + for (int i = 0; i < TJAPlayer3.Skin.Game_Tower_Ptn; i++) + TJAPlayer3.Skin.Game_Tower_Names[i] = new DirectoryInfo(towerDirectories[i]).Name; Tower_Top = new CTexture[TJAPlayer3.Skin.Game_Tower_Ptn]; Tower_Base = new CTexture[TJAPlayer3.Skin.Game_Tower_Ptn][]; Tower_Deco = new CTexture[TJAPlayer3.Skin.Game_Tower_Ptn][]; @@ -921,22 +925,22 @@ namespace TJAPlayer3 for (int i = 0; i < TJAPlayer3.Skin.Game_Tower_Ptn; i++) { - TJAPlayer3.Skin.Game_Tower_Ptn_Base[i] = TJAPlayer3.t連番画像の枚数を数える(CSkin.Path(BASE + GAME + TOWER + TOWERFLOOR + i.ToString() + @$"{Path.DirectorySeparatorChar}Base{Path.DirectorySeparatorChar}"), "Base"); - TJAPlayer3.Skin.Game_Tower_Ptn_Deco[i] = TJAPlayer3.t連番画像の枚数を数える(CSkin.Path(BASE + GAME + TOWER + TOWERFLOOR + i.ToString() + @$"{Path.DirectorySeparatorChar}Deco{Path.DirectorySeparatorChar}"), "Deco"); + TJAPlayer3.Skin.Game_Tower_Ptn_Base[i] = TJAPlayer3.t連番画像の枚数を数える((towerDirectories[i] + @$"{Path.DirectorySeparatorChar}Base{Path.DirectorySeparatorChar}"), "Base"); + TJAPlayer3.Skin.Game_Tower_Ptn_Deco[i] = TJAPlayer3.t連番画像の枚数を数える((towerDirectories[i] + @$"{Path.DirectorySeparatorChar}Deco{Path.DirectorySeparatorChar}"), "Deco"); - Tower_Top[i] = TxC(GAME + TOWER + TOWERFLOOR + i.ToString() + @$"{Path.DirectorySeparatorChar}Top.png"); + Tower_Top[i] = TxC(GAME + TOWER + TOWERFLOOR + TJAPlayer3.Skin.Game_Tower_Names[i] + @$"{Path.DirectorySeparatorChar}Top.png"); Tower_Base[i] = new CTexture[TJAPlayer3.Skin.Game_Tower_Ptn_Base[i]]; Tower_Deco[i] = new CTexture[TJAPlayer3.Skin.Game_Tower_Ptn_Deco[i]]; for (int j = 0; j < TJAPlayer3.Skin.Game_Tower_Ptn_Base[i]; j++) { - Tower_Base[i][j] = TxC(GAME + TOWER + TOWERFLOOR + i.ToString() + @$"{Path.DirectorySeparatorChar}Base{Path.DirectorySeparatorChar}Base" + j.ToString() + ".png"); + Tower_Base[i][j] = TxC(GAME + TOWER + TOWERFLOOR + TJAPlayer3.Skin.Game_Tower_Names[i] + @$"{Path.DirectorySeparatorChar}Base{Path.DirectorySeparatorChar}Base" + j.ToString() + ".png"); } for (int j = 0; j < TJAPlayer3.Skin.Game_Tower_Ptn_Deco[i]; j++) { - Tower_Deco[i][j] = TxC(GAME + TOWER + TOWERFLOOR + i.ToString() + @$"{Path.DirectorySeparatorChar}Deco{Path.DirectorySeparatorChar}Deco" + j.ToString() + ".png"); + Tower_Deco[i][j] = TxC(GAME + TOWER + TOWERFLOOR + TJAPlayer3.Skin.Game_Tower_Names[i] + @$"{Path.DirectorySeparatorChar}Deco{Path.DirectorySeparatorChar}Deco" + j.ToString() + ".png"); } } @@ -1274,6 +1278,9 @@ namespace TJAPlayer3 TJAPlayer3.Skin.Characters_Tower_Climbing_Tired_Ptn = new int[TJAPlayer3.Skin.Characters_Ptn]; TJAPlayer3.Skin.Characters_Tower_Running_Tired_Ptn = new int[TJAPlayer3.Skin.Characters_Ptn]; TJAPlayer3.Skin.Characters_Tower_Clear_Tired_Ptn = new int[TJAPlayer3.Skin.Characters_Ptn]; + TJAPlayer3.Skin.Characters_Tower_Clear_IsLooping = new bool[TJAPlayer3.Skin.Characters_Ptn]; + TJAPlayer3.Skin.Characters_Tower_Clear_Tired_IsLooping = new bool[TJAPlayer3.Skin.Characters_Ptn]; + TJAPlayer3.Skin.Characters_Tower_Fail_IsLooping = new bool[TJAPlayer3.Skin.Characters_Ptn]; TJAPlayer3.Skin.Characters_Resolution = new int[TJAPlayer3.Skin.Characters_Ptn][]; TJAPlayer3.Skin.Characters_Heya_Render_Offset = new int[TJAPlayer3.Skin.Characters_Ptn][]; @@ -1338,13 +1345,9 @@ namespace TJAPlayer3 TJAPlayer3.Skin.Characters_Beat_SoulOut = new float[TJAPlayer3.Skin.Characters_Ptn]; TJAPlayer3.Skin.Characters_Beat_Return = new float[TJAPlayer3.Skin.Characters_Ptn]; TJAPlayer3.Skin.Characters_Beat_Tower_Standing = new float[TJAPlayer3.Skin.Characters_Ptn]; - TJAPlayer3.Skin.Characters_Beat_Tower_Climbing = new float[TJAPlayer3.Skin.Characters_Ptn]; - TJAPlayer3.Skin.Characters_Beat_Tower_Running = new float[TJAPlayer3.Skin.Characters_Ptn]; TJAPlayer3.Skin.Characters_Beat_Tower_Clear = new float[TJAPlayer3.Skin.Characters_Ptn]; TJAPlayer3.Skin.Characters_Beat_Tower_Fail = new float[TJAPlayer3.Skin.Characters_Ptn]; TJAPlayer3.Skin.Characters_Beat_Tower_Standing_Tired = new float[TJAPlayer3.Skin.Characters_Ptn]; - TJAPlayer3.Skin.Characters_Beat_Tower_Climbing_Tired = new float[TJAPlayer3.Skin.Characters_Ptn]; - TJAPlayer3.Skin.Characters_Beat_Tower_Running_Tired = new float[TJAPlayer3.Skin.Characters_Ptn]; TJAPlayer3.Skin.Characters_Beat_Tower_Clear_Tired = new float[TJAPlayer3.Skin.Characters_Ptn]; TJAPlayer3.Skin.Characters_Balloon_Timer = new int[TJAPlayer3.Skin.Characters_Ptn]; TJAPlayer3.Skin.Characters_Balloon_Delay = new int[TJAPlayer3.Skin.Characters_Ptn]; @@ -1920,13 +1923,9 @@ namespace TJAPlayer3 TJAPlayer3.Skin.Characters_Beat_SoulOut[i] = 1.5f; TJAPlayer3.Skin.Characters_Beat_Return[i] = 1.5f; TJAPlayer3.Skin.Characters_Beat_Tower_Standing[i] = 1; - TJAPlayer3.Skin.Characters_Beat_Tower_Climbing[i] = 1; - TJAPlayer3.Skin.Characters_Beat_Tower_Running[i] = 1; TJAPlayer3.Skin.Characters_Beat_Tower_Clear[i] = 1; TJAPlayer3.Skin.Characters_Beat_Tower_Fail[i] = 1; TJAPlayer3.Skin.Characters_Beat_Tower_Standing_Tired[i] = 1; - TJAPlayer3.Skin.Characters_Beat_Tower_Climbing_Tired[i] = 1; - TJAPlayer3.Skin.Characters_Beat_Tower_Running_Tired[i] = 1; TJAPlayer3.Skin.Characters_Beat_Tower_Clear_Tired[i] = 1; TJAPlayer3.Skin.Characters_Balloon_Timer[i] = 28; TJAPlayer3.Skin.Characters_Balloon_Delay[i] = 500; @@ -2311,19 +2310,9 @@ namespace TJAPlayer3 TJAPlayer3.Skin.Characters_Beat_Tower_Standing[i] = float.Parse(strParam); break; } - case "Game_Chara_Beat_Tower_Climbing": + case "Game_Chara_Beat_Tower_Standing_Tired": { - TJAPlayer3.Skin.Characters_Beat_Tower_Climbing[i] = float.Parse(strParam); - break; - } - case "Game_Chara_Beat_Tower_Running": - { - TJAPlayer3.Skin.Characters_Beat_Tower_Running[i] = float.Parse(strParam); - break; - } - case "Game_Chara_Beat_Tower_Clear": - { - TJAPlayer3.Skin.Characters_Beat_Tower_Clear[i] = float.Parse(strParam); + TJAPlayer3.Skin.Characters_Beat_Tower_Standing_Tired[i] = float.Parse(strParam); break; } case "Game_Chara_Beat_Tower_Fail": @@ -2331,19 +2320,9 @@ namespace TJAPlayer3 TJAPlayer3.Skin.Characters_Beat_Tower_Fail[i] = float.Parse(strParam); break; } - case "Game_Chara_Beat_Tower_Standing_Tired": + case "Game_Chara_Beat_Tower_Clear": { - TJAPlayer3.Skin.Characters_Beat_Tower_Standing_Tired[i] = float.Parse(strParam); - break; - } - case "Game_Chara_Beat_Tower_Climbing_Tired": - { - TJAPlayer3.Skin.Characters_Beat_Tower_Climbing_Tired[i] = float.Parse(strParam); - break; - } - case "Game_Chara_Beat_Tower_Running_Tired": - { - TJAPlayer3.Skin.Characters_Beat_Tower_Running_Tired[i] = float.Parse(strParam); + TJAPlayer3.Skin.Characters_Beat_Tower_Clear[i] = float.Parse(strParam); break; } case "Game_Chara_Beat_Tower_Clear_Tired": @@ -2351,6 +2330,21 @@ namespace TJAPlayer3 TJAPlayer3.Skin.Characters_Beat_Tower_Clear_Tired[i] = float.Parse(strParam); break; } + case "Game_Chara_Tower_Clear_IsLooping": + { + TJAPlayer3.Skin.Characters_Tower_Clear_IsLooping[i] = int.Parse(strParam) != 0; + break; + } + case "Game_Chara_Tower_Clear_Tired_IsLooping": + { + TJAPlayer3.Skin.Characters_Tower_Clear_Tired_IsLooping[i] = int.Parse(strParam) != 0; + break; + } + case "Game_Chara_Tower_Fail_IsLooping": + { + TJAPlayer3.Skin.Characters_Tower_Fail_IsLooping[i] = int.Parse(strParam) != 0; + break; + } case "Chara_Entry_AnimationDuration": { TJAPlayer3.Skin.Characters_Title_Entry_AnimationDuration[i] = int.Parse(strParam); diff --git a/OpenTaiko/src/Stages/06.SongLoading/CStage曲読み込み.cs b/OpenTaiko/src/Stages/06.SongLoading/CStage曲読み込み.cs index 7fcf8afc..d0f4f9ae 100644 --- a/OpenTaiko/src/Stages/06.SongLoading/CStage曲読み込み.cs +++ b/OpenTaiko/src/Stages/06.SongLoading/CStage曲読み込み.cs @@ -384,12 +384,12 @@ namespace TJAPlayer3 int xFactor = 0; float yFactor = 1f; - int currentTowerType = TJAPlayer3.stage選曲.r確定された曲.arスコア[5].譜面情報.nTowerType; + int currentTowerType = Array.IndexOf(TJAPlayer3.Skin.Game_Tower_Names, TJAPlayer3.stage選曲.r確定された曲.arスコア[5].譜面情報.nTowerType); - if (currentTowerType < 0 || currentTowerType >= TJAPlayer3.Skin.Game_Tower_Ptn_Result) + if (currentTowerType < 0 || currentTowerType >= TJAPlayer3.Skin.Game_Tower_Ptn) currentTowerType = 0; - if (TJAPlayer3.Tx.TowerResult_Background != null && TJAPlayer3.Tx.TowerResult_Tower[currentTowerType] != null) + if (TJAPlayer3.Tx.TowerResult_Background != null && currentTowerType < TJAPlayer3.Tx.TowerResult_Tower.Length && TJAPlayer3.Tx.TowerResult_Tower[currentTowerType] != null) { xFactor = (TJAPlayer3.Tx.TowerResult_Background.szテクスチャサイズ.Width - TJAPlayer3.Tx.TowerResult_Tower[currentTowerType].szテクスチャサイズ.Width) / 2; yFactor = TJAPlayer3.Tx.TowerResult_Tower[currentTowerType].szテクスチャサイズ.Height / (float)TJAPlayer3.Tx.TowerResult_Background.szテクスチャサイズ.Height; @@ -399,7 +399,9 @@ namespace TJAPlayer3 ((ct待機.CurrentValue <= 1200 ? ct待機.CurrentValue / 10f : 120) / 120f * (TJAPlayer3.Tx.TowerResult_Background.szテクスチャサイズ.Height - TJAPlayer3.Skin.Resolution[1])); TJAPlayer3.Tx.TowerResult_Background?.t2D描画(0, -1 * pos); - TJAPlayer3.Tx.TowerResult_Tower[currentTowerType]?.t2D描画(xFactor, -1 * yFactor * pos); + + if (currentTowerType < TJAPlayer3.Tx.TowerResult_Tower.Length) + TJAPlayer3.Tx.TowerResult_Tower[currentTowerType]?.t2D描画(xFactor, -1 * yFactor * pos); } #endregion diff --git a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drums背景.cs b/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drums背景.cs index eaab001d..7a705017 100644 --- a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drums背景.cs +++ b/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drums背景.cs @@ -237,7 +237,7 @@ namespace TJAPlayer3 this.ctSlideAnimation = new CCounter(); this.ctClimbDuration = new CCounter(); - this.ctStandingAnimation = new CCounter(0, 1000, (12000f * TJAPlayer3.Skin.Characters_Beat_Tower_Standing[currentCharacter]) / ((float)TJAPlayer3.stage演奏ドラム画面.actPlayInfo.dbBPM[0] * TJAPlayer3.ConfigIni.n演奏速度 / 20), TJAPlayer3.Timer); + this.ctStandingAnimation = new CCounter(0, 1000, (60000f / (float)(TJAPlayer3.stage演奏ドラム画面.actPlayInfo.dbBPM[0] * TJAPlayer3.ConfigIni.n演奏速度 / 20)) * TJAPlayer3.Skin.Characters_Beat_Tower_Standing[currentCharacter] / TJAPlayer3.Skin.Characters_Tower_Standing_Ptn[currentCharacter], TJAPlayer3.Timer); this.ctClimbingAnimation = new CCounter(); this.ctRunningAnimation = new CCounter(); this.ctClearAnimation = new CCounter(); @@ -247,6 +247,8 @@ namespace TJAPlayer3 this.ctRunTiredAnimation = new CCounter(); this.ctClearTiredAnimation = new CCounter(); + TowerFinished = false; + base.Activate(); } @@ -414,7 +416,7 @@ namespace TJAPlayer3 int nightTime = Math.Max(140, maxFloor / 2); - int currentTowerType = TJAPlayer3.stage選曲.r確定された曲.arスコア[5].譜面情報.nTowerType; + int currentTowerType = Array.IndexOf(TJAPlayer3.Skin.Game_Tower_Names, TJAPlayer3.stage選曲.r確定された曲.arスコア[5].譜面情報.nTowerType); if (currentTowerType < 0 || currentTowerType >= TJAPlayer3.Skin.Game_Tower_Ptn) currentTowerType = 0; @@ -432,11 +434,14 @@ namespace TJAPlayer3 #region [Skybox] - int skyboxYPosition = (int)((TJAPlayer3.Tx.Tower_Sky_Gradient.szテクスチャサイズ.Height - TJAPlayer3.Skin.Game_Tower_Sky_Gradient_Size[1]) * (1f - (currentFloorPositionMax140 + progressFactor))); - - TJAPlayer3.Tx.Tower_Sky_Gradient?.t2D描画(TJAPlayer3.Skin.Game_Tower_Sky_Gradient[0], TJAPlayer3.Skin.Game_Tower_Sky_Gradient[1], - new Rectangle(0, skyboxYPosition, TJAPlayer3.Skin.Game_Tower_Sky_Gradient_Size[0], TJAPlayer3.Skin.Game_Tower_Sky_Gradient_Size[1])); + //int skyboxYPosition = (int)((TJAPlayer3.Tx.Tower_Sky_Gradient.szテクスチャサイズ.Height - TJAPlayer3.Skin.Game_Tower_Sky_Gradient_Size[1]) * (1f - (currentFloorPositionMax140 + progressFactor))); + //TJAPlayer3.Tx.Tower_Sky_Gradient?.t2D描画(TJAPlayer3.Skin.Game_Tower_Sky_Gradient[0], TJAPlayer3.Skin.Game_Tower_Sky_Gradient[1], + //new Rectangle(0, skyboxYPosition, TJAPlayer3.Skin.Game_Tower_Sky_Gradient_Size[0], TJAPlayer3.Skin.Game_Tower_Sky_Gradient_Size[1])); + + if (!TJAPlayer3.stage演奏ドラム画面.bPAUSE) DownScript.Update(); + DownScript.Draw(); + #endregion @@ -506,23 +511,32 @@ namespace TJAPlayer3 bool ctIsTired = !((CFloorManagement.CurrentNumberOfLives / (float)CFloorManagement.MaxNumberOfLives) >= 0.2f && !(CFloorManagement.CurrentNumberOfLives == 1 && CFloorManagement.MaxNumberOfLives != 1)); - bool stageEnded = TJAPlayer3.stage演奏ドラム画面.eフェーズID == CStage.Eフェーズ.演奏_演奏終了演出 || TJAPlayer3.stage演奏ドラム画面.eフェーズID == CStage.Eフェーズ.演奏_STAGE_CLEAR_フェードアウト; + bool stageEnded = TJAPlayer3.stage演奏ドラム画面.eフェーズID == CStage.Eフェーズ.演奏_演奏終了演出 || TJAPlayer3.stage演奏ドラム画面.eフェーズID == CStage.Eフェーズ.演奏_STAGE_CLEAR_フェードアウト || CFloorManagement.CurrentNumberOfLives == 0; if (bFloorChanged == true) { float floorBPM = (float)(TJAPlayer3.stage演奏ドラム画面.actPlayInfo.dbBPM[0] * TJAPlayer3.ConfigIni.n演奏速度 / 20); ctClimbDuration.Start(0, 1500, 120f / floorBPM, TJAPlayer3.Timer); - ctStandingAnimation.Start(0, 1000, (12000f * TJAPlayer3.Skin.Characters_Beat_Tower_Standing[currentCharacter]) / floorBPM, TJAPlayer3.Timer); - ctClimbingAnimation.Start(0, 1000, (12000f * TJAPlayer3.Skin.Characters_Beat_Tower_Climbing[currentCharacter]) / floorBPM, TJAPlayer3.Timer); - ctRunningAnimation.Start(0, 1000, (12000f * TJAPlayer3.Skin.Characters_Beat_Tower_Running[currentCharacter]) / floorBPM, TJAPlayer3.Timer); - ctClearAnimation.Start(0, 1000, (12000f * TJAPlayer3.Skin.Characters_Beat_Tower_Clear[currentCharacter]) / floorBPM, TJAPlayer3.Timer); - ctFailAnimation.Start(0, 1000, (12000f * TJAPlayer3.Skin.Characters_Beat_Tower_Fail[currentCharacter]) / floorBPM, TJAPlayer3.Timer); - ctStandTiredAnimation.Start(0, 1000, (12000f * TJAPlayer3.Skin.Characters_Beat_Tower_Standing_Tired[currentCharacter]) / floorBPM, TJAPlayer3.Timer); - ctClimbTiredAnimation.Start(0, 1000, (12000f * TJAPlayer3.Skin.Characters_Beat_Tower_Climbing_Tired[currentCharacter]) / floorBPM, TJAPlayer3.Timer); - ctRunTiredAnimation.Start(0, 1000, (12000f * TJAPlayer3.Skin.Characters_Beat_Tower_Running_Tired[currentCharacter]) / floorBPM, TJAPlayer3.Timer); - ctClearTiredAnimation.Start(0, 1000, (12000f * TJAPlayer3.Skin.Characters_Beat_Tower_Clear_Tired[currentCharacter]) / floorBPM, TJAPlayer3.Timer); + ctStandingAnimation.Start(0, 1000, (60000f / floorBPM) * TJAPlayer3.Skin.Characters_Beat_Tower_Standing[currentCharacter] / TJAPlayer3.Skin.Characters_Tower_Standing_Ptn[currentCharacter], TJAPlayer3.Timer); + ctClimbingAnimation.Start(0, 1000, (120000f / floorBPM) / TJAPlayer3.Skin.Characters_Tower_Climbing_Ptn[currentCharacter], TJAPlayer3.Timer); + ctRunningAnimation.Start(0, 1000, (60000f / floorBPM) / TJAPlayer3.Skin.Characters_Tower_Running_Ptn[currentCharacter], TJAPlayer3.Timer); + ctStandTiredAnimation.Start(0, 1000, (60000f / floorBPM) * TJAPlayer3.Skin.Characters_Beat_Tower_Standing_Tired[currentCharacter] / TJAPlayer3.Skin.Characters_Tower_Standing_Tired_Ptn[currentCharacter], TJAPlayer3.Timer); + ctClimbTiredAnimation.Start(0, 1000, (120000f / floorBPM) / TJAPlayer3.Skin.Characters_Tower_Climbing_Tired_Ptn[currentCharacter], TJAPlayer3.Timer); + ctRunTiredAnimation.Start(0, 1000, (60000f / floorBPM) / TJAPlayer3.Skin.Characters_Tower_Running_Tired_Ptn[currentCharacter], TJAPlayer3.Timer); } - if (ctClimbDuration.CurrentValue > 0 && ctClimbDuration.CurrentValue < 1500) + + bool isClimbing = ctClimbDuration.CurrentValue > 0 && ctClimbDuration.CurrentValue < 1500; + + if (stageEnded && !TowerFinished && !isClimbing) + { + float floorBPM = (float)(TJAPlayer3.stage演奏ドラム画面.actPlayInfo.dbBPM[0] * TJAPlayer3.ConfigIni.n演奏速度 / 20); + ctClearAnimation.Start(0, 20000, (60000f / floorBPM) * TJAPlayer3.Skin.Characters_Beat_Tower_Clear[currentCharacter] / TJAPlayer3.Skin.Characters_Tower_Clear_Ptn[currentCharacter], TJAPlayer3.Timer); + ctClearTiredAnimation.Start(0, 20000, (60000f / floorBPM) * TJAPlayer3.Skin.Characters_Beat_Tower_Clear_Tired[currentCharacter] / TJAPlayer3.Skin.Characters_Tower_Clear_Tired_Ptn[currentCharacter], TJAPlayer3.Timer); + ctFailAnimation.Start(0, 20000, (60000f / floorBPM) * TJAPlayer3.Skin.Characters_Beat_Tower_Fail[currentCharacter] / TJAPlayer3.Skin.Characters_Tower_Fail_Ptn[currentCharacter], TJAPlayer3.Timer); + TowerFinished = true; + } + + if (isClimbing) { // Tired Climb if (ctIsTired && (ctClimbDuration.CurrentValue <= 1000) && TJAPlayer3.Skin.Characters_Tower_Climbing_Tired_Ptn[currentCharacter] > 0) @@ -562,26 +576,32 @@ namespace TJAPlayer3 // Fail if (TJAPlayer3.Skin.Characters_Tower_Fail_Ptn[currentCharacter] > 0 && CFloorManagement.CurrentNumberOfLives == 0) { - int animChar = ctFailAnimation.CurrentValue % TJAPlayer3.Skin.Characters_Tower_Fail_Ptn[currentCharacter]; + int animChar = TJAPlayer3.Skin.Characters_Tower_Fail_IsLooping[currentCharacter] ? + ctFailAnimation.CurrentValue % TJAPlayer3.Skin.Characters_Tower_Fail_Ptn[currentCharacter] : + Math.Min(ctFailAnimation.CurrentValue, TJAPlayer3.Skin.Characters_Tower_Fail_Ptn[currentCharacter] - 1); TJAPlayer3.Tx.Characters_Tower_Fail[currentCharacter][animChar]?.t2D拡大率考慮下中心基準描画(TJAPlayer3.Skin.Game_Tower_Don[0], TJAPlayer3.Skin.Game_Tower_Don[1]); } // Tired Clear else if (ctIsTired && stageEnded && TJAPlayer3.Skin.Characters_Tower_Clear_Tired_Ptn[currentCharacter] > 0 && CFloorManagement.CurrentNumberOfLives > 0) { - int animChar = ctClearTiredAnimation.CurrentValue % TJAPlayer3.Skin.Characters_Tower_Clear_Tired_Ptn[currentCharacter]; + int animChar = TJAPlayer3.Skin.Characters_Tower_Clear_Tired_IsLooping[currentCharacter] ? + ctClearTiredAnimation.CurrentValue % TJAPlayer3.Skin.Characters_Tower_Clear_Tired_Ptn[currentCharacter] : + Math.Min(ctClearTiredAnimation.CurrentValue, TJAPlayer3.Skin.Characters_Tower_Clear_Tired_Ptn[currentCharacter] - 1); TJAPlayer3.Tx.Characters_Tower_Clear_Tired[currentCharacter][animChar]?.t2D拡大率考慮下中心基準描画(TJAPlayer3.Skin.Game_Tower_Don[0], TJAPlayer3.Skin.Game_Tower_Don[1]); } // Clear else if (stageEnded && TJAPlayer3.Skin.Characters_Tower_Clear_Ptn[currentCharacter] > 0 && CFloorManagement.CurrentNumberOfLives > 0) { - int animChar = ctClearAnimation.CurrentValue % TJAPlayer3.Skin.Characters_Tower_Clear_Ptn[currentCharacter]; + int animChar = TJAPlayer3.Skin.Characters_Tower_Clear_IsLooping[currentCharacter] ? + ctClearAnimation.CurrentValue % TJAPlayer3.Skin.Characters_Tower_Clear_Ptn[currentCharacter] : + Math.Min(ctClearAnimation.CurrentValue, TJAPlayer3.Skin.Characters_Tower_Clear_Ptn[currentCharacter] - 1); TJAPlayer3.Tx.Characters_Tower_Clear[currentCharacter][animChar]?.t2D拡大率考慮下中心基準描画(TJAPlayer3.Skin.Game_Tower_Don[0], TJAPlayer3.Skin.Game_Tower_Don[1]); } // Tired Stand else if (ctIsTired && TJAPlayer3.Skin.Characters_Tower_Standing_Tired_Ptn[currentCharacter] > 0) { - int animChar = ctStandTiredAnimation.CurrentValue % TJAPlayer3.Skin.Characters_Tower_Standing_Ptn[currentCharacter]; + int animChar = ctStandTiredAnimation.CurrentValue % TJAPlayer3.Skin.Characters_Tower_Standing_Tired_Ptn[currentCharacter]; TJAPlayer3.Tx.Characters_Tower_Standing_Tired[currentCharacter][animChar]?.t2D拡大率考慮下中心基準描画(TJAPlayer3.Skin.Game_Tower_Don[0], TJAPlayer3.Skin.Game_Tower_Don[1]); // Center X - 50 } // Stand @@ -610,12 +630,12 @@ namespace TJAPlayer3 ctStandingAnimation?.TickLoop(); ctClimbingAnimation?.TickLoop(); ctRunningAnimation?.TickLoop(); - ctClearAnimation?.TickLoop(); - ctFailAnimation?.TickLoop(); ctStandTiredAnimation?.TickLoop(); ctClimbTiredAnimation?.TickLoop(); ctRunTiredAnimation?.TickLoop(); - ctClearTiredAnimation?.TickLoop(); + ctClearAnimation?.Tick(); + ctClearTiredAnimation?.Tick(); + ctFailAnimation?.Tick(); #endregion } @@ -687,6 +707,7 @@ namespace TJAPlayer3 private CCounter ctRunTiredAnimation; private CCounter ctClearTiredAnimation; private CCounter ctClimbDuration; + private bool TowerFinished; private CCounter ct炎; diff --git a/OpenTaiko/src/Stages/08.Result/CStage結果.cs b/OpenTaiko/src/Stages/08.Result/CStage結果.cs index 7a63f434..592344f9 100644 --- a/OpenTaiko/src/Stages/08.Result/CStage結果.cs +++ b/OpenTaiko/src/Stages/08.Result/CStage結果.cs @@ -1434,7 +1434,7 @@ namespace TJAPlayer3 int xFactor = 0; float yFactor = 1f; - int currentTowerType = TJAPlayer3.stage選曲.r確定された曲.arスコア[5].譜面情報.nTowerType; + int currentTowerType = Array.IndexOf(TJAPlayer3.Skin.Game_Tower_Names, TJAPlayer3.stage選曲.r確定された曲.arスコア[5].譜面情報.nTowerType); if (currentTowerType < 0 || currentTowerType >= TJAPlayer3.Skin.Game_Tower_Ptn_Result) currentTowerType = 0;