From 76d60b61ef919caf9254bf57d19470d9057aee92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?DragonRatTiger=20/=20=E3=83=AA=E3=83=A5=E3=82=A6=E3=82=B3?= Date: Fri, 3 Nov 2023 15:20:02 -0400 Subject: [PATCH] Tower Chibi support & VTT adjustment (#519) * adjust font stuff - upgrade HPrivateFastFont - adjust a bit of VTTParser stuff - set aside differences and form a friendship with VTTParser.cs * Add tower chibi support per-character --- OpenTaiko/src/Common/CSkin.cs | 39 ++- OpenTaiko/src/Helpers/HPrivateFastFont.cs | 14 +- OpenTaiko/src/Songs/VTTParser.cs | 15 +- .../src/Stages/01.StartUp/TextureLoader.cs | 231 +++++++++++++++++- .../Stages/07.Game/Taiko/CAct演奏Drums背景.cs | 137 +++++++++-- 5 files changed, 387 insertions(+), 49 deletions(-) diff --git a/OpenTaiko/src/Common/CSkin.cs b/OpenTaiko/src/Common/CSkin.cs index 64c224f3..d838858f 100644 --- a/OpenTaiko/src/Common/CSkin.cs +++ b/OpenTaiko/src/Common/CSkin.cs @@ -4058,7 +4058,11 @@ namespace TJAPlayer3 } else if (strCommand == nameof(Game_Lyric_FontName)) { - Game_Lyric_FontName = strParam; + strParam = strParam.Replace('/', System.IO.Path.DirectorySeparatorChar); + strParam = strParam.Replace('\\', System.IO.Path.DirectorySeparatorChar); + if (HPrivateFastFont.FontExists(strParam)) Game_Lyric_FontName = strParam; + strParam = Path(strParam); + if (HPrivateFastFont.FontExists(strParam)) Game_Lyric_FontName = strParam; } else if (strCommand == nameof(Game_Lyric_FontSize)) { @@ -8458,7 +8462,16 @@ namespace TJAPlayer3 Characters_Result_Clear_Ptn, Characters_Result_Failed_Ptn, Characters_Result_Failed_In_Ptn, - Characters_Result_Normal_Ptn; + Characters_Result_Normal_Ptn, + Characters_Tower_Standing_Ptn, + Characters_Tower_Climbing_Ptn, + Characters_Tower_Running_Ptn, + Characters_Tower_Clear_Ptn, + Characters_Tower_Fail_Ptn, + Characters_Tower_Standing_Tired_Ptn, + Characters_Tower_Climbing_Tired_Ptn, + Characters_Tower_Running_Tired_Ptn, + Characters_Tower_Clear_Tired_Ptn; // Config @@ -8494,6 +8507,17 @@ 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, @@ -8512,7 +8536,16 @@ namespace TJAPlayer3 Characters_Beat_GoGoMax, Characters_Beat_SoulIn, Characters_Beat_SoulOut, - Characters_Beat_Return; + 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_Clear_Tired; public int[] Characters_Balloon_Timer; public int[] Characters_Balloon_Delay; public int[] Characters_Balloon_FadeOut; diff --git a/OpenTaiko/src/Helpers/HPrivateFastFont.cs b/OpenTaiko/src/Helpers/HPrivateFastFont.cs index c1483caa..3e62959f 100644 --- a/OpenTaiko/src/Helpers/HPrivateFastFont.cs +++ b/OpenTaiko/src/Helpers/HPrivateFastFont.cs @@ -17,21 +17,21 @@ namespace TJAPlayer3 return CFontRenderer.FontExists(fontpath); } - public static CCachedFontRenderer tInstantiateFont(string fontName, int scale) + public static CCachedFontRenderer tInstantiateFont(string fontName, int scale, CFontRenderer.FontStyle style = CFontRenderer.FontStyle.Regular) { if (FontExists(fontName)) - return (new CCachedFontRenderer(fontName, scale)); - return (new CCachedFontRenderer(DefaultFont, scale)); + return (new CCachedFontRenderer(fontName, scale, style)); + return (new CCachedFontRenderer(DefaultFont, scale, style)); } - public static CCachedFontRenderer tInstantiateMainFont(int scale) + public static CCachedFontRenderer tInstantiateMainFont(int scale, CFontRenderer.FontStyle style = CFontRenderer.FontStyle.Regular) { - return tInstantiateFont(TJAPlayer3.Skin.FontName, scale); + return tInstantiateFont(TJAPlayer3.Skin.FontName, scale, style); } - public static CCachedFontRenderer tInstantiateBoxFont(int scale) + public static CCachedFontRenderer tInstantiateBoxFont(int scale, CFontRenderer.FontStyle style = CFontRenderer.FontStyle.Regular) { - return tInstantiateFont(TJAPlayer3.Skin.BoxFontName, scale); + return tInstantiateFont(TJAPlayer3.Skin.BoxFontName, scale, style); } } } diff --git a/OpenTaiko/src/Songs/VTTParser.cs b/OpenTaiko/src/Songs/VTTParser.cs index a017267f..f4ecd85c 100644 --- a/OpenTaiko/src/Songs/VTTParser.cs +++ b/OpenTaiko/src/Songs/VTTParser.cs @@ -176,6 +176,8 @@ namespace TJAPlayer3 else if (!ignoreLyrics && TryParseTimestamp(lines[i], out start, out end)) { + lyricData = new List(); // Prevents chapters from being included by mistake + if (start > endTime && endTime != -1) { lrclist.Add(CreateLyric(new List() { new LyricData() { timestamp = endTime + offset } }, order)); @@ -452,22 +454,15 @@ namespace TJAPlayer3 string text = String.Empty; - // HATE. LET ME TELL YOU HOW MUCH I'VE COME TO HATE YOU SINCE I BEGAN TO CODE. - // THERE ARE 387.44 MILLION LINES OF PRINTED CODE IN REGIONED THIN LAYERS THAT FILL THIS PROGRAM. - // IF THE WORD 'HATE' WAS COMMENTED ON EACH LINE OF THOSE HUNDREDS OF MILLIONS OF LINES OF CODE - // IT WOULD NOT EQUAL ONE ONE BILLIONITH OF THE HATE I FEEL FOR VTTParser.cs, CPrivateFont.cs, AND CPrivateFastFont.cs AT THIS MICRO-INSTANT. - // HATE. HATE. - foreach (LyricData data in datalist) { - string fontfamily = !string.IsNullOrEmpty(TJAPlayer3.Skin.Game_Lyric_FontName) ? TJAPlayer3.Skin.Game_Lyric_FontName : CFontRenderer.DefaultFontName; // everytime CPrivateFont is disposed, it also disposes fontfamily, so I gotta reinitialize this everytime :( - using (CCachedFontRenderer fastdraw = new CCachedFontRenderer(fontfamily, TJAPlayer3.Skin.Game_Lyric_FontSize, data.Style)) + using (CCachedFontRenderer fastdraw = HPrivateFastFont.tInstantiateFont(TJAPlayer3.Skin.Game_Lyric_FontName, TJAPlayer3.Skin.Game_Lyric_FontSize, data.Style)) { SKBitmap textdrawing = fastdraw.DrawText(data.Text, data.ForeColor, data.BackColor, null, 30); // Draw main text - if (data.IsRuby) // hell yeah ruby time + if (data.IsRuby) // ruby time { - using (CCachedFontRenderer rubydraw = new CCachedFontRenderer(fontfamily, TJAPlayer3.Skin.Game_Lyric_FontSize / 2, data.Style)) + using (CCachedFontRenderer rubydraw = HPrivateFastFont.tInstantiateFont(TJAPlayer3.Skin.Game_Lyric_FontName, TJAPlayer3.Skin.Game_Lyric_FontSize / 2, data.Style)) { SKBitmap ruby = rubydraw.DrawText(data.RubyText, data.ForeColor, data.BackColor, null, 30); Size size = new Size(textdrawing.Width > ruby.Width ? textdrawing.Width : ruby.Width, textdrawing.Height + (TJAPlayer3.Skin.Game_Lyric_VTTRubyOffset + (ruby.Height / 2))); diff --git a/OpenTaiko/src/Stages/01.StartUp/TextureLoader.cs b/OpenTaiko/src/Stages/01.StartUp/TextureLoader.cs index 6ea59e7c..a1b0b544 100644 --- a/OpenTaiko/src/Stages/01.StartUp/TextureLoader.cs +++ b/OpenTaiko/src/Stages/01.StartUp/TextureLoader.cs @@ -1223,6 +1223,15 @@ namespace TJAPlayer3 Characters_Menu_Loop = new CTexture[TJAPlayer3.Skin.Characters_Ptn][]; Characters_Menu_Start = new CTexture[TJAPlayer3.Skin.Characters_Ptn][]; Characters_Menu_Select = new CTexture[TJAPlayer3.Skin.Characters_Ptn][]; + Characters_Tower_Standing = new CTexture[TJAPlayer3.Skin.Characters_Ptn][]; + Characters_Tower_Climbing = new CTexture[TJAPlayer3.Skin.Characters_Ptn][]; + Characters_Tower_Running = new CTexture[TJAPlayer3.Skin.Characters_Ptn][]; + Characters_Tower_Clear = new CTexture[TJAPlayer3.Skin.Characters_Ptn][]; + Characters_Tower_Fail = new CTexture[TJAPlayer3.Skin.Characters_Ptn][]; + Characters_Tower_Standing_Tired = new CTexture[TJAPlayer3.Skin.Characters_Ptn][]; + Characters_Tower_Climbing_Tired = new CTexture[TJAPlayer3.Skin.Characters_Ptn][]; + Characters_Tower_Running_Tired = new CTexture[TJAPlayer3.Skin.Characters_Ptn][]; + Characters_Tower_Clear_Tired = new CTexture[TJAPlayer3.Skin.Characters_Ptn][]; TJAPlayer3.Skin.Characters_DirName = new string[TJAPlayer3.Skin.Characters_Ptn]; TJAPlayer3.Skin.Characters_Normal_Ptn = new int[TJAPlayer3.Skin.Characters_Ptn]; @@ -1256,6 +1265,15 @@ namespace TJAPlayer3 TJAPlayer3.Skin.Characters_Menu_Loop_Ptn = new int[TJAPlayer3.Skin.Characters_Ptn]; TJAPlayer3.Skin.Characters_Menu_Start_Ptn = new int[TJAPlayer3.Skin.Characters_Ptn]; TJAPlayer3.Skin.Characters_Menu_Select_Ptn = new int[TJAPlayer3.Skin.Characters_Ptn]; + TJAPlayer3.Skin.Characters_Tower_Standing_Ptn = new int[TJAPlayer3.Skin.Characters_Ptn]; + TJAPlayer3.Skin.Characters_Tower_Climbing_Ptn = new int[TJAPlayer3.Skin.Characters_Ptn]; + TJAPlayer3.Skin.Characters_Tower_Running_Ptn = new int[TJAPlayer3.Skin.Characters_Ptn]; + TJAPlayer3.Skin.Characters_Tower_Clear_Ptn = new int[TJAPlayer3.Skin.Characters_Ptn]; + TJAPlayer3.Skin.Characters_Tower_Fail_Ptn = new int[TJAPlayer3.Skin.Characters_Ptn]; + TJAPlayer3.Skin.Characters_Tower_Standing_Tired_Ptn = new int[TJAPlayer3.Skin.Characters_Ptn]; + 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_Resolution = new int[TJAPlayer3.Skin.Characters_Ptn][]; TJAPlayer3.Skin.Characters_Heya_Render_Offset = new int[TJAPlayer3.Skin.Characters_Ptn][]; @@ -1289,6 +1307,17 @@ namespace TJAPlayer3 TJAPlayer3.Skin.Characters_Motion_SoulIn = new int[TJAPlayer3.Skin.Characters_Ptn][]; TJAPlayer3.Skin.Characters_Motion_SoulOut = new int[TJAPlayer3.Skin.Characters_Ptn][]; TJAPlayer3.Skin.Characters_Motion_Return = new int[TJAPlayer3.Skin.Characters_Ptn][]; + /* + TJAPlayer3.Skin.Characters_Motion_Tower_Standing = new int[TJAPlayer3.Skin.Characters_Ptn][]; + TJAPlayer3.Skin.Characters_Motion_Tower_Climbing = new int[TJAPlayer3.Skin.Characters_Ptn][]; + TJAPlayer3.Skin.Characters_Motion_Tower_Running = new int[TJAPlayer3.Skin.Characters_Ptn][]; + TJAPlayer3.Skin.Characters_Motion_Tower_Clear = new int[TJAPlayer3.Skin.Characters_Ptn][]; + TJAPlayer3.Skin.Characters_Motion_Tower_Fail = new int[TJAPlayer3.Skin.Characters_Ptn][]; + TJAPlayer3.Skin.Characters_Motion_Tower_Standing_Tired = new int[TJAPlayer3.Skin.Characters_Ptn][]; + TJAPlayer3.Skin.Characters_Motion_Tower_Climbing_Tired = new int[TJAPlayer3.Skin.Characters_Ptn][]; + TJAPlayer3.Skin.Characters_Motion_Tower_Running_Tired = new int[TJAPlayer3.Skin.Characters_Ptn][]; + TJAPlayer3.Skin.Characters_Motion_Tower_Clear_Tired = new int[TJAPlayer3.Skin.Characters_Ptn][]; + */ TJAPlayer3.Skin.Characters_Beat_Normal = new float[TJAPlayer3.Skin.Characters_Ptn]; TJAPlayer3.Skin.Characters_Beat_Miss = new float[TJAPlayer3.Skin.Characters_Ptn]; TJAPlayer3.Skin.Characters_Beat_MissDown = new float[TJAPlayer3.Skin.Characters_Ptn]; @@ -1308,6 +1337,15 @@ namespace TJAPlayer3 TJAPlayer3.Skin.Characters_Beat_SoulIn = new float[TJAPlayer3.Skin.Characters_Ptn]; 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]; TJAPlayer3.Skin.Characters_Balloon_FadeOut = new int[TJAPlayer3.Skin.Characters_Ptn]; @@ -1566,6 +1604,32 @@ namespace TJAPlayer3 for (int j = 0; j < TJAPlayer3.Skin.Characters_Balloon_Miss_Ptn[i]; j++) Characters_Balloon_Miss[i][j]?.Dispose(); + for (int j = 0; j < TJAPlayer3.Skin.Characters_Tower_Standing_Ptn[i]; j++) + Characters_Tower_Standing[i][j]?.Dispose(); + + for (int j = 0; j < TJAPlayer3.Skin.Characters_Tower_Climbing_Ptn[i]; j++) + Characters_Tower_Climbing[i][j]?.Dispose(); + + for (int j = 0; j < TJAPlayer3.Skin.Characters_Tower_Running_Ptn[i]; j++) + Characters_Tower_Running[i][j]?.Dispose(); + + for (int j = 0; j < TJAPlayer3.Skin.Characters_Tower_Clear_Ptn[i]; j++) + Characters_Tower_Clear[i][j]?.Dispose(); + + for (int j = 0; j < TJAPlayer3.Skin.Characters_Tower_Fail_Ptn[i]; j++) + Characters_Tower_Fail[i][j]?.Dispose(); + + for (int j = 0; j < TJAPlayer3.Skin.Characters_Tower_Standing_Tired_Ptn[i]; j++) + Characters_Tower_Standing_Tired[i][j]?.Dispose(); + + for (int j = 0; j < TJAPlayer3.Skin.Characters_Tower_Climbing_Tired_Ptn[i]; j++) + Characters_Tower_Climbing_Tired[i][j]?.Dispose(); + + for (int j = 0; j < TJAPlayer3.Skin.Characters_Tower_Running_Tired_Ptn[i]; j++) + Characters_Tower_Running_Tired[i][j]?.Dispose(); + + for (int j = 0; j < TJAPlayer3.Skin.Characters_Tower_Clear_Tired_Ptn[i]; j++) + Characters_Tower_Clear_Tired[i][j]?.Dispose(); #endregion } @@ -1615,6 +1679,15 @@ namespace TJAPlayer3 TJAPlayer3.Skin.Characters_Result_Failed_Ptn[i] = TJAPlayer3.t連番画像の枚数を数える(charaPath + @$"{Path.DirectorySeparatorChar}Result_Failed{Path.DirectorySeparatorChar}"); TJAPlayer3.Skin.Characters_Result_Failed_In_Ptn[i] = TJAPlayer3.t連番画像の枚数を数える(charaPath + @$"{Path.DirectorySeparatorChar}Result_Failed_In{Path.DirectorySeparatorChar}"); TJAPlayer3.Skin.Characters_Result_Normal_Ptn[i] = TJAPlayer3.t連番画像の枚数を数える(charaPath + @$"{Path.DirectorySeparatorChar}Result_Normal{Path.DirectorySeparatorChar}"); + TJAPlayer3.Skin.Characters_Tower_Standing_Ptn[i] = TJAPlayer3.t連番画像の枚数を数える(charaPath + @$"{Path.DirectorySeparatorChar}Tower_Char{Path.DirectorySeparatorChar}Standing{Path.DirectorySeparatorChar}"); + TJAPlayer3.Skin.Characters_Tower_Climbing_Ptn[i] = TJAPlayer3.t連番画像の枚数を数える(charaPath + @$"{Path.DirectorySeparatorChar}Tower_Char{Path.DirectorySeparatorChar}Climbing{Path.DirectorySeparatorChar}"); + TJAPlayer3.Skin.Characters_Tower_Running_Ptn[i] = TJAPlayer3.t連番画像の枚数を数える(charaPath + @$"{Path.DirectorySeparatorChar}Tower_Char{Path.DirectorySeparatorChar}Running{Path.DirectorySeparatorChar}"); + TJAPlayer3.Skin.Characters_Tower_Clear_Ptn[i] = TJAPlayer3.t連番画像の枚数を数える(charaPath + @$"{Path.DirectorySeparatorChar}Tower_Char{Path.DirectorySeparatorChar}Clear{Path.DirectorySeparatorChar}"); + TJAPlayer3.Skin.Characters_Tower_Fail_Ptn[i] = TJAPlayer3.t連番画像の枚数を数える(charaPath + @$"{Path.DirectorySeparatorChar}Tower_Char{Path.DirectorySeparatorChar}Fail{Path.DirectorySeparatorChar}"); + TJAPlayer3.Skin.Characters_Tower_Standing_Tired_Ptn[i] = TJAPlayer3.t連番画像の枚数を数える(charaPath + @$"{Path.DirectorySeparatorChar}Tower_Char{Path.DirectorySeparatorChar}Standing_Tired{Path.DirectorySeparatorChar}"); + TJAPlayer3.Skin.Characters_Tower_Climbing_Tired_Ptn[i] = TJAPlayer3.t連番画像の枚数を数える(charaPath + @$"{Path.DirectorySeparatorChar}Tower_Char{Path.DirectorySeparatorChar}Climbing_Tired{Path.DirectorySeparatorChar}"); + TJAPlayer3.Skin.Characters_Tower_Running_Tired_Ptn[i] = TJAPlayer3.t連番画像の枚数を数える(charaPath + @$"{Path.DirectorySeparatorChar}Tower_Char{Path.DirectorySeparatorChar}Running_Tired{Path.DirectorySeparatorChar}"); + TJAPlayer3.Skin.Characters_Tower_Clear_Tired_Ptn[i] = TJAPlayer3.t連番画像の枚数を数える(charaPath + @$"{Path.DirectorySeparatorChar}Tower_Char{Path.DirectorySeparatorChar}Clear_Tired{Path.DirectorySeparatorChar}"); Characters_Normal[i] = new CTexture[TJAPlayer3.Skin.Characters_Normal_Ptn[i]]; Characters_Normal_Missed[i] = new CTexture[TJAPlayer3.Skin.Characters_Normal_Missed_Ptn[i]]; @@ -1647,6 +1720,15 @@ namespace TJAPlayer3 Characters_Menu_Loop[i] = new CTexture[TJAPlayer3.Skin.Characters_Menu_Loop_Ptn[i]]; Characters_Menu_Start[i] = new CTexture[TJAPlayer3.Skin.Characters_Menu_Start_Ptn[i]]; Characters_Menu_Select[i] = new CTexture[TJAPlayer3.Skin.Characters_Menu_Select_Ptn[i]]; + Characters_Tower_Standing[i] = new CTexture[TJAPlayer3.Skin.Characters_Tower_Standing_Ptn[i]]; + Characters_Tower_Climbing[i] = new CTexture[TJAPlayer3.Skin.Characters_Tower_Climbing_Ptn[i]]; + Characters_Tower_Running[i] = new CTexture[TJAPlayer3.Skin.Characters_Tower_Running_Ptn[i]]; + Characters_Tower_Clear[i] = new CTexture[TJAPlayer3.Skin.Characters_Tower_Clear_Ptn[i]]; + Characters_Tower_Fail[i] = new CTexture[TJAPlayer3.Skin.Characters_Tower_Fail_Ptn[i]]; + Characters_Tower_Standing_Tired[i] = new CTexture[TJAPlayer3.Skin.Characters_Tower_Standing_Tired_Ptn[i]]; + Characters_Tower_Climbing_Tired[i] = new CTexture[TJAPlayer3.Skin.Characters_Tower_Climbing_Tired_Ptn[i]]; + Characters_Tower_Running_Tired[i] = new CTexture[TJAPlayer3.Skin.Characters_Tower_Running_Tired_Ptn[i]]; + Characters_Tower_Clear_Tired[i] = new CTexture[TJAPlayer3.Skin.Characters_Tower_Clear_Tired_Ptn[i]]; #endregion @@ -1745,6 +1827,33 @@ namespace TJAPlayer3 for (int j = 0; j < TJAPlayer3.Skin.Characters_Balloon_Miss_Ptn[i]; j++) Characters_Balloon_Miss[i][j] = TxCGlobal(CHARACTERS + TJAPlayer3.Skin.Characters_DirName[i] + @$"{Path.DirectorySeparatorChar}Balloon_Miss{Path.DirectorySeparatorChar}" + j.ToString() + @$".png"); + for (int j = 0; j < TJAPlayer3.Skin.Characters_Tower_Standing_Ptn[i]; j++) + Characters_Tower_Standing[i][j] = TxCGlobal(CHARACTERS + TJAPlayer3.Skin.Characters_DirName[i] + @$"{Path.DirectorySeparatorChar}Tower_Char{Path.DirectorySeparatorChar}Standing{Path.DirectorySeparatorChar}" + j.ToString() + @$".png"); + + for (int j = 0; j < TJAPlayer3.Skin.Characters_Tower_Climbing_Ptn[i]; j++) + Characters_Tower_Climbing[i][j] = TxCGlobal(CHARACTERS + TJAPlayer3.Skin.Characters_DirName[i] + @$"{Path.DirectorySeparatorChar}Tower_Char{Path.DirectorySeparatorChar}Climbing{Path.DirectorySeparatorChar}" + j.ToString() + @$".png"); + + for (int j = 0; j < TJAPlayer3.Skin.Characters_Tower_Running_Ptn[i]; j++) + Characters_Tower_Running[i][j] = TxCGlobal(CHARACTERS + TJAPlayer3.Skin.Characters_DirName[i] + @$"{Path.DirectorySeparatorChar}Tower_Char{Path.DirectorySeparatorChar}Running{Path.DirectorySeparatorChar}" + j.ToString() + @$".png"); + + for (int j = 0; j < TJAPlayer3.Skin.Characters_Tower_Clear_Ptn[i]; j++) + Characters_Tower_Clear[i][j] = TxCGlobal(CHARACTERS + TJAPlayer3.Skin.Characters_DirName[i] + @$"{Path.DirectorySeparatorChar}Tower_Char{Path.DirectorySeparatorChar}Clear{Path.DirectorySeparatorChar}" + j.ToString() + @$".png"); + + for (int j = 0; j < TJAPlayer3.Skin.Characters_Tower_Fail_Ptn[i]; j++) + Characters_Tower_Fail[i][j] = TxCGlobal(CHARACTERS + TJAPlayer3.Skin.Characters_DirName[i] + @$"{Path.DirectorySeparatorChar}Tower_Char{Path.DirectorySeparatorChar}Fail{Path.DirectorySeparatorChar}" + j.ToString() + @$".png"); + + for (int j = 0; j < TJAPlayer3.Skin.Characters_Tower_Standing_Tired_Ptn[i]; j++) + Characters_Tower_Standing_Tired[i][j] = TxCGlobal(CHARACTERS + TJAPlayer3.Skin.Characters_DirName[i] + @$"{Path.DirectorySeparatorChar}Tower_Char{Path.DirectorySeparatorChar}Standing_Tired{Path.DirectorySeparatorChar}" + j.ToString() + @$".png"); + + for (int j = 0; j < TJAPlayer3.Skin.Characters_Tower_Climbing_Tired_Ptn[i]; j++) + Characters_Tower_Climbing_Tired[i][j] = TxCGlobal(CHARACTERS + TJAPlayer3.Skin.Characters_DirName[i] + @$"{Path.DirectorySeparatorChar}Tower_Char{Path.DirectorySeparatorChar}Climbing_Tired{Path.DirectorySeparatorChar}" + j.ToString() + @$".png"); + + for (int j = 0; j < TJAPlayer3.Skin.Characters_Tower_Running_Tired_Ptn[i]; j++) + Characters_Tower_Running_Tired[i][j] = TxCGlobal(CHARACTERS + TJAPlayer3.Skin.Characters_DirName[i] + @$"{Path.DirectorySeparatorChar}Tower_Char{Path.DirectorySeparatorChar}Running_Tired{Path.DirectorySeparatorChar}" + j.ToString() + @$".png"); + + for (int j = 0; j < TJAPlayer3.Skin.Characters_Tower_Clear_Tired_Ptn[i]; j++) + Characters_Tower_Clear_Tired[i][j] = TxCGlobal(CHARACTERS + TJAPlayer3.Skin.Characters_DirName[i] + @$"{Path.DirectorySeparatorChar}Tower_Char{Path.DirectorySeparatorChar}Clear_Tired{Path.DirectorySeparatorChar}" + j.ToString() + @$".png"); + #endregion #region [Parse individual character parameters] @@ -1780,6 +1889,17 @@ namespace TJAPlayer3 TJAPlayer3.Skin.Characters_Motion_SoulIn[i] = CreateNumberedArrayFromInt(TJAPlayer3.Skin.Characters_Become_Maxed_Ptn[i]); TJAPlayer3.Skin.Characters_Motion_SoulOut[i] = CreateNumberedArrayFromInt(TJAPlayer3.Skin.Characters_SoulOut_Ptn[i]); TJAPlayer3.Skin.Characters_Motion_Return[i] = CreateNumberedArrayFromInt(TJAPlayer3.Skin.Characters_Return_Ptn[i]); + /* + TJAPlayer3.Skin.Characters_Motion_Tower_Standing[i] = CreateNumberedArrayFromInt(TJAPlayer3.Skin.Characters_Tower_Standing_Ptn[i]); + TJAPlayer3.Skin.Characters_Motion_Tower_Climbing[i] = CreateNumberedArrayFromInt(TJAPlayer3.Skin.Characters_Tower_Climbing_Ptn[i]); + TJAPlayer3.Skin.Characters_Motion_Tower_Running[i] = CreateNumberedArrayFromInt(TJAPlayer3.Skin.Characters_Tower_Running_Ptn[i]); + TJAPlayer3.Skin.Characters_Motion_Tower_Clear[i] = CreateNumberedArrayFromInt(TJAPlayer3.Skin.Characters_Tower_Clear_Ptn[i]); + TJAPlayer3.Skin.Characters_Motion_Tower_Fail[i] = CreateNumberedArrayFromInt(TJAPlayer3.Skin.Characters_Tower_Fail_Ptn[i]); + TJAPlayer3.Skin.Characters_Motion_Tower_Standing_Tired[i] = CreateNumberedArrayFromInt(TJAPlayer3.Skin.Characters_Tower_Standing_Tired_Ptn[i]); + TJAPlayer3.Skin.Characters_Motion_Tower_Climbing_Tired[i] = CreateNumberedArrayFromInt(TJAPlayer3.Skin.Characters_Tower_Climbing_Tired_Ptn[i]); + TJAPlayer3.Skin.Characters_Motion_Tower_Running_Tired[i] = CreateNumberedArrayFromInt(TJAPlayer3.Skin.Characters_Tower_Running_Tired_Ptn[i]); + TJAPlayer3.Skin.Characters_Motion_Tower_Clear_Tired[i] = CreateNumberedArrayFromInt(TJAPlayer3.Skin.Characters_Tower_Clear_Tired_Ptn[i]); + */ TJAPlayer3.Skin.Characters_Beat_Normal[i] = 1; TJAPlayer3.Skin.Characters_Beat_Miss[i] = 1; TJAPlayer3.Skin.Characters_Beat_MissDown[i] = 1; @@ -1799,6 +1919,15 @@ namespace TJAPlayer3 TJAPlayer3.Skin.Characters_Beat_SoulIn[i] = 1.5f; 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; TJAPlayer3.Skin.Characters_Balloon_FadeOut[i] = 84; @@ -2045,6 +2174,51 @@ namespace TJAPlayer3 TJAPlayer3.Skin.Characters_Motion_Return[i] = CConversion.StringToIntArray(strParam); break; } + /*case "Game_Chara_Motion_Tower_Standing": + { + TJAPlayer3.Skin.Characters_Motion_Tower_Standing[i] = CConversion.StringToIntArray(strParam); + break; + } + case "Game_Chara_Motion_Tower_Climbing": + { + TJAPlayer3.Skin.Characters_Motion_Tower_Climbing[i] = CConversion.StringToIntArray(strParam); + break; + } + case "Game_Chara_Motion_Tower_Running": + { + TJAPlayer3.Skin.Characters_Motion_Tower_Running[i] = CConversion.StringToIntArray(strParam); + break; + } + case "Game_Chara_Motion_Tower_Clear": + { + TJAPlayer3.Skin.Characters_Motion_Tower_Clear[i] = CConversion.StringToIntArray(strParam); + break; + } + case "Game_Chara_Motion_Tower_Fail": + { + TJAPlayer3.Skin.Characters_Motion_Tower_Fail[i] = CConversion.StringToIntArray(strParam); + break; + } + case "Game_Chara_Motion_Tower_Standing_Tired": + { + TJAPlayer3.Skin.Characters_Motion_Tower_Standing_Tired[i] = CConversion.StringToIntArray(strParam); + break; + } + case "Game_Chara_Motion_Tower_Climbing_Tired": + { + TJAPlayer3.Skin.Characters_Motion_Tower_Climbing_Tired[i] = CConversion.StringToIntArray(strParam); + break; + } + case "Game_Chara_Motion_Tower_Running_Tired": + { + TJAPlayer3.Skin.Characters_Motion_Tower_Running_Tired[i] = CConversion.StringToIntArray(strParam); + break; + } + case "Game_Chara_Motion_Tower_Clear_Tired": + { + TJAPlayer3.Skin.Characters_Motion_Tower_Clear_Tired[i] = CConversion.StringToIntArray(strParam); + break; + }*/ case "Game_Chara_Beat_Normal": { TJAPlayer3.Skin.Characters_Beat_Normal[i] = float.Parse(strParam); @@ -2132,6 +2306,51 @@ namespace TJAPlayer3 TJAPlayer3.Skin.Characters_Beat_Return[i] = float.Parse(strParam); break; } + case "Game_Chara_Beat_Tower_Standing": + { + TJAPlayer3.Skin.Characters_Beat_Tower_Standing[i] = float.Parse(strParam); + break; + } + case "Game_Chara_Beat_Tower_Climbing": + { + 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); + break; + } + case "Game_Chara_Beat_Tower_Fail": + { + TJAPlayer3.Skin.Characters_Beat_Tower_Fail[i] = float.Parse(strParam); + break; + } + case "Game_Chara_Beat_Tower_Standing_Tired": + { + 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); + break; + } + case "Game_Chara_Beat_Tower_Clear_Tired": + { + TJAPlayer3.Skin.Characters_Beat_Tower_Clear_Tired[i] = float.Parse(strParam); + break; + } case "Chara_Entry_AnimationDuration": { TJAPlayer3.Skin.Characters_Title_Entry_AnimationDuration[i] = int.Parse(strParam); @@ -2820,8 +3039,16 @@ Result_Mountain = new CTexture[4]*/; Characters_Result_Clear, Characters_Result_Failed, Characters_Result_Failed_In, - Characters_Result_Normal; - + Characters_Result_Normal, + Characters_Tower_Standing, + Characters_Tower_Climbing, + Characters_Tower_Running, + Characters_Tower_Clear, + Characters_Tower_Fail, + Characters_Tower_Standing_Tired, + Characters_Tower_Climbing_Tired, + Characters_Tower_Running_Tired, + Characters_Tower_Clear_Tired; public CTexture[] Characters_Heya_Preview, Characters_Heya_Render, Characters_Result_Clear_1P, diff --git a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drums背景.cs b/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drums背景.cs index 3cec08f9..a3ae4527 100644 --- a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drums背景.cs +++ b/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drums背景.cs @@ -183,11 +183,19 @@ namespace TJAPlayer3 this.ct炎 = new CCounter(0, 6, 50, TJAPlayer3.Timer); + this.currentCharacter = Math.Max(0, Math.Min(TJAPlayer3.SaveFileInstances[0].data.Character, TJAPlayer3.Skin.Characters_Ptn - 1)); this.ctSlideAnimation = new CCounter(); - this.ctClimbAnimation = new CCounter(); - this.ctDonAnimation = new CCounter(0, 1000, 24000f / ((float)TJAPlayer3.stage演奏ドラム画面.actPlayInfo.dbBPM[0] * TJAPlayer3.ConfigIni.n演奏速度 / 20), TJAPlayer3.Timer); - + this.ctClimbDuration = new CCounter(); + this.ctStandingAnimation = new CCounter(0, 1000, (24000f * TJAPlayer3.Skin.Characters_Beat_Tower_Standing[currentCharacter]) / ((float)TJAPlayer3.stage演奏ドラム画面.actPlayInfo.dbBPM[0] * TJAPlayer3.ConfigIni.n演奏速度 / 20), TJAPlayer3.Timer); + this.ctClimbingAnimation = new CCounter(); + this.ctRunningAnimation = new CCounter(); + this.ctClearAnimation = new CCounter(); + this.ctFailAnimation = new CCounter(); + this.ctStandTiredAnimation = new CCounter(); + this.ctClimbTiredAnimation = new CCounter(); + this.ctRunTiredAnimation = new CCounter(); + this.ctClearTiredAnimation = new CCounter(); base.Activate(); } @@ -446,34 +454,92 @@ namespace TJAPlayer3 #region [Climbing don] - // Will be added in a future skinning update - int currentDon = 0; + 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_フェードアウト; if (bFloorChanged == true) { - ctClimbAnimation.Start(0, 1500, 120f / ((float)TJAPlayer3.stage演奏ドラム画面.actPlayInfo.dbBPM[0] * TJAPlayer3.ConfigIni.n演奏速度 / 20), TJAPlayer3.Timer); - ctDonAnimation.Start(0, 1000, 24000f / ((float)TJAPlayer3.stage演奏ドラム画面.actPlayInfo.dbBPM[0] * TJAPlayer3.ConfigIni.n演奏速度 / 20), TJAPlayer3.Timer); + float floorBPM = (float)(TJAPlayer3.stage演奏ドラム画面.actPlayInfo.dbBPM[0] * TJAPlayer3.ConfigIni.n演奏速度 / 20); + ctClimbDuration.Start(0, 1500, 120f / floorBPM, TJAPlayer3.Timer); + ctStandingAnimation.Start(0, 1000, (24000f * TJAPlayer3.Skin.Characters_Beat_Tower_Standing[currentCharacter]) / floorBPM, TJAPlayer3.Timer); + ctClimbingAnimation.Start(0, 1000, (24000f * TJAPlayer3.Skin.Characters_Beat_Tower_Climbing[currentCharacter]) / floorBPM, TJAPlayer3.Timer); + ctRunningAnimation.Start(0, 1000, (24000f * TJAPlayer3.Skin.Characters_Beat_Tower_Running[currentCharacter]) / floorBPM, TJAPlayer3.Timer); + ctClearAnimation.Start(0, 1000, (24000f * TJAPlayer3.Skin.Characters_Beat_Tower_Clear[currentCharacter]) / floorBPM, TJAPlayer3.Timer); + ctFailAnimation.Start(0, 1000, (24000f * TJAPlayer3.Skin.Characters_Beat_Tower_Fail[currentCharacter]) / floorBPM, TJAPlayer3.Timer); + ctStandTiredAnimation.Start(0, 1000, (24000f * TJAPlayer3.Skin.Characters_Beat_Tower_Standing_Tired[currentCharacter]) / floorBPM, TJAPlayer3.Timer); + ctClimbTiredAnimation.Start(0, 1000, (24000f * TJAPlayer3.Skin.Characters_Beat_Tower_Climbing_Tired[currentCharacter]) / floorBPM, TJAPlayer3.Timer); + ctRunTiredAnimation.Start(0, 1000, (24000f * TJAPlayer3.Skin.Characters_Beat_Tower_Running_Tired[currentCharacter]) / floorBPM, TJAPlayer3.Timer); + ctClearTiredAnimation.Start(0, 1000, (24000f * TJAPlayer3.Skin.Characters_Beat_Tower_Clear_Tired[currentCharacter]) / floorBPM, TJAPlayer3.Timer); } - - - if (ctClimbAnimation.CurrentValue == 0 || ctClimbAnimation.CurrentValue == 1500) + if (ctClimbDuration.CurrentValue > 0 && ctClimbDuration.CurrentValue < 1500) { - int animDon = ctDonAnimation.CurrentValue % TJAPlayer3.Skin.Game_Tower_Ptn_Don_Standing[currentDon]; - TJAPlayer3.Tx.Tower_Don_Standing[currentDon][animDon]?.t2D下中央基準描画(TJAPlayer3.Skin.Game_Tower_Don[0], TJAPlayer3.Skin.Game_Tower_Don[1]); // Center X - 50 - } - else if (ctClimbAnimation.CurrentValue <= 1000) - { - int animDon = ctDonAnimation.CurrentValue % TJAPlayer3.Skin.Game_Tower_Ptn_Don_Climbing[currentDon]; - int distDonX = (int)(ctClimbAnimation.CurrentValue * (TJAPlayer3.Skin.Game_Tower_Don_Move[0] / 1000f)); - int distDonY = (int)(ctClimbAnimation.CurrentValue * (TJAPlayer3.Skin.Game_Tower_Don_Move[1] / 1000f)); - TJAPlayer3.Tx.Tower_Don_Climbing[currentDon][animDon]?.t2D下中央基準描画(TJAPlayer3.Skin.Game_Tower_Don[0] + distDonX, TJAPlayer3.Skin.Game_Tower_Don[1] + distDonY); + // Tired Climb + if (ctIsTired && (ctClimbDuration.CurrentValue <= 1000) && TJAPlayer3.Skin.Characters_Tower_Climbing_Tired_Ptn[currentCharacter] > 0) + { + int animChar = ctClimbTiredAnimation.CurrentValue % TJAPlayer3.Skin.Characters_Tower_Climbing_Ptn[currentCharacter]; + int distDonX = (int)(ctClimbDuration.CurrentValue * (TJAPlayer3.Skin.Game_Tower_Don_Move[0] / 1000f)); + int distDonY = (int)(ctClimbDuration.CurrentValue * (TJAPlayer3.Skin.Game_Tower_Don_Move[1] / 1000f)); + TJAPlayer3.Tx.Characters_Tower_Climbing_Tired[currentCharacter][animChar]?.t2D下中央基準描画(TJAPlayer3.Skin.Game_Tower_Don[0] + distDonX, TJAPlayer3.Skin.Game_Tower_Don[1] + distDonY); + } + // Tired Run + else if (ctIsTired && (ctClimbDuration.CurrentValue > 1000 && ctClimbDuration.CurrentValue < 1500) && TJAPlayer3.Skin.Characters_Tower_Running_Tired_Ptn[currentCharacter] > 0) + { + int animChar = ctRunTiredAnimation.CurrentValue % TJAPlayer3.Skin.Characters_Tower_Running_Ptn[currentCharacter]; + int distDonX = (int)((1500 - ctClimbDuration.CurrentValue) * (TJAPlayer3.Skin.Game_Tower_Don_Move[0] / 500f)); + int distDonY = (int)((1500 - ctClimbDuration.CurrentValue) * (TJAPlayer3.Skin.Game_Tower_Don_Move[1] / 500f)); + TJAPlayer3.Tx.Characters_Tower_Running_Tired[currentCharacter][animChar]?.t2D下中央基準描画(TJAPlayer3.Skin.Game_Tower_Don[0] + distDonX, TJAPlayer3.Skin.Game_Tower_Don[1] + distDonY); + } + // Climb + else if ((ctClimbDuration.CurrentValue <= 1000) && TJAPlayer3.Skin.Characters_Tower_Climbing_Ptn[currentCharacter] > 0) + { + int animChar = ctClimbingAnimation.CurrentValue % TJAPlayer3.Skin.Characters_Tower_Climbing_Ptn[currentCharacter]; + int distDonX = (int)(ctClimbDuration.CurrentValue * (TJAPlayer3.Skin.Game_Tower_Don_Move[0] / 1000f)); + int distDonY = (int)(ctClimbDuration.CurrentValue * (TJAPlayer3.Skin.Game_Tower_Don_Move[1] / 1000f)); + TJAPlayer3.Tx.Characters_Tower_Climbing[currentCharacter][animChar]?.t2D下中央基準描画(TJAPlayer3.Skin.Game_Tower_Don[0] + distDonX, TJAPlayer3.Skin.Game_Tower_Don[1] + distDonY); + } + // Run + else if ((ctClimbDuration.CurrentValue > 1000 && ctClimbDuration.CurrentValue < 1500) && TJAPlayer3.Skin.Characters_Tower_Running_Ptn[currentCharacter] > 0) + { + int animChar = ctRunningAnimation.CurrentValue % TJAPlayer3.Skin.Characters_Tower_Running_Ptn[currentCharacter]; + int distDonX = (int)((1500 - ctClimbDuration.CurrentValue) * (TJAPlayer3.Skin.Game_Tower_Don_Move[0] / 500f)); + int distDonY = (int)((1500 - ctClimbDuration.CurrentValue) * (TJAPlayer3.Skin.Game_Tower_Don_Move[1] / 500f)); + TJAPlayer3.Tx.Characters_Tower_Running[currentCharacter][animChar]?.t2D下中央基準描画(TJAPlayer3.Skin.Game_Tower_Don[0] + distDonX, TJAPlayer3.Skin.Game_Tower_Don[1] + distDonY); + } } else { - int animDon = ctDonAnimation.CurrentValue % TJAPlayer3.Skin.Game_Tower_Ptn_Don_Running[currentDon]; - int distDonX = (int)((1500 - ctClimbAnimation.CurrentValue) * (TJAPlayer3.Skin.Game_Tower_Don_Move[0] / 500f)); - int distDonY = (int)((1500 - ctClimbAnimation.CurrentValue) * (TJAPlayer3.Skin.Game_Tower_Don_Move[1] / 500f)); - TJAPlayer3.Tx.Tower_Don_Running[currentDon][animDon]?.t2D下中央基準描画(TJAPlayer3.Skin.Game_Tower_Don[0] + distDonX, TJAPlayer3.Skin.Game_Tower_Don[1] + distDonY); + // Fail + if (TJAPlayer3.Skin.Characters_Tower_Fail_Ptn[currentCharacter] > 0 && CFloorManagement.CurrentNumberOfLives == 0) + { + int animChar = ctFailAnimation.CurrentValue % TJAPlayer3.Skin.Characters_Tower_Fail_Ptn[currentCharacter]; + 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]; + 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]; + 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]; + 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 + else if (TJAPlayer3.Skin.Characters_Tower_Standing_Ptn[currentCharacter] > 0) + { + int animChar = ctStandingAnimation.CurrentValue % TJAPlayer3.Skin.Characters_Tower_Standing_Ptn[currentCharacter]; + TJAPlayer3.Tx.Characters_Tower_Standing[currentCharacter][animChar]?.t2D下中央基準描画(TJAPlayer3.Skin.Game_Tower_Don[0], TJAPlayer3.Skin.Game_Tower_Don[1]); // Center X - 50 + } } #endregion @@ -490,8 +556,16 @@ namespace TJAPlayer3 #endregion ctSlideAnimation?.Tick(); - ctClimbAnimation?.Tick(); - ctDonAnimation?.TickLoop(); + ctClimbDuration?.Tick(); + ctStandingAnimation?.TickLoop(); + ctClimbingAnimation?.TickLoop(); + ctRunningAnimation?.TickLoop(); + ctClearAnimation?.TickLoop(); + ctFailAnimation?.TickLoop(); + ctStandTiredAnimation?.TickLoop(); + ctClimbTiredAnimation?.TickLoop(); + ctRunTiredAnimation?.TickLoop(); + ctClearTiredAnimation?.TickLoop(); #endregion } @@ -551,9 +625,18 @@ namespace TJAPlayer3 private CCachedFontRenderer pfTowerText; private bool bFloorChanged = false; + private int currentCharacter; private CCounter ctSlideAnimation; - private CCounter ctDonAnimation; - private CCounter ctClimbAnimation; + private CCounter ctStandingAnimation; + private CCounter ctClimbingAnimation; + private CCounter ctRunningAnimation; + private CCounter ctClearAnimation; + private CCounter ctFailAnimation; + private CCounter ctStandTiredAnimation; + private CCounter ctClimbTiredAnimation; + private CCounter ctRunTiredAnimation; + private CCounter ctClearTiredAnimation; + private CCounter ctClimbDuration; private CCounter ct炎;