1
0
mirror of synced 2024-11-28 01:10:53 +01:00

Fix a game-breaking parsing issue for some dans with individual conditions

This commit is contained in:
0aubsq 2022-06-18 05:38:00 +02:00
parent 6b9387a490
commit 52cd66d2b6
3 changed files with 58 additions and 43 deletions

View File

@ -2897,7 +2897,10 @@ namespace TJAPlayer3
}
else if (nMode == 1)
{
if (!string.IsNullOrEmpty(input[n]) && (input[n].Substring(0, 1) == "#" || NotesManager.FastFlankedParsing(input[n])))//this.CharConvertNote(input[n].Substring(0, 1)) != -1))
if (!string.IsNullOrEmpty(input[n]) &&
(input[n].Substring(0, 1) == "#"
|| input[n].StartsWith("EXAM")
|| NotesManager.FastFlankedParsing(input[n])))//this.CharConvertNote(input[n].Substring(0, 1)) != -1))
{
if (input[n].StartsWith("BALLOON") || input[n].StartsWith("BPM"))
{
@ -3319,9 +3322,24 @@ namespace TJAPlayer3
this.t入力_行解析譜面_V4(str);
/*
if (!String.IsNullOrEmpty(strSplit読み込むコース[i]))
this.tDanExamLoad(strSplit読み込むコース[i]);
*/
}
if (DanSongs.Number > 0)
{
for (int i = 0; i < CExamInfo.cMaxExam; i++)
{
if (Dan_C[i] != null && List_DanSongs[0].Dan_C[i] == null)
{
List_DanSongs[0].Dan_C[i] = Dan_C[i];
}
}
}
}
catch (Exception ex)
{
@ -4265,6 +4283,11 @@ namespace TJAPlayer3
this.t命令を挿入する(InputText);
return;
}
else if (InputText.StartsWith("EXAM"))
{
this.tDanExamLoad(InputText);
return;
}
else
{
if (this.b小節線を挿入している == false)
@ -4769,8 +4792,7 @@ namespace TJAPlayer3
// Adapt to EXAM until 7, optimise condition
if (strCommandName.Equals("EXAM1") || strCommandName.Equals("EXAM2") || strCommandName.Equals("EXAM3") || strCommandName.Equals("EXAM4")
|| strCommandName.Equals("EXAM5") || strCommandName.Equals("EXAM6") || strCommandName.Equals("EXAM7"))
if (strCommandName.StartsWith("EXAM"))
{
if (!string.IsNullOrEmpty(strCommandParam))
{
@ -4778,6 +4800,11 @@ namespace TJAPlayer3
int[] examValue;
Exam.Range examRange;
var splitExam = strCommandParam.Split(',');
int examNumber = int.Parse(strCommandName.Substring(4)) - 1;
if (examNumber > CExamInfo.cMaxExam)
return;
switch (splitExam[0])
{
case "g":
@ -4838,10 +4865,11 @@ namespace TJAPlayer3
break;
}
if(Dan_C[int.Parse(strCommandName.Substring(4)) - 1] == null)
Dan_C[int.Parse(strCommandName.Substring(4)) - 1] = new Dan_C(examType, examValue, examRange);
if(Dan_C[examNumber] == null)
Dan_C[examNumber] = new Dan_C(examType, examValue, examRange);
List_DanSongs[DanSongs.Number - 1].Dan_C[int.Parse(strCommandName.Substring(4)) - 1] = new Dan_C(examType, examValue, examRange);
if (DanSongs.Number > 0)
List_DanSongs[DanSongs.Number - 1].Dan_C[examNumber] = new Dan_C(examType, examValue, examRange);
}
}
}

View File

@ -439,47 +439,15 @@ namespace TJAPlayer3
switch (this.Mode[i])
{
case EndMode.StageFailed:
//this.ct進行メイン.n現在の値 = 18;
/*
if (this.soundFailed != null && !this.b再生済み)
{
this.soundFailed.t再生を開始する();
this.b再生済み = true;
}
*/
this.showEndEffect_Failed(i);
break;
case EndMode.StageCleared:
//this.ct進行メイン.n現在の値 = 18;
/*
if (this.soundClear != null && !this.b再生済み)
{
this.soundClear.t再生を開始する();
this.b再生済み = true;
}
*/
this.showEndEffect_Clear(i);
break;
case EndMode.StageFullCombo:
//this.ct進行メイン.n現在の値 = 18;
/*
if (this.soundFullCombo != null && !this.b再生済み)
{
this.soundFullCombo.t再生を開始する();
this.b再生済み = true;
}
*/
this.showEndEffect_FullCombo(i);
break;
case EndMode.StageDondaFullCombo:
//this.ct進行メイン.n現在の値 = 18;
/*
if (this.soundDondaFullCombo != null && !this.b再生済み)
{
this.soundDondaFullCombo.t再生を開始する();
this.b再生済み = true;
}
*/
this.showEndEffect_DondaFullCombo(i);
break;
default:

View File

@ -61,7 +61,8 @@ namespace TJAPlayer3
{
if (TJAPlayer3.stage選曲.r確定された曲.DanSongs[0].Dan_C[j] != null)
{
if (TJAPlayer3.stage選曲.r確定された曲.DanSongs[TJAPlayer3.stage選曲.r確定された曲.DanSongs.Count - 1].Dan_C[j] != null) //個別の条件がありますよー
if (TJAPlayer3.stage選曲.r確定された曲.DanSongs[TJAPlayer3.stage選曲.r確定された曲.DanSongs.Count - 1].Dan_C[j] != null
&& TJAPlayer3.stage選曲.r確定された曲.DanSongs.Count > 1) // Individual exams, not counted if dan is only a single song
{
if (TJAPlayer3.stage選曲.r確定された曲.DanSongs[NowShowingNumber].Dan_C[j].GetExamRange() == Exam.Range.Less)
{
@ -244,6 +245,7 @@ namespace TJAPlayer3
+ TJAPlayer3.stage演奏ドラム画面.n可[NowShowingNumber]
+ TJAPlayer3.stage演奏ドラム画面.n不可[NowShowingNumber]);
/*
notesremain = TJAPlayer3.DTX.nーツ数[3]
- (TJAPlayer3.stage演奏ドラム画面.nヒット数_Auto含む.Drums.Perfect
+ TJAPlayer3.stage演奏ドラム画面.nヒット数_Auto含まない.Drums.Perfect)
@ -251,10 +253,16 @@ namespace TJAPlayer3
+ TJAPlayer3.stage演奏ドラム画面.nヒット数_Auto含まない.Drums.Great)
- (TJAPlayer3.stage演奏ドラム画面.nヒット数_Auto含む.Drums.Miss
+ TJAPlayer3.stage演奏ドラム画面.nヒット数_Auto含まない.Drums.Miss);
// 残り音符数が0になったときに判断されるやつ
*/
// Challenges that are judged when there are no remaining notes (janky ?)
notesremain = TJAPlayer3.DTX.nーツ数[3]
- (TJAPlayer3.stage演奏ドラム画面.CChartScore[0].nGood
+ TJAPlayer3.stage演奏ドラム画面.CChartScore[0].nGreat
+ TJAPlayer3.stage演奏ドラム画面.CChartScore[0].nMiss);
// 残り音符数が0になったときに判断されるやつ
// Challenges that are judged when there are no remaining notes
if (ExamChange[i] ? songsnotesremain[NowShowingNumber] <= 0 : notesremain <= 0)
{
// 残り音符数ゼロ
@ -307,7 +315,18 @@ namespace TJAPlayer3
{
case Exam.Type.Score:
case Exam.Type.Hit:
case Exam.Type.Roll: // Should be checked in live "If no remaining roll"
// Should be checked in live "If no remaining roll"
case Exam.Type.Roll:
// Should be checked in live "If no remaining ADLIB/Mine"
case Exam.Type.JudgeADLIB:
case Exam.Type.JudgeMine:
// Catch normaly already checked cases that would be forgotten before (ex : for charts with branches)
case Exam.Type.JudgePerfect:
case Exam.Type.JudgeGood:
case Exam.Type.JudgeBad:
case Exam.Type.Gauge:
case Exam.Type.Accuracy:
case Exam.Type.Combo:
if (Challenge[i].Amount < Challenge[i].Value[0]) Challenge[i].SetReached(true);
break;
default: