diff --git a/TJAPlayer3/Common/CSkin.cs b/TJAPlayer3/Common/CSkin.cs index 8967c09c..aac2a2bc 100644 --- a/TJAPlayer3/Common/CSkin.cs +++ b/TJAPlayer3/Common/CSkin.cs @@ -2673,6 +2673,8 @@ namespace TJAPlayer3 public int Characters_Ptn; public int[] Characters_Normal_Ptn, + Characters_Normal_Missed_Ptn, + Characters_Normal_MissedDown_Ptn, Characters_Normal_Cleared_Ptn, Characters_Normal_Maxed_Ptn, Characters_GoGoTime_Ptn, @@ -2683,6 +2685,7 @@ namespace TJAPlayer3 Characters_GoGoStart_Maxed_Ptn, Characters_Become_Cleared_Ptn, Characters_Become_Maxed_Ptn, + Characters_Return_Ptn, Characters_Balloon_Breaking_Ptn, Characters_Balloon_Broke_Ptn, Characters_Balloon_Miss_Ptn, @@ -2714,9 +2717,13 @@ namespace TJAPlayer3 public int[][] Characters_Balloon_X; public int[][] Characters_Balloon_Y; public string[] Characters_Motion_Normal, + Characters_Motion_Miss, + Characters_Motion_MissDown, Characters_Motion_Clear, Characters_Motion_GoGo; public int[] Characters_Beat_Normal; + public int[] Characters_Beat_Miss; + public int[] Characters_Beat_MissDown; public int[] Characters_Beat_Clear; public int[] Characters_Beat_GoGo; public int[] Characters_Balloon_Timer; diff --git a/TJAPlayer3/Stages/01.StartUp/TextureLoader.cs b/TJAPlayer3/Stages/01.StartUp/TextureLoader.cs index ab68fcb2..01c570ea 100644 --- a/TJAPlayer3/Stages/01.StartUp/TextureLoader.cs +++ b/TJAPlayer3/Stages/01.StartUp/TextureLoader.cs @@ -963,6 +963,8 @@ namespace TJAPlayer3 Characters_Heya_Preview = new CTexture[TJAPlayer3.Skin.Characters_Ptn]; Characters_Normal = new CTexture[TJAPlayer3.Skin.Characters_Ptn][]; + Characters_Normal_Missed = new CTexture[TJAPlayer3.Skin.Characters_Ptn][]; + Characters_Normal_MissedDown = new CTexture[TJAPlayer3.Skin.Characters_Ptn][]; Characters_Normal_Cleared = new CTexture[TJAPlayer3.Skin.Characters_Ptn][]; Characters_Normal_Maxed = new CTexture[TJAPlayer3.Skin.Characters_Ptn][]; Characters_GoGoTime = new CTexture[TJAPlayer3.Skin.Characters_Ptn][]; @@ -973,6 +975,7 @@ namespace TJAPlayer3 Characters_GoGoStart_Maxed = new CTexture[TJAPlayer3.Skin.Characters_Ptn][]; Characters_Become_Cleared = new CTexture[TJAPlayer3.Skin.Characters_Ptn][]; Characters_Become_Maxed = new CTexture[TJAPlayer3.Skin.Characters_Ptn][]; + Characters_Return = new CTexture[TJAPlayer3.Skin.Characters_Ptn][]; Characters_Balloon_Breaking = new CTexture[TJAPlayer3.Skin.Characters_Ptn][]; Characters_Balloon_Broke = new CTexture[TJAPlayer3.Skin.Characters_Ptn][]; Characters_Balloon_Miss = new CTexture[TJAPlayer3.Skin.Characters_Ptn][]; @@ -987,6 +990,8 @@ namespace TJAPlayer3 Characters_Menu_Select = new CTexture[TJAPlayer3.Skin.Characters_Ptn][]; TJAPlayer3.Skin.Characters_Normal_Ptn = new int[TJAPlayer3.Skin.Characters_Ptn]; + TJAPlayer3.Skin.Characters_Normal_Missed_Ptn = new int[TJAPlayer3.Skin.Characters_Ptn]; + TJAPlayer3.Skin.Characters_Normal_MissedDown_Ptn = new int[TJAPlayer3.Skin.Characters_Ptn]; TJAPlayer3.Skin.Characters_Normal_Cleared_Ptn = new int[TJAPlayer3.Skin.Characters_Ptn]; TJAPlayer3.Skin.Characters_Normal_Maxed_Ptn = new int[TJAPlayer3.Skin.Characters_Ptn]; TJAPlayer3.Skin.Characters_GoGoTime_Ptn = new int[TJAPlayer3.Skin.Characters_Ptn]; @@ -997,6 +1002,7 @@ namespace TJAPlayer3 TJAPlayer3.Skin.Characters_GoGoStart_Maxed_Ptn = new int[TJAPlayer3.Skin.Characters_Ptn]; TJAPlayer3.Skin.Characters_Become_Cleared_Ptn = new int[TJAPlayer3.Skin.Characters_Ptn]; TJAPlayer3.Skin.Characters_Become_Maxed_Ptn = new int[TJAPlayer3.Skin.Characters_Ptn]; + TJAPlayer3.Skin.Characters_Return_Ptn = new int[TJAPlayer3.Skin.Characters_Ptn]; TJAPlayer3.Skin.Characters_Balloon_Breaking_Ptn = new int[TJAPlayer3.Skin.Characters_Ptn]; TJAPlayer3.Skin.Characters_Balloon_Broke_Ptn = new int[TJAPlayer3.Skin.Characters_Ptn]; TJAPlayer3.Skin.Characters_Balloon_Miss_Ptn = new int[TJAPlayer3.Skin.Characters_Ptn]; @@ -1023,9 +1029,13 @@ namespace TJAPlayer3 TJAPlayer3.Skin.Characters_Balloon_X = new int[TJAPlayer3.Skin.Characters_Ptn][]; TJAPlayer3.Skin.Characters_Balloon_Y = new int[TJAPlayer3.Skin.Characters_Ptn][]; TJAPlayer3.Skin.Characters_Motion_Normal = new string[TJAPlayer3.Skin.Characters_Ptn]; + TJAPlayer3.Skin.Characters_Motion_Miss = new string[TJAPlayer3.Skin.Characters_Ptn]; + TJAPlayer3.Skin.Characters_Motion_MissDown = new string[TJAPlayer3.Skin.Characters_Ptn]; TJAPlayer3.Skin.Characters_Motion_Clear = new string[TJAPlayer3.Skin.Characters_Ptn]; TJAPlayer3.Skin.Characters_Motion_GoGo = new string[TJAPlayer3.Skin.Characters_Ptn]; TJAPlayer3.Skin.Characters_Beat_Normal = new int[TJAPlayer3.Skin.Characters_Ptn]; + TJAPlayer3.Skin.Characters_Beat_Miss = new int[TJAPlayer3.Skin.Characters_Ptn]; + TJAPlayer3.Skin.Characters_Beat_MissDown = new int[TJAPlayer3.Skin.Characters_Ptn]; TJAPlayer3.Skin.Characters_Beat_Clear = new int[TJAPlayer3.Skin.Characters_Ptn]; TJAPlayer3.Skin.Characters_Beat_GoGo = new int[TJAPlayer3.Skin.Characters_Ptn]; TJAPlayer3.Skin.Characters_Balloon_Timer = new int[TJAPlayer3.Skin.Characters_Ptn]; @@ -1119,6 +1129,12 @@ namespace TJAPlayer3 for (int j = 0; j < TJAPlayer3.Skin.Characters_Normal_Ptn[i]; j++) Characters_Normal[i][j]?.Dispose(); + for (int j = 0; j < TJAPlayer3.Skin.Characters_Normal_Missed_Ptn[i]; j++) + Characters_Normal_Missed[i][j]?.Dispose(); + + for (int j = 0; j < TJAPlayer3.Skin.Characters_Normal_MissedDown_Ptn[i]; j++) + Characters_Normal_MissedDown[i][j]?.Dispose(); + for (int j = 0; j < TJAPlayer3.Skin.Characters_Normal_Cleared_Ptn[i]; j++) Characters_Normal_Cleared[i][j]?.Dispose(); @@ -1149,6 +1165,9 @@ namespace TJAPlayer3 for (int j = 0; j < TJAPlayer3.Skin.Characters_Become_Maxed_Ptn[i]; j++) Characters_Become_Maxed[i][j]?.Dispose(); + for (int j = 0; j < TJAPlayer3.Skin.Characters_Return_Ptn[i]; j++) + Characters_Return[i][j]?.Dispose(); + for (int j = 0; j < TJAPlayer3.Skin.Characters_Balloon_Breaking_Ptn[i]; j++) Characters_Balloon_Breaking[i][j]?.Dispose(); @@ -1172,6 +1191,8 @@ namespace TJAPlayer3 string charaPath = TJAPlayer3.strEXEのあるフォルダ + GLOBAL + CHARACTERS + i.ToString(); TJAPlayer3.Skin.Characters_Normal_Ptn[i] = TJAPlayer3.t連番画像の枚数を数える(charaPath + @"\Normal\"); + TJAPlayer3.Skin.Characters_Normal_Missed_Ptn[i] = TJAPlayer3.t連番画像の枚数を数える(charaPath + @"\Miss\"); + TJAPlayer3.Skin.Characters_Normal_MissedDown_Ptn[i] = TJAPlayer3.t連番画像の枚数を数える(charaPath + @"\MissDown\"); TJAPlayer3.Skin.Characters_Normal_Cleared_Ptn[i] = TJAPlayer3.t連番画像の枚数を数える(charaPath + @"\Clear\"); TJAPlayer3.Skin.Characters_Normal_Maxed_Ptn[i] = TJAPlayer3.t連番画像の枚数を数える(charaPath + @"\Clear_Max\"); TJAPlayer3.Skin.Characters_GoGoTime_Ptn[i] = TJAPlayer3.t連番画像の枚数を数える(charaPath + @"\GoGo\"); @@ -1182,6 +1203,7 @@ namespace TJAPlayer3 TJAPlayer3.Skin.Characters_GoGoStart_Maxed_Ptn[i] = TJAPlayer3.t連番画像の枚数を数える(charaPath + @"\GoGoStart_Max\"); TJAPlayer3.Skin.Characters_Become_Cleared_Ptn[i] = TJAPlayer3.t連番画像の枚数を数える(charaPath + @"\Clearin\"); TJAPlayer3.Skin.Characters_Become_Maxed_Ptn[i] = TJAPlayer3.t連番画像の枚数を数える(charaPath + @"\Soulin\"); + TJAPlayer3.Skin.Characters_Return_Ptn[i] = TJAPlayer3.t連番画像の枚数を数える(charaPath + @"\Return\"); TJAPlayer3.Skin.Characters_Balloon_Breaking_Ptn[i] = TJAPlayer3.t連番画像の枚数を数える(charaPath + @"\Balloon_Breaking\"); TJAPlayer3.Skin.Characters_Balloon_Broke_Ptn[i] = TJAPlayer3.t連番画像の枚数を数える(charaPath + @"\Balloon_Broke\"); TJAPlayer3.Skin.Characters_Balloon_Miss_Ptn[i] = TJAPlayer3.t連番画像の枚数を数える(charaPath + @"\Balloon_Miss\"); @@ -1196,6 +1218,8 @@ namespace TJAPlayer3 TJAPlayer3.Skin.Characters_Result_Normal_Ptn[i] = TJAPlayer3.t連番画像の枚数を数える(charaPath + @"\Result_Normal\"); Characters_Normal[i] = new CTexture[TJAPlayer3.Skin.Characters_Normal_Ptn[i]]; + Characters_Normal_Missed[i] = new CTexture[TJAPlayer3.Skin.Characters_Normal_Missed_Ptn[i]]; + Characters_Normal_MissedDown[i] = new CTexture[TJAPlayer3.Skin.Characters_Normal_MissedDown_Ptn[i]]; Characters_Normal_Cleared[i] = new CTexture[TJAPlayer3.Skin.Characters_Normal_Cleared_Ptn[i]]; Characters_Normal_Maxed[i] = new CTexture[TJAPlayer3.Skin.Characters_Normal_Maxed_Ptn[i]]; Characters_GoGoTime[i] = new CTexture[TJAPlayer3.Skin.Characters_GoGoTime_Ptn[i]]; @@ -1206,6 +1230,7 @@ namespace TJAPlayer3 Characters_GoGoStart_Maxed[i] = new CTexture[TJAPlayer3.Skin.Characters_GoGoStart_Maxed_Ptn[i]]; Characters_Become_Cleared[i] = new CTexture[TJAPlayer3.Skin.Characters_Become_Cleared_Ptn[i]]; Characters_Become_Maxed[i] = new CTexture[TJAPlayer3.Skin.Characters_Become_Maxed_Ptn[i]]; + Characters_Return[i] = new CTexture[TJAPlayer3.Skin.Characters_Return_Ptn[i]]; Characters_Balloon_Breaking[i] = new CTexture[TJAPlayer3.Skin.Characters_Balloon_Breaking_Ptn[i]]; Characters_Balloon_Broke[i] = new CTexture[TJAPlayer3.Skin.Characters_Balloon_Broke_Ptn[i]]; Characters_Balloon_Miss[i] = new CTexture[TJAPlayer3.Skin.Characters_Balloon_Miss_Ptn[i]]; @@ -1253,6 +1278,12 @@ namespace TJAPlayer3 for (int j = 0; j < TJAPlayer3.Skin.Characters_Normal_Ptn[i]; j++) Characters_Normal[i][j] = TxCGlobal(CHARACTERS + i.ToString() + @"\Normal\" + j.ToString() + @".png"); + for (int j = 0; j < TJAPlayer3.Skin.Characters_Normal_Missed_Ptn[i]; j++) + Characters_Normal_Missed[i][j] = TxCGlobal(CHARACTERS + i.ToString() + @"\Miss\" + j.ToString() + @".png"); + + for (int j = 0; j < TJAPlayer3.Skin.Characters_Normal_MissedDown_Ptn[i]; j++) + Characters_Normal_MissedDown[i][j] = TxCGlobal(CHARACTERS + i.ToString() + @"\MissDown\" + j.ToString() + @".png"); + for (int j = 0; j < TJAPlayer3.Skin.Characters_Normal_Cleared_Ptn[i]; j++) Characters_Normal_Cleared[i][j] = TxCGlobal(CHARACTERS + i.ToString() + @"\Clear\" + j.ToString() + @".png"); @@ -1283,6 +1314,9 @@ namespace TJAPlayer3 for (int j = 0; j < TJAPlayer3.Skin.Characters_Become_Maxed_Ptn[i]; j++) Characters_Become_Maxed[i][j] = TxCGlobal(CHARACTERS + i.ToString() + @"\Soulin\" + j.ToString() + @".png"); + for (int j = 0; j < TJAPlayer3.Skin.Characters_Return_Ptn[i]; j++) + Characters_Return[i][j] = TxCGlobal(CHARACTERS + i.ToString() + @"\Return\" + j.ToString() + @".png"); + for (int j = 0; j < TJAPlayer3.Skin.Characters_Balloon_Breaking_Ptn[i]; j++) Characters_Balloon_Breaking[i][j] = TxCGlobal(CHARACTERS + i.ToString() + @"\Balloon_Breaking\" + j.ToString() + @".png"); @@ -1312,9 +1346,13 @@ namespace TJAPlayer3 TJAPlayer3.Skin.Characters_Balloon_X[i] = new int[] { 240, 240, 0, 0 }; TJAPlayer3.Skin.Characters_Balloon_Y[i] = new int[] { 0, 297, 0, 0 }; TJAPlayer3.Skin.Characters_Motion_Normal[i] = "0"; + TJAPlayer3.Skin.Characters_Motion_Miss[i] = "0"; + TJAPlayer3.Skin.Characters_Motion_MissDown[i] = "0"; TJAPlayer3.Skin.Characters_Motion_Clear[i] = "0"; TJAPlayer3.Skin.Characters_Motion_GoGo[i] = "0"; TJAPlayer3.Skin.Characters_Beat_Normal[i] = 1; + TJAPlayer3.Skin.Characters_Beat_Miss[i] = 1; + TJAPlayer3.Skin.Characters_Beat_MissDown[i] = 1; TJAPlayer3.Skin.Characters_Beat_Clear[i] = 2; TJAPlayer3.Skin.Characters_Beat_GoGo[i] = 2; TJAPlayer3.Skin.Characters_Balloon_Timer[i] = 28; @@ -1450,6 +1488,14 @@ namespace TJAPlayer3 { TJAPlayer3.Skin.Characters_Motion_Normal[i] = strParam; } + else if (strCommand == "Game_Chara_Motion_Miss") + { + TJAPlayer3.Skin.Characters_Motion_Miss[i] = strParam; + } + else if (strCommand == "Game_Chara_Motion_MissDown") + { + TJAPlayer3.Skin.Characters_Motion_MissDown[i] = strParam; + } else if (strCommand == "Game_Chara_Motion_Clear") { TJAPlayer3.Skin.Characters_Motion_Clear[i] = strParam; @@ -1462,6 +1508,14 @@ namespace TJAPlayer3 { TJAPlayer3.Skin.Characters_Beat_Normal[i] = int.Parse(strParam); } + else if (strCommand == "Game_Chara_Beat_Miss") + { + TJAPlayer3.Skin.Characters_Beat_Miss[i] = int.Parse(strParam); + } + else if (strCommand == "Game_Chara_Beat_MissDown") + { + TJAPlayer3.Skin.Characters_Beat_MissDown[i] = int.Parse(strParam); + } else if (strCommand == "Game_Chara_Beat_Clear") { TJAPlayer3.Skin.Characters_Beat_Clear[i] = int.Parse(strParam); @@ -1930,6 +1984,8 @@ namespace TJAPlayer3 #region [11_Characters] public CTexture[][] Characters_Normal, + Characters_Normal_Missed, + Characters_Normal_MissedDown, Characters_Normal_Cleared, Characters_Normal_Maxed, Characters_GoGoTime, @@ -1940,6 +1996,7 @@ namespace TJAPlayer3 Characters_GoGoStart_Maxed, Characters_Become_Cleared, Characters_Become_Maxed, + Characters_Return, Characters_Balloon_Breaking, Characters_Balloon_Broke, Characters_Balloon_Miss, diff --git a/TJAPlayer3/Stages/07.Game/CStage演奏画面共通.cs b/TJAPlayer3/Stages/07.Game/CStage演奏画面共通.cs index 166aca15..cd69eca8 100644 --- a/TJAPlayer3/Stages/07.Game/CStage演奏画面共通.cs +++ b/TJAPlayer3/Stages/07.Game/CStage演奏画面共通.cs @@ -254,9 +254,10 @@ namespace TJAPlayer3 cInvisibleChip.Reset(); base.On活性化(); this.tステータスパネルの選択(); - this.tパネル文字列の設定(); - //this.演奏判定ライン座標(); - this.bIsGOGOTIME = new bool[]{ false, false, false, false }; + this.tパネル文字列の設定(); + //this.演奏判定ライン座標(); + this.bIsGOGOTIME = new bool[] { false, false, false, false }; + this.bIsMiss = new bool[] { false, false, false, false }; this.bUseBranch = new bool[]{ false, false, false, false }; this.n現在のコース = new CDTX.ECourse[4]; this.n次回のコース = new CDTX.ECourse[4]; @@ -286,7 +287,8 @@ namespace TJAPlayer3 this.b連打中 = new bool[] { false, false, false, false }; this.n現在の連打数 = new int[]{ 0, 0, 0, 0 }; this.n合計連打数 = new int[]{ 0, 0, 0, 0 }; - this.n分岐した回数 = new int[ 4 ]; + this.n分岐した回数 = new int[ 4 ]; + this.Chara_MissCount = new int[4]; for (int i = 0; i < 2; i++) { ShownLyric[i] = 0; @@ -649,9 +651,10 @@ namespace TJAPlayer3 protected E判定表示優先度 e判定表示優先度; public CBRANCHSCORE[] CBranchScore = new CBRANCHSCORE[6]; - public CBRANCHSCORE[] CChartScore = new CBRANCHSCORE[2]; - - public bool[] bIsGOGOTIME = new bool[4]; + public CBRANCHSCORE[] CChartScore = new CBRANCHSCORE[2]; + + public bool[] bIsGOGOTIME = new bool[4]; + public bool[] bIsMiss = new bool[4]; public bool[] bUseBranch = new bool[ 4 ]; public CDTX.ECourse[] n現在のコース = new CDTX.ECourse[4]; //0:普通譜面 1:玄人譜面 2:達人譜面 public CDTX.ECourse[] n次回のコース = new CDTX.ECourse[4]; @@ -669,6 +672,7 @@ namespace TJAPlayer3 private int[] n合計連打数 = new int[ 4 ]; protected int[] n風船残り = new int[ 4 ]; protected int[] n現在の連打数 = new int[ 4 ]; + public int[] Chara_MissCount; protected E連打State eRollState; protected int nタイマ番号; @@ -1544,6 +1548,29 @@ namespace TJAPlayer3 } cInvisibleChip.ShowChipTemporally( pChip.e楽器パート ); } + + void returnChara() + { + int Character = this.actChara.iCurrentCharacter[nPlayer]; + + double dbUnit = (((60.0 / (TJAPlayer3.stage演奏ドラム画面.actPlayInfo.dbBPM)))); + dbUnit = (((60.0 / pChip.dbBPM))); + + if (TJAPlayer3.Skin.Characters_Return_Ptn[Character] != 0 && !bIsGOGOTIME[nPlayer] && actChara.CharaAction_Balloon_Delay[nPlayer].b終了値に達した) + { + { + // 魂ゲージMAXではない + // ジャンプ_ノーマル + this.actChara.アクションタイマーリセット(nPlayer); + this.actChara.ctキャラクターアクション_Return[nPlayer] = new CCounter(0, TJAPlayer3.Skin.Characters_Return_Ptn[Character] - 1, (dbUnit / TJAPlayer3.Skin.Characters_Return_Ptn[Character]) * 2, CSound管理.rc演奏用タイマ); + this.actChara.ctキャラクターアクション_Return[nPlayer].t進行db(); + this.actChara.ctキャラクターアクション_Return[nPlayer].n現在の値 = 0; + this.actChara.bマイどんアクション中[nPlayer] = true; + //this.actChara.マイどん_アクション_10コンボ(); + } + } + } + switch ( pChip.e楽器パート ) { case E楽器パート.DRUMS: @@ -1564,7 +1591,8 @@ namespace TJAPlayer3 break; this.CBranchScore[nPlayer].nGreat++; - this.CChartScore[nPlayer].nGreat++; + this.CChartScore[nPlayer].nGreat++; + this.Chara_MissCount[nPlayer] = 0; if ( nPlayer == 0 ) this.nヒット数_Auto含まない.Drums.Perfect++; this.actCombo.n現在のコンボ数[nPlayer]++; @@ -1579,14 +1607,22 @@ namespace TJAPlayer3 else { this.actCombo.ctコンボ加算[nPlayer].n現在の値 = 0; - } + } + + if (this.bIsMiss[nPlayer]) + { + returnChara(); + } + + this.bIsMiss[nPlayer] = false; } break; case E判定.Great: case E判定.Good: { this.CBranchScore[nPlayer].nGood++; - this.CChartScore[nPlayer].nGood++; + this.CChartScore[nPlayer].nGood++; + this.Chara_MissCount[nPlayer] = 0; if ( nPlayer == 0 ) this.nヒット数_Auto含まない.Drums.Great++; this.actCombo.n現在のコンボ数[ nPlayer ]++; @@ -1601,8 +1637,14 @@ namespace TJAPlayer3 else { this.actCombo.ctコンボ加算[nPlayer].n現在の値 = 0; - } - + } + + if (this.bIsMiss[nPlayer]) + { + returnChara(); + } + + this.bIsMiss[nPlayer] = false; } break; case E判定.Poor: @@ -1619,11 +1661,14 @@ namespace TJAPlayer3 CFloorManagement.damage(); this.CBranchScore[nPlayer].nMiss++; - this.CChartScore[nPlayer].nMiss++; + this.CChartScore[nPlayer].nMiss++; + this.Chara_MissCount[nPlayer]++; if ( nPlayer == 0 ) this.nヒット数_Auto含まない.Drums.Miss++; this.actCombo.n現在のコンボ数[ nPlayer ] = 0; - this.actComboVoice.tReset(nPlayer); + this.actComboVoice.tReset(nPlayer); + + this.bIsMiss[nPlayer] = true; } break; default: @@ -1646,7 +1691,8 @@ namespace TJAPlayer3 this.n良[actDan.NowShowingNumber]++; this.CBranchScore[nPlayer].nGreat++; - this.CChartScore[nPlayer].nGreat++; + this.CChartScore[nPlayer].nGreat++; + this.Chara_MissCount[nPlayer] = 0; if ( nPlayer == 0 ) this.nヒット数_Auto含む.Drums.Perfect++; this.actCombo.n現在のコンボ数[ nPlayer ]++; @@ -1658,7 +1704,14 @@ namespace TJAPlayer3 else { this.actCombo.ctコンボ加算[nPlayer].n現在の値 = 0; - } + } + + if (this.bIsMiss[nPlayer]) + { + returnChara(); + } + + this.bIsMiss[nPlayer] = false; } } break; @@ -1673,6 +1726,7 @@ namespace TJAPlayer3 this.CBranchScore[nPlayer].nGood++; this.CChartScore[nPlayer].nGood++; + this.Chara_MissCount[nPlayer] = 0; if (nPlayer == 0) this.nヒット数_Auto含む.Drums.Great++; this.actCombo.n現在のコンボ数[nPlayer]++; @@ -1684,7 +1738,14 @@ namespace TJAPlayer3 else { this.actCombo.ctコンボ加算[nPlayer].n現在の値 = 0; - } + } + + if (this.bIsMiss[nPlayer]) + { + returnChara(); + } + + this.bIsMiss[nPlayer] = false; } } break; @@ -1702,11 +1763,14 @@ namespace TJAPlayer3 CFloorManagement.damage(); this.CBranchScore[nPlayer].nMiss++; - this.CChartScore[nPlayer].nMiss++; + this.CChartScore[nPlayer].nMiss++; + this.Chara_MissCount[nPlayer]++; this.actCombo.n現在のコンボ数[ nPlayer ] = 0; - this.actComboVoice.tReset(nPlayer); - + this.actComboVoice.tReset(nPlayer); + + + this.bIsMiss[nPlayer] = true; } } break; @@ -3122,6 +3186,26 @@ namespace TJAPlayer3 else { this.actChara.ctChara_Normal[nPlayer] = new CCounter(); + } + + if (TJAPlayer3.Skin.Characters_Normal_Missed_Ptn[chara] != 0) + { + double dbPtn_Miss = (60.0 / TJAPlayer3.stage演奏ドラム画面.actPlayInfo.dbBPM) * TJAPlayer3.Skin.Characters_Beat_Miss[chara] / this.actChara.arMissモーション番号[nPlayer].Length / (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0); + this.actChara.ctChara_Miss[nPlayer] = new CCounter(0, this.actChara.arMissモーション番号[nPlayer].Length - 1, dbPtn_Miss, CSound管理.rc演奏用タイマ); + } + else + { + this.actChara.ctChara_Miss[nPlayer] = new CCounter(); + } + + if (TJAPlayer3.Skin.Characters_Normal_MissedDown_Ptn[chara] != 0) + { + double dbPtn_MissDown = (60.0 / TJAPlayer3.stage演奏ドラム画面.actPlayInfo.dbBPM) * TJAPlayer3.Skin.Characters_Beat_MissDown[chara] / this.actChara.arMissDownモーション番号[nPlayer].Length / (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0); + this.actChara.ctChara_MissDown[nPlayer] = new CCounter(0, this.actChara.arMissDownモーション番号[nPlayer].Length - 1, dbPtn_MissDown, CSound管理.rc演奏用タイマ); + } + else + { + this.actChara.ctChara_MissDown[nPlayer] = new CCounter(); } if (TJAPlayer3.Skin.Characters_Normal_Cleared_Ptn[chara] != 0) @@ -3327,6 +3411,24 @@ namespace TJAPlayer3 } else { this.actChara.ctChara_Normal[nPlayer] = new CCounter(); + } + if (TJAPlayer3.Skin.Characters_Normal_Missed_Ptn[chara] != 0) + { + double dbPtn_Miss = (60.0 / TJAPlayer3.stage演奏ドラム画面.actPlayInfo.dbBPM) * TJAPlayer3.Skin.Characters_Beat_Miss[chara] / this.actChara.arMissモーション番号[nPlayer].Length / (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0); + this.actChara.ctChara_Miss[nPlayer] = new CCounter(0, this.actChara.arMissモーション番号[nPlayer].Length - 1, dbPtn_Miss, CSound管理.rc演奏用タイマ); + } + else + { + this.actChara.ctChara_Miss[nPlayer] = new CCounter(); + } + if (TJAPlayer3.Skin.Characters_Normal_MissedDown_Ptn[chara] != 0) + { + double dbPtn_MissDown = (60.0 / TJAPlayer3.stage演奏ドラム画面.actPlayInfo.dbBPM) * TJAPlayer3.Skin.Characters_Beat_MissDown[chara] / this.actChara.arMissDownモーション番号[nPlayer].Length / (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0); + this.actChara.ctChara_MissDown[nPlayer] = new CCounter(0, this.actChara.arMissDownモーション番号[nPlayer].Length - 1, dbPtn_MissDown, CSound管理.rc演奏用タイマ); + } + else + { + this.actChara.ctChara_MissDown[nPlayer] = new CCounter(); } if (TJAPlayer3.Skin.Characters_Normal_Cleared_Ptn[chara] != 0) { @@ -4084,6 +4186,7 @@ namespace TJAPlayer3 for( int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++ ) { this.bIsGOGOTIME[ i ] = false; + this.bIsMiss[i] = false; this.bLEVELHOLD[ i ] = false; this.b強制的に分岐させた[ i ] = false; this.b譜面分岐中[ i ] = false; diff --git a/TJAPlayer3/Stages/07.Game/Taiko/CAct演奏Drumsキャラクター.cs b/TJAPlayer3/Stages/07.Game/Taiko/CAct演奏Drumsキャラクター.cs index d586b69d..46d74ed5 100644 --- a/TJAPlayer3/Stages/07.Game/Taiko/CAct演奏Drumsキャラクター.cs +++ b/TJAPlayer3/Stages/07.Game/Taiko/CAct演奏Drumsキャラクター.cs @@ -30,6 +30,8 @@ namespace TJAPlayer3 for(int i = 0; i < 2; i++) { ctChara_Normal[i] = new CCounter(); + ctChara_Miss[i] = new CCounter(); + ctChara_MissDown[i] = new CCounter(); ctChara_GoGo[i] = new CCounter(); ctChara_Clear[i] = new CCounter(); @@ -39,6 +41,7 @@ namespace TJAPlayer3 this.ctキャラクターアクション_ゴーゴースタートMAX[i] = new CCounter(); this.ctキャラクターアクション_ノルマ[i] = new CCounter(); this.ctキャラクターアクション_魂MAX[i] = new CCounter(); + this.ctキャラクターアクション_Return[i] = new CCounter(); CharaAction_Balloon_Breaking[i] = new CCounter(); CharaAction_Balloon_Broke[i] = new CCounter(); @@ -81,6 +84,8 @@ namespace TJAPlayer3 for (int i = 0; i < 2; i++) { ctChara_Normal[i] = null; + ctChara_Miss[i] = null; + ctChara_MissDown[i] = null; ctChara_GoGo[i] = null; ctChara_Clear[i] = null; this.ctキャラクターアクション_10コンボ[i] = null; @@ -89,6 +94,7 @@ namespace TJAPlayer3 this.ctキャラクターアクション_ゴーゴースタートMAX[i] = null; this.ctキャラクターアクション_ノルマ[i] = null; this.ctキャラクターアクション_魂MAX[i] = null; + this.ctキャラクターアクション_Return[i] = null; CharaAction_Balloon_Breaking[i] = null; CharaAction_Balloon_Broke[i] = null; @@ -105,15 +111,21 @@ namespace TJAPlayer3 { for (int i = 0; i < 2; i++) { - this.arモーション番号[i] = C変換.ar配列形式のstringをint配列に変換して返す(TJAPlayer3.Skin.Characters_Motion_Normal[this.iCurrentCharacter[i]]); + this.arモーション番号[i] = C変換.ar配列形式のstringをint配列に変換して返す(TJAPlayer3.Skin.Characters_Motion_Normal[this.iCurrentCharacter[i]]); + this.arMissモーション番号[i] = C変換.ar配列形式のstringをint配列に変換して返す(TJAPlayer3.Skin.Characters_Motion_Miss[this.iCurrentCharacter[i]]); + this.arMissDownモーション番号[i] = C変換.ar配列形式のstringをint配列に変換して返す(TJAPlayer3.Skin.Characters_Motion_MissDown[this.iCurrentCharacter[i]]); this.arゴーゴーモーション番号[i] = C変換.ar配列形式のstringをint配列に変換して返す(TJAPlayer3.Skin.Characters_Motion_GoGo[this.iCurrentCharacter[i]]); this.arクリアモーション番号[i] = C変換.ar配列形式のstringをint配列に変換して返す(TJAPlayer3.Skin.Characters_Motion_Clear[this.iCurrentCharacter[i]]); if (arモーション番号[i] == null) this.arモーション番号[i] = C変換.ar配列形式のstringをint配列に変換して返す("0,0"); + if (arMissモーション番号[i] == null) this.arMissモーション番号[i] = C変換.ar配列形式のstringをint配列に変換して返す("0,0"); + if (arMissDownモーション番号[i] == null) this.arMissDownモーション番号[i] = C変換.ar配列形式のstringをint配列に変換して返す("0,0"); if (arゴーゴーモーション番号[i] == null) this.arゴーゴーモーション番号[i] = C変換.ar配列形式のstringをint配列に変換して返す("0,0"); - if (arクリアモーション番号[i] == null) this.arクリアモーション番号[i] = C変換.ar配列形式のstringをint配列に変換して返す("0,0"); - + if (arクリアモーション番号[i] == null) this.arクリアモーション番号[i] = C変換.ar配列形式のstringをint配列に変換して返す("0,0"); + ctChara_Normal[i] = new CCounter(0, arモーション番号[i].Length - 1, 10, CSound管理.rc演奏用タイマ); + ctChara_Miss[i] = new CCounter(0, arMissモーション番号[i].Length - 1, 10, CSound管理.rc演奏用タイマ); + ctChara_MissDown[i] = new CCounter(0, arMissDownモーション番号[i].Length - 1, 10, CSound管理.rc演奏用タイマ); ctChara_GoGo[i] = new CCounter(0, arゴーゴーモーション番号[i].Length - 1, 10, CSound管理.rc演奏用タイマ); ctChara_Clear[i] = new CCounter(0, arクリアモーション番号[i].Length - 1, 10, CSound管理.rc演奏用タイマ); if (CharaAction_Balloon_Delay[i] != null) CharaAction_Balloon_Delay[i].n現在の値 = (int)CharaAction_Balloon_Delay[i].n終了値; @@ -133,9 +145,11 @@ namespace TJAPlayer3 int Character = this.iCurrentCharacter[i]; if (TJAPlayer3.Skin.Characters_Ptn == 0) - break; - + break; + if (ctChara_Normal != null || TJAPlayer3.Skin.Characters_Normal_Ptn[Character] != 0) ctChara_Normal[i].t進行LoopDb(); + if (ctChara_Miss != null || TJAPlayer3.Skin.Characters_Normal_Missed_Ptn[Character] != 0) ctChara_Miss[i].t進行LoopDb(); + if (ctChara_MissDown != null || TJAPlayer3.Skin.Characters_Normal_MissedDown_Ptn[Character] != 0) ctChara_MissDown[i].t進行LoopDb(); if (ctChara_GoGo != null || TJAPlayer3.Skin.Characters_GoGoTime_Ptn[Character] != 0) ctChara_GoGo[i].t進行LoopDb(); if (ctChara_Clear != null || TJAPlayer3.Skin.Characters_Normal_Cleared_Ptn[Character] != 0) ctChara_Clear[i].t進行LoopDb(); @@ -144,7 +158,8 @@ namespace TJAPlayer3 if (this.ctキャラクターアクション_ゴーゴースタート != null || TJAPlayer3.Skin.Characters_GoGoStart_Ptn[Character] != 0) this.ctキャラクターアクション_ゴーゴースタート[i].t進行db(); if (this.ctキャラクターアクション_ゴーゴースタートMAX != null || TJAPlayer3.Skin.Characters_GoGoStart_Maxed_Ptn[Character] != 0) this.ctキャラクターアクション_ゴーゴースタートMAX[i].t進行db(); if (this.ctキャラクターアクション_ノルマ != null || TJAPlayer3.Skin.Characters_Become_Cleared_Ptn[Character] != 0) this.ctキャラクターアクション_ノルマ[i].t進行db(); - if (this.ctキャラクターアクション_魂MAX != null || TJAPlayer3.Skin.Characters_Become_Maxed_Ptn[Character] != 0) this.ctキャラクターアクション_魂MAX[i].t進行db(); + if (this.ctキャラクターアクション_魂MAX != null || TJAPlayer3.Skin.Characters_Become_Maxed_Ptn[Character] != 0) this.ctキャラクターアクション_魂MAX[i].t進行db(); + if (this.ctキャラクターアクション_Return != null || TJAPlayer3.Skin.Characters_10Combo_Ptn[Character] != 0) this.ctキャラクターアクション_Return[i].t進行db(); // Blinking animation during invincibility frames if (TJAPlayer3.stage選曲.n確定された曲の難易度[0] == (int)Difficulty.Tower) @@ -156,27 +171,41 @@ namespace TJAPlayer3 if (this.b風船連打中[i] != true && this.bマイどんアクション中[i] != true && CharaAction_Balloon_Delay[i].b終了値に達した) { if (!TJAPlayer3.stage演奏ドラム画面.bIsGOGOTIME[i]) - { - if (TJAPlayer3.stage演奏ドラム画面.actGauge.db現在のゲージ値[i] >= 100.0 && TJAPlayer3.Skin.Characters_Normal_Cleared_Ptn[Character] != 0) - { - if (TJAPlayer3.Skin.Characters_Normal_Maxed_Ptn[Character] != 0) + { + if (!TJAPlayer3.stage演奏ドラム画面.bIsMiss[i] || TJAPlayer3.Skin.Characters_Normal_Missed_Ptn[Character] == 0) + { + if (TJAPlayer3.stage演奏ドラム画面.actGauge.db現在のゲージ値[i] >= 100.0 && TJAPlayer3.Skin.Characters_Normal_Cleared_Ptn[Character] != 0) { - TJAPlayer3.Tx.Characters_Normal_Maxed[Character][this.arクリアモーション番号[i][(int)this.ctChara_Clear[i].n現在の値]].t2D描画(TJAPlayer3.app.Device, TJAPlayer3.Skin.Characters_X[Character][i], TJAPlayer3.Skin.Characters_Y[Character][i]); - } + if (TJAPlayer3.Skin.Characters_Normal_Maxed_Ptn[Character] != 0) + { + TJAPlayer3.Tx.Characters_Normal_Maxed[Character][this.arクリアモーション番号[i][(int)this.ctChara_Clear[i].n現在の値]].t2D描画(TJAPlayer3.app.Device, TJAPlayer3.Skin.Characters_X[Character][i], TJAPlayer3.Skin.Characters_Y[Character][i]); + } + } + else if (TJAPlayer3.stage演奏ドラム画面.actGauge.db現在のゲージ値[i] >= 80.0 && TJAPlayer3.Skin.Characters_Normal_Cleared_Ptn[Character] != 0) + { + if (TJAPlayer3.Skin.Characters_Normal_Cleared_Ptn[Character] != 0) + { + TJAPlayer3.Tx.Characters_Normal_Cleared[Character][this.arクリアモーション番号[i][(int)this.ctChara_Clear[i].n現在の値]].t2D描画(TJAPlayer3.app.Device, TJAPlayer3.Skin.Characters_X[Character][i], TJAPlayer3.Skin.Characters_Y[Character][i]); + } + } + else + { + if (TJAPlayer3.Skin.Characters_Normal_Ptn[Character] != 0) + { + TJAPlayer3.Tx.Characters_Normal[Character][this.arモーション番号[i][(int)this.ctChara_Normal[i].n現在の値]].t2D描画(TJAPlayer3.app.Device, TJAPlayer3.Skin.Characters_X[Character][i], TJAPlayer3.Skin.Characters_Y[Character][i]); + } + } } - else if (TJAPlayer3.stage演奏ドラム画面.actGauge.db現在のゲージ値[i] >= 80.0 && TJAPlayer3.Skin.Characters_Normal_Cleared_Ptn[Character] != 0) - { - if (TJAPlayer3.Skin.Characters_Normal_Cleared_Ptn[Character] != 0) - { - TJAPlayer3.Tx.Characters_Normal_Cleared[Character][this.arクリアモーション番号[i][(int)this.ctChara_Clear[i].n現在の値]].t2D描画(TJAPlayer3.app.Device, TJAPlayer3.Skin.Characters_X[Character][i], TJAPlayer3.Skin.Characters_Y[Character][i]); - } - } - else - { - if (TJAPlayer3.Skin.Characters_Normal_Ptn[Character] != 0) - { - TJAPlayer3.Tx.Characters_Normal[Character][this.arモーション番号[i][(int)this.ctChara_Normal[i].n現在の値]].t2D描画(TJAPlayer3.app.Device, TJAPlayer3.Skin.Characters_X[Character][i], TJAPlayer3.Skin.Characters_Y[Character][i]); - } + else + { + if (TJAPlayer3.stage演奏ドラム画面.Chara_MissCount[i] < 6 || TJAPlayer3.Skin.Characters_Normal_MissedDown_Ptn[Character] == 0) + { + TJAPlayer3.Tx.Characters_Normal_Missed[Character][this.arMissモーション番号[i][(int)this.ctChara_Miss[i].n現在の値]].t2D描画(TJAPlayer3.app.Device, TJAPlayer3.Skin.Characters_X[Character][i], TJAPlayer3.Skin.Characters_Y[Character][i]); + } + else + { + TJAPlayer3.Tx.Characters_Normal_MissedDown[Character][this.arMissDownモーション番号[i][(int)this.ctChara_MissDown[i].n現在の値]].t2D描画(TJAPlayer3.app.Device, TJAPlayer3.Skin.Characters_X[Character][i], TJAPlayer3.Skin.Characters_Y[Character][i]); + } } } else @@ -283,6 +312,20 @@ namespace TJAPlayer3 this.ctキャラクターアクション_魂MAX[i].n現在の値 = 0; } } + + if (this.ctキャラクターアクション_Return[i].b進行中) + { + if (TJAPlayer3.Tx.Characters_Return[Character] != null && TJAPlayer3.Skin.Characters_Return_Ptn[Character] != 0) + { + TJAPlayer3.Tx.Characters_Return[Character][(int)this.ctキャラクターアクション_Return[i].n現在の値].t2D描画(TJAPlayer3.app.Device, TJAPlayer3.Skin.Characters_X[Character][i], TJAPlayer3.Skin.Characters_Y[Character][i]); + } + if (this.ctキャラクターアクション_Return[i].b終了値に達した) + { + this.bマイどんアクション中[i] = false; + this.ctキャラクターアクション_Return[i].t停止(); + this.ctキャラクターアクション_Return[i].n現在の値 = 0; + } + } } if (this.b風船連打中[i] != true && CharaAction_Balloon_Delay[i].b終了値に達した) { @@ -373,13 +416,15 @@ namespace TJAPlayer3 ctキャラクターアクション_ゴーゴースタート[player].t停止(); ctキャラクターアクション_ゴーゴースタートMAX[player].t停止(); ctキャラクターアクション_ノルマ[player].t停止(); - ctキャラクターアクション_魂MAX[player].t停止(); + ctキャラクターアクション_魂MAX[player].t停止(); + ctキャラクターアクション_Return[player].t停止(); ctキャラクターアクション_10コンボ[player].n現在の値 = 0; ctキャラクターアクション_10コンボMAX[player].n現在の値 = 0; ctキャラクターアクション_ゴーゴースタート[player].n現在の値 = 0; ctキャラクターアクション_ゴーゴースタートMAX[player].n現在の値 = 0; ctキャラクターアクション_ノルマ[player].n現在の値 = 0; - ctキャラクターアクション_魂MAX[player].n現在の値 = 0; + ctキャラクターアクション_魂MAX[player].n現在の値 = 0; + ctキャラクターアクション_Return[player].n現在の値 = 0; CharaAction_Balloon_Breaking[player]?.t停止(); CharaAction_Balloon_Broke[player]?.t停止(); CharaAction_Balloon_Miss[player]?.t停止(); @@ -388,9 +433,11 @@ namespace TJAPlayer3 CharaAction_Balloon_Broke[player].n現在の値 = 0; CharaAction_Balloon_Miss[player].n現在の値 = 0; //CharaAction_Balloon_Delay.n現在の値 = 0; - } - + } + public int[][] arモーション番号 = new int[2][]; + public int[][] arMissモーション番号 = new int[2][]; + public int[][] arMissDownモーション番号 = new int[2][]; public int[][] arゴーゴーモーション番号 = new int[2][]; public int[][] arクリアモーション番号 = new int[2][]; @@ -400,12 +447,15 @@ namespace TJAPlayer3 public CCounter[] ctキャラクターアクション_ゴーゴースタートMAX = new CCounter[2]; public CCounter[] ctキャラクターアクション_ノルマ = new CCounter[2]; public CCounter[] ctキャラクターアクション_魂MAX = new CCounter[2]; + public CCounter[] ctキャラクターアクション_Return = new CCounter[2]; public CCounter[] CharaAction_Balloon_Breaking = new CCounter[2]; public CCounter[] CharaAction_Balloon_Broke = new CCounter[2]; public CCounter[] CharaAction_Balloon_Miss = new CCounter[2]; public CCounter[] CharaAction_Balloon_Delay = new CCounter[2]; public CCounter[] ctChara_Normal = new CCounter[2]; + public CCounter[] ctChara_Miss = new CCounter[2]; + public CCounter[] ctChara_MissDown = new CCounter[2]; public CCounter[] ctChara_GoGo = new CCounter[2]; public CCounter[] ctChara_Clear = new CCounter[2]; diff --git a/TJAPlayer3/Stages/07.Game/Taiko/CStage演奏ドラム画面.cs b/TJAPlayer3/Stages/07.Game/Taiko/CStage演奏ドラム画面.cs index 8c4c8aac..b8839bc3 100644 --- a/TJAPlayer3/Stages/07.Game/Taiko/CStage演奏ドラム画面.cs +++ b/TJAPlayer3/Stages/07.Game/Taiko/CStage演奏ドラム画面.cs @@ -246,6 +246,24 @@ namespace TJAPlayer3 { this.actChara.ctChara_Normal[nPlayer] = new CCounter(); } + if (TJAPlayer3.Skin.Characters_Normal_Missed_Ptn[chara] != 0) + { + double dbPtn_Miss = (60.0 / TJAPlayer3.stage演奏ドラム画面.actPlayInfo.dbBPM) * TJAPlayer3.Skin.Characters_Beat_Miss[chara] / this.actChara.arMissモーション番号[nPlayer].Length; + this.actChara.ctChara_Miss[nPlayer] = new CCounter(0, this.actChara.arMissモーション番号[nPlayer].Length - 1, dbPtn_Miss, CSound管理.rc演奏用タイマ); + } + else + { + this.actChara.ctChara_Miss[nPlayer] = new CCounter(); + } + if (TJAPlayer3.Skin.Characters_Normal_MissedDown_Ptn[chara] != 0) + { + double dbPtn_MissDown = (60.0 / TJAPlayer3.stage演奏ドラム画面.actPlayInfo.dbBPM) * TJAPlayer3.Skin.Characters_Beat_MissDown[chara] / this.actChara.arMissDownモーション番号[nPlayer].Length; + this.actChara.ctChara_MissDown[nPlayer] = new CCounter(0, this.actChara.arMissDownモーション番号[nPlayer].Length - 1, dbPtn_MissDown, CSound管理.rc演奏用タイマ); + } + else + { + this.actChara.ctChara_MissDown[nPlayer] = new CCounter(); + } if (TJAPlayer3.Skin.Characters_Normal_Cleared_Ptn[chara] != 0) { double dbPtn_Clear = (60.0 / TJAPlayer3.stage演奏ドラム画面.actPlayInfo.dbBPM) * TJAPlayer3.Skin.Characters_Beat_Clear[chara] / this.actChara.arクリアモーション番号[nPlayer].Length;