Skip to content

Commit 4bb1e2b

Browse files
authored
0.6.0.87 - fix some misc bugs (#865)
- [Fix] note lane became transparent in training mode for charts with BGA/MOVIE (not played in training mode) - [Fix] #BARLINE ignored scroll mode - [Fix] fuze rolls were counted into bar roll length (beyond balloon hit count) for scoring and Dan-i exam monitoring - [Fix] dan-i monitoring for AdLib, Mine, & Fuze roll notes was broken because these notes were not counted in TJA parsing due to wrong note type checking conditions - [Fix] timing window of fuze roll was the same as bar rolls and not expectedly the same as regular balloons - [Fix] music played too early when users retry after music plays and then pause + resume before music plays (although was able to resync when the music should play) - [Fix] AI battle mode failed to use 2P layout due to the fix of 0.6.0.79 - [Fix] setting duplicated key binds for the same key overrode the next key bind under cursor by stopping shifting out removed key binds - [Fix] hitting AdLibs at combo milestone retriggered combo milestone effects - [Fix] players' animation failed to exit max-soul state after retrying - [Fix] balloon/Kusu chara/puchi animation for charts with dense balloon-type notes, follow-up of 0.6.0.55 - [Fix] player chara & puchi animation ignored play speed - [Fix] go-go judgemark fire, activated balloon, and number bubble for balloon and fuze rolls ignored JPosScroll
1 parent d9ddf68 commit 4bb1e2b

File tree

11 files changed

+153
-206
lines changed

11 files changed

+153
-206
lines changed

OpenTaiko/src/Common/CConfigIni.cs

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1769,20 +1769,14 @@ public void RemoveDuplicateKeyAssignments(EInputDevice deviceType, int nID, int
17691769
continue;
17701770
}
17711771
for (int k = 0; k < 0x10; k++) {
1772-
if (this.KeyAssign[i][j][k].InputDevice != deviceType ||
1773-
this.KeyAssign[i][j][k].ID != nID ||
1774-
this.KeyAssign[i][j][k].Code != nCode) {
1775-
continue;
1776-
}
1777-
1778-
for (int m = k; m < 15; m++) {
1779-
this.KeyAssign[i][j][m] = this.KeyAssign[i][j][m + 1];
1772+
if (this.KeyAssign[i][j][k].InputDevice == deviceType
1773+
&& this.KeyAssign[i][j][k].ID == nID
1774+
&& this.KeyAssign[i][j][k].Code == nCode
1775+
) {
1776+
this.KeyAssign[i][j][k].InputDevice = EInputDevice.Unknown;
1777+
this.KeyAssign[i][j][k].ID = 0;
1778+
this.KeyAssign[i][j][k].Code = 0;
17801779
}
1781-
1782-
this.KeyAssign[i][j][15].InputDevice = EInputDevice.Unknown;
1783-
this.KeyAssign[i][j][15].ID = 0;
1784-
this.KeyAssign[i][j][15].Code = 0;
1785-
k--;
17861780
}
17871781
}
17881782
}

OpenTaiko/src/Songs/CTja.cs

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -569,6 +569,7 @@ public void tWavの再生停止(int nWaveの内部番号, bool bミキサーか
569569
cwav.rSound[i].Stop();
570570
}
571571
}
572+
cwav.n一時停止時刻[i] = long.MinValue; // prevent unpause
572573
}
573574
}
574575
}
@@ -876,7 +877,9 @@ public void t全チップの再生一時停止() {
876877
public void t全チップの再生再開() {
877878
foreach (CWAV cwav in this.listWAV.Values) {
878879
for (int i = 0; i < nPolyphonicSounds; i++) {
879-
if ((cwav.rSound[i] != null) && cwav.rSound[i].IsPaused) {
880+
// paused: pause >= play time (do resume)
881+
// stopped: pause < play time (do not resume)
882+
if ((cwav.rSound[i] != null) && cwav.rSound[i].IsPaused && cwav.n一時停止時刻[i] >= cwav.n再生開始時刻[i]) {
880883
cwav.rSound[i].Resume(cwav.n一時停止時刻[i] - cwav.n再生開始時刻[i]);
881884
cwav.n再生開始時刻[i] += SoundManager.PlayTimer.SystemTimeMs - cwav.n一時停止時刻[i];
882885
}
@@ -1981,8 +1984,7 @@ private void ParseCommand(string command, string argument, string argumentFull)
19811984
} else if (command == "#MERGELANE") {
19821985
this.listChip.Add(this.NewEventChipAtDefCursor(0xE3, 1));
19831986
} else if (command == "#BARLINE") {
1984-
var chip = this.NewEventChipAtDefCursor(0xE4, 1);
1985-
chip.dbSCROLL_Y = this.dbNowScrollY;
1987+
var chip = this.NewScrolledChipAtDefCursor(0xE4, 0, 1, this.n現在のコース);
19861988
chip.bHideBarLine = false;
19871989
this.listChip.Add(chip);
19881990
this.listBarLineChip.Add(chip);
@@ -2777,24 +2779,28 @@ private void InsertNoteAtDefCursor(int noteType, int iDiv, int divsPerMeasure, E
27772779
if (branch == (IsEndedBranching ? ECourse.eNormal : ECourse.eMaster)) {
27782780
if (this.n参照中の難易度 == (int)Difficulty.Dan) {
27792781
this.nDan_NotesCount[List_DanSongs.Count - 1]++;
2780-
if (NotesManager.IsADLIB(chip))
2781-
this.nDan_AdLibCount[List_DanSongs.Count - 1]++;
2782-
else if (NotesManager.IsMine(chip))
2783-
this.nDan_MineCount[List_DanSongs.Count - 1]++;
27842782
}
27852783
if (IsEndedBranching) {
27862784
this.nノーツ数[3]++;
27872785
}
27882786
}
2787+
} else if (NotesManager.IsADLIB(chip)) {
2788+
if (branch == (IsEndedBranching ? ECourse.eNormal : ECourse.eMaster) && this.n参照中の難易度 == (int)Difficulty.Dan) {
2789+
this.nDan_AdLibCount[List_DanSongs.Count - 1]++;
2790+
}
2791+
} else if (NotesManager.IsMine(chip)) {
2792+
if (branch == (IsEndedBranching ? ECourse.eNormal : ECourse.eMaster) && this.n参照中の難易度 == (int)Difficulty.Dan) {
2793+
this.nDan_MineCount[List_DanSongs.Count - 1]++;
2794+
}
27892795
} else if (NotesManager.IsGenericBalloon(chip)) {
27902796
if (branch == (IsEndedBranching ? ECourse.eNormal : ECourse.eMaster) && this.n参照中の難易度 == (int)Difficulty.Dan) {
27912797
this.nDan_BalloonHitCount[List_DanSongs.Count - 1] += chip.nBalloon;
2798+
if (NotesManager.IsFuzeRoll(chip))
2799+
this.nDan_MineCount[List_DanSongs.Count - 1]++;
27922800
}
27932801
} else if (NotesManager.IsGenericRoll(chip) && !NotesManager.IsRollEnd(chip)) {
27942802
if (branch == (IsEndedBranching ? ECourse.eNormal : ECourse.eMaster) && this.n参照中の難易度 == (int)Difficulty.Dan) {
27952803
this.nDan_BarRollCount[List_DanSongs.Count - 1]++;
2796-
if (NotesManager.IsFuzeRoll(chip))
2797-
this.nDan_MineCount[List_DanSongs.Count - 1]++;
27982804
}
27992805
}
28002806

OpenTaiko/src/Stages/04.Config/CActConfigKeyAssign.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ public override int Draw() {
158158
}
159159
OpenTaiko.stageConfig.actFont.t文字列描画(x + num5, y, "Reset", this.n現在の選択行 == 0x10, 0.75f);
160160
y += num5;
161-
OpenTaiko.stageConfig.actFont.t文字列描画(x + num5, y, "<< Returnto List", this.n現在の選択行 == 0x11, 0.75f);
161+
OpenTaiko.stageConfig.actFont.t文字列描画(x + num5, y, "<< Return to List", this.n現在の選択行 == 0x11, 0.75f);
162162
y += num5;
163163
if (this.bキー入力待ち && (OpenTaiko.Tx.Config_KeyAssign != null)) {
164164
OpenTaiko.Tx.Config_KeyAssign.t2D描画(OpenTaiko.Skin.Config_KeyAssign[0], OpenTaiko.Skin.Config_KeyAssign[1]);

OpenTaiko/src/Stages/07.Game/CStage演奏画面共通.cs

Lines changed: 32 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,7 @@ private static void CountGen4ShinUchiScoreNotes(List<CChip> listChip, out int nN
335335
nBalloonHits += Math.Min(_chip.nBalloon, expectedHits);
336336
}
337337

338-
if (NotesManager.IsRoll(_chip) || NotesManager.IsFuzeRoll(_chip))
338+
if (NotesManager.IsRoll(_chip))
339339
msRollTime += (_chip.end.n発声時刻ms - _chip.n発声時刻ms);
340340
}
341341
}
@@ -525,29 +525,14 @@ public int GetJPOSCROLLX(int player) {
525525
double screen_ratio = OpenTaiko.Skin.Resolution[0] / 1280.0;
526526
return (int)(JPOSCROLLX[player] * screen_ratio);
527527
}
528-
public int[] NoteOriginX {
529-
get {
530-
if (OpenTaiko.ConfigIni.nPlayerCount == 5) {
531-
return new int[] {
532-
OpenTaiko.Skin.nScrollField_5P[0] + (OpenTaiko.Skin.Game_UIMove_5P[0] * 0) + GetJPOSCROLLX(0),
533-
OpenTaiko.Skin.nScrollField_5P[0] + (OpenTaiko.Skin.Game_UIMove_5P[0] * 1) + GetJPOSCROLLX(1),
534-
OpenTaiko.Skin.nScrollField_5P[0] + (OpenTaiko.Skin.Game_UIMove_5P[0] * 2) + GetJPOSCROLLX(2),
535-
OpenTaiko.Skin.nScrollField_5P[0] + (OpenTaiko.Skin.Game_UIMove_5P[0] * 3) + GetJPOSCROLLX(3),
536-
OpenTaiko.Skin.nScrollField_5P[0] + (OpenTaiko.Skin.Game_UIMove_5P[0] * 4) + GetJPOSCROLLX(4)
537-
};
538-
} else if (OpenTaiko.ConfigIni.nPlayerCount == 4 || OpenTaiko.ConfigIni.nPlayerCount == 3) {
539-
return new int[] {
540-
OpenTaiko.Skin.nScrollField_4P[0] + (OpenTaiko.Skin.Game_UIMove_4P[0] * 0) + GetJPOSCROLLX(0),
541-
OpenTaiko.Skin.nScrollField_4P[0] + (OpenTaiko.Skin.Game_UIMove_4P[0] * 1) + GetJPOSCROLLX(1),
542-
OpenTaiko.Skin.nScrollField_4P[0] + (OpenTaiko.Skin.Game_UIMove_4P[0] * 2) + GetJPOSCROLLX(2),
543-
OpenTaiko.Skin.nScrollField_4P[0] + (OpenTaiko.Skin.Game_UIMove_4P[0] * 3) + GetJPOSCROLLX(3)
544-
};
545-
} else {
546-
return new int[] {
547-
OpenTaiko.Skin.nScrollFieldX[0] + GetJPOSCROLLX(0),
548-
OpenTaiko.Skin.nScrollFieldX[1] + GetJPOSCROLLX(1)
549-
};
550-
}
528+
529+
public int GetNoteOriginX(int iPlayer) {
530+
if (OpenTaiko.ConfigIni.nPlayerCount == 5) {
531+
return OpenTaiko.Skin.nScrollField_5P[0] + (OpenTaiko.Skin.Game_UIMove_5P[0] * iPlayer) + GetJPOSCROLLX(iPlayer);
532+
} else if (OpenTaiko.ConfigIni.nPlayerCount == 4 || OpenTaiko.ConfigIni.nPlayerCount == 3) {
533+
return OpenTaiko.Skin.nScrollField_4P[0] + (OpenTaiko.Skin.Game_UIMove_4P[0] * iPlayer) + GetJPOSCROLLX(iPlayer);
534+
} else {
535+
return OpenTaiko.Skin.nScrollFieldX[iPlayer] + GetJPOSCROLLX(iPlayer);
551536
}
552537
}
553538

@@ -556,29 +541,14 @@ public int GetJPOSCROLLY(int player) {
556541
double screen_ratio = OpenTaiko.Skin.Resolution[1] / 720.0;
557542
return (int)(JPOSCROLLY[player] * screen_ratio);
558543
}
559-
public int[] NoteOriginY {
560-
get {
561-
if (OpenTaiko.ConfigIni.nPlayerCount == 5) {
562-
return new int[] {
563-
OpenTaiko.Skin.nScrollField_5P[1] + (OpenTaiko.Skin.Game_UIMove_5P[1] * 0) + GetJPOSCROLLY(0),
564-
OpenTaiko.Skin.nScrollField_5P[1] + (OpenTaiko.Skin.Game_UIMove_5P[1] * 1) + GetJPOSCROLLY(1),
565-
OpenTaiko.Skin.nScrollField_5P[1] + (OpenTaiko.Skin.Game_UIMove_5P[1] * 2) + GetJPOSCROLLY(2),
566-
OpenTaiko.Skin.nScrollField_5P[1] + (OpenTaiko.Skin.Game_UIMove_5P[1] * 3) + GetJPOSCROLLY(3),
567-
OpenTaiko.Skin.nScrollField_5P[1] + (OpenTaiko.Skin.Game_UIMove_5P[1] * 4) + GetJPOSCROLLY(4)
568-
};
569-
} else if (OpenTaiko.ConfigIni.nPlayerCount == 4 || OpenTaiko.ConfigIni.nPlayerCount == 3) {
570-
return new int[] {
571-
OpenTaiko.Skin.nScrollField_4P[1] + (OpenTaiko.Skin.Game_UIMove_4P[1] * 0) + GetJPOSCROLLY(0),
572-
OpenTaiko.Skin.nScrollField_4P[1] + (OpenTaiko.Skin.Game_UIMove_4P[1] * 1) + GetJPOSCROLLY(1),
573-
OpenTaiko.Skin.nScrollField_4P[1] + (OpenTaiko.Skin.Game_UIMove_4P[1] * 2) + GetJPOSCROLLY(2),
574-
OpenTaiko.Skin.nScrollField_4P[1] + (OpenTaiko.Skin.Game_UIMove_4P[1] * 3) + GetJPOSCROLLY(3)
575-
};
576-
} else {
577-
return new int[] {
578-
OpenTaiko.Skin.nScrollFieldY[0] + GetJPOSCROLLY(0),
579-
OpenTaiko.Skin.nScrollFieldY[1] + GetJPOSCROLLY(1)
580-
};
581-
}
544+
545+
public int GetNoteOriginY(int iPlayer) {
546+
if (OpenTaiko.ConfigIni.nPlayerCount == 5) {
547+
return OpenTaiko.Skin.nScrollField_5P[1] + (OpenTaiko.Skin.Game_UIMove_5P[1] * iPlayer) + GetJPOSCROLLY(iPlayer);
548+
} else if (OpenTaiko.ConfigIni.nPlayerCount == 4 || OpenTaiko.ConfigIni.nPlayerCount == 3) {
549+
return OpenTaiko.Skin.nScrollField_4P[1] + (OpenTaiko.Skin.Game_UIMove_4P[1] * iPlayer) + GetJPOSCROLLY(iPlayer);
550+
} else {
551+
return OpenTaiko.Skin.nScrollFieldY[iPlayer] + GetJPOSCROLLY(iPlayer);
582552
}
583553
}
584554

@@ -797,10 +767,7 @@ private void AIRegisterInput(int nPlayer, float move) {
797767
}
798768

799769
private void UpdateCharaCounter(int nPlayer) {
800-
for (int i = 0; i < 5; i++) {
801-
ctChipAnime[i] = new CCounter(0, 3, CTja.TjaDurationToGameDuration(60.0 / OpenTaiko.stageGameScreen.actPlayInfo.dbBPM[i] * 1 / 4), SoundManager.PlayTimer);
802-
}
803-
770+
ctChipAnime[nPlayer] = new CCounter(0, 3, CTja.TjaDurationToGameDuration(60.0 / OpenTaiko.stageGameScreen.actPlayInfo.dbBPM[nPlayer] * 1 / 4), SoundManager.PlayTimer);
804771
OpenTaiko.stageGameScreen.PuchiChara.ChangeBPM(CTja.TjaDurationToGameDuration(60.0 / OpenTaiko.stageGameScreen.actPlayInfo.dbBPM[nPlayer]));
805772
}
806773

@@ -904,7 +871,7 @@ private ENoteJudge e指定時刻からChipのJUDGEを返すImpl(long nTime, CChi
904871
pChip.nLag = (int)(nTime - pChip.n発声時刻ms);
905872
int nDeltaTime = Math.Abs(pChip.nLag);
906873
//Debug.WriteLine("nAbsTime=" + (nTime - pChip.n発声時刻ms) + ", nDeltaTime=" + (nTime - pChip.n発声時刻ms));
907-
if (NotesManager.IsRoll(pChip) || NotesManager.IsFuzeRoll(pChip)) {
874+
if (NotesManager.IsRoll(pChip)) {
908875
if (tja.GameTimeToTjaTime(SoundManager.PlayTimer.NowTimeMs) >= pChip.n発声時刻ms && tja.GameTimeToTjaTime(SoundManager.PlayTimer.NowTimeMs) < pChip.end.n発声時刻ms) {
909876
return ENoteJudge.Perfect;
910877
}
@@ -1099,7 +1066,10 @@ protected bool tBalloonProcess(CChip pChip, double dbProcess_time, int player) {
10991066
return false;
11001067
}
11011068

1069+
this.bCurrentlyDrumRoll[player] = true;
1070+
this.actChara.b風船連打中[player] = true;
11021071
if (IsKusudama) {
1072+
this.actChara.IsInKusudama = true;
11031073
rollCount = pChip.nRollCount = ++nCurrentKusudamaRollCount;
11041074
balloon = nCurrentKusudamaCount;
11051075
if (nCurrentKusudamaCount > 0) {
@@ -1114,8 +1084,6 @@ protected bool tBalloonProcess(CChip pChip, double dbProcess_time, int player) {
11141084
}
11151085
}
11161086
} else {
1117-
this.bCurrentlyDrumRoll[player] = true;
1118-
this.actChara.b風船連打中[player] = true;
11191087
actChara.ChangeAnime(player, CActImplCharacter.Anime.Balloon_Breaking, true);
11201088

11211089

@@ -1392,8 +1360,6 @@ protected unsafe ENoteJudge tチップのヒット処理(long nHitTime, CChip pC
13921360
bool cleared = HGaugeMethods.UNSAFE_FastNormaCheck(nPlayer);
13931361

13941362
if (eJudgeResult != ENoteJudge.Poor && eJudgeResult != ENoteJudge.Miss) {
1395-
double dbUnit = (((60.0 / (OpenTaiko.stageGameScreen.actPlayInfo.dbBPM[nPlayer]))));
1396-
13971363
// ランナー(たたけたやつ)
13981364
this.actRunner.Start(nPlayer, false, pChip);
13991365

@@ -1471,10 +1437,6 @@ protected unsafe ENoteJudge tチップのヒット処理(long nHitTime, CChip pC
14711437

14721438
void returnChara() {
14731439
int Character = this.actChara.iCurrentCharacter[nPlayer];
1474-
1475-
double dbUnit = (((60.0 / (OpenTaiko.stageGameScreen.actPlayInfo.dbBPM[nPlayer]))));
1476-
dbUnit = (((60.0 / pChip.dbBPM)));
1477-
14781440
if (OpenTaiko.Skin.Characters_Return_Ptn[Character] != 0 && !bIsGOGOTIME[nPlayer] && actChara.CharaAction_Balloon_Delay[nPlayer].IsEnded) {
14791441
{
14801442
// 魂ゲージMAXではない
@@ -1602,17 +1564,14 @@ void returnChara() {
16021564

16031565
#region[ Combo voice ]
16041566

1605-
if (!NotesManager.IsGenericRoll(pChip)) {
1567+
if (NotesManager.IsMissableNote(pChip)) {
16061568
if ((this.actCombo.nCurrentCombo[nPlayer] % 100 == 0 || this.actCombo.nCurrentCombo[nPlayer] == 50) && this.actCombo.nCurrentCombo[nPlayer] > 0) {
16071569
this.actComboBalloon.Start(this.actCombo.nCurrentCombo[nPlayer], nPlayer);
16081570
}
16091571

16101572
// Combo voice here
16111573
this.actComboVoice.tPlay(this.actCombo.nCurrentCombo[nPlayer], nPlayer);
16121574

1613-
double dbUnit = (((60.0 / (OpenTaiko.stageGameScreen.actPlayInfo.dbBPM[nPlayer]))));
1614-
dbUnit = (((60.0 / pChip.dbBPM)));
1615-
16161575
//CDTXMania.act文字コンソール.tPrint(620, 80, C文字コンソール.Eフォント種別.白, "BPM: " + dbUnit.ToString());
16171576

16181577
for (int i = 0; i < 5; i++) {
@@ -3649,6 +3608,7 @@ public void ProcessRollHeadEffects(int iPlayer, CChip chip) {
36493608
this.nowProcessingKusudama = chip;
36503609
actBalloon.KusuIn();
36513610
actChara.KusuIn();
3611+
this.actChara.IsInKusudama = true;
36523612
for (int i = 0; i < OpenTaiko.ConfigIni.nPlayerCount; i++) {
36533613
this.bCurrentlyDrumRoll[i] = true;
36543614
this.actChara.b風船連打中[i] = true;
@@ -3674,11 +3634,6 @@ public void ProcessRollEnd(int iPlayer, CChip chip, bool resetStates) {
36743634
OpenTaiko.Skin.soundKusudamaMiss.tPlay();
36753635
for (int p = 0; p < OpenTaiko.ConfigIni.nPlayerCount; p++) {
36763636
this.actChara.ChangeAnime(p, CActImplCharacter.Anime.Kusudama_Miss, true);
3677-
3678-
if (actChara.CharaAction_Balloon_Delay[p] != null) actChara.CharaAction_Balloon_Delay[p] = new CCounter(0,
3679-
OpenTaiko.Skin.Characters_Balloon_Delay[actChara.iCurrentCharacter[p]] - 1,
3680-
1,
3681-
OpenTaiko.Timer);
36823637
}
36833638
}
36843639
nCurrentKusudamaRollCount = 0;
@@ -3689,11 +3644,6 @@ public void ProcessRollEnd(int iPlayer, CChip chip, bool resetStates) {
36893644
if (!this.bPAUSE && !this.isRewinding) {
36903645
if (chip.nRollCount > 0) {
36913646
this.actChara.ChangeAnime(iPlayer, CActImplCharacter.Anime.Balloon_Miss, true);
3692-
3693-
if (actChara.CharaAction_Balloon_Delay[iPlayer] != null) actChara.CharaAction_Balloon_Delay[iPlayer] = new CCounter(0,
3694-
OpenTaiko.Skin.Characters_Balloon_Delay[actChara.iCurrentCharacter[iPlayer]] - 1,
3695-
1,
3696-
OpenTaiko.Timer);
36973647
}
36983648
}
36993649
}
@@ -3741,8 +3691,6 @@ public void ProcessBalloonBroke(int iPlayer, CChip chip) {
37413691
actBalloon.KusuBroke();
37423692
for (int i = 0; i < OpenTaiko.ConfigIni.nPlayerCount; i++) {
37433693
actChara.ChangeAnime(i, CActImplCharacter.Anime.Kusudama_Broke, true);
3744-
if (actChara.CharaAction_Balloon_Delay[i] != null)
3745-
actChara.CharaAction_Balloon_Delay[i] = new CCounter(0, OpenTaiko.Skin.Characters_Balloon_Delay[actChara.iCurrentCharacter[i]] - 1, 1, OpenTaiko.Timer);
37463694
}
37473695
} else {
37483696
//パァーン
@@ -3756,11 +3704,7 @@ public void ProcessBalloonBroke(int iPlayer, CChip chip) {
37563704
//this.b連打中 = false;
37573705
//this.actChara.b風船連打中 = false;
37583706
chip.bVisible = false;
3759-
{
3760-
actChara.ChangeAnime(iPlayer, CActImplCharacter.Anime.Balloon_Broke, true);
3761-
if (actChara.CharaAction_Balloon_Delay[iPlayer] != null)
3762-
actChara.CharaAction_Balloon_Delay[iPlayer] = new CCounter(0, OpenTaiko.Skin.Characters_Balloon_Delay[actChara.iCurrentCharacter[iPlayer]] - 1, 1, OpenTaiko.Timer);
3763-
}
3707+
actChara.ChangeAnime(iPlayer, CActImplCharacter.Anime.Balloon_Broke, true);
37643708
if (NotesManager.IsFuzeRoll(chip)) {
37653709
this.CChartScore[iPlayer].nMineAvoid++;
37663710
this.CSectionScore[iPlayer].nMineAvoid++;
@@ -3807,9 +3751,14 @@ private void RemoveNowProcessingRollChip(int iPlayer, CChip chip, bool resetStat
38073751
this.chip現在処理中の連打チップ[iPlayer].Remove(chip);
38083752
if (this.chip現在処理中の連打チップ[iPlayer].Count == 0) {
38093753
this.bCurrentlyDrumRoll[iPlayer] = false;
3754+
this.actChara.b風船連打中[iPlayer] = false;
3755+
this.actChara.IsInKusudama = false;
38103756
this.eRollState = ERollState.None;
38113757
} else if (!this.chip現在処理中の連打チップ[iPlayer].Any(x => NotesManager.IsGenericBalloon(x))) {
38123758
this.actChara.b風船連打中[iPlayer] = false;
3759+
this.actChara.IsInKusudama = false;
3760+
} else if (!this.chip現在処理中の連打チップ[iPlayer].Any(x => NotesManager.IsKusudama(x))) {
3761+
this.actChara.IsInKusudama = false;
38133762
}
38143763
if (resetStates || (!this.bPAUSE && !this.isRewinding)) {
38153764
chip.bProcessed = !resetStates;
@@ -4145,11 +4094,12 @@ public virtual void t数値の初期化(bool b演奏記録, bool b演奏状態)
41454094
switch (chara.effect.tGetGaugeType()) {
41464095
default:
41474096
case "Normal":
4148-
bIsAlreadyCleared[i] = false;
4097+
bIsAlreadyMaxed[i] = bIsAlreadyCleared[i] = false;
41494098
break;
41504099
case "Hard":
41514100
case "Extreme":
41524101
bIsAlreadyCleared[i] = true;
4102+
bIsAlreadyMaxed[i] = false;
41534103
break;
41544104
}
41554105

OpenTaiko/src/Stages/07.Game/Taiko/CActImplBalloon.cs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -127,9 +127,14 @@ public int On進行描画(int n連打ノルマ, int n連打数, int player, EBal
127127
num_x = OpenTaiko.Skin.Game_Balloon_Balloon_Number_X[player];
128128
num_y = OpenTaiko.Skin.Game_Balloon_Balloon_Number_Y[player];
129129
}
130-
//1P:0 2P:245
131-
//if (CDTXMania.Tx.Chara_Balloon_Breaking != null && CDTXMania.ConfigIni.ShowChara)
132-
// CDTXMania.Tx.Chara_Balloon_Breaking.t2D描画(CDTXMania.app.Device, CDTXMania.Skin.Game_Chara_Balloon_X[player], CDTXMania.Skin.Game_Chara_Balloon_Y[player]);
130+
131+
x += OpenTaiko.stageGameScreen.GetJPOSCROLLX(player);
132+
y += OpenTaiko.stageGameScreen.GetJPOSCROLLY(player);
133+
frame_x += OpenTaiko.stageGameScreen.GetJPOSCROLLX(player);
134+
frame_y += OpenTaiko.stageGameScreen.GetJPOSCROLLY(player);
135+
num_x += OpenTaiko.stageGameScreen.GetJPOSCROLLX(player);
136+
num_y += OpenTaiko.stageGameScreen.GetJPOSCROLLY(player);
137+
133138
for (int j = 0; j < 5; j++) {
134139

135140
if (n残り打数[j] < n連打数 && btype == EBalloonType.BALLOON) {

0 commit comments

Comments
 (0)